Skip to content

LC output strength: Currier and Clandinin's input fraction

Introduction

Question

Which partners of an LC type are strong when strength is the share of the partner's input that the type supplies, as Currier and Clandinin define it?

Background

lc_output_strength_definitions compares strengths that count synapses: the heaviest connection from one cell of the type, and the sum over the cells of the type. Currier and Clandinin (2025) test how well the connectome predicts the visual responses of 91 cell types of the medulla. They call a connection strong by the share of the postsynaptic partner's input that it supplies, not by a count of synapses:

We began by calling a connection ‘‘strong’’ when it accounted for 5% or more of the postsynaptic partner’s total input (i.e., input fraction [%in] > 5%)

— Currier and Clandinin 2025, p. 4375 · PDF p. 4375 · 10.1016/j.cell.2025.05.007

They adopt it for a reason they cite from earlier studies:

Prior studies have determined that input fraction is a more reliable measure of connection strength than raw synapse counts

— Currier and Clandinin 2025, p. 4374 · PDF p. 4374 · 10.1016/j.cell.2025.05.007

They also place it against the usual cutoff on a count of synapses:

Many recent connectome analyses have established 5–10 synapses (or ⁓1% input fractions) as a ‘‘cutoff’’ for excluding the brain’s numerous weak connections.

— Currier and Clandinin 2025, p. 4378 · PDF p. 4378 · 10.1016/j.cell.2025.05.007

They call that cutoff conservative (p. 4378).

This notebook takes their rule and adjusts it to the partners of the four LC types:

  • The paper's units are pairs of cell types, with the fraction averaged over the cells of the postsynaptic type (Methods, Figure S6). Here a unit is a type and one partner cell, because the project's strengths are per partner cell.
  • The paper takes the connections of a male optic lobe connectome (Methods). Here the input of a partner is the sum of the weights of every connection onto it in the stored FlyWire connections, whichever cell it comes from.
  • The paper's cutoff is STRONG_FRACTION = 5%, and it tests 2% and 10%. This notebook uses the same three.
  • The paper's "strong input dominant" model predicts a response, and there is no response to predict here, so it is not used.

Expectations

  1. If every partner received the same input, the input fraction would be the sum of synapses over a constant, and the partners strong by input fraction would be the partners with the most synapses from the type. Partners differ in how much input they receive, so a partner with little input is strong with few synapses and a partner with much input needs many. The partners strong by input fraction and those strong by the heaviest connection (at STRONG_SYN = 10 synapses) overlap, and each set has members the other lacks.
  2. For the same reason, the synapses a partner needs to be strong by input fraction are not one number: they differ from partner to partner.

Load data

census = load_census()
sides = load_visual_types().select("root_id", "side")
proofread_ids = load_proofread_ids()
cells = cells_of_types(census, sides, TYPES_OF_INTEREST)
connections = with_pre_type(
    load_connections_of([_id for _ids in cells.values() for _id in _ids]),
    cells,
)
connections
shape: (253_403, 4)
pre_pt_root_idpost_pt_root_idweightpre_type
i64i64i64str
7205759406035788487205759403813914991"LC11"
7205759406035788487205759403814153071"LC11"
7205759406035788487205759403814211951"LC11"
7205759406035788487205759403814252911"LC11"
7205759406035788487205759403814332271"LC11"
…………
7205759406592290577205759406498657181"LC11"
7205759406592290577205759406501497532"LC11"
7205759406592290577205759406514042782"LC11"
7205759406592290577205759406533460382"LC11"
7205759406592290577205759406611344651"LC11"

The input fraction of each partner

For a type \(T\) and a partner cell \(j\), let \(w(i \to j)\) be the number of synapses from cell \(i\) to \(j\). The input fraction of \(j\) from \(T\) is the synapses that the cells of \(T\) send to \(j\) over all the synapses that \(j\) receives, from any cell \(k\) that connects to it:

\[ f(T \to j) = \frac{\sum_{i \in T} w(i \to j)}{\sum_{k} w(k \to j)}. \]

The numerator is \(s_{\mathrm{sum}}\) of the parent notebook, the column synapses. with_input_fraction adds the denominator as input and the ratio as input_fraction. A partner is strong when \(f(T \to j)\) is at least STRONG_FRACTION. The table keeps the proofread partners that are not LC cells, as the parent notebook does. The column s is the heaviest single connection, \(s_{\mathrm{max}}\).

_partners = labeled_partners(
    connections, census, proofread_ids, lateral_pattern=config.LATERAL
)
_inputs = load_connections_of(_partners["partner"].to_list(), end="post")
proofread_partners = proofread_nonlateral(
    with_input_fraction(_partners, _inputs)
)
proofread_partners
shape: (9_700, 11)
typepartnerssourcesynapsescellspartner_typeproofreadlateralinputinput_fraction
stri64i64i64i64u32strboolbooli64f64
"LC10a"720575940602964140172057594063050039422"SAD007"truefalse3240.006173
"LC10a"720575940604016608172057594062295066311"LPLC1"truefalse23860.000419
"LC10a"720575940604030176172057594062544230611"LTe48"truefalse19450.000514
"LC10a"720575940604121004172057594062650534911"LLPC1"truefalse7310.001368
"LC10a"720575940604188384172057594062868735411"Tm5c"truefalse2180.004587
……………………………
"LC9"720575940660758401172057594060531888011"Li08"truefalse4450.002247
"LC9"720575940661134465272057594061262710643"Li06"truefalse5910.006768
"LC9"720575940661244033272057594062474018521"TmY15"truefalse10090.001982
"LC9"720575940661318017272057594061783611753"LLPC3"truefalse7720.006477
"LC9"720575940661327745172057594061023073811"LTe09"truefalse3660.002732

Strong by either rule

The table counts, for each type, the partners that are strong by input fraction (STRONG_FRACTION), by the heaviest connection (STRONG_SYN), by both, and by one only.

_by_fraction = pl.col("input_fraction") >= STRONG_FRACTION
_by_weight = pl.col("s") >= STRONG_SYN
strong_counts = proofread_partners.group_by(
    "type", maintain_order=True
).agg(
    partners=pl.len(),
    median_input=pl.col("input").median(),
    by_fraction=_by_fraction.sum(),
    by_s_max=_by_weight.sum(),
    both=(_by_fraction & _by_weight).sum(),
    fraction_only=(_by_fraction & ~_by_weight).sum(),
    s_max_only=(~_by_fraction & _by_weight).sum(),
)
strong_counts
shape: (4, 8)
typepartnersmedian_inputby_fractionby_s_maxbothfraction_onlys_max_only
stru32f64u32u32u32u32u32
"LC10a"1733778.010685673918
"LC11"3127633.0126132755157
"LC16"2113704.0573528297
"LC9"2727708.07585611424

Each panel draws the partners of one type by the synapses the type sends them and the synapses they receive. The solid line is STRONG_FRACTION and the dashed lines the other cutoffs, so the partners above the solid line are strong by input fraction (in the color of the type) and the rest are gray. A ring marks a partner that is strong by the heaviest connection. A partner with more input sits further right, so the same number of synapses is a smaller fraction of it.

figure = input_fraction_figure(
    proofread_partners,
    TYPES_OF_INTEREST,
    cutoff_fraction=STRONG_FRACTION,
    cutoff_weight=STRONG_SYN,
)
figure.savefig(figure_path("lc_input_fraction.png"), dpi=150)
figure

Synapses at each cutoff

A cutoff on the input fraction asks for a different number of synapses from each partner. For each cutoff, the table gives the strong partners of each type and the median and the smallest number of synapses the type sends them.

_rows = [
    proofread_partners.filter(pl.col("input_fraction") >= _cutoff)
    .group_by("type", maintain_order=True)
    .agg(
        cutoff=pl.lit(_cutoff),
        strong_partners=pl.len(),
        median_synapses=pl.col("synapses").median(),
        fewest_synapses=pl.col("synapses").min(),
    )
    for _cutoff in FRACTION_CUTOFFS
]
synapses_at_cutoff = pl.concat(_rows).sort("type", "cutoff")
synapses_at_cutoff
shape: (12, 5)
typecutoffstrong_partnersmedian_synapsesfewest_synapses
strf64u32f64i64
"LC10a"0.02146103.51
"LC10a"0.05106166.511
"LC10a"0.174262.014
"LC11"0.0227434.53
"LC11"0.05126154.510
……………
"LC16"0.0557208.021
"LC16"0.141302.090
"LC9"0.02122161.01
"LC9"0.0575244.04
"LC9"0.148319.538

Discussion

Expectation 1: the two sets overlap, and each has members the other lacks. Every type has partners strong by both rules and partners strong by one only (Strong by either rule). The partners strong by input fraction only number 14 (LC9) to 51 (LC11), and those strong by the heaviest connection only number 7 (LC16) to 57 (LC11). The figure shows the cause. A partner with little input is strong by input fraction with few synapses from the type, at the left of each panel. A partner with much input can have a heavy connection and still receive a small share of its input from the type, so it is ringed and below the solid line.

Expectation 2: the synapses a strong partner receives differ. At STRONG_FRACTION, the fewest synapses a strong partner receives from the type ranges from 4 (LC9) to 21 (LC16), and the median ranges from 154.5 (LC11) to 244.0 (LC9). Raising the cutoff raises both (Synapses at each cutoff). A cutoff on the input fraction is therefore not a cutoff on synapses in disguise: a partner with little input can pass it with a handful of synapses.

Limitations

  • The input of a partner is the sum of the weights of the stored connections onto it. It is not checked against a count of the partner's postsynapses, which the paper's input fraction divides by.
  • The fraction is taken per partner cell. The paper averages it over the cells of the postsynaptic type, so a type whose cells differ in input could be strong in one form and not the other.
  • The table keeps proofread partners that are not LC cells. The effect of that choice is shown for the synapse-count strengths in the parent notebook and is not repeated here.
  • The paper supports the cutoff with the responses of medulla neurons. Nothing here tests that a partner strong by input fraction is functionally special in the central brain.

Open questions

  • Does the input fraction change the verdict of lc_pathways on convergence? Test: repeat its overlap of strong partners with the strong sets from this notebook at each cutoff. The question is refuted if the verdict is the same at all three.
  • Do the paper's type-level fractions pick the same partners as the per-cell fractions? Test: average the input fraction over the cells of each partner type and compare the strong sets. The question is refuted if the sets are the same.