Multi-analyte spike test — 1 September
Four analytes dosed into one barrel in sequential blocks on 1 September, then
rhodamine pushed two decades further on the same water on 2 September. 36 sensors
of four build types in the water throughout. Every number here is computed with the
production S-TLF feature — fitTlfSlope and
tlfSlopeAt20C imported from the deployed model, one pipeline for every sensor group,
no per-group screening. See the pipeline
definition. The two runs carry separate baselines: the second opened about
14 h after the first closed with the pump off overnight, so measuring its rungs against the
first would fold that settling into the response.
SpecificityWhich analyte moved which channel
What each channel can see
Excitation and detection bands as built, against the published emission maxima of the four analytes. This explains the design; it is not a prediction of what the optics did, which is what the rest of the page measures.
ReportWhat responded to what, and how well it separated
ResultWhat each build type did
Response is the ratio of s_TLF@20 °C to that sensor’s own pre-dose
baseline, so each unit is its own control and the fleet’s ~250× gain spread cancels.
Tiles show the group median at the end of each analyte’s block.
DetailEvery sensor through the run
ln(s_TLF@20 °C) minus that sensor’s own baseline. Grey verticals are doses,
labelled with the analyte. Operational events are marked separately so a step is never read as
a dose.ReferenceThe In-Situ sondes, on the same windows
Three AquaTroll sondes sat in the same barrel throughout, and are read here on the identical windows. That is what makes it a comparison rather than a pairing exercise: same water, same instants, no matching rule to argue about. Their channels are calibrated, so they are reported in their own units instead of as a ratio — the absolute number is the thing they contribute.
Lume against the AquaTroll, block by block
sipm_temp_c. Temperature shares one
axis because the units match; the others put the Lume series on the right-hand axis, so read
each against its own. Median in each settled window across both runs. Dose blocks are separated by the dashed verticals. Marina’s chlorophyll channel was previously
called dead here because it read 0.0000 through the whole 1 September ladder. The
2 September data, which only arrived after the sondes came back at 19:15 MT, shows it going
0.005 → 17.1 → 80.9 RFU. It was below detection, not broken. Its turbidity channel
does still swing during blocks where nothing turbid was added.RegressionsEach build type against each challenge solution
Fitted within each block, per unit, against that block’s own rungs and its own pre-block level, so a slope belongs to the analyte that was added rather than to everything before it. Fitted per unit and then pooled, because ten units agreeing is evidence a single pooled line cannot show, and a pooled R² can look excellent while the units disagree.
Fitted coefficients
SensorsAll 36 units
FeatureWhy chlorophyll-a is measured differently
Every group on this page is measured with the production S-TLF slope, except chlorophyll-a, which is measured with the amplitude. Both come from the same production term, the same sweeps and the same temperature normalisation to 20 °C; they differ in how much of the sweep they use.
The reason is in those tiles. The slope is the derivative of the bias curve at one reference
bias, and it needs the sweep to clear the pedestal by RESPONSE_MARGIN. On FDOM and
TLF that is never in doubt — their sweeps span about 3,000 counts. A chlorophyll sweep in
this water spans single digits, so the slope is noise-dominated and the response gate admits
almost none of the group. The amplitude weights every cell by the signal it carries, and
on the same sweeps it resolves all ten units and a monotonic response to each analyte.
What the amplitude is
Every reading is a full sweep: three LED powers × about 35 SiPM bias steps. Plot
mon2 against bias and you get a curve that climbs with bias. The amplitude
is how tall that curve is on this reading, relative to a fixed reference curve for this
sensor. It is one number per sweep per LED, and it is 1.00 when the sweep matches the
reference exactly.
It is built in three steps, all per sensor, none of them fleet constants:
- Pedestal. Below about 2,850 V the SiPM has no gain, so whatever
mon2reads there is the electronic floor. Take its median. On 500184 that is 167 counts, from 9,235 cells. - Reference curve
q(bias). Over the first 600 sweeps, take the medianmon2in each 16 V bias bin and subtract the pedestal. That is the shape this sensor's response has, measured, not fitted to any functional form. On 500184 it runs from 0 counts at 2,816 V to 12 counts at 3,904 V across 35 bins. - Amplitude of one sweep. With
y = mon2 − pedestalfor each cell, the amplitude is the least-squares scale of this sweep against that curve:A = Σ(y·q) / Σ(q²). For a real sweep on 500184 that is699 / 866 = 0.807, computed from all 35 cells at LED 512, none railed.
Why that form matters. Each cell enters weighted by q², so
a cell contributes in proportion to how much signal that bias actually carries. On 500184 four
bins have q = 0 and carry exactly zero weight; the bias range below
3,100 V carries 0.6% of the total, and above 3,500 V carries
74.1%. So pedestal cells cannot drag the answer around, but they are still in
the fit anchoring it — which is why no low screen is needed. It is also the maximum-likelihood
estimate of the scale under Gaussian noise, so nothing more can be extracted from one sweep.
Against the slope. The slope fits a quadratic to the same sweep and reports its derivative at one bias, 3,000 V. That discards the rest of the curve and, on a channel whose whole span is a dozen counts, reads mostly noise. The amplitude uses all 35 cells. Same sweep, same exclusions, and the difference is whether the response is visible at all.
Finally the amplitude is normalised to 20 °C with tlfSlopeAt20C() on the
sweep's own sipm_temp_c, and each unit's response is its amplitude in a dose window
divided by its own amplitude before that block — so per-sensor gain, which spans ~250×
across this fleet, cancels.
This is a difference in feature, not in treatment. Nothing is screened out for chlorophyll that is screened in elsewhere, and the per-unit evidence — including the two units excluded as bimodal and the reason — is on the chlorophyll page.
For In-SituSide-by-side comparison, Virridy Lume and Aqua TROLL
This section is written to stand alone. It summarizes a controlled dosing experiment in which three Aqua TROLL sondes and 36 Virridy Lume sensors sat in the same barrel and were read on the same windows. We are sharing it because two of the results are ones we would want to understand better before drawing conclusions, and one of them favors your instrument by a wide margin.
What was done
A 55 gallon drum of deionized water, recirculated and held between 15.6 and 17.7 °C. Three Aqua TROLL sondes (serials 1033484, 1033520, 1033548), all logging an identical set of 16 parameters, were submerged alongside 36 Lume sensors of four build types. Four analytes were dosed in sequential blocks on 1 September 2026, then rhodamine was extended two decades further on 2 September:
- Quinine sulfate, five rungs to 148.56 ppb
- Rhodamine WT, three rungs to 103.51 ppb, then two more to 19,960 ppb (20.0 mg/L)
- Tryptophan, three rungs to 50 ppb
- Turbidity (StablCal and AMCO Clear), three rungs to 7.23 NTU
Concentrations are nominal, computed from volume added and an estimated barrel volume of 208 L. They were not independently assayed. Nothing was removed between blocks, so the water accumulates and each block is measured against the settled state of the block before it.
How the comparison is made
Every instrument is expressed as a ratio to its own level immediately before each block, on the same time windows, and each window opens 10 minutes after the dose to allow mixing. Nothing is cross-calibrated and no pairing rule is applied, so differences in units, gain or absolute calibration cancel. What is compared is only how much each instrument moved when the same thing was added to the same water at the same moment.
What we observe
Quinine sulfate, fDOM channel. The Lume FDOM group moved further than any of the three sondes, and the sondes did not agree on direction: two rose and one fell.
Rhodamine, fDOM channel. The Aqua TROLL fDOM channels responded strongly to rhodamine WT. The Lume FDOM group moved comparatively little over the same ladder. We read this as a difference in cross-sensitivity between the two fDOM channel designs, and we would be interested in whether the magnitude is consistent with your specification.
Rhodamine, chlorophyll channel. At 20.0 mg/L the Aqua TROLL chlorophyll channel rose by roughly three orders of magnitude, from about 0.05 to 158.9 RFU on one unit, and all three units moved together. The Lume chlorophyll channel moved a few percent over the identical windows. Our chlorophyll channel excites at 440 nm and detects through a 661.5–690.5 nm passband, which overlaps the 675–750 nm band published for the Aqua TROLL chlorophyll-a sensor, and both contain the 685 nm chlorophyll-a emission peak. We do not have an explanation for a difference of this size between two channels looking through overlapping bands at similar excitation, and we would welcome yours.
Agreement between the three sondes. On several blocks the three sondes differ from each other by more than either instrument differs from the other design. The “spread” column reports the ratio between the highest and lowest of the three.
What this does not establish
- We do not know the calibration date or state of the three sondes, the age of their optical sensors, or whether any had been serviced recently. Any of these could account for part of the between-unit spread, and we are not attributing it to the instrument design.
- Position and depth within the barrel were not controlled between instruments, and optical path geometry differs between the two designs.
- Reagent-grade analytes in deionized water over a 2 °C range is not river water. Nothing here speaks to field accuracy for either instrument, and none of it calibrates an E. coli or chlorophyll concentration.
- Concentrations are nominal, as noted above.
What would help
Three things would let us interpret this better: the published or expected cross-sensitivity of the Aqua TROLL fDOM channel to rhodamine WT; the expected unit-to-unit reproducibility of the chlorophyll-a channel on identically dosed water; and whether the chlorophyll-a response to rhodamine WT at mg/L concentrations is a known characteristic. Raw data and window definitions behind every figure here are available on request from info@virridy.com.
MethodWhat was added, and when
Design. Analytes were dosed in sequential blocks, three to five rungs each, with a settling period after every addition. Each block’s response is identified against the settled state of the block before it, so a slope is attributed to the analyte that was actually added. Nothing was removed between blocks, so the water accumulates: the turbidity block sits on top of everything else, which is why it is dosed last.
Feature. . Every reading carries a full
LED × bias sweep; the slope is the derivative of the quadratic fit at a fixed
reference bias, normalised to 20 °C, then logged. Railing is the only exclusion, and a
slope is returned only where the sweep actually responded.
What this cannot tell you. It is one barrel of one water at one temperature range, with reagent-grade analytes rather than the mixtures a river carries. It measures response and cross-talk, not accuracy against a reference method, and nothing here calibrates an E. coli prediction. Concentrations are nominal, computed from the volume added and the estimated barrel volume; they were not independently assayed.