You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Per-control reference for the STIMscope Qt interface. Organized by the
surface the control appears on (main button bar, then each dialog /
sub-window) — not by workflow, because operators combine these features
in whichever order their experiment requires.
For the capability framing (what each feature is for), see
Features. For the architectural view, see
Architecture.
Tooltips in the running GUI are authoritative. If this page disagrees
with a tooltip, the tooltip wins — file a doc PR to update this page.
Main button bar
The always-visible control surface at the top / side of the main window.
Buttons grouped here by function. Physical layout in the GUI may differ.
Acquisition + recording
Control
Type
Action
Camera Type
dropdown
IDS_Peak / MIPI / Generic Camera
Start Hardware Acquisition
toggle button
Acquire images via hardware trigger rather than RT mode. Tooltip surfaces the hardware-trigger fps behavior; defined in qt_interface_mixins/button_bar.py.
Snapshot
button
Save the next processed frame as a single image.
Start Recording
toggle button
Start/Stop recording video of the live feed to TIFF.
View Recording
button
Open a saved TIFF in an in-app viewer with frame slider + auto-contrast.
Open in External Viewer
button
Open the most recent saved TIFF in the system default image viewer.
Rotate 90°
button
Cycle camera preview rotation through 0° → 90° → 180° → 270° (display only, NOT projection).
Camera Flip H
checkbox
Mirror camera preview horizontally (affects display + recording).
Camera Flip V
checkbox
Mirror camera preview vertically (affects display + recording).
Projection engine + masks
Control
Type
Action
Start Projection Engine
toggle button
Spawn/kill the C++ projector engine subprocess; binds the ZMQ ports defined in CS/core/projector.py (mask, homography, status).
Project ON
button
Begin pattern display (engine must be running).
Project OFF
button
Stop pattern display without stopping the engine.
Send Masks
toggle button
Start/Stop streaming masks over ZMQ to the projector.
Per-pattern GPIO output for downstream sync. The line is set at projector-engine startup; env-configurable via STIM_PROJ_LINE (see Portability).
LED Color
dropdown
DMD Illumination Select (I²C 0x96 byte 3) for the initial pattern at Start Projector Trigger. Items + raw bytes defined in button_bar.py (_led_color_dropdown).
Sequence Type
dropdown
Pattern sequence type.
Projection Mode
dropdown
How red (stim) and blue (observe) masks are presented — Simultaneous (Mode B) (R+B sub-frame multiplexing) or Temporal (Mode A) (alternating RED ↔ BLUE per frame).
Mask Flip H
checkbox
Flip the outgoing DMD mask horizontally. Auto-restarts the mask sender.
Mask Flip V
checkbox
Flip the outgoing DMD mask vertically. Auto-restarts the mask sender.
Switch projection through the structured-light LUT.
ASIFT Calibration
button
Compute 3×3 H using Affine-SIFT, apply to projector. Requires Calibrate to have run first; warns otherwise.
REQ H-Matrix
button
Send the current 3×3 calibration to the engine over the ZMQ homography sideband (default endpoint in CS/core/projector.py).
REQ LUT
button
Send the structured-light LUT to the engine over ZMQ.
Camera tuning
Control
Type
Action
Set Trig Params
button
Open dialog to configure TriggerDelay (µs) + ExposureTime (µs) together.
Sensor Settings
button
Open low-level GenICam node panel (gain, contrast, gamma, exposure).
Diagnostics
Control
Type
Action
Pixel Probe
button
Project a single bright pixel; verify camera sees it where calibration predicts.
Enable Overlay
toggle button
Toggle the camera-on-projection overlay.
I²C Burst Sender
button
Open dialog for arbitrary DLPC3479 opcode bursts.
Troubleshooting
button
Open the troubleshooting menu (engine monitor, LUT diagnostics, single-pixel probe, etc.).
Workflow entry points
Control
Opens
Offline Setup
The five-panel A–E offline segmentation dialog.
Trace Test
The trace-test sub-window for live ROI fluorescence testing.
Real-Time Trace Extraction
The GPU UI window with per-ROI live plots.
Status indicators
The button bar surfaces several non-clickable indicators with tooltips:
"Current Acquisition Mode"
"Projector connection status"
Calculated FPS indicator (label FPS: N; defined in
qt_interface_mixins/window_lifecycle.py
via GUIfps_label — rolling average over the last ~2 s, refreshed
every 250 ms by a QTimer; read-only display label, not interactive)
Sensor Settings dialog
Opened via Sensor Settings. Live tweaks for the camera's exposed
GenICam controls.
Control
Type
Notes
Analog Gain
slider + label
"Adjust the analog gain level (brightness)."
Digital Gain
slider + label
"Adjust the digital gain level."
Exposure (µs)
slider + numeric
Exposure in microseconds. Live readback on dialog open from the camera's current ExposureTime node. Default range / step defined in qt_interface_mixins/sensor_settings.py.
Exposure entry
line edit
"Type exposure in µs and press Enter."
Hardware Contrast
label + control
"Hardware Contrast (camera control). 1.0 is neutral on most cameras." (only if the camera exposes the node)
Hardware Gamma
label + control
"Hardware Gamma (brightness curve). 1.0 is neutral; <1 brightens, >1 darkens." (only if the camera exposes the node)
Contrast unavailable note
label
"Contrast not exposed by camera; consider a software preview option if needed." (shown when the node is absent)
Set
button
Commit slider values to the camera.
Close
button
Dismiss.
Set Trig Params dialog
Opened via Set Trig Params. Configures the camera's TriggerDelay (µs)
ExposureTime (µs) together for hardware-triggered acquisition.
Control
Type
Action
Blue sub-frame
preset button
Apply preset matching a color-DMD 8-bit sub-frame. Delay/exposure values are in the button label rendered by the GUI; defined in qt_interface_mixins/trig_params.py.
Full frame
preset button
Apply preset matching one full DMD frame. Delay/exposure values are in the button label rendered by the GUI; defined in trig_params.py.
Enable TriggerDelay (µs)
checkbox
Toggle TriggerDelay control.
TriggerDelay manual entry
line edit
Override preset.
Enable ExposureTime (µs)
checkbox
Toggle ExposureTime control.
ExposureTime manual entry
line edit
Override preset.
Activation dropdown
combobox
RisingEdge / FallingEdge / LevelHigh / LevelLow
Trigger Source dropdown
combobox
Line0 / Line1 / Line2 / Line3
Apply
button
Commit values to camera.
Close
button
Cancel without applying.
I²C Burst Sender dialog
Opened via I²C Burst Sender. Send arbitrary DLPC3479 opcode bursts for
manual DMD configuration.
Control
Type
Tooltip / Action
I²C bus number
spin/entry
Configurable. Default for the DMD on Jetson AGX Orin documented in docs/PORTABILITY.md.
I²C 7-bit address
spin/entry
"7-bit I²C address. DLPC3479 = 0x1B."
Burst editor
text area
Type or load multi-byte opcode sequences.
Template dropdown
combobox
"Replace burst editor contents with the selected template."
Load
button
Load opcodes from a .json / .txt file.
Bytes to read
spin
"Bytes to read."
Read Once
button
"Read N bytes from the given opcode and append result to the log."
Send All (atomic burst)
button
Send the queued sequence in one I²C transaction.
Clear Log
button
Clear the response log panel.
Close
button
Dismiss.
Offline Setup dialog
Opened via Offline Setup. Five panels A–E for turning a recorded TIFF
stack into an ROI mask file.
A. Recording Selection
Control
Type
Action
Load Recording
button
Pick a TIFF stack.
Convert-to-TIFF checkbox
checkbox
"Convert loaded video to TIFF for faster reloading."
Projection type
dropdown
Mean / Max / Std Dev / Mean + Std.
Compute Projection
button
Run the projection.
Save as TIFF
button
Export the projection. Tooltip: "Save the current calibration preview image at original resolution in .tiff format."
B. Segmentation
Control
Type
Tooltip
Method
dropdown
Otsu / Cellpose
Min area
spin
"Minimum ROI area as fraction of image (filter tiny noise)."
Max area
spin
"Maximum ROI area as fraction of image (filter large blobs)."
Blur kernel
spin
"Gaussian blur kernel size (odd number, larger = more smoothing)."
Blur sigma
spin
"Gaussian blur sigma (larger = more smoothing)."
Fill holes
spin
"Fill holes smaller than this fraction of image area."
Watershed splitting
checkbox
"Split large merged ROIs using watershed algorithm."
Cell diameter (Cellpose)
spin
"Expected cell diameter in pixels (0 = auto-estimate)."
One-shot GPIO trigger pulse for scope verification.
Start Engine Monitor
Live readout of projector engine state (current pattern, GPIO state).
Projector Trigger: OFF indicator
Read-only status pill (defined disabled in troubleshoot.py — setEnabled(False)). Text + background-color update automatically when the engine asserts per-pattern triggers; not user-clickable.
LUT-based diagnostics
Control
Action
LUT Diagnostics
Sanity-check the structured-light LUT.
Project Grid (LUT)
Project a known grid through the LUT.
Capture + Evaluate
Project + capture + measure pixel error vs. predicted.
Project a grid through the 3×3 H matrix (instead of the LUT).
Capture + Evaluate (H)
Capture + evaluate via H matrix path.
Dot Array Test (H)
Dot array test via H matrix path.
Calibration projector dialog
Control
Tooltip
Grid cell size
"Grid square size in camera pixels"
Grid spacing
"Center-to-center spacing of squares; must be >= Cell"
Conventions
Toggle buttons show the current action in the label —
Start Recording ↔ Stop Recording, Start Hardware Acquisition ↔
Stop Hardware Acquisition, Start Projection Engine ↔
Stop Projection Engine, Send Masks ↔ Stop Sending Masks,
Start Projector Trigger ↔ Stop Projector Trigger.
Disabled controls indicate a missing prerequisite (camera not
acquiring, engine not started, ROI file not loaded, etc.). Hover for
the tooltip surfacing the gap.
Independence of camera vs mask flips — flipping the camera
preview does NOT flip the projection mask, and vice versa. Tooltips
make this explicit on each control.
Tooltips are source-of-truth. If this page disagrees with the
in-GUI tooltip, the tooltip wins.
The status bar at the bottom of the main window shows the most
recent operation result + any non-fatal warnings.