Bench characterization of the Lume TLF+ToF sensor against controlled air, still-water, and agitated-water exposures — 2026-04-18.
A Lume sensor was placed in a bench fixture and cycled through three conditions while raw telemetry was recorded at one sample per minute (~0.017 Hz). Each time the operator changed conditions, an annotation was written inline to the data stream. Three signals are plotted here:
model_tof_raw is essentially bimodal: it sits near 25 whenever the sensor is in water and jumps to ~70 whenever the sensor is in air. Transitions between the two states are effectively step functions — a fixed threshold near 45 separates the two conditions with no ambiguity on this dataset.
Air-phase sipm_mon2_raw values (roughly 2000–2600) overlap heavily with still-water values. The signal is temperature-sensitive and condition-sensitive, so any air/water gate built on TLF alone would need the ToF channel as a prior.
In every water-no-shake region the TLF reads noticeably higher than it does immediately after a twist-shake, even though model_tof_raw stays firmly in its “water” band (~25) throughout. The ToF sensor confirms that water is present against the window; the elevated TLF reading must therefore be driven by something the ToF cannot resolve — consistent with small air bubbles trapped on the optical window scattering additional light into the SiPM.
Each twist-shake event produces an immediate drop in sipm_mon2_raw — ~720, ~1300, and ~600 across the three shake events — well below the still-water readings that precede or follow them. This is the bubble-free baseline. The fact that the baseline itself is not perfectly repeatable (720 vs 1300 vs 600) suggests that either residual turbidity, the angle the sensor was re-seated in, or partial re-bubbling between annotations still modulates the reading.
A two-stage decision makes physical sense: (a) use model_tof_raw as a hard gate for air vs. water, and (b) within water, treat the TLF reading as an upper bound that can be inflated by trapped bubbles. A periodic agitation cycle or a bubble-scrub routine before measurement would make the TLF reading reflect the water itself rather than the air trapped against the window.
All panels plot the same timebase. Annotation rows in the source CSV contain only a timestamp and a note field; each annotation marks the start of a section that runs until the next annotation. The three categories shown here merge the raw labels: “Air”/“air” → air, “water no shake” → water no shake, “twist shake”/“submerged”/“air cleared” → twist shake.
Source: data.csv in the project directory. Plot regenerated with python3 plot.py.