The grain sensitivity is a property of the recording, not a curve
gate/RESULT-GRAIN-MULTI.mdContents
Runs: gate/tempres.py,
gate/farnes.py, gate/tempres3.py,
gate/tempres4.py Date: 2026-09-22
Standard: METHOD 0.4.9 → 0.4.10
(amends §3.6)
What was done
METHOD §3.6 was written yesterday on a single substrate and explicitly declined to set a tolerance, on the ground that one substrate is not a curve and that a conformance tolerance nobody had measured would repeat the §3.5 pitch defect knowingly. This run tested whether that caution was warranted. Four sweeps, each degrading a recording that already produced a register value, changing nothing but the number of samples in the response window:
| Sweep | Recording | Response window | Native grain |
|---|---|---|---|
tempres |
Mouse surface EEG, 16 state-cells | 800 ms @ 500 Hz | 399 samples |
farnes |
Human scalp TMS-EEG, 20 cells | 300 ms @ 312.5 Hz | 94 |
tempres3 |
Human subdural grid, ds004370 | 285 ms @ 725 Hz | 207 |
tempres4 |
Mouse again, re-swept at a 300 ms window | 300 ms @ 500 Hz | 149 |
The fourth exists because the first three left window length and species confounded: the only long-window recording was also the only non-human one. The mouse data is held locally, so the mouse could be re-swept at the humans' window and asked whether it then behaved like them.
Where the window is matched, the degradation reproduces almost exactly
Read at matched fractions of each recording's own native grain:
| Fraction of native | Mouse 800 ms | Mouse 300 ms | Human scalp 300 ms | Human grid 285 ms |
|---|---|---|---|---|
| 0.50 | 0.708 | 0.806 | 0.942 | 0.880 |
| 0.30 | 0.582 | 0.705 | 0.819 | 0.822 |
| 0.20 | 0.454 | 0.546 | 0.680 | 0.751 |
| 0.10 | 0.330 | 0.398 | 0.383 | 0.674 |
The two short-window human recordings agree to 1.004× at 30% of native — four parts in a thousand. They differ in modality (scalp against subdural), in perturbation (TMS against direct electrical stimulation at 8 mA), in sampling rate (312.5 against 725 Hz), in channel count (60 against 32) and in geometry. Almost nothing about them is the same except the length of the window, and the degradation is the same.
Window length explains about half of the rest, and no more
The mouse re-swept at 300 ms moves from 0.582 to 0.705 at 30% of native, against the humans' 0.820. That closes a little over half the gap. Shortening the window is therefore necessary and not sufficient to make two recordings comparable, and the residual is a property of the recording that no declared parameter predicts.
Controls: the long-window arm reproduced
gate/tempres.json at worst fractional disagreement
0.000 across all 16 cells, and the third sweep
reproduced gate/decimation.json to machine precision, so
all four sweeps are the same pipeline.
At matched absolute sample count, the substrates disagree by up to 3.3×
Which is what §3.6 indexes on, and the reason a tolerance could not be set:
| Samples in response window | Mouse | Human scalp | Disagreement |
|---|---|---|---|
| 80 | 0.454 | 0.984 | 2.17× |
| 60 | 0.386 | 0.960 | 2.49× |
| 30 | 0.265 | 0.819 | 3.09× |
| 20 | 0.203 | 0.680 | 3.34× |
A tolerance set from the mouse alone would have been wrong for the human by more than the state contrasts this register publishes — 1.21× in human, 1.89× in mouse. Yesterday's refusal to guess was not caution. It was the finding, one sweep early.
A control caught a run testing the wrong proposition, again
The third sweep's first control compared its value against NS-0012's
issued 32.26 and failed at 48%. The control was wrong, not the loader:
NS-0012 is the mean of 269 site-level values across 7 subjects
and 8 sessions, while the loader pools one subject's
stimulation trials into a single average. They are different objects and
had no reason to agree. Re-pointed at the value the same pipeline
recorded in gate/decimation.json, it reproduces to machine
precision.
This is the second time in two days a run has been caught auditing
the wrong proposition — gate/RESULT-WIDENERS.md was the
first — and both times the control stopped the run rather than a reader
catching it afterwards.
A third defect, found by trying to declare the grain honestly
The reference computation will resample to any rate asked of it. A
recording acquired at 312.5 Hz resampled to 725 Hz would declare 207
samples in a 285 ms window and sit beside a reading genuinely acquired
at that rate. Interpolation does not create samples.
response_samples is now computed from
min(resample_hz, fs_hz), and the conformance rule enforces
it — an earlier version took resample_hz when present and
would have accepted the inflated figure.
What is recommended next
§3.6 now requires what §2.3 requires, and for the same reason. A reading that will be compared as an absolute value against a reading at a different realized sample count carries its own measured sensitivity — the same recording re-read at the other reading's grain. The comparison is made at matched grain or not at all. Where no such comparison is made, declaration alone suffices. No tolerance is set, and none should be until the residual tracks something nameable.
Sweep a non-cortical substrate next. All four sweeps are cortex and three are the mammalian evoked response. The human hippocampal slice deposit (DANDI 001132, 1,009 channels at 20 kHz, optogenetic, CC-BY) is the natural fifth, and it is the same deposit the deferred
MIN_CHANNELSquestion needs.Look for what the residual tracks. Response duration, dominant frequency and channel count are all candidates and all testable on data already held. If it tracks something declarable, §3.6 gets a formula and condition 12 gets a tolerance. If it does not, "measure it per recording" is permanent, and that is worth knowing too.