Configuration
Manage experiments
The registry drives the menu. The checkbox on the left of each row hides an experiment just for you — it's stored in this browser only. The "everyone" toggle on the right actually commits the change to the registry, so it hides or shows the tile for every visitor once the site redeploys; that one needs an admin login.
Registered experiments
Start Here — Interactive Pipeline Walkthrough
Pipeline ·
confusion-matrix-by-family· scripts/build_experiment_confusion_matrix.pyOpen this one first. An interactive, click-through (or auto-play) flowchart of the entire ConnectionMiner pipeline — every input, every matrix it builds, what the solver does, every output. C, Ĉ, and β are live Plotly charts (hover any cell/dot for real type or gene names); every node explains what's on the x-axis, the y-axis, and what the pattern is actually telling you.
EveryoneMorphology — Motor
Morphology ·
morphology-motor· cm_motor/scripts/build_morphology_viewer.py3D viewer of the motor connectome's skeletons: 707 of the 730 C-matrix types have a local skeleton (the rest are absent from the cm730 bundle), 127,839 nodes after twig pruning and contraction. Orbit, zoom and pan; colour by population, side, depth or neuron; filter by side. Depth fog fades far branches toward the background and an optional slow spin adds parallax, so near and far arbors read apart.
EveryoneMorphology — Visual
Morphology ·
morphology-visual· cm_motor/scripts/build_visual_morphology_viewer.py3D viewer of FlyWire visual-system skeletons: a stratified sample of one neuron per type per side across all 741 types (1,399 skeletons, 326,698 nodes), drawn from 95,079 reconstructions. Sampling is by side so both optic lobes appear. Colour by subsystem, side, depth or neuron; depth fog and an optional slow spin make the 3D structure readable.
EveryoneUMAP + Confusion Matrix — per Family
Recovery Battery ·
umap-vs-confusion· scripts/build_umap_confusion_dashboard.pySame 4 recovery-battery conditions as the confusion-matrix experiment, but each confusion matrix is paired with a t-SNE/UMAP scatter of the underlying cells (green = predicted matches true type, red = mismatch). Hover any point for its predicted vs. true type.
EveryoneRecovery Battery — How It Works
Recovery Battery ·
recovery-battery-explainer· scripts/build_experiment_recovery_battery_explainer.pyThe flowchart for the *other* experiment in this hub — not the regular solver run, but the hide-30%-and-recover stress test. Walks through the 70/30 split, the two solver passes (connectivity-only vs. NC-gated expression), the shuffle-null scoring, and the YES/no/ANTI verdict — with real numbers (e.g. TmY: 10.7% → 94.6% recovery) at every step.
EveryoneReplication — Visual disp h2000 seed 0
Full Solver Run ·
replication-visual-disp2000-s0· scripts/build_solver_tabs_dashboard.pyThe grid’s rank-1 visual variant (3_dispersion_binned, h=2000, uniform init, seed 0) re-run end to end from a clean clone. Train r 0.6509 against the original 0.6590, but test r fell to 0.6044 from 0.6503 — a drop of 0.046, beyond the ~0.03 this codebase attributes to cuBLAS reduction order. The G-metacell null for the same variant is reported alongside. Rebuilt with the workbench dashboard (scripts/build_solver_tabs_dashboard.py), the same builder behind the site’s own visual pages — 14 matrix panels over 4 runs, the cell atlas, and 1,591 FlyWire skeletons (1,122 train / 469 test).
EveryoneReplication — Visual disp h2000 seed 1
Full Solver Run ·
replication-visual-disp2000-s1· scripts/build_solver_tabs_dashboard.pyThe rank-2 visual variant (seed 1), same protocol. This one reproduces closely — train r 0.6622 vs 0.6599, test r 0.6266 vs 0.6245, both within ±0.002. Read with seed 0: the original rank-1/rank-2 margin on d_test was 0.005 while seed 0 moved by 0.046 on re-run, so the two are tied at the run-to-run noise level and the published ordering does not reproduce. The G-metacell null for the same variant is reported alongside. Rebuilt with the workbench dashboard (scripts/build_solver_tabs_dashboard.py), the same builder behind the site’s own visual pages — 14 matrix panels over 4 runs, the cell atlas, and 1,591 FlyWire skeletons (1,122 train / 469 test).
EveryoneReplication — Motor seurat h2000 seed 0
Full Solver Run ·
replication-motor-seurat2000-s0· scripts/build_solver_tabs_dashboard.pyMotor's top-2 variant (2_seurat_vst, h=2000, uniform init, seed 0) re-run from a clean clone: train, test and the G-metacell null, 14 matrix panels over 4 runs. Both real numbers reproduce bit-exactly against the original — train r 0.723821420 and test r 0.435808603, to machine precision. The null arm is the substantive result: on train it is indistinguishable from the real fit (0.713 vs 0.724), so the train block's fit does not rest on G's metacell axis; the test gap of 0.068 is where the signal actually lives.
EveryoneReplication — Motor seurat h2000 seed 1
Full Solver Run ·
replication-motor-seurat2000-s1· scripts/build_solver_tabs_dashboard.pyThe other motor top-2 variant (2_seurat_vst, h=2000, uniform init, seed 1), same protocol: train, test and G-metacell null, 14 matrix panels over 4 runs. Reproduces bit-exactly — train r 0.723264675, test r 0.438981261. Here the train-side null scores slightly ABOVE the real fit (0.725 vs 0.723), which is the cleanest statement of the same point: permuting which metacell carries which transcriptome costs nothing on train. The test gap is 0.095.
EveryoneConnectome Atlas — Type Split (seurat_vst)
Full Solver Run ·
type-split-atlas-seurat-vst· type_split_study/build_combined_viewer.pyAll three blocks of the type-level 80/20 split of C on one page, with the FlyWire morphology behind every type. Switch between the held-out block (148 types, β frozen — every connection shown was predicted without the model seeing the block, r +0.588), the training block β was fitted on (593 types, r +0.670), and the whole 741-type catalogue solved in one piece on the same gene set (r +0.699). Hover the C matrix for a pair, or pick a type to light up its neurons in 3D along with its connectome partners. Test and train share no type and the catalogue is their union, so all three blocks are contiguous slices of a single shared skeleton pool in one global frame.
EveryoneLinked Explorer — All 25 Rebalanced Combos
Full Solver Run ·
linked-explorer-rebalanced-all25Same linked UMAP ↔ C ↔ Ĉ ↔ P ↔ P-constraints ↔ G ↔ β interaction as the Linked Connectome Explorer below, now available for all 25 gene-selection × metacell-generation combos from the rebalanced grid (real per-combo metacell counts, 3,780–6,695, instead of the old fixed ~6,650). Each combo gets its own real UMAP refit on that combo's own selected genes. The Ĉ panel is now animated — a slider/play button steps through 19 solver-iteration snapshots (every 5th iteration) plus the final converged frame, so you can watch the reconstruction sharpen as loss drops. Opens an index sorted by solver loss — click any row for that combo's full explorer.
EveryoneSolver Diagnostics — Rebalanced 25-Combo Grid
Full Solver Run ·
solver-diagnostics-rebalanced-25combosC, Ĉ, error (Ĉ−C), P, and β for all 25 gene-selection × metacell-generation combinations, after adding production's merge/re-split metacell rebalancing to the experiment harness (metacell counts now range 3,780–6,695 instead of a fixed ~6,650). Pick any combo from the sidebar — grouped and color-coded by gene method — to inspect its matrices and loss trajectory (hover for exact values). Reproduces the headline finding as a live scatter: raw_variance/binomial_deviance_approx keep genes type-specific but fit worse; seurat_vst_approx/trend_residual_approx/dispersion_binned fit better but flatten to near-uniform gene probabilities across types.
EveryoneUMAP + Matrix Heatmaps — Full Solver Run
Full Solver Run ·
solver-overview· scripts/build_experiment_solver_overview.pyThe regular (non-recovery-battery) end-to-end solver run, at full resolution — P and P Constraints across all 5,333 metacells, G across all 3000 genes, no subsampling. A UMAP paired with a tab-switcher for every matrix the solver produces or consumes; hover a UMAP point to highlight its type's row on the active tab, or hover a matrix cell to spotlight that type's cells on the UMAP.
EveryoneFamily Battery — All Complete-Picture Views
Recovery Battery ·
family-battery-all-in-oneEvery family's full 5-condition recovery battery in one self-contained document: Lamina, Lawf, Lamina+Lawf, Dm, Mi, Tm, TmY, T4, T5, C, LC and LPLC. Each view carries its own condition switcher, so the page runs standalone with no dependency on the hub.
EveryoneMotor ↔ Visual — Linked Dashboard
Full Solver Run ·
motor-visual-linkedCross-subsystem linked view tying motor-side types to visual-system types: selecting on one panel highlights the corresponding rows/columns on the other, so shared connectivity motifs between the two subsystems are directly comparable.
EveryoneC Matrix — Full vs. Visual Split Heatmap
Matrices ·
c-full-visual-split-heatmapThe complete connectivity matrix C rendered as a split heatmap: full network on one side, visual-system-only submatrix on the other, at matched color scaling so density differences between the whole brain and the visual subsystem are readable at a glance.
EveryoneAblation Explorer — Gene-Set Ablations
Ablations ·
ablation-explorerAll 10 gene-set ablations of the solver in one explorer: hvg_3000, hvg_5000, tfs_only, adhesion_only, interactome_only, tfs_adhesion, tfs_interactome, adhesion_interactome, all_three_union and all_three_hvg3000. Each run shows its gene count, matched cells, recovery r and final loss, with a three-panel linked view — hover any cell for its full record.
Everyone3-Stage Pipeline Overview — Linked UMAP Panels
Full Solver Run ·
three-panel-pipeline-overviewFlyWire visual system × ConnectionMiner in one linked three-panel UMAP view. Pan or zoom any panel and the other two follow on matched axes, so the same cells can be compared across all three pipeline stages side by side. Hover any point for its type.
EveryoneRaw MultiomeNN Clusters on UMAP
UMAP Views ·
raw-multiome-clustersStage 1 of the pipeline on its own: every cell placed on the UMAP and colored by its raw MultiomeNN cluster, before any connectome constraint is applied. This is the starting point the solver has to work from — hover any point for its cluster.
EveryoneCell Type Constraints (P support) on UMAP
UMAP Views ·
cell-type-constraintsStage 2: the same UMAP colored by the cell-type constraints the solver's P matrix supports — which connectome types each cell is still allowed to be after the constraint pass. Compare against the raw clusters view to see what the constraints buy you.
EveryoneMix Experiments — Actual vs. Predicted UMAP
UMAP Views ·
mix-experiments-umapDropdown-driven viewer over the mix experiments: for each run, the UMAP shows actual versus predicted assignment side by side with per-run stats, so agreement and failure regions are readable directly on the embedding.
EveryoneMetacell Selector
UMAP Views ·
metacell-selectorPick a metacell from the dropdown and every cell it denotes keeps its true color with a gold ring on top across all three panels at once, while everything else greys out. Split out from the three-panel tool so each does one thing.
EveryoneMetacell → Cluster Map
UMAP Views ·
metacell-cluster-umapEvery dot is a metacell, positioned at the UMAP centroid of its member cells and colored by its dominant subtype. Hover any metacell to see its raw cluster; pick a raw cluster to spotlight its individual cells alongside the metacells they collapsed into.
EveryoneCluster → Metacell Count Matrix
Matrices ·
cluster-metacell-matrix241 raw clusters × 5,310 metacells, block-diagonal by construction — confirms zero metacells span more than one cluster. Every one of the 5,310 metacells gets its own real column (no representative sampling), labeled m1..m5310, with cell counts labeled inside each block. Scroll to zoom, drag to pan, double-click to reset.
EveryoneLinked Connectome Explorer — UMAP ↔ C ↔ Ĉ ↔ P ↔ G
Full Solver Run ·
linked-connectome-explorerOne shared selection across every matrix the solver touches: click a cell in any panel and its type lights up everywhere else — row/column in C and Ĉ (true vs. reconstructed connectome), the row in G (per-type gene detection), and the row in P (soft per-metacell type assignment). Click a P column, a UMAP point, or pick a metacell from the dropdown, and its exact cells spotlight on the UMAP. Now also includes β (learned gene-gene interaction) as a static reference panel — it has no type/metacell axis, so it isn't linked to the shared selection.
EveryoneP × G — Type-Level Gene Expression (Post-Solve)
Matrices ·
type-gene-expression-postsolve· scripts/build_type_gene_expression_html.pyFor each of the 741 known cell types, its gene expression profile after the solve: P_refined @ G_metacell_p (741 types × 3,000 genes), types sorted alphabetically, genes sorted by descending variance. Drag to box-zoom into any region, double-click to reset, hover any cell for the exact type/gene/probability.
EveryoneP × G — Type-Level Gene Expression (Static 5,310-Metacell Build)
Matrices ·
type-gene-expression-static5310· scripts/build_type_gene_expression_matrix_static5310.pySame 741 types × 3,000 genes matrix, but built from the static, un-optimized P_meta prior (row-stochastic per metacell, not solver-refined) instead of P_refined — the 667 orphan-pool types collapse into near-identical rows here since nothing disambiguates them pre-solve. Useful as a baseline comparison against the post-solve version.
EveryoneP × Mᵀ — Inferred Type Mass on Raw Clusters
Matrices ·
p-x-cluster-matrixP_refined mapped onto the 241 raw MultiomeNN clusters via the cluster→metacell matrix: for each type, how much of its inferred mass lands in each raw cluster (741 types × 241 clusters). Hover any cell for the type, raw cluster, ground-truth label, and weighted mass.
EveryoneP × M′ — Type Mass per Cell
Matrices ·
p-x-m-primeP_refined expanded down to individual cells rather than metacells (741 types × 99,656 cells) — each cell inherits its metacell's soft type distribution.
EveryoneP × M′ — Proportional-Width Cell View
Matrices ·
p-x-m-prime-proportionalSame per-cell P × M′ matrix, column-normalized and drawn with cell columns width-proportional to their metacell (55,749 cells in named metacells | 43,907 non-named), so metacell size is visible directly in the layout.
EveryoneWiring vs. Distance — C, Soma & Neurite Matrices
Matrices ·
wiring-vs-distanceThree independent 741×741 matrices, same alphabetical type order on all axes so a row/column lines up across panels: C is the binary synaptic connectome (does type i synapse onto type j, both hemispheres pooled); d(soma) is the mean soma-to-soma Euclidean distance between every cell of type i and every cell of type j; d(neurite) is the true closest-approach distance instead — the minimum distance between any point on any neurite of type i and any point on any neurite of type j, using each cell's full traced SWC skeleton (95,079 skeletons) rather than just its cell body, so it reflects how close the actual axon/dendrite arbors get. Scroll or drag to zoom on any heatmap — full cell-type labels fill in as you get closer — or use the jump-to-type search box to zoom all three panels to the same neighborhood at once.
EveryoneMetacell Size Distributions — All 25 Combos
Matrices ·
metacell-size-histograms-25combosCells-per-metacell histogram for every gene-selection × metacell-generation combination in the rebalanced grid (real production merge/re-split logic, not a fixed target size). Metacell counts range 3,780–6,695 across combos — this shows the actual shape of that variation: most metacells are small (long right tail), and the tail's heaviness differs a lot by method — graph_ward_supercell and agglomerative_ward_full both show a sharp spike of very small metacells the other three methods don't. Dashed line marks the mean size per combo.
EveryonePhysical Terms vs. Gene Model
Matrices ·
physical-terms-vs-gene-modelTests whether extending the reconstruction formula (Chat = b0·gene_term + b2/d_soma + b3/d_neurite + b4·overlap_volume) with physical/spatial terms improves the fit to the true connectome C beyond the existing gene-expression model, across all 25 combos, with weights fit via non-negative-constrained least squares. Finding: b2 and b3 are zero in 25/25 combos, b4 is negligible in the 4/25 where it's nonzero — the gene-based reconstruction already correlates with neurite distance and overlap volume at r≈0.31–0.37 in every combo (gene-compatible types tend to be anatomically co-located), so it implicitly re-derives most of the physical proximity signal on its own.
Everyone