Photoreceptor operating-point sweep
Goal
The lamina-drive accounting
found the OFF-path medulla silent because of an operating point, not
a sign. L2 excites Tm1, Tm2 and Tm4 through 96–131 synapses per cell.
It would put the median cell at threshold at 42.4, 38.9 and 53.0 Hz.
Under the probe grating it runs at 20.46 Hz. The lamina bias rule,
\(b = v_\infty(\mathrm{target}) - v_{\mathrm{rest}} - r_{\mathrm{base}} \cdot \tau_s \cdot W_{\mathrm{in}}\),
assumes the photoreceptors sit at r_base (10 Hz). The encoder
rectifies the dark half of the grating, so they average about 31 Hz,
and the extra histaminergic inhibition drags L2 from its 50 Hz target.
This entry tests that by sweeping the existing --r-base flag at 10,
50 and 100 Hz on the real imago and at 50 and 100 Hz on the shuffled
control. --r-base moves the encoder baseline and the bias rule
together, so a higher value brings the rate the bias assumes closer to
the rate the grating produces. No code changes.
Prediction, written before the runs. The encoder alone, stepped over
the grating outside the network (360 phases, 2 s after a 0.5 s
warm-up), gives a photoreceptor mean of 31.5 Hz at r_base 10
(measured 30.9 Hz on 2026-09-16), 58.1 Hz at 50, and 98.7 Hz at 100.
The rectification does not vanish at 100. The log compression takes
the dark half of the grating to a contrast near −1.4, so 41%, 27% and
10% of samples clip at zero. The excess of the stimulus mean over
r_base, which is the term the bias rule misses, is +21.5, +8.1 and
−1.4 Hz. The bias rule then gives L1 30.63, L2 29.20, L3 16.69 mV at
r_base 50 and L1 49.38, L2 46.53, L3 21.50 mV at 100. At r_base 50
L2 should land nearer its 50 Hz target, somewhere in 35–50 Hz. At 100
it should be at or above target. The range is wide because the
static mean field does not reproduce the 2026-09-16 lamina split: it
gives L1 and L2 the same rate, and the measurement has L1 at 38 Hz and
L2 at 20 Hz. Tm1, Tm2 and Tm4 should cross into the hertz range on
the real imago. Tm2 should go first and Tm4 last, in the order of
their crossing rates; at r_base 50 Tm4 may still be under 1 Hz.
Mi1 and Tm3 should stay silent at every r_base: their dominant
lamina input is L1, which is inhibitory, and L1 rises with the rest.
Mi9 needs L3 at 94 Hz and should stay silent; Mi4 has no direct
lamina drive and should stay silent. T4 should stay at zero, since
its inputs are the ON cells. T5 is then the first verdict set that
gets a fair test. Its inputs include Tm9, which is not in the stage
overlay, so the entry can show whether T5 fires, but not every input
it needs. No prediction on T5 direction selectivity. On the shuffled
control the lamina and medulla rates should rise with r_base, and
T4/T5/HS/VS should stay flat across direction, with selectivity near 1.
Setup
-
how the prediction was computed: the photoreceptor means, the clipping fractions and the excess over
r_basecame from a scratch computation, not a committed tool. It steps the repo’sPhotoreceptorEncoderalone, with no network, over 360 grating phases at 1 ms for 0.5 s warm-up plus 2 s, using the probe’s luminance \(0.5 + 0.4 \sin(\phi - 2\pi t)\) and defaultVisionParamsapart fromr_base_hz. The lamina biases in the prediction are the bias rule evaluated with the median \(W_{\mathrm{in}}\) implied by the 2026-09-16bias_mvvalues. The script, saved asencoder_prediction.pyand re-run after the probes from the repo root withuv run python encoder_prediction.py:import math import torch from flatline.senses.vision import PhotoreceptorEncoder, VisionParams n = 360 # grating phases, one per simulated column phase = torch.linspace(0.0, 2.0 * math.pi, n + 1)[:-1] for r_base in (10.0, 50.0, 100.0): vp = VisionParams(r_base_hz=r_base) enc = PhotoreceptorEncoder(n, vp, 1, 1.0) rates, contrast = [], [] for t in range(2500): # 1 ms steps: 0.5 s warm-up, then 2 s enc.push_luminance(0.5 + 0.4 * torch.sin(phase - 2.0 * math.pi * t / 1000.0)) r = enc.step()[0] if t >= 500: # the encoder's own contrast, before the clamp rates.append(r) c = (enc.held - enc.lowpass) + vp.dc_fraction * (enc.held - enc.l_mid) contrast.append(c[0]) rate, c = torch.stack(rates), torch.stack(contrast) print( f"r_base {r_base:5.1f}: mean {rate.mean():6.2f} Hz, excess {rate.mean() - r_base:+6.2f} Hz," f" clipped {(rate == 0).float().mean():.1%}, contrast {c.min():+.2f} to {c.max():+.2f}" )Output:
r_base 10.0: mean 31.51 Hz, excess +21.51 Hz, clipped 40.9%, contrast -1.15 to +0.73 r_base 50.0: mean 58.05 Hz, excess +8.05 Hz, clipped 26.8%, contrast -1.15 to +0.73 r_base 100.0: mean 98.65 Hz, excess -1.35 Hz, clipped 10.2%, contrast -1.15 to +0.73The prediction’s 31.5, 58.1 and 98.7 Hz, 41%, 27% and 10%, and +21.5, +8.1 and −1.4 Hz are these values rounded. The prediction’s “contrast near −1.4” is not from this script. It was a hand estimate of the log compression, and it is wrong. The encoder’s contrast minimum is −1.15, which is still below −1, so the dark half still clips at
r_base100. -
prediction integrity: before the runs, the prediction paragraph hashed to sha256
aff464c27e79363063e7298da546a7e27b7786ba12609628de789b752476c62ewithawk '/^Prediction, written before the runs/,/^## Setup/' book/src/notebook/2026-10-30-operating-point-sweep.md | sha256sum. The span runs from the paragraph’s first line through the## Setupheading. The hash cannot show that the paragraph came before the runs: the prediction and the results landed in the same commit,083fad7, so it shows only that the paragraph is unchanged since then. -
git describe:
3ad9b97. The shuffledr_base10 run was added later, at5364baf, on the same machine and imagos. Between the two onlystage_drive.pyand the CLI’sstage-drivehandling changed undersrc/; the probe, encoder and engine did not. -
machine: straylight (AMD Ryzen AI Max+ 395, Radeon 8060S, Linux), device cpu. The venv’s torch is
2.14.0+cu130with no ROCm, sotorch.cuda.is_available()is False here. The 2026-09-16 baseline reports were run on the Mac with mps, so comparing the cpur_base10 runs with them is cpu against mps, and differences at the noise level are expected. -
imago:
data/imagos/male-cns-v1.0.imago, built_at2026-09-16T02:29:04+00:00, git_describe4428500-dirty; controldata/imagos/male-cns-v1.0-shuffled-1.imago, built_at2026-09-16T02:30:12+00:00, git_describe4428500-dirty, shuffle_seed 1 -
probe flags, all defaults except
--r-baseand--device: grating period 30°, 1 Hz, contrast 0.8; 0.5 s warm-up, 2 s per direction; frame interval 1 ms (continuous); ratio 1.5; lamina target 50 Hz; encoder gain 100 Hz per log unit; seed 0; undriven lamina cells unbiased -
stage overlay: photoreceptors, L1–L5, C2, C3, Mi1, Tm3, Mi4, Mi9, Tm1, Tm2, Tm4. L4, L5, C2 and C3 were added in
3ad9b97, so the 2026-09-16 baseline reports do not carry them. -
lamina bias (mV) from
bias_mv, target 50 Hz. It changes withr_baseand is the same on the real and shuffled imagos at each value:r_base(Hz)L1 L2 L3 10 15.6276 15.3426 12.8401 50 30.6276 29.2026 16.6901 100 49.3776 46.5276 21.5026 -
commands:
for R in 10 50 100; do uv run flatline probe --imago data/imagos/male-cns-v1.0.imago --device cpu --r-base $R \ --out data/runs/probe/2026-10-30-rbase$R.json done for R in 50 100; do uv run flatline probe --imago data/imagos/male-cns-v1.0-shuffled-1.imago --device cpu --r-base $R \ --out data/runs/probe/2026-10-30-rbase$R-shuffled.json done uv run python scripts/figures/stages.py data/runs/probe/2026-10-30-rbase10.json book/src/figures/probe-stages-rbase10.svg uv run python scripts/figures/stages.py data/runs/probe/2026-10-30-rbase50.json book/src/figures/probe-stages-rbase50.svg uv run python scripts/figures/stages.py data/runs/probe/2026-10-30-rbase100.json book/src/figures/probe-stages-rbase100.svg uv run python scripts/figures/stages.py data/runs/probe/2026-10-30-rbase50-shuffled.json book/src/figures/probe-stages-rbase50-shuffled.svg uv run python scripts/figures/stages.py data/runs/probe/2026-10-30-rbase100-shuffled.json book/src/figures/probe-stages-rbase100-shuffled.svgAdded later, at
5364baf:uv run flatline probe --imago data/imagos/male-cns-v1.0-shuffled-1.imago --device cpu --r-base 10 \ --out data/runs/probe/2026-10-30-rbase10-shuffled.json uv run python scripts/figures/stages.py data/runs/probe/2026-10-30-rbase10-shuffled.json book/src/figures/probe-stages-rbase10-shuffled.svgThe shuffled
r_base10 baseline was at first the existingdata/runs/probe/2026-09-16-stages-shuffled.json(mps, without L4, L5, C2, C3). The cpu run replaces it, so that all six runs share a device and the full stage overlay.
What happened
All five probes completed with no exceptions and returned exit code 2
(verdict failed), as every probe so far has. Wall time, including
uv run start-up and loading the imago, was 37 s (r_base 10),
37 s (50), 38 s (100), 26 s (shuffled, 50) and 28 s (shuffled, 100).
The five figures took 0.3–0.5 s each. The shuffled r_base 10 probe,
run later, also exited 2, in 27 s; its figure took 0.4 s.
The r_base 10 run on cpu reproduces the 2026-09-16 mps run. In the
progressive, regressive and up directions every stage rate and every
verdict rate is identical, except the progressive photoreceptor rate,
which is 6.8 × 10⁻⁵ Hz lower: one photoreceptor spike. The down
direction differs by up to 0.098 Hz (L2 20.5253 against 20.4269 Hz),
and by 0.029 Hz or less on every other set. That is the noise level
the device change was expected to bring.
The shuffled r_base 10 run on cpu matches the 2026-09-16 mps
shuffled run the same way, except that here the progressive direction
carries the whole difference. Regressive, up and down are identical in
every stage and verdict rate. In the progressive direction the
photoreceptor rate is again 6.8 × 10⁻⁵ Hz lower (one spike), the other
stage sets differ by up to 0.049 Hz (Tm2 11.4236 against 11.3743 Hz),
T4a–d and T5a–d by up to 0.010 Hz, and HS and VS by 0.56 and 0.34 Hz
(9 and 23 spikes over 8 and 34 cells in 2 s). Four-direction means move by at most 0.012 Hz (Tm2). The
verdict sets are flat, so this is enough to flip T4a’s winning
direction (regressive to progressive) and to move selectivities by up
to 0.010 (HS 1.000 to 1.010); all ten stay within 1.000–1.012.
Results
Summary, mean of the four directions (Hz); the T4a–d and T5a–d rows
are the range over subtypes and directions. Shuffled at r_base 10 is
the later cpu run, which replaces the 2026-09-16 mps report.
| set | real 10 | real 50 | real 100 | shuffled 10 | shuffled 50 | shuffled 100 |
|---|---|---|---|---|---|---|
| photoreceptors | 30.90 | 57.78 | 98.64 | 30.90 | 57.78 | 98.64 |
| L1 | 37.78 | 57.70 | 65.17 | 37.12 | 58.92 | 67.04 |
| L2 | 20.49 | 39.86 | 49.26 | 36.14 | 57.76 | 65.83 |
| L3 | 21.80 | 27.02 | 33.37 | 33.43 | 41.05 | 46.81 |
| Mi1 | 0.0008 | 0 | 0 | 6.76 | 7.67 | 7.80 |
| Tm3 | 0 | 0 | 0 | 1.89 | 2.50 | 2.85 |
| Mi9 | 0 | 0.0041 | 0.25 | 4.24 | 5.05 | 5.33 |
| Tm1 | 0.36 | 5.21 | 8.92 | 11.24 | 13.34 | 14.05 |
| Tm2 | 0.16 | 2.92 | 7.75 | 11.43 | 13.42 | 14.16 |
| Tm4 | 0.0087 | 3.08 | 7.47 | 2.03 | 2.62 | 2.96 |
| T4a–d | 0 | 0 | 0 | 0.55–0.90 | 0.79–1.18 | 0.97–1.37 |
| T5a–d | 0 | 0 | 0 | 0.44–0.78 | 0.63–1.07 | 0.77–1.24 |
Per run, every set in every direction. Stage rows first, then the verdict sets with the winning direction of the literature axis and the selectivity (preferred + floor over null + floor; pass is 1.5).
Real imago, r_base 10:
| set | cells | progressive | regressive | up | down | winner, selectivity |
|---|---|---|---|---|---|---|
| photoreceptors | 7341 | 30.9235 | 30.8730 | 30.9477 | 30.8438 | — |
| L1 | 1776 | 37.7919 | 37.7689 | 37.7424 | 37.7998 | — |
| L2 | 1779 | 20.4272 | 20.4831 | 20.5166 | 20.5253 | — |
| L3 | 1772 | 21.8081 | 21.9879 | 21.7080 | 21.7003 | — |
| L4 | 1770 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| L5 | 1787 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| C2 | 1745 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| C3 | 1779 | 0.0734 | 0.0759 | 0.0703 | 0.0675 | — |
| Mi1 | 1773 | 0.0008 | 0.0006 | 0.0011 | 0.0006 | — |
| Tm3 | 2054 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Mi4 | 1772 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Mi9 | 1775 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Tm1 | 1777 | 0.3588 | 0.3655 | 0.3517 | 0.3455 | — |
| Tm2 | 1766 | 0.1662 | 0.1557 | 0.1520 | 0.1673 | — |
| Tm4 | 1670 | 0.0102 | 0.0099 | 0.0072 | 0.0075 | — |
| T4a | 1684 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T4b | 1690 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T4c | 1778 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T4d | 1709 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T5a | 1664 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T5b | 1715 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T5c | 1720 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T5d | 1620 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| HS | 8 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| VS | 34 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
Real imago, r_base 50:
| set | cells | progressive | regressive | up | down | winner, selectivity |
|---|---|---|---|---|---|---|
| photoreceptors | 7341 | 57.8461 | 57.6449 | 57.8508 | 57.7778 | — |
| L1 | 1776 | 57.7188 | 57.8446 | 57.5777 | 57.6543 | — |
| L2 | 1779 | 39.9674 | 40.0225 | 39.7167 | 39.7352 | — |
| L3 | 1772 | 26.8897 | 27.2627 | 26.8747 | 27.0440 | — |
| L4 | 1770 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| L5 | 1787 | 0.0062 | 0.0067 | 0.0078 | 0.0056 | — |
| C2 | 1745 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| C3 | 1779 | 0.0334 | 0.0408 | 0.0363 | 0.0377 | — |
| Mi1 | 1773 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Tm3 | 2054 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Mi4 | 1772 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Mi9 | 1775 | 0.0045 | 0.0042 | 0.0031 | 0.0045 | — |
| Tm1 | 1777 | 5.2248 | 5.2257 | 5.1947 | 5.2043 | — |
| Tm2 | 1766 | 2.9536 | 2.9233 | 2.9037 | 2.9060 | — |
| Tm4 | 1670 | 3.1461 | 3.1311 | 3.0380 | 2.9997 | — |
| T4a | 1684 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T4b | 1690 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T4c | 1778 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T4d | 1709 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T5a | 1664 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T5b | 1715 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T5c | 1720 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T5d | 1620 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| HS | 8 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| VS | 34 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
Real imago, r_base 100:
| set | cells | progressive | regressive | up | down | winner, selectivity |
|---|---|---|---|---|---|---|
| photoreceptors | 7341 | 98.7211 | 98.5479 | 98.6218 | 98.6629 | — |
| L1 | 1776 | 65.0881 | 65.2511 | 65.2103 | 65.1244 | — |
| L2 | 1779 | 49.3190 | 49.4677 | 49.2035 | 49.0669 | — |
| L3 | 1772 | 33.5023 | 33.4168 | 33.2460 | 33.3273 | — |
| L4 | 1770 | 0.0025 | 0.0028 | 0.0011 | 0.0020 | — |
| L5 | 1787 | 0.0182 | 0.0232 | 0.0266 | 0.0238 | — |
| C2 | 1745 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| C3 | 1779 | 0.0686 | 0.0593 | 0.0565 | 0.0582 | — |
| Mi1 | 1773 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Tm3 | 2054 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Mi4 | 1772 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| Mi9 | 1775 | 0.2803 | 0.2687 | 0.2239 | 0.2285 | — |
| Tm1 | 1777 | 8.9342 | 8.9432 | 8.9077 | 8.8981 | — |
| Tm2 | 1766 | 7.7959 | 7.7480 | 7.7237 | 7.7290 | — |
| Tm4 | 1670 | 7.6219 | 7.6518 | 7.3368 | 7.2883 | — |
| T4a | 1684 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T4b | 1690 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T4c | 1778 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T4d | 1709 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T5a | 1664 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T5b | 1715 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| T5c | 1720 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| T5d | 1620 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
| HS | 8 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | progressive, 1.000 |
| VS | 34 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | up, 1.000 |
Shuffled control, r_base 10:
| set | cells | progressive | regressive | up | down | winner, selectivity |
|---|---|---|---|---|---|---|
| photoreceptors | 7341 | 30.9235 | 30.8730 | 30.9477 | 30.8438 | — |
| L1 | 1776 | 37.1247 | 37.1149 | 37.1025 | 37.1357 | — |
| L2 | 1779 | 36.1062 | 36.1352 | 36.1220 | 36.2018 | — |
| L3 | 1772 | 33.4405 | 33.4374 | 33.3809 | 33.4763 | — |
| L4 | 1770 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| L5 | 1787 | 7.3542 | 7.2753 | 7.4010 | 7.3744 | — |
| C2 | 1745 | 0.4350 | 0.4278 | 0.4367 | 0.4315 | — |
| C3 | 1779 | 2.6459 | 2.6093 | 2.6490 | 2.6498 | — |
| Mi1 | 1773 | 6.7913 | 6.7160 | 6.7448 | 6.7735 | — |
| Tm3 | 2054 | 1.8963 | 1.8644 | 1.9068 | 1.8941 | — |
| Mi4 | 1772 | 0.8129 | 0.7963 | 0.8053 | 0.7963 | — |
| Mi9 | 1775 | 4.2507 | 4.1972 | 4.2606 | 4.2617 | — |
| Tm1 | 1777 | 11.2136 | 11.1950 | 11.2856 | 11.2648 | — |
| Tm2 | 1766 | 11.4236 | 11.3641 | 11.4711 | 11.4754 | — |
| Tm4 | 1670 | 2.0350 | 2.0030 | 2.0488 | 2.0302 | — |
| T4a | 1684 | 0.8821 | 0.8774 | 0.8798 | 0.8955 | progressive, 1.003 |
| T4b | 1690 | 0.5577 | 0.5580 | 0.5459 | 0.5541 | regressive, 1.000 |
| T4c | 1778 | 0.8231 | 0.8245 | 0.8366 | 0.8211 | up, 1.012 |
| T4d | 1709 | 0.6407 | 0.6451 | 0.6454 | 0.6337 | up, 1.010 |
| T5a | 1664 | 0.5240 | 0.5144 | 0.5240 | 0.5261 | progressive, 1.009 |
| T5b | 1715 | 0.7571 | 0.7478 | 0.7662 | 0.7755 | progressive, 1.007 |
| T5c | 1720 | 0.4355 | 0.4392 | 0.4416 | 0.4352 | up, 1.007 |
| T5d | 1620 | 0.5062 | 0.5077 | 0.5093 | 0.5049 | up, 1.004 |
| HS | 8 | 57.9375 | 57.3750 | 55.5625 | 56.1875 | progressive, 1.010 |
| VS | 34 | 31.2500 | 30.0147 | 30.9412 | 30.6324 | up, 1.010 |
Shuffled control, r_base 50:
| set | cells | progressive | regressive | up | down | winner, selectivity |
|---|---|---|---|---|---|---|
| photoreceptors | 7341 | 57.8461 | 57.6449 | 57.8508 | 57.7778 | — |
| L1 | 1776 | 58.9279 | 59.0625 | 58.7965 | 58.8812 | — |
| L2 | 1779 | 57.7305 | 57.8302 | 57.7133 | 57.7825 | — |
| L3 | 1772 | 41.0370 | 41.1273 | 41.0141 | 41.0375 | — |
| L4 | 1770 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| L5 | 1787 | 8.5940 | 8.5666 | 8.5481 | 8.6489 | — |
| C2 | 1745 | 0.5616 | 0.5648 | 0.5610 | 0.5633 | — |
| C3 | 1779 | 3.2341 | 3.2482 | 3.1647 | 3.2442 | — |
| Mi1 | 1773 | 7.6751 | 7.7202 | 7.5601 | 7.7250 | — |
| Tm3 | 2054 | 2.4852 | 2.5168 | 2.4769 | 2.5331 | — |
| Mi4 | 1772 | 1.0209 | 1.0581 | 1.0062 | 1.0305 | — |
| Mi9 | 1775 | 5.0408 | 5.0803 | 5.0059 | 5.0913 | — |
| Tm1 | 1777 | 13.3492 | 13.3711 | 13.2611 | 13.3942 | — |
| Tm2 | 1766 | 13.3768 | 13.3514 | 13.4380 | 13.5102 | — |
| Tm4 | 1670 | 2.6144 | 2.6380 | 2.5868 | 2.6365 | — |
| T4a | 1684 | 1.1657 | 1.1755 | 1.1425 | 1.1621 | regressive, 1.006 |
| T4b | 1690 | 0.8151 | 0.8207 | 0.7944 | 0.8263 | regressive, 1.004 |
| T4c | 1778 | 1.1516 | 1.1623 | 1.1268 | 1.1561 | down, 1.018 |
| T4d | 1709 | 0.8839 | 0.8979 | 0.8511 | 0.8947 | down, 1.032 |
| T5a | 1664 | 0.7344 | 0.7488 | 0.7383 | 0.7335 | regressive, 1.012 |
| T5b | 1715 | 1.0592 | 1.0694 | 1.0254 | 1.0676 | regressive, 1.007 |
| T5c | 1720 | 0.6468 | 0.6561 | 0.6276 | 0.6535 | down, 1.023 |
| T5d | 1620 | 0.7327 | 0.7386 | 0.7164 | 0.7364 | down, 1.016 |
| HS | 8 | 66.3750 | 67.6250 | 63.5625 | 62.1250 | regressive, 1.019 |
| VS | 34 | 35.2647 | 35.9412 | 35.9853 | 35.6029 | up, 1.011 |
Shuffled control, r_base 100:
| set | cells | progressive | regressive | up | down | winner, selectivity |
|---|---|---|---|---|---|---|
| photoreceptors | 7341 | 98.7211 | 98.5479 | 98.6218 | 98.6629 | — |
| L1 | 1776 | 66.9209 | 67.1022 | 67.1219 | 67.0025 | — |
| L2 | 1779 | 65.6605 | 65.9351 | 65.8997 | 65.8162 | — |
| L3 | 1772 | 46.8059 | 46.8431 | 46.8236 | 46.7621 | — |
| L4 | 1770 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | — |
| L5 | 1787 | 9.0492 | 9.0599 | 9.2717 | 9.2043 | — |
| C2 | 1745 | 0.6292 | 0.6232 | 0.6381 | 0.6404 | — |
| C3 | 1779 | 3.5132 | 3.5073 | 3.5402 | 3.5129 | — |
| Mi1 | 1773 | 7.7169 | 7.7530 | 7.8754 | 7.8370 | — |
| Tm3 | 2054 | 2.8074 | 2.7994 | 2.9012 | 2.8856 | — |
| Mi4 | 1772 | 1.0214 | 1.0277 | 1.0751 | 1.0545 | — |
| Mi9 | 1775 | 5.2600 | 5.2662 | 5.3949 | 5.3862 | — |
| Tm1 | 1777 | 13.9702 | 13.9994 | 14.1086 | 14.1207 | — |
| Tm2 | 1766 | 14.0037 | 14.0419 | 14.3061 | 14.3001 | — |
| Tm4 | 1670 | 2.9228 | 2.9335 | 3.0036 | 3.0000 | — |
| T4a | 1684 | 1.3406 | 1.3607 | 1.3688 | 1.3596 | regressive, 1.011 |
| T4b | 1690 | 0.9870 | 0.9743 | 0.9876 | 0.9899 | progressive, 1.009 |
| T4c | 1778 | 1.3026 | 1.3076 | 1.3684 | 1.3459 | up, 1.012 |
| T4d | 1709 | 1.0187 | 1.0199 | 1.0670 | 1.0421 | up, 1.016 |
| T5a | 1664 | 0.8669 | 0.8606 | 0.8978 | 0.8753 | progressive, 1.005 |
| T5b | 1715 | 1.1813 | 1.2023 | 1.2429 | 1.2370 | regressive, 1.012 |
| T5c | 1720 | 0.7756 | 0.7730 | 0.7930 | 0.8049 | down, 1.009 |
| T5d | 1620 | 0.8321 | 0.8417 | 0.8694 | 0.8651 | up, 1.003 |
| HS | 8 | 68.9375 | 69.9375 | 73.1875 | 69.1250 | regressive, 1.014 |
| VS | 34 | 37.6765 | 37.3971 | 37.8676 | 37.5441 | up, 1.009 |
Conclusions
The operating point was the OFF-path blocker at the medulla, and
moving it wakes Tm1, Tm2 and Tm4. The photoreceptor means landed
where the encoder calculation put them: 57.78 Hz at r_base 50
(predicted 58.1) and 98.64 Hz at 100 (predicted 98.7). L2 rose from
20.49 to 39.86 to 49.26 Hz. That is inside the predicted 35–50 Hz at
50, and 0.7 Hz under the 50 Hz target at 100, so “at or above target”
held only as “at”. L2 is the only lamina type that lands on target:
at r_base 100, where the photoreceptors average 98.64 Hz and the
bias rule’s assumption holds, L1 runs at 65.17 Hz and L3 at 33.37 Hz,
15.17 Hz over and 16.63 Hz under the 50 Hz target.
With L2 at 39.86 Hz (r_base 50), Tm1 fires 5.21 Hz, Tm2 2.92 Hz and
Tm4 3.08 Hz; with L2 at 49.26 Hz (r_base 100), they fire 8.92, 7.75
and 7.47 Hz. The lamina-drive entry put the median cell at threshold,
from L2 alone, at 38.9 Hz for Tm2, 42.4 Hz for Tm1 and 53.0 Hz for
Tm4. The sweep took L2 past the first at r_base 50 and past the
first two at 100, never to 53.0 Hz, and all three types are in the
hertz range at both settings, Tm4 included.
The predicted order was wrong. The prediction had Tm2 first and Tm4
last, and Tm4 possibly under 1 Hz at r_base 50. Tm1 led at both
settings. Tm4 was above Tm2 at 50 (3.08 against 2.92 Hz), even though
the median Tm4 cell needs L2 14 Hz higher than the median Tm2 cell.
The static mean-field crossing rate does not rank these cells. The
grating modulates L2 at 1 Hz, so L2 spends part of each cycle well
above its mean; the per-cell spread of \(W_{\mathrm{in}}\) (Tm4’s
interquartile range is the widest of the three) and the other inputs
onto each type also enter. None of these was measured here.
The ON path stayed silent, as predicted. Mi1 went from 0.0008 Hz
at r_base 10 to exactly 0 at 50 and 100; Tm3 and Mi4 are exactly 0
at all three. L1 rose with the rest (37.78, 57.70, 65.17 Hz), and L1
is the inhibitory dominant input onto Mi1, Tm3, L5, C2 and C3. L4, L5
and C2 are at or under 0.03 Hz on every real run; C3 is 0.03–0.08 Hz
in every direction. Mi9 leaked slightly at 100 (0.25 Hz) with L3 at
33.37 Hz, against the 94.3 Hz the accounting gives for L3 alone. The
prediction said silent; 0.25 Hz is near silent, but not zero.
Nothing reached T5. T4a–d, T5a–d, HS and VS are exactly 0.0 Hz
in every direction at every r_base on the real imago. T4 was
predicted to stay at zero. T5 was the set the sweep was meant to give
a fair test, and with Tm1, Tm2 and Tm4 at 7.5–8.9 Hz it produced no
spike in 2 s across 6719 cells and four directions. This is the
surprising result. The probe cannot say why: Tm9, the fourth major T5
input, is not in the stage overlay, and nothing here accounts for the
weight from Tm1/Tm2/Tm4 onto T5 or for inhibition onto T5.
The shuffled control fires T5, flat. At the same settings the
control’s lamina runs hotter than the real one (L2 57.76 and
65.83 Hz), its medulla rises with r_base (Tm1 11.24 → 13.34 →
14.05 Hz, Mi1 6.76 → 7.67 → 7.80 Hz), and T4a–d and T5a–d fire
0.63–1.37 Hz in every direction. Selectivity is 1.003–1.032 on every
verdict set. HS runs 62–73 Hz and VS 35–38 Hz, both flat. This is the
same picture as at r_base 10 (T4a–d and T5a–d 0.44–0.90 Hz,
selectivity at most 1.012), scaled up.
That the control’s medulla activity comes from recurrent excitation is
carried over from the stage-drive accounting in the lamina-drive
entry, not measured here: at the
control’s r_base 10 lamina rates its net lamina \(g\) median is
0.00 mV for six of the seven medulla types and +0.05 mV for Tm4, so
the lamina is not what drives them. The accounting was not repeated at
r_base 50 or 100. On that reading the control’s T5 rates say a
randomized brain can push T5 over threshold; they do not say the real
lamina-to-T5 route is broken. Type by type at r_base 100, the real
Tm1 and Tm2 (8.92 and 7.75 Hz) run at 0.63 and 0.55 times the
control’s (14.05 and 14.16 Hz), and the real Tm4 (7.47 Hz) at 2.5
times the control’s 2.96 Hz. The real T5 is still at zero; the
control’s T5a–d fire 0.77–1.24 Hz.
Next steps
Left to Kyle. Options, not ranked:
- Account for the step from the OFF medulla to T5 with the existing
stage-drivecommand:--from Tm1 Tm2 Tm4 Tm9 --to T5a T5b T5c T5d, with--rates-from data/runs/probe/2026-10-30-rbase100.jsonon the real and shuffled imagos. The report has no Tm9 rate, so Tm9 needs--rate Tm9=HZor has to be dropped from--from. This is the same accounting that explained the lamina-to-medulla drop. - Add Tm9 (and any other large T5 input the accounting names) to the
probe’s stage overlay, then repeat the
r_base100 run. - Keep
r_basenear the stimulus-mean photoreceptor rate as the probe default, or make the lamina bias rule use the measured stimulus mean instead ofr_base. That removes the encoder term only. Atr_base100, where that term is gone, L2 sits on its target but L1 (65.17 Hz) and L3 (33.37 Hz) do not, so the rule also misses per type for a reason not measured here; find that before relying on it. - Option (a) from the lamina-drive entry, the tonic operating-point policy for the inhibition-dominated graded types, for the ON path, which this sweep does not touch.