Virridy Home | Lume — Water Quality Sensing Water for Carbon

Chlorophyll-a units — all ten, both runs

Every sweep each unit produced, from the start of the 1 September ladder through the close of the 2 September screen, plotted as the bias-response slope — the full LED × bias record with a per-sweep pedestal and railing as the only exclusion. Not mon2 at a combo, which rails on high-gain units and pins on the pedestal on low-gain ones and is the thing the slope exists to replace. No response gate, because the gate is what is under examination. The two working units of other builds are shown last, on the same axes, as the scale. Nothing is summarised over time, because every summary of these sensors has misled at least once, including mine.

FindingsThe chlorophyll build produced no excitation light

Thirty-six sensors sat in one barrel from 1 to 2 September through a five-analyte challenge: quinine sulfate to 148.56 ppb, rhodamine WT to 103.51 ppb, tryptophan to 50 ppb, turbidity to 7.23 NTU, and rhodamine again to 19,960 ppb the following afternoon. Ten of the thirty-six carry the chlorophyll-a build. Every figure below is computed in the cards on this page from the raw sweep archive, with no rail cut, no pedestal subtraction and no response gate.

Every FDOM, TLF and TLF burn-in unit delivered LED-driven light on every sweep it took. No chlorophyll unit did. Seven of the ten produce nothing at any of their 105 bias and drive combinations, reading 167 to 181 counts from one end of the sweep to the other across roughly 600,000 cells each. The other three produce full-scale light on a minority of readings and nothing on the rest.

Where the failure sits

The detector is working. On the units that never light, the LED-off reading rises with SiPM bias by the same small amount as on a working unit, and the mon1 to mon2 gain ratio is preserved at 3.6 to 3.9 against 3.5 to 3.7 on the two references. Every one of the 105 cells reports on every sweep, so nothing is being truncated or dropped.

Commanding the LED on changes the reading by nothing. At LED 512 and bias 3600, mon2 equals mon2_dark integer for integer on 93% to 99% of cells. Averaged over every sweep, the LED-driven signal on these units sits within 0.044 counts of zero, which is 68,360 times below the 3,023 counts a reference returns at the same drive. Dimness cannot explain it either, because sixteen times the LED current buys these units a factor of 0.67 to 1.26 while every channel that does produce light gives 11.8 to 18.9. A faint LED still scales; these do not scale at all.

The light is not landing in the LED-off window instead. On eight of the ten chlorophyll units that reading is the same at every commanded drive, differing by −0.019 to +0.106 counts, all inside three standard errors, while the two references leak +1.46 and +2.34 counts of their own light into it.

On the three units that alternate, the state is decided once per reading and holds for the whole sweep: across 962 readings of 500151 every LED-driven cell was lit or none was, never a mixture, and all three drives always agreed. The two levels are separated with nothing in between, 0 readings out of 17,539 falling between 400 and 1,800 counts. Units switch independently of each other, at phi −0.03 to −0.09. The state does move with board temperature, and in opposite directions on different units: holding time fixed across the 31 August cooling ramp, 50081 correlates at −0.274 (t = −8.2) and 500210 at +0.284 (t = 8.6), which places each of them on a different side of a marginal edge that a 2 °C swing crosses.

That edge is not the detector. The reported reading does change with temperature, at −7.5 to −9.7 %/°C on the well-sampled units, so the ramp's 2 °C swing is worth at most 172 counts against a switch of 176 to 2,571 counts. Matched on temperature, the detector's own LED-off reading differs between the lit and dark states by 0 to 6 counts at every bias.

The one unit that reported

Temperature does not account for it. Inside the baseline window, where the dose is fixed for ninety minutes while the barrel warms, 500151's reading falls 20.7 %/°C (r = −0.98, n = 23). The barrel then warmed 0.67 °C to the top rung, which that slope says should take the reading down 13%. It went up 1,261%. The barrel is the second control: 50096 saw +0.83 °C and moved +2.2%, and 500117 saw −0.13 °C and moved −34.4%. Three units in the same water at the same temperature went three different ways.

The three In-Situ AquaTroll sondes in the same barrel took their chlorophyll channel from 0.05, 0.04 and 0.01 RFU to 158.89, 90.88 and 80.88 across the same two rungs, so both instruments' chlorophyll channels respond to rhodamine at 20 mg/L.

How these readings are now taken

Any metric that maximizes over the sweep arc is unsafe here. The sweep shortens as the water brightens: on 500151 the LED 512 arc runs 58 cells to bias 3021 at baseline, 18 cells to 2895 at the first rhodamine rung and 13 cells to 2865 at the second. A maximum taken over that arc is read at a lower bias in each successive window, and since gain climbs steeply with bias it falls whatever the water does. Every reading on this page is now taken at one bias fixed across the windows being compared. Checked across the whole run, only 500151 stops below bias 3000, on 1% to 3% of its sweeps, so the production slope at bias 3000 is unaffected.

Pooling the lit and dark states is also unsafe. A median over every sweep of an intermittent unit reports whichever state dominated, which is how a unit carrying light on 77% of its sweeps was earlier read as dead. Readings are separated into the two states before anything is summarized, and no reading anywhere in this run sits between 50 and 1,000 counts above pedestal, so that separation is a device state and not a threshold choice.

What this run cannot say

Whether the LED fails to emit or its light fails to reach the detector is open. mon1 and mon2 are the same detector circuit at different gain, so the archive holds no independent view of the excitation, and a pulse firing outside both the signal and the dark read would leave no trace in it. Settling that needs a measurement on the drive side: current through the LED, or a photodiode or scope on the die while a unit sweeps.

Nothing here characterizes the chlorophyll channel itself. One working unit out of ten, responding to a dye rather than to chlorophyll, does not establish what the build detects, how sensitive it is, or how specific. That measurement needs units that produce light.

Loading…

ResultThe chlorophyll channel responds to all four analytes

Both runs: the four-analyte ladder of 1 September and the two rhodamine rungs of 2 September, which pushed the same barrel two decades further. The 2 September block carries its own rung 0, taken after the pump came back on, because about 14 h passed with it off and measuring against the previous day would fold overnight settling into the response.

Temperature corrected. Every amplitude is normalised to 20 °C with tlfSlopeAt20C() imported from the deployed model, on each sweep’s own sipm_temp_c and with the per-sensor quench the model resolves (batch value −0.0215 /°C for all ten of these). It is not optional here: the barrel warmed 0.8–1.5 °C across every block, which is 2–3% of pure temperature working against the quinine, turbidity and rhodamine-screen responses and with the tryptophan one. Correcting it strengthens all four.

Measured on the matched-filter amplitude, which uses every LED × bias cell weighted by how much signal it carries. Each unit is expressed as a fraction of its own level before that block began, so the roughly 700× scale difference between build types cancels and this channel is judged on its own terms instead of against a magnitude borrowed from a larger one. The three LED powers are kept separate and never combined — their agreement is the evidence.

Solid green lines are the chlorophyll units at LED 512, on the left axis in % against their own rung 0. Dash-dot diamonds are the In-Situ AquaTroll chlorophyll channel on the right axis in RFU, read on the identical windows. Two scales share one frame, so read each series against its own axis and treat any crossing as coincidence rather than a relationship. The FDOM and TLF references are not plotted — at +94.8% and +89.5% they compress these curves into the bottom fifth of the panel — so their magnitude is stated in each panel header instead. Every curve starts at 0% by construction. Grey dotted lines are units excluded as bimodal — they alternate between two amplitude states more than 3× apart, so a window median reports whichever state happened to dominate rather than the water. They are drawn, and clipped, rather than hidden; the y range is set from the unimodal units so one excluded curve cannot flatten the rest into a row at zero.
Top rung of each block, in percent, as LED 32 / 128 / 512 inside each cell. Three independent drive levels agreeing to a percent or two is not something noise produces. Units greyed and marked bimodal are excluded from the summaries above.

2 SeptemberThe two chlorophyll units that deliver light, across the three rungs

are the pair: they carry LED-driven light on more of their sweeps than any other Chl-a unit in the batch, and their light scales with drive the way a working channel's must. This is what each of them did through yesterday's Rhodamine WT windows, as the whole bias sweep rather than one number off it.

Median mon2 against SiPM bias, over the lit sweeps in each window, one panel per unit and drive. Color is the dose. The sweep gets shorter as the water brightens, which is why every summary on this page reads at a fixed bias rather than at the top of the arc. Nothing is filtered: no rail cut, no pedestal subtraction, no response gate.

Control: was the rise temperature?

Inside the baseline window the dose is fixed for ninety minutes while the barrel warms, so a fit there measures how far this unit's reading moves with temperature under no dose at all. Each point is one lit sweep.
What that slope predicts across the temperature change between the baseline and the top rung, against what actually happened. Log scale on the magnitude, with the sign written on each bar.
Temperature and time are collinear inside the baseline window, so the fitted slope is a joint drift term rather than a clean temperature coefficient. It points the same way either way, and that is the direction under test.

TimingAre the LEDs firing at the wrong time?

Two things the archive can answer. If a mistimed pulse landed in the LED-off read, that read would scale with the drive commanded for the cell. And a marginal timing relationship moves with temperature, which the 31 August cooling ramp swings up and down inside fourteen hours, separating a temperature effect from a change that merely happened later.

Does the LED-off read know what drive was commanded?

mon2_dark at LED 512 minus the same at LED 32, one fixed bias per unit, with bars at three standard errors. Correct gating puts this at zero. A unit that emits leaks a little of its own light into the dark window, which is what the references do.

Does the lit state follow temperature?

Hourly through the cooling ramp: the share of sweeps carrying light against the board temperature in that hour. Temperature oscillates within the window rather than trending, so a unit tracking the oscillation is responding to temperature and not to the clock.
The ramp itself: board temperature by hour, from the moment the recirculating pump was set to 15.6 °C.

Control: the SiPM is temperature sensitive, so how big is that?

Fitted change in the reported reading per degree, at one fixed bias over lit sweeps, against what that buys over the ramp's swing. The reading is light times gain, so this does not separate the detector from the LED; both fall as the board warms. It sets the size of any temperature effect.
Every sweep's peak, as a distribution. Two levels with nothing between them. A gain that slides with temperature moves a reading continuously and would fill the gap.

BrightnessCould the LEDs just be too dim?

mon2_dark is the same cell read with the LED off, so mon2 − mon2_dark is the LED-driven signal directly, with no model and no correction. Averaged over every sweep its standard error falls far below one count, which answers the sensitivity half. The drive ratio answers the rest: LED 512 is sixteen times the current of LED 32, so a dim LED is still sixteen times brighter at the top drive.

What sixteen times the current buys

Mean LED-driven signal against drive current, each unit read at one fixed bias. A working channel climbs; a channel with no light is flat. Log axes, so only positive means are drawn.

The six that never light, at their own scale

The same quantity in counts, with bars at three standard errors. The shaded band is the detection floor. Sixteen times the current moves none of them out of it, and most sit slightly below zero, which is drift between the LED-on and LED-off reads.

UnfilteredRaw mon2 at every combination, all ten Chl-a units

No filtering of any kind: no rail cut, no pedestal subtraction, no lit-and-dark screen, no temperature correction, no response gate. Every SiPM bias at every LED drive is its own line, carrying the number the archive holds. The two working references are at the end for scale.

Color is the LED drive: 32, 128, 512. All twelve panels share one time axis and one log axis in raw counts, with the dashed line at 3299, the highest value the readout produces. Approaching it the response compresses, so a reading near the line is at the top of the range whether or not it sits on it. Sampled at 150 instants for drawing; every figure in the table is computed from all cells.

Every pickRhodamine WT on one dark unit, every SiPM bias and LED drive

The pooled analysis reads one number off each sweep. This asks whether any pick in the sweep grid carries a Rhodamine WT response that pooling threw away. Every combination on is measured on its own across the same three windows, normalized to its own baseline, and drawn as its own line. A live unit from the same barrel is put through the identical grid on the same axis, so the two can be compared directly.

Both panels share a vertical scale. Each line is one SiPM bias at one LED drive; color is the drive. No cell is excluded for railing, and nothing in this run rails. Across 2.7 million cells the highest mon2 is 3299 and the highest mon1 is 3859, and neither value accumulates readings the way a saturated channel would: the counts sitting on 3299, 3298 and 3297 are 185, 166 and 175. The “at ceiling” column reports combinations that reach 3299, for information rather than exclusion.

The dark unit at its own scale

1–2 SeptemberEvery rung of the run: 500151 against the three sondes

All eighteen settled windows in time order, from clean water through quinine, rhodamine, tryptophan and turbidity on 1 September to the two rhodamine rungs on 2 September. Counts and RFU cannot share an axis, so the Lume units and the sondes get a panel each, both on log scales over the same windows. Nothing is normalized: each panel carries the quantity in its own unit.

The Lume quantity is LED-driven light: the LED 512 reading minus the LED 32 reading at one fixed SiPM bias, over lit sweeps only. The bias is pinned per unit to the highest one its sweeps carry, and is given in the table, so levels compare within a unit and not across units. The sonde quantity is its reported Chl-a fluorescence in RFU. Marker size follows the number of lit sweeps behind each point; the smallest markers are single readings.
The barrel is never emptied, so each analyte's rung 0 is the window before its first dose, which is the previous analyte's top rung. Sweeps counted are the ones carrying light; a dash is a window in which that unit produced none.

500151 against In-Situ 1033548

One regression, over the clean-water blank and every window in which rhodamine WT was in the barrel. Both instruments read the same water, so each window is a paired observation.

Log–log, so the slope is the exponent between the two instruments. Marker size follows the number of lit sweeps behind the Lume point; the smallest is three.
Residuals in decades. A flat scatter means one power law carries the whole range.

One unit500151, the only chlorophyll unit delivering light

Does the LED drive the signal?

Median mon2 minus pedestal against SiPM bias, one line per LED drive, pooled over both runs. Dark current is identical at every drive, so separation between the three lines is light and nothing else. This is the whole test, and it needs no model, no correction and no reference.

What it did through the run

LED 512 minus LED 32 at one fixed SiPM bias per unit, in each settled window, lit sweeps only, against the two working references. This unit alternates between two states, so a median over every sweep would report whichever state dominated. The bias is fixed because the device truncates its sweep harder as the water brightens, and a maximum taken over the arc then moves with the truncation.

Every rung of every analyte, 1 and 2 September

The barrel is never emptied, so each ladder's rung 0 is the window immediately before its first dose, which is the previous analyte's top rung. Panels share one log axis. The references are the check on the design: quinine should move FDOM and tryptophan should move TLF, and they do.

Rhodamine WT, every rung on both days, as one dose response

Log–log, so the fitted slope is the exponent relating counts to concentration. Filled markers are in the fit; open ones are not, being either a zero dose, which has no place on a log axis, or a window with no lit sweep. The two markers at 103.51 ppb are the same nominal concentration fifteen hours apart.
Residuals from each unit's own fit, in decades. A flat scatter around zero means the power law holds across the whole ladder.
Sweep counts are small in the 1 September windows because only the lit sweeps qualify and this unit was lit on a quarter of its sweeps that night. Treat single-digit n as indicative, not measured.