Three-Dimensional Measurement of Vapor Dispersion Inside a Room Using the Vocus CI-TOF

3D measurements vapor dispersion

Abigail Koss


The human eye cannot see how odors and other vapors disperse and flow indoors. However, a three-dimensional map of chemical concentrations could reveal vapor intrusion, pinpoint hidden contraband material, indicate the dispersion of viral-laden breath, find the sources of chemical contaminants in a cleanroom, or illuminate how fragrances and aromas diffuse throughout a room.

Outdoors, similar problems in environmental and regulatory science have been solved with mobile chemical ionization mass spectrometry. While these mobile laboratories rely on GPS mapping, GPS data transmission is limited indoors. Indoor positioning requires high spatial resolution that cannot be achieved with satellite-based systems.

Experimental Set Up

Using an inexpensive and portable indoor positioning system (3D camera), chemical ionization measurements from a Vocus Elf CI-TOF can be used to create a dense, three-dimensional chemical map of a room. In this proof-of-concept experiment, a small essential oil diffuser loaded with peppermint oil was set on a table on the left side of an office (Figure 1). The door and window of the office were opened to create air flow.

Figure 1. Screenshot from the 3D camera showing the experimental setup. The camera is mounted to the center of the back wall of the office. The door of the office is just behind the camera, to the right (not visible). The vapor source (peppermint oil diffuser) is set on the table to the right. The Vocus Elf is in the center and was moved to different locations within the room during the experiment. The tip of the inlet is visible as a red dot. The yellow circle drawn around the inlet tip is from the image-recognition algorithm.

With a Vocus Elf CI-TOF, H3O+ chemical ionization measurements were made with unit mass resolution at 3 Hz frequency, near real time. The instrument inlet was attached to a short piece of PFA tubing and a wand, so that the sampling point could be moved around the instrument. The instrument was mobilized so it could be moved to different areas of the room. Although a full-spectrum scan was made at each measurement point, this note focuses on the measurements of mass-to-charge ratios 137 and 155, which correspond to chemical formulas C10H16 and C10H18O (monoterpenes and oxygenated monoterpenes from the peppermint oil).


The measurements were organized in a 3D map using a Microsoft Kinect 2 video game accessory. The Kinect provides an RGB color image with the depth of the detected surface in each pixel. A brightly colored object was attached to the end of the inlet, and Python OpenCV was used to track the location of the inlet in each frame. Figure 2 shows a section of the data time series, including the x,y, and z measurements in millimeters relative to the camera, and ion abundance at m/q 137 and 155 from the Vocus CI-TOF.

Figure 2. Time series data of 3D location (top) and peppermint oil VOC abundance (bottom).

Figure 3 shows a cross-section of the measured concentrations in the room at a single distance from the camera, after the diffuser had been running for about an hour. The color of the data points shows the measured abundance of mass-to-charge ratio 155 (oxygenated monoterpenes) on a logarithmic scale. For clarity, the points have been interpolated into a regularly spaced grid with the same resolution as the raw measurements (5 cm).

The highest abundance was found next to the diffuser at approximately 250 ppb. Near the back wall, the concentration is around 0.5 ppb above background. The distribution of mass-to-charge ratio 137 (monoterpenes) is quite similar. The correlation of the two species can be used to clearly distinguish vapors coming from the peppermint oil and those from other sources.

Click on the graph below to rotate the figure and use the slider to see cross-sections at different locations. The size of the cross-section is determined by the field-of-view of the camera. The values of x, y, and z are in millimeters, relative to the camera. Y is the horizontal location across the room, from wall-to-wall; X is the vertical location, from floor to ceiling; and Z is the distance from the camera toward the window. The ceiling vent, the open window, and the desk are marked with gray lines, and the position of the peppermint oil is represented by the red marker.

Click on the button to load the content from

Load content

Figure 3. Measurement point cloud of m/q 155 (C10H18O). Areas of higher concentration are in yellow (bright color) and areas of lower concentration are in blue (dark color). The location of the essential oil diffuser is marked with a red dot. Representation of the table, window, and ceiling vent is provided by the gray lines.


Several interesting features of the peppermint oil cloud are visible. The scent spills off the edge of the table and runs along the floor toward the open window. It also rises above the table in a plume toward the ceiling vent. There are also “bubbles” of high concentration surrounded by lower concentration, so, the essential oil diffuser was not emitting a particularly steady stream of vapor. Finally, there is some horizontal movement of the vapor across the room, likely caused by the scientist walking back and forth with the inlet.

The complete mapping of the room required about an hour, limited only by how quickly the inlet could be moved by hand. Future development of this application may include robotic automation, reducing mapping time to a few minutes and further regulating the process for repeatability. This development could allow the Vocus CI-TOF to measure how the chemical concentrations change over time, removing operator influence on air-flow.


Open Kinect code and drivers: These drivers were used to operate the Kinect and access the Kinect data stream.

Kinect 2 Point Clouds: KonstantinosAng, Some code from this source was adapted to record the x,y,and z values of surfaces in the room.

Computer vision: Rosebrock, Adrian. “Ball Tracking with OpenCV.” The inlet-recognition code was inspired by this tutorial.

Interactive graph: Barbey, Nicolas. “Matplotlib slider to display 3d arrays.” Some code from this source was adapted to enable the interactive Plotly graph.