feat(operate): calibration gets its own pane (#108) - #158
Merged
Conversation
Calibrate was a button in the SPIM head's status bar, and its result appeared
in a different tab entirely. Ryan, 25:30 on the 2026-08-07 walkthrough: "after
setting up the bottom camera and SPIM head, I feel like I'm not quite sure what
to do in gently at this point." There was no next step on screen, because the
next step was a button in the corner of the step before.
His own description of the order is the pane order, so that is the order:
Bottom cam → SPIM head → Calibration → Acquisition
The pane declares its method before running it — Kesavan on the same call: "it
should show what is the method it is going to use to calibrate." There is one
method on this rig, so it is named rather than offered as a choice, and the
text says the part that matters: it needs the laser, because the LED alone
gives a DIC-like image with no nuclei to find. That is the confusion gently-project#106 turns
on, written where the button is.
It carries the Calibrate button, the selected embryo, the fit readout, and the
focus-sweep montage — which previously appeared under the SPIM head while the
button that produced it was also there but the result was elsewhere. Control,
evidence and result in one place.
Leaving the pane closes the LED. `calibrateSelected` never did, which is half
of gently-project#106; the pane's `onLeave` does it the same way the SPIM pane does.
## The rail says which embryos still need it
`RosterPanel` gains `showFit`, reading the same field the server-side gate
checks — a finite non-zero `slope_um_per_deg`. The shared rail sits beside every
pane, so `CAL` / `UNCAL` is visible wherever you are. An operator now sees what
a run will refuse before reaching Start, rather than discovering it there.
Muted rather than red: an uncalibrated embryo is one you have not got to yet,
not an error.
## Also
`PANE_ORDER` is one list. It used to be spelled out in `showPane` and again in
`showPaneInitial`, so adding a pane meant remembering both — and three stray
double `publishRoster()` calls left by the roster rename are collapsed.
JUDGEMENT CALL: Kesavan raised on the walkthrough whether one embryo's
calibration should apply to all of them, or each should carry its own. That is
a real question about the experiment, not the interface, so the pane is built
per-embryo — matching what `calibrate_embryo` already does — and the question
is left open rather than answered by a layout.
Verified live: subtab order, the pane showing while the others hide, Calibrate
and the montage host moved, the SPIM bar no longer carrying either, the fit
readout reading "96.4 µm/deg · R² 0.91" for a calibrated embryo and "not
calibrated" for one without, and the rail badges tracking both.
Audit finding: gently-project#108, and the dead end at 25:30.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Judgement call, flagged
Kesavan raised on the walkthrough whether one embryo's calibration should apply to all of them, or each should carry its own. That is a question about the experiment, not the interface — so the pane is built per-embryo, matching what
calibrate_embryoalready does, and the question is left open rather than answered by a layout.Calibrate was a button in the SPIM head's status bar, and its result appeared in a different tab entirely.
There was no next step on screen, because the next step was a button in the corner of the step before. His own description of the order is now the pane order:
Bottom cam → SPIM head → Calibration → Acquisition
The pane
Declares its method before running it — Kesavan, same call: "it should show what is the method it is going to use to calibrate." One method on this rig, so it is named rather than offered as a choice, and the text says the part that matters: it needs the laser, because the LED alone gives a DIC-like image with no nuclei to find. That is the confusion #106 turns on, written where the button is.
It carries the Calibrate button, the selected embryo, the fit readout, and the focus-sweep montage — which previously appeared under the SPIM head while the result lived elsewhere. Control, evidence and result in one place.
Leaving the pane closes the LED.
calibrateSelectednever did, which is half of #106.The rail says which embryos still need it
RosterPanelgainsshowFit, reading the same field the server-side gate checks (a finite non-zeroslope_um_per_deg). The shared rail sits beside every pane, soCAL/UNCALis visible wherever you are — an operator sees what a run will refuse before reaching Start rather than discovering it there.Muted, not red: an uncalibrated embryo is one you haven't got to yet, not an error.
Also
PANE_ORDERis one list — it used to be spelled out inshowPaneand again inshowPaneInitial, so adding a pane meant remembering both. And three stray doublepublishRoster()calls left by the roster rename are collapsed.Verified live
Subtab order · pane shows while others hide · Calibrate and the montage host moved · SPIM bar carries neither · fit readout reads
96.4 µm/deg · R² 0.91for a calibrated embryo andnot calibratedfor one without · rail badges track both.