In-Stream Intra-Sensor Comparison — BC-13
5 sensors · co-located in-stream at BC-13, installed 2026-07-19 noon MT · agreement of TLF (mon2_val), ToF turbidity, and temperature reading the same water
Overview
Five Lume units are installed together in the same reach at BC-13, all submerged in the same water since noon on 2026-07-19. Because every unit sees an identical sample, this is a field precision / reproducibility test: any spread between the traces is sensor-to-sensor measurement disagreement, not a difference in what they are measuring. It is the in-stream analog of the bench serial-dilution's sensor-to-sensor spread, but under real water, real turbidity, and a real diel temperature swing rather than a controlled bath.
Three channels are compared: the tryptophan-like fluorescence mon2_val (TLF, the primary
E. coli–bearing signal), the Time-of-Flight backscatter signal_per_spad_kcps (the
turbidity proxy), and SiPM temperature. TLF uses a best-SNR-per-unit combo (the default
below): each unit runs at the LED×bias that minimizes its concentration noise floor (blank
noise ÷ sensitivity) in the dilution while staying unsaturated in-stream — not simply the
highest unsaturated LED, which isn't always best. Here that puts 50062 at LED 32/bias 3468,
500212 at LED 128/3079, 500128 at LED 512/2942, 50090 at LED 32/3039 (halves its
noise floor, 2.5→1.1 µg/L), and 50084 at LED 512/2934 (a lower bias that avoids the
saturation which had forced it to 128). Each combo's own gain keeps the calibrated µg/L-equivalent
comparable across units. Absolute TLF still carries each unit's own baseline/gain offset (what the
per-sensor field calibration removes); the tracking agreement — do they rise and fall
together as the water changes — is the more meaningful readout, and is reported separately below.
Load Window
Live data pulled per sensor from the sensor API, every reading shown at full resolution (no aggregation). A sweep-health QC gate drops any acquisition cycle where the SiPM did not respond to the bias ramp (a dead cycle pinned at the pedestal, e.g. 50090 at 12:11); rejected cycles are listed below. The default window opens at the noon install and runs a week out; the charts fill in as readings arrive. Turn on auto-refresh to watch the deployment live.
Inter-Sensor Agreement — Summary
Across-sensor spread, computed in 15-minute bins over the loaded window (one median value per sensor per bin, bins with <2 sensors dropped). Raw CV is the coefficient of variation (SD / mean) of the raw readings across units — it includes each unit's fixed baseline offset. Tracking CV first removes each sensor's own window-median (detrends the offset), so it measures how well the units agree on the changes in the water. Values are the median across all bins.
TLF — Tryptophan-like Fluorescence (mon2_val)
Raw TLF per unit at its operating combo (auto-ranged LED, bias ≈ 3000; hover shows the LED). Under auto-range the units may run at different LEDs, so the absolute levels are not directly comparable here — that is what the per-LED calibration below fixes. The status line lists which LED each unit landed on.
Calibrated TLF (µg/L-equivalent)
Each unit's raw mon2 mapped into µg/L-equivalent tryptophan, using per-sensor
gain (and optional curvature) fit from the 2026-07-16 serial
dilution at LED 128. Reading the same water, the five traces should collapse onto one
line. Which they do depends on where the offset comes from:
mon2 to 20 °C with the
exponential quench model TLF₀ = TLF·eρ(20−T)
(Watras et al. 2011, as used in Bedell et al. 2022 for this sensor), using that unit's own
coefficient ρ (ln mon2 vs SiPM temp). Here ρ is fit empirically from this
deployment because the dilution's 22–34 °C steps under-correct the steeper 20–23 °C
field response; it then zeroes to the median of the cleanest period (the cleanest ~15% of
time, selected from the smoothed signal). That baseline is de-biased: the old
5th-percentile floor sat ~1.6σ below the true zero, so noisy units read systematically high (a +6 µg/L
bias on 50090); the median of the clean period is unbiased regardless of noise, and readings are not clamped
to ≥0 (a true-zero reading must wobble slightly negative). 50090 (weak responder) and 50084
(most temperature-sensitive) carry wider honest noise, but are no longer biased.
Calibrated TLF — Deviation From the Fleet Median
Each unit's calibrated TLF minus the across-sensor median at that instant, in µg/L-equivalent (each other unit's nearest reading within 12 min), all points, no binning. This is the residual disagreement after calibration, using the mode selected above; if the calibration makes the five identical, every trace sits on 0. Bands mark ±2 and ±5 µg/L-eq.
ToF Turbidity (signal_per_spad_kcps → NTU)
Per-SPAD photon backscatter rate, the turbidity proxy (higher = more scattering particles). One reading per
sweep cycle. Co-located units should report the same particle load. Raw signal_per_spad per
unit first; the calibrated turbidity below uses the same model as the
TLF-dilutions page: NTU = k × (SPS − SPS₀),
with each unit's clean-water zero-point SPS₀ from the 2026-07-16 dilution 0 ppm step
and pooled slope k = 1.59. In the same water the five NTU traces should agree.
Two QC steps run first: a distance gate drops readings whose ToF range jumps off the cap
target (bubble/particle mis-range), and a stability flag marks any unit whose
reading-to-reading jitter is far above the fleet as a suspect (unstable detector) —
shown dashed with a ⚠ and excluded from the agreement spread.
SiPM Temperature
SiPM (detector) temperature per unit — the correct thermal covariate. (The
diagnostics temperature field is the board temperature, which self-heats from the
electronics and is not representative of the water, so it is not used; see the channel comparison below.)
Submerged together, the units should read within a few tenths of a degree; a persistent gap flags a
temperature-sensor offset. Temperature quenches TLF, so this is the covariate driving the quench correction.
Deviation From the Fleet Median
Each unit's temperature minus the across-sensor median at that instant (each other unit's nearest reading within 12 min), all points, no binning. Submerged in the same water, every trace should sit on 0; a persistent offset is a per-unit temperature-sensor bias (and it feeds straight into the TLF quench correction). Bands mark ±0.1 and ±0.25 °C.
Smoothed SiPM Temperature
Rolling-median smoothed temperature per unit, which separates each unit's real thermal trend from
reading-to-reading noise. An excursion that survives smoothing is a real temperature difference;
one that washes out was measurement noise. This is the cleaner temperature to drive the TLF quench
correction (noisy T injects variability through eρ(20−T), amplified on
high-gain units like 50090). Raw readings are shown faint behind each smoothed trace.
All Temperature Channels — water · SiPM · UV-LED
Each unit reports three temperatures: board (self-heated by the electronics, not the water), SiPM (detector), and UV-LED (excitation source). One panel per unit so you can see how the channels differ within and across units. The board runs ~1 °C above the two internal temps (its self-heating offset); SiPM and UV-LED track together. The quench correction uses the SiPM temperature — the board's self-heating makes it unrepresentative of the water.
Sensors Under Test
Five units co-located in-stream at BC-13 from noon on 2026-07-19. 50062 was previously a Boulder Creek field unit; the rest are acceptance-test units now joining the field.
| Barcode | Prior role | Channels |
|---|