Experiment HubManage

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.

Checking admin session…

Register a new experiment

Registered experiments

  • Start Here — Interactive Pipeline Walkthrough

    Pipeline · confusion-matrix-by-family · scripts/build_experiment_confusion_matrix.py

    Open 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.

    Everyone
    Open
  • Morphology — Motor

    Morphology · morphology-motor · cm_motor/scripts/build_morphology_viewer.py

    3D 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.

    Everyone
    Open
  • Morphology — Visual

    Morphology · morphology-visual · cm_motor/scripts/build_visual_morphology_viewer.py

    3D 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.

    Everyone
    Open
  • UMAP + Confusion Matrix — per Family

    Recovery Battery · umap-vs-confusion · scripts/build_umap_confusion_dashboard.py

    Same 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.

    Everyone
    Open
  • Recovery Battery — How It Works

    Recovery Battery · recovery-battery-explainer · scripts/build_experiment_recovery_battery_explainer.py

    The 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.

    Everyone
    Open
  • Replication — Visual disp h2000 seed 0

    Full Solver Run · replication-visual-disp2000-s0 · scripts/build_solver_tabs_dashboard.py

    The 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).

    Everyone
    Open
  • Replication — Visual disp h2000 seed 1

    Full Solver Run · replication-visual-disp2000-s1 · scripts/build_solver_tabs_dashboard.py

    The 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).

    Everyone
    Open
  • Replication — Motor seurat h2000 seed 0

    Full Solver Run · replication-motor-seurat2000-s0 · scripts/build_solver_tabs_dashboard.py

    Motor'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.

    Everyone
    Open
  • Replication — Motor seurat h2000 seed 1

    Full Solver Run · replication-motor-seurat2000-s1 · scripts/build_solver_tabs_dashboard.py

    The 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.

    Everyone
    Open
  • Connectome Atlas — Type Split (seurat_vst)

    Full Solver Run · type-split-atlas-seurat-vst · type_split_study/build_combined_viewer.py

    All 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.

    Everyone
    Open
  • Linked Explorer — All 25 Rebalanced Combos

    Full Solver Run · linked-explorer-rebalanced-all25

    Same 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.

    Everyone
    Open
  • Solver Diagnostics — Rebalanced 25-Combo Grid

    Full Solver Run · solver-diagnostics-rebalanced-25combos

    C, Ĉ, 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.

    Everyone
    Open
  • UMAP + Matrix Heatmaps — Full Solver Run

    Full Solver Run · solver-overview · scripts/build_experiment_solver_overview.py

    The 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.

    Everyone
    Open
  • Family Battery — All Complete-Picture Views

    Recovery Battery · family-battery-all-in-one

    Every 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.

    Everyone
    Open
  • Motor ↔ Visual — Linked Dashboard

    Full Solver Run · motor-visual-linked

    Cross-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.

    Everyone
    Open
  • C Matrix — Full vs. Visual Split Heatmap

    Matrices · c-full-visual-split-heatmap

    The 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.

    Everyone
    Open
  • Ablation Explorer — Gene-Set Ablations

    Ablations · ablation-explorer

    All 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.

    Everyone
    Open
  • 3-Stage Pipeline Overview — Linked UMAP Panels

    Full Solver Run · three-panel-pipeline-overview

    FlyWire 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.

    Everyone
    Open
  • Raw MultiomeNN Clusters on UMAP

    UMAP Views · raw-multiome-clusters

    Stage 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.

    Everyone
    Open
  • Cell Type Constraints (P support) on UMAP

    UMAP Views · cell-type-constraints

    Stage 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.

    Everyone
    Open
  • Mix Experiments — Actual vs. Predicted UMAP

    UMAP Views · mix-experiments-umap

    Dropdown-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.

    Everyone
    Open
  • Metacell Selector

    UMAP Views · metacell-selector

    Pick 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.

    Everyone
    Open
  • Metacell → Cluster Map

    UMAP Views · metacell-cluster-umap

    Every 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.

    Everyone
    Open
  • Cluster → Metacell Count Matrix

    Matrices · cluster-metacell-matrix

    241 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.

    Everyone
    Open
  • Linked Connectome Explorer — UMAP ↔ C ↔ Ĉ ↔ P ↔ G

    Full Solver Run · linked-connectome-explorer

    One 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.

    Everyone
    Open
  • P × G — Type-Level Gene Expression (Post-Solve)

    Matrices · type-gene-expression-postsolve · scripts/build_type_gene_expression_html.py

    For 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.

    Everyone
    Open
  • P × G — Type-Level Gene Expression (Static 5,310-Metacell Build)

    Matrices · type-gene-expression-static5310 · scripts/build_type_gene_expression_matrix_static5310.py

    Same 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.

    Everyone
    Open
  • P × Mᵀ — Inferred Type Mass on Raw Clusters

    Matrices · p-x-cluster-matrix

    P_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.

    Everyone
    Open
  • P × M′ — Type Mass per Cell

    Matrices · p-x-m-prime

    P_refined expanded down to individual cells rather than metacells (741 types × 99,656 cells) — each cell inherits its metacell's soft type distribution.

    Everyone
    Open
  • P × M′ — Proportional-Width Cell View

    Matrices · p-x-m-prime-proportional

    Same 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.

    Everyone
    Open
  • Wiring vs. Distance — C, Soma & Neurite Matrices

    Matrices · wiring-vs-distance

    Three 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.

    Everyone
    Open
  • Metacell Size Distributions — All 25 Combos

    Matrices · metacell-size-histograms-25combos

    Cells-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.

    Everyone
    Open
  • Physical Terms vs. Gene Model

    Matrices · physical-terms-vs-gene-model

    Tests 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
    Open