eNose surface plot – manual
This app shows eNose measurements as 3D surfaces on a map, combined with the wind. The goal: not just “there was a peak”, but “there was a peak of this kind, from that direction, probably from that source”.
The idea
An eNose has four sensors (S1–S4) that each respond differently to substances in the air. A time series of the sum of those sensors tells you when something happened, but not where it came from or what kind of odour it was.
This app links every measurement to the wind at that moment. For each eNose it builds a wind rose: for every wind direction and wind speed it shows how strongly each sensor responded. Placed on the map, the plots of several eNoses point together towards the likely source – a form of cross-bearing.
Reading a surface plot
- Direction: a hill on the south-west side means: when the wind comes from the south-west, this eNose smells something. The source is therefore usually in that direction.
- Wind speed: a hill close to the centre (low wind) points to a nearby, low source where odour accumulates. A hill towards the outer ring points to a high stack or a more distant source that only arrives with more wind.
- Sensors and colours: each sensor has its own surface: S1 green, S2 red, S3 blue, S4 orange. Which sensor dominates is a hint about the type of odour.
- One scale: height and colour use one scale (in dB) for all sensors and all eNoses, so you can compare them directly. The current scale is shown under Display.
Getting started
- Open the app. If you are not logged in you are sent to the Comon Invent login page automatically.
- Project – click the field and type part of a name or a project ID (for example
ICLor582). Choose with the mouse, or with ↑/↓ and Enter. The app remembers your last project. - Virtuals – the eNose locations of the project. Click the field to open the list; use All / None or tick individual eNoses. Unticked eNoses disappear from the map immediately. For some projects (ICL, Coenhaven) a default set is ticked.
- Period – type a start and end, for example
28-05-2026 08:00. Short forms work too:28-5,28.5 8,28-05-26. A missing year becomes the current year, a missing time 00:00. The 📅 button opens a calendar. Default: the last 24 hours. - Press Load. The button is grey when everything for this period is already loaded; it becomes active again when you change the period or need data that is not loaded yet.
Wind model and wind source
The plots are only as good as the wind that is linked to the measurements.
| Setting | What it does |
|---|---|
| Wind vane → Nearest | Every eNose gets the wind of the nearest wind station (an eNose with a wind vane, marked (W)). A wind station uses its own wind. |
| Wind vane → a station | One fixed wind station for all eNoses. |
| Wind vane → Own wind vane | Shown when a project has no wind stations: every eNose uses its own vane. |
| KNMI Harmonie | The hourly wind of the KNMI Harmonie weather model at the location of every eNose, interpolated per minute. Works for every eNose in the Netherlands, also without a wind vane. Smoother than a vane. |
Wind is linked to each measurement using the wind reading closest in time (at most 60 seconds apart). Measurements without wind are left out.
Aggregation per cell
Each wind rose is divided into cells: 10° of wind direction × 1 m/s of wind speed. All measurements in a cell are combined:
- Average – the typical response for that wind. A direction that occurs only now and then weighs as much as a common one. Best for finding where odour comes from.
- Sum – response × how often that wind occurred. Shows where most of the odour came from over the whole period, but common wind directions naturally come out higher.
Zero correction
An eNose that is not zeroed well has a baseline above or below 0, and that baseline can drift. With Baseline per eNose to 0 switched on, the app estimates the baseline per eNose and per sensor (20th percentile over a sliding 3-hour window) and subtracts it. A wrong zero or drift then no longer looks like a response; real peaks remain.
Complaints
Odour complaints of the project in the loaded period are shown as white circles with a red !. Hover a complaint for the time, odour, intensity and text (no personal data is shown). With the timeline open, only the complaints that were active in the time window are shown.
Which complaints you see depends on the rights of your account for the project (imports, app reports, DCMR).
Source analysis
Two separate switches, both off by default.
Source likelihood map
An automatic cross-bearing over all selected eNoses:
- For every eNose the app determines when it clearly responded: a selected sensor more than 3 times its normal spread above its own median (robust z-score). This also works with a wrong zero.
- For every wind direction it calculates how often the eNose responded when the wind came from that direction. Common wind directions therefore do not automatically weigh more, and “nothing smelled when the wind came from there” counts as evidence against that place.
- Those directions are projected upwind onto the map. For every place the app averages what the eNoses within Reach saw in that direction (nearer eNoses count more). Where the raised directions of several eNoses meet, the map turns yellow → red → purple.
Places seen by fewer than 2 eNoses stay empty. Only what stands out from the typical level of the map is coloured.
Known sources
The sources registered for the project are shown as purple diamonds with their name. With the source likelihood map on, each source gets a score (the value of the map at its location) and the panel ranks them. Below the ranking the app tells you whether the strongest spot is at a known source, or how far it is from the nearest one – a spot far from every known source may be an unknown source.
Sensors and display
- Sensors – click the field to show or hide S1–S4. The source likelihood map only uses the selected sensors.
- Colour transition – from which part of the scale the colour becomes visible; lower values stay transparent.
- Height scale – how high the highest value is drawn (in metres on the map).
- Radius – size of the wind roses on the map; the outer ring is the maximum wind speed (12 m/s).
Timeline
Click ▸ Timeline at the bottom to play through the loaded period. The map then only shows the measurements in a window that ends at the chosen moment.
- ▶ / ❚❚ play and pause; at the end it starts again from the beginning.
- Slider – drag through time yourself. The window being shown is displayed next to it.
- Window – 15 minutes to 6 hours. Speed – 5 minutes to 3 hours of data per second.
- Height and colour keep the scale of the whole period, so frames can be compared. Empty cells are not filled in, so you only see what was actually measured in the window.
- Complaints and the source likelihood map follow the window as well.
Data reliability
Below the Load button a coloured dot summarises the data: the share of usable measurements (with sensor data and wind) compared with one measurement per minute. ● green from 90%, ● orange from 60%, ● red below. Hover the ⓘ to see per eNose how complete the data is, and which eNoses were unusable and why (no sensor data, no wind, loading failed).
Map controls
- + / − zoom; the compass resets the map to north.
- 2D / 3D switches between a top view and a tilted view; your own tilt is remembered.
- Tilt and rotate with the right mouse button, or Ctrl + drag.
- Hover an eNose dot for its name and number of measurements; hover a complaint or source for details.
A typical investigation
- Choose the project and load a period around the event, preferably a few days for variety in wind direction.
- Check the reliability line: are the important eNoses usable? If not, try another wind source.
- Look at the surface plots: in which direction do the hills point, and which sensor dominates?
- Switch on the source likelihood map and known sources: where do the eNoses meet, and which known source scores highest?
- Open the timeline and play the event: when do the hills grow, does the hotspot move, and do complaints appear at the same time?
- Switch sensors individually to see whether the responses are one odour or several.
Troubleshooting
| What you see | What to do |
|---|---|
| “Login failed: …” | Press Try again. If it keeps happening, your account may not have access to this app. |
| “No virtuals” | The project has no active eNoses with a location, or none are ticked. Check the Virtuals list. |
| An eNose is listed as “no wind” | It has no wind of its own and the chosen wind station has no data. Choose Nearest, another station or KNMI Harmonie. |
| “KNMI Harmonie: no wind model data…” | No model data for this period, or the eNose is outside the KNMI area. |
| 0 complaints | Hover Show complaints: either there were no complaints in this period, or your account has no complaint rights for the project. |
| Source map: “Not enough data” | At least 2 eNoses with wind are needed. Tick more eNoses or choose another wind source. |
| Flat or very similar plots | Try Zero correction, a longer period, or Average instead of Sum. |
Glossary
| eNose | Electronic nose: a measuring device with four gas sensors (S1–S4). |
| Virtual | A measuring location in a project; at any moment one eNose is linked to it. |
| Wind station | An eNose with a wind vane (name ends with (W)). |
| dB | The unit of the sensor values: a logarithmic measure of the sensor response. |
| Baseline | The normal level of a sensor when nothing special is smelled. |
| Robust z-score | How far a value is above the median, in units of the normal spread (based on the median absolute deviation, so outliers hardly affect it). |
| CPF | Conditional probability function: per wind direction, the share of the time a sensor responded – the basis of the source likelihood map. |
| KNMI Harmonie | The high-resolution weather model of the Royal Netherlands Meteorological Institute. |