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

N 0 m/s ½ max max Angle wind direction – where the wind comes from Distance from the centre wind speed (centre = calm, outer ring = max) Height and colour how strongly the sensor responded Example a green lobe to the south-west: S1 responds when a moderate wind comes from the south-west
How to read one surface plot (seen from above).

Getting started

  1. Open the app. If you are not logged in you are sent to the Comon Invent login page automatically.
  2. Project – click the field and type part of a name or a project ID (for example ICL or 582). Choose with the mouse, or with ↑/↓ and Enter. The app remembers your last project.
  3. 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.
  4. 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.
  5. 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.
Almost everything else (wind source, aggregation, zero correction, sensors, sources, timeline) recalculates instantly from the loaded data – no need to press Load again.

Wind model and wind source

The plots are only as good as the wind that is linked to the measurements.

SettingWhat it does
Wind vane → NearestEvery 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 stationOne fixed wind station for all eNoses.
Wind vane → Own wind vaneShown when a project has no wind stations: every eNose uses its own vane.
KNMI HarmonieThe 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:

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.

A source that is on for hours on end slowly becomes part of the baseline, so its response gets smaller. Compare with the correction switched off when in doubt.

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:

  1. 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.
  2. 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.
  3. 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.

The percentages are relative: they say how often the eNoses responded when the wind came from that place. They are not an absolute probability that a source is there. A short period with only one wind direction can only look one way; load a longer period, or several days, for a sharper picture.
Switch sensors on and off individually: if one sensor points to a different place than the others, that is a first hint that two different odours are involved.

Sensors and display

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.

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

A typical investigation

  1. Choose the project and load a period around the event, preferably a few days for variety in wind direction.
  2. Check the reliability line: are the important eNoses usable? If not, try another wind source.
  3. Look at the surface plots: in which direction do the hills point, and which sensor dominates?
  4. Switch on the source likelihood map and known sources: where do the eNoses meet, and which known source scores highest?
  5. Open the timeline and play the event: when do the hills grow, does the hotspot move, and do complaints appear at the same time?
  6. Switch sensors individually to see whether the responses are one odour or several.

Troubleshooting

What you seeWhat 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 complaintsHover 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 plotsTry Zero correction, a longer period, or Average instead of Sum.

Glossary

eNoseElectronic nose: a measuring device with four gas sensors (S1–S4).
VirtualA measuring location in a project; at any moment one eNose is linked to it.
Wind stationAn eNose with a wind vane (name ends with (W)).
dBThe unit of the sensor values: a logarithmic measure of the sensor response.
BaselineThe normal level of a sensor when nothing special is smelled.
Robust z-scoreHow far a value is above the median, in units of the normal spread (based on the median absolute deviation, so outliers hardly affect it).
CPFConditional probability function: per wind direction, the share of the time a sensor responded – the basis of the source likelihood map.
KNMI HarmonieThe high-resolution weather model of the Royal Netherlands Meteorological Institute.