Virridy Home | Lume — Water Quality Sensing Water for Carbon

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 featurefitTlfSlope 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.

Loading…

SpecificityWhich analyte moved which channel

Response at the top rung of each analyte, measured against the state at the end of the previous block rather than the clean baseline, so each analyte is judged on its own increment and stacking does not inflate it. Rhodamine was dosed on both days and appears as one row showing both legs — the ppb ladder, then the mg/L ladder — with the chained net beneath. The net alone is misleading here: the channel falls through the ppb range and rises again at mg/L, so a single chained figure lands near zero and reads as no response. Each group is read on its own feature — chlorophyll on the amplitude, the rest on the slope — and the medians exclude the bimodal units. Cells the dose log expected to respond are outlined; everything else is cross-talk, measured and shown either way. Green marks a move of more than 5%. The two shaded columns are the In-Situ AquaTroll channels on the identical windows, given as the median of the three sondes because they disagree with each other by up to 64× on some blocks, so picking one would be picking a result.

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.

The Lume chlorophyll-a filter is an Edmund 45786, 676 nm CWL with 29 nm FWHM and OD 6 blocking, so its passband is 661.5–690.5 nm. That overlaps the AquaTroll’s 675–750 nm, and both contain the 685 nm chlorophyll-a emission peak, so the two instruments look through nearly the same window at nearly the same excitation.

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.

Group median through the whole run, each sensor against its own pre-dose baseline, log scale. FDOM and the two TLF groups on the slope; chlorophyll-a dashed, on the amplitude, because the slope’s response gate admits only 2 of its 10 units and both are bimodal. All four are cumulative against the same clean baseline, so the curves are comparable even though two features are in play. Dashed verticals separate the analyte blocks. A group that responds only inside its own block is specific; one that keeps climbing through later blocks is picking up something else.

DetailEvery sensor through the run

One line per sensor, coloured by build type, plotted as 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

Increment across each analyte block, identical windows, each instrument against its own pre-block level. Spread is the ratio between the highest and lowest of the three AquaTrolls, and Lume range is the same thing across that group’s units. Three identical sondes in one barrel are the fairest available estimate of what a reference instrument’s reproducibility actually is.
One panel per channel. Solid lines are the AquaTroll sondes; dashed lines are the matching Lume group — fDOM against the Lume FDOM build, chlorophyll against the Lume chlorophyll build, turbidity against the ToF (identical hardware on every build), temperature against 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
Points are the measured group median at each rung; dotted lines are the fitted regression, drawn only over the range actually dosed and never extrapolated. The dashed horizontal at 1.000 is the pre-block level. Coefficients are in the table below. Slope is the change in response per unit of concentration, on a scale where 1.000 is that sensor’s pre-block level. R² linear and R² log are the medians of the per-unit fits against concentration and against log₁₀(dose+1). Both are given because these ladders span up to four decades and a fluorescence response is not expected to be linear across that: a low linear R² with a high log R² is a saturating response, not an absent one, and reporting only the linear fit would hide it. Agree is how many of the group’s units share the sign of the fitted slope.

SensorsAll 36 units

Each unit at the top rung of each block, against its own pre-dose baseline, on the feature its group is measured with. Rows greyed and marked bimodal alternate between two amplitude states more than 3× apart, so their window medians report whichever state dominated rather than the water; they are excluded from every summary above and shown here so the exclusion is visible rather than silent.

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:

  1. Pedestal. Below about 2,850 V the SiPM has no gain, so whatever mon2 reads there is the electronic floor. Take its median. On 500184 that is 167 counts, from 9,235 cells.
  2. Reference curve q(bias). Over the first 600 sweeps, take the median mon2 in 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.
  3. Amplitude of one sweep. With y = mon2 − pedestal for 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 is 699 / 866 = 0.807, computed from all 35 cells at LED 512, none railed.

Why that form matters. Each cell enters weighted by , 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:

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.

Each row is one analyte ladder, read as the ratio of the settled reading at the top rung to the settled reading immediately before that ladder began. Rhodamine appears twice because it was dosed on both days against different starting states. A dash means the ratio is undefined for that unit, which happens where the sonde read 0.0000 before the ladder began. The Lume column is the group median across that build type.

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

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.