Skip to content

v0.8.42

Choose a tag to compare

@gianlucamazza gianlucamazza released this 13 Oct 01:37
· 332 commits to main since this release
v0.8.42
0510027

Result

  • Partner follow-up v1 (#76): the left mirror replicates (DNp02 p 0.001, DNp06 p 0.003),
    and the direct drive gives single_sufficient: DNp06_R: at 200 Hz DNp06_R alone brings
    TTMn_R to the jump bit (3–6 spikes), DNp02_R alone does not (0), the pair gives 8–11
    against a matched null mean of 0.013 (p 0.001). Conjunction rejected; figure
    partner-followup.svg; outputs with every null draw in results/partner-followup/v1/.
  • Kenyon cell sparseness v2: within E, F, by undershoot (#95). Without the cholinergic
    local neuron → PN chemical contacts (electrical in the fly) one ORN type drives 4.5% of the
    PNs instead of 73%, and the Kenyon cells fall to 0.2% (measured 6 ± 5%): the overlap was an
    antennal-lobe artefact, and single-receptor stimuli no longer reach the Kenyon cells. The
    lock had no lower bound; stated. Next: odors as receptor vectors (#96).
  • Kenyon cell sparseness v1: not_recurrence (#95). KC → KC without fast effect lowers
    the responding Kenyon cells from 25% to 17.4% (bound 17%), but the two odors still share
    95%; APL removal recruits all. The overlap is upstream of the Kenyon cells.
  • KC → MBON11 depression v1: inconsistent (#85). The measured rule silences MBON11 for
    both odors (272–286 → 0 spikes, seeds 50–52): each odor recruits about 1,000 Kenyon cells
    and the two share 95%, against 30–33% in the fly. The model's Kenyon cell code is not
    sparse, the same limit as the held-out ORN_DM1 failure. Nothing is retuned.

Documentation

  • Realism plan in docs/roadmap.md: five steps (eye, Kenyon cell sparseness, odors as
    receptor vectors, body and TTM actuator, non-spiking neurons), each with its evidence and an
    independent test; tracked in #84, #95, #96, #90, #94, #97.
  • docs/roadmap.md (on the site as Roadmap): what of the brain the model uses and leaves
    out, in numbers from scripts/brain_coverage.py (signs, the FlyWire cross-check of the
    unsigned neurons, somata, photoreceptor columns), and every open item with what blocks it
    and what would unblock it. New issues #84 (eye encoder) and #85 (electrical synapses and
    neuromodulation, evidence audit).

Eye

  • Graded photoreceptor input: eye.photoreceptor_kicks (gain × light left per column, in
    units of the Poisson kick). sim.run already accepted real-valued kicks; it is now
    documented and tested (integer values as floats reproduce the Poisson run spike for spike).
    CpuRuntime and the native executor still take integer counts only.
  • Looming per column: eye.looming_radius_deg (constant-speed approach, von Reyn et al. 2014) and eye.disk_coverage (share of each column's Gaussian acceptance profile covered
    by a dark disk, exact in the small-angle limit). The acceptance angle is an argument for
    the lock to source, not a default.
  • flymsg eye (#84): every MaleCNS optic-lobe column gets a measured viewing direction
    from the Zhao et al. 2025 eye map (fetched at run time, GPL-3.0, not redistributed) through
    the published hex convention; nothing is fitted. 843 of 892 right and 835 of 875 left
    columns have one. Photoreceptors are assigned to columns by their strongest output; the
    dorsal-rim R7d/R8d land at a median elevation of 67.7° against 3.7° for the other R7/R8.
    New dependency rdata (MIT) to read the R files.

3D view

  • Whole-CNS layer: every soma in the volume (140,024 of 165,122 neurons) drawn as a point
    coloured by region around the scene's neurons, from somaLocation in the MaleCNS
    annotations (scripts/build_somata.py, docs/live/cns/). Context only; ?somata=0 hides
    it. Sensory neurons, whose somata are in the periphery, are counted, not drawn.

Tooling

  • GitHub templates: a pre-registered experiment issue form (question, sources,
    protocol and verdicts, what was seen before the lock, compensations), a bug form, and a PR
    checklist with the project's rules. Labels preregistration, result, architecture,
    embodiment.
  • scripts/bench_viewer.py (#24): builds the site, opens each scene with ?bench= in a
    fresh browser profile and appends the summary, the GL backend and the load average to
    runs/viewer-bench/. It refuses to start above a 1-minute load of 1.0, so a baseline is
    taken only on an idle machine, and a timed-out page no longer leaves its browser running.

Live scenes

  • Every scene re-exported from main (8f2a076): the manifests of the scenes made before
    the rule pointed at branch commits that squash merges dropped; now all record a commit on
    main. Activity is unchanged byte for byte.
  • Left eye and both eyes on the site: looming-left (LC4_L), looming-bilateral
    (LC4) and the right-vs-left comparison, exported from main. Seed 0: TTMn_R 22
    spikes with the right eye, TTMn_L 12 with the left, 24 and 12 with both. docs/viz.md
    states the side convention. build_live_scenes.py NAME ... rebuilds only those scenes.

Pre-registration

  • Kenyon cell sparseness diagnostic v2 (#95): after v1, an antennal-lobe arm. Cholinergic
    local neuron → PN contacts are electrical in the fly (Yaksi & Wilson 2010) and fast chemical
    in the model; v2 removes them (arm E), alone and with KC → KC (arm F), on fresh seeds 70–72,
    same measured bounds. Locked before its run.
  • Kenyon cell sparseness diagnostic v1 (#95): four weight matrices (default; KC → KC
    without fast effect, since these synapses act through the metabotropic mAChR-B, Manoim et
    al. 2022; APL → KC removed; both) compared on the share of Kenyon cells responding to an
    odor (measured 6 ± 5%, ≤ 17%) and the share shared between two odors (≤ 64.6%). Locked
    before any run; flymsg kc-sparseness.
  • Dopamine-gated depression at KC → MBON11, v1 (#85): the one plasticity measured on an
    identified synapse (Hige et al. 2015: −90% charge, forward pairing only, ≥ 40 min) as an
    optional rule applied between trials to the weight matrix; the kernel and the defaults are
    unchanged. Seven compensations named; the test asks whether the paired odor's MBON11
    response drops ≥ 49.8% and the unpaired ≤ 64.6%. flymsg mb-plasticity.
  • Residual partner follow-up v1 (#76): two model-side tests of the scan v3 naming,
    locked before any run on fresh seeds 40–42. Left: the scan arm mirrored (LC4_L →
    TTMn_L), testing only DNp02 and DNp06 with the scan's null. Drive: DNp02_R, DNp06_R
    and the pair driven directly at 200 Hz without LC4, against matched descending-neuron
    pairs, with the verdicts single_sufficient, conjunction, pair_sufficient,
    not_specific and insufficient. Every null draw is kept. flymsg partner-followup.

Exploratory

  • Mirrored scan arms (scripts/silence_mirror.py, seeds 0–2, disclosed in the lock):
    the left side follows the right (DNp02 or DNp06 with DNp01 silenced: 0 TTMn_L spikes),
    the effect follows the pair on the side of the stimulus, and the left residual is weak
    (2, 1, 3 spikes).

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.42/CHANGELOG.md