GUI components

Desktop applications and their responsibilities.

The desktop suite is built with PySide6 and shares a common visual language, theme and lifecycle model.

Architecture overview

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 --> PROC

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

ApplicationResponsibility
Operations ConsoleServices, tasks/processes/ports and device health in one window
Experiment BrowserExperiment selection, parameters, queue, scans, preparation and looper
DashboardInstrument defaults and parameter tuning by device group
Data ManagerHDF5 browsing, fits, image analysis and export
Stream MonitorLive data and message inspection
Image / Live / Scroll viewersCamera, ROI and real-time curve displays
TimelineFPGA/ADwin sequence visualisation
Device ManagerDevice database editing, driver catalogue and health checks
Property / Subscription / Auto-save editorsShared property tree and persistence policies
Settings HubNotifications, licence and low-frequency configuration
Task & Process MonitorRead-only task, process, endpoint and health observability

Design conventions

  • Every window can be opened independently or through the launcher.
  • Closing the launcher’s last window prompts for full application exit and stops all services.
  • Windows that create background work release it in closeEvent; hidden windows pause refresh timers rather than stopping data clients.
  • Help and About pages are per-window and bilingual.
  • The interface follows the operating system’s font scaling and light/dark appearance.

Extending the GUI

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.


Experiment browser

The Quatm main window: experiment browsing, queue management and a multi-window MDI workspace.

Experiment manager

The core experiment execution engine: takes tasks from the experiment queue and schedules them by measurement/sequence/run hierarchy.

Experiment queue

The task queue table panel: maintains priority ordering, status tracking and lifecycle management (pause/terminate/sleep/delete) of experiment tasks.

Preparation station

The staging and editing area for experiment parameters: preview, reorder and fine-tune tasks before they are pushed into the queue.

Looper

The conditional loop executor: decides automatically, from measurement results, whether to repeat, jump or end an experiment loop.

Experiment window

The per-experiment control window: dynamic parameter grid, submission/scanning and parameter persistence.

Parameter system

The BasicManager parameter-manager system: maps experiment properties to numeric, boolean, combo and frequency controls.

Property editor

A ParameterTree-based tool for viewing and editing properties.

Live plotting

A live plot item that subscribes to data streams and keeps updating, together with its widget container.

LED indicator

A status LED: green/red/cyan color schemes, radial gradients and lit/unlit appearances.

GUI base classes

BWidget, BMainWindow and BFrame: Qt base classes with geometry persistence and property communication.

Image monitor

A self-updating image display control: image/mask stream subscription, denoising and spot detection, level and ROI configuration.

Analysis manager

A tree-view panel: manages the start, stop, status monitoring and automatic restart of analysis scripts.

Stream monitor

Stream monitoring: multi-tab data/image/command/message monitoring and single-stream panels.

Sequence editor

Experiment code editing and sequence simulation: syntax highlighting, parsing and output-channel timing visualisation.

Process manager

A distributed process panel: starts and stops background processes grouped as Servers/Driver/GUI/Viewer/Monitor.

Device manager

PyVISA device discovery and driver binding: enumerate, query and select instruments and associate driver files.

Data storage

HDF5 data management: subscription, scheduled/manual saving and history read-back, with integrated plotting panels.

Live scroll plot

Live scrolling plots: ring buffers, running averages and data-stream subscription.

Auto-save editor

Editor for the list of automatic save times: configures a set of periodic save instants (checkbox + date-time).

Experiment helpers

Optical-tweezer alignment and stray-field compensation: a toolkit for automated calibration and optimisation.

Data models

DictSyncModel/ListSyncModel: maps Python dictionaries/lists onto Qt tables automatically.

Collapsible components

CollapsibleDialog: a collapsible/expandable tree dialog.

Parameter boxes

Input controls bound to experiment parameters: float, boolean and combo parameter boxes that write changes back immediately.

Experiment parameter panel

DefaultExp + Dashboard: a whole-device parameter control panel built automatically from the device database.

FPGA DAC control

A simple manual control interface for the FPGA: 16 DAC voltages and 32 TTL bitmask settings.

Background worker threads

Worker/WorkerSignals: a generic QRunnable background-task wrapper.

Experiment timeline

FPGA experiment timing visualisation: a chart viewer for DAC and TTL output channels against time.

Scroll window

A multi-channel real-time scrolling data viewer window: subplot buffers, data-stream subscription and dynamic refreshing.

Subscription editor

Manages the subscription list of data/image streams: adds, deletes and hot-updates subscribed sources.

Table parameter

A QTableWidget-based editor for numpy structured arrays, used in parameter trees.

Remote ROI

An ROI component that publishes color/position/size through the central property database and can be synchronised remotely.

Image viewer

The scientific image viewing main window: a central image display with row/column profile and histogram LUT dock panels.

Property checker

A property-distribution watchdog: verifies that the Properties hub is really broadcasting updates.

Data plotter

A general-purpose measurement data plotting component: data source/multiple y axes, filtering, binning and fitting.