Skip to content

B1 · Manual mode — lightsheet brightfield live view + acquire-safety#64

Closed
pskeshu wants to merge 13 commits into
feature/temperature-interfacefrom
feature/manual-mode-live-view
Closed

B1 · Manual mode — lightsheet brightfield live view + acquire-safety#64
pskeshu wants to merge 13 commits into
feature/temperature-interfacefrom
feature/manual-mode-live-view

Conversation

@pskeshu

@pskeshu pskeshu commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

Sub-project B1. Hand-driven imaging before automation.

  • SPIM brightfield live view (sequence acquisition), illumination control (LED/laser presets), galvo/piezo scan params.
  • 4 acquire-safety fixes (acquire-while-live collision, laser-on-acquire, default focal plane, laser-off enforcement).
  • Per-task + whole-branch (opus) reviewed.

Stack:feature/temperature-interface (A).

pskeshu added 13 commits June 28, 2026 12:06
…presets

Replace set_laser_power(488, 0) with set_laser_config("ALL OFF") in the
laser/off proxy route so the PLogic gate turns off every laser line, not
just the 488 nm setpoint (spec §2.7 brightfield safety).

Add device-layer handlers handle_set_laser_config / handle_get_laser_configs
(POST /api/laser/config, GET /api/laser/configs) calling
DiSPIMLightSource.set() / ._get_available_configs() on the laser_control
device (group_name="Laser"). Wire matching client methods set_laser_config /
get_laser_configs. Add unguarded GET /api/devices/laser/configs proxy route.
…uence-stop on kickoff, park-guard

C1: DiSPIMVolumeScanner.trigger() stops any running camera sequence before
startSequenceAcquisition — prevents MMCore collision when live streamer is
active (covers both acquire_single_volume_plan and burst_plan callers).

park-guard: _park_lightsheet_sync now fires set_spim_state("Idle") once per
stream session (not per frame) and calls setPosition only when the value
changed. Cuts 4 serial round-trips per frame to 0 on steady state.
_stop_lightsheet_sequence_sync resets the guard flags.

I1: acquire/burst + acquire/volume proxy routes forward optional laser_config
from body → client. JS runLightsheetAcquire sends laser_config:"ALL OFF" in
both bodies (brightfield-safe Manual-view acquire).

I2: proxy routes forward optional piezo_center + galvo_center; JS sends
piezo_center:_lsPiezo and galvo_center:_lsGalvo (galvo confirmed degrees via
sa_offset_y / configure_y_axis chain — same unit as live param).

I3: new setLaserOff() helper calls POST /api/devices/laser/off and updates
#devices-ls-laser-status from real API result. Called on switchView('manual')
and on toggleLightsheetStream start path.

exposure: _lsExposure default and HTML input value aligned to 20 ms (matches
device-layer _ls_params default).

Tests: 4 new proxy tests for laser_config+focal-plane forwarding; streamer
_make_dl seeds _ls_parked/_ls_spim_idle. All 22 target tests pass.
@pskeshu

pskeshu commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator Author

Superseded by #72 — the temperature + Operations/tactics suite and the new Operate (bottom-cam→SPIM) surface are consolidated onto feature/temperature-operations-all (now targeting development). This increment's work is included there; its feature branch was deleted. Closing to keep a single main PR.

@pskeshu pskeshu closed this Jul 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant