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.
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.
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.
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?
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?
Control: the SiPM is temperature sensitive, so how big is that?
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
The six that never light, at their own scale
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.
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.
…
…
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.
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.
One unit500151, the only chlorophyll unit delivering light
Does the LED drive the signal?
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.