Experiment browser
The Quatm main window: experiment browsing, queue management and a multi-window MDI workspace.
The desktop suite is built with PySide6 and shares a common visual language, theme and lifecycle model.
The Experiment Browser is the main window: FileSelector opens experiment scripts, the central QMdiArea hosts one or more ExperimentWindow panes, and the top dock area manages the experiment queue, preparation station and looper. ExperimentManager is the execution engine that consumes tasks and drives each run through its lifecycle.
flowchart TB
subgraph Browser[Experiment Browser - main window]
FS[FileSelector<br/>experiment file tree]
MDI[QMdiArea<br/>experiment pane container]
EW[ExperimentWindow<br/>single-experiment control]
DOCKS[Top dock area<br/>queue / preparation / looper]
FS --> MDI
MDI --> EW
DOCKS --> MDI
end
EM[ExperimentManager<br/>execution engine]
QUEUE[Experiment queue / scans]
PROC[Process Manager]
EW --> EM
DOCKS --> EM
EM --> QUEUE
EM --> PROCExperimentWindow owns the parameter panel, submission and scan entry points. ExperimentManager does not draw the UI; it consumes tasks from the queue and tracks their run state. The Process Manager starts and supervises the independent GUI, driver and service processes.
| Application | Responsibility |
|---|---|
| Operations Console | Services, tasks/processes/ports and device health in one window |
| Experiment Browser | Experiment selection, parameters, queue, scans, preparation and looper |
| Dashboard | Instrument defaults and parameter tuning by device group |
| Data Manager | HDF5 browsing, fits, image analysis and export |
| Stream Monitor | Live data and message inspection |
| Image / Live / Scroll viewers | Camera, ROI and real-time curve displays |
| Timeline | FPGA/ADwin sequence visualisation |
| Device Manager | Device database editing, driver catalogue and health checks |
| Property / Subscription / Auto-save editors | Shared property tree and persistence policies |
| Settings Hub | Notifications, licence and low-frequency configuration |
| Task & Process Monitor | Read-only task, process, endpoint and health observability |
closeEvent; hidden windows pause refresh timers rather than stopping data clients.Reusable building blocks live under quatm/GUI/widgets and quatm/GUI/infra. Project-specific windows belong in the project’s GUI/ directory and are registered in configfile.json. The application identity table controls window names, icons and desktop launchers.
The Quatm main window: experiment browsing, queue management and a multi-window MDI workspace.
The core experiment execution engine: takes tasks from the experiment queue and schedules them by measurement/sequence/run hierarchy.
The task queue table panel: maintains priority ordering, status tracking and lifecycle management (pause/terminate/sleep/delete) of experiment tasks.
The staging and editing area for experiment parameters: preview, reorder and fine-tune tasks before they are pushed into the queue.
The conditional loop executor: decides automatically, from measurement results, whether to repeat, jump or end an experiment loop.
The per-experiment control window: dynamic parameter grid, submission/scanning and parameter persistence.
The BasicManager parameter-manager system: maps experiment properties to numeric, boolean, combo and frequency controls.
A ParameterTree-based tool for viewing and editing properties.
A live plot item that subscribes to data streams and keeps updating, together with its widget container.
A status LED: green/red/cyan color schemes, radial gradients and lit/unlit appearances.
BWidget, BMainWindow and BFrame: Qt base classes with geometry persistence and property communication.
A self-updating image display control: image/mask stream subscription, denoising and spot detection, level and ROI configuration.
A tree-view panel: manages the start, stop, status monitoring and automatic restart of analysis scripts.
Stream monitoring: multi-tab data/image/command/message monitoring and single-stream panels.
Experiment code editing and sequence simulation: syntax highlighting, parsing and output-channel timing visualisation.
A distributed process panel: starts and stops background processes grouped as Servers/Driver/GUI/Viewer/Monitor.
PyVISA device discovery and driver binding: enumerate, query and select instruments and associate driver files.
HDF5 data management: subscription, scheduled/manual saving and history read-back, with integrated plotting panels.
Live scrolling plots: ring buffers, running averages and data-stream subscription.
Editor for the list of automatic save times: configures a set of periodic save instants (checkbox + date-time).
Optical-tweezer alignment and stray-field compensation: a toolkit for automated calibration and optimisation.
DictSyncModel/ListSyncModel: maps Python dictionaries/lists onto Qt tables automatically.
CollapsibleDialog: a collapsible/expandable tree dialog.
Input controls bound to experiment parameters: float, boolean and combo parameter boxes that write changes back immediately.
DefaultExp + Dashboard: a whole-device parameter control panel built automatically from the device database.
A simple manual control interface for the FPGA: 16 DAC voltages and 32 TTL bitmask settings.
Worker/WorkerSignals: a generic QRunnable background-task wrapper.
FPGA experiment timing visualisation: a chart viewer for DAC and TTL output channels against time.
A multi-channel real-time scrolling data viewer window: subplot buffers, data-stream subscription and dynamic refreshing.
Manages the subscription list of data/image streams: adds, deletes and hot-updates subscribed sources.
A QTableWidget-based editor for numpy structured arrays, used in parameter trees.
An ROI component that publishes color/position/size through the central property database and can be synchronised remotely.
The scientific image viewing main window: a central image display with row/column profile and histogram LUT dock panels.
A property-distribution watchdog: verifies that the Properties hub is really broadcasting updates.
A general-purpose measurement data plotting component: data source/multiple y axes, filtering, binning and fitting.