Architecture

The layers of a typical application are:

digraph architecture {
    rankdir=TB;
    node [shape=box];
    "Script or GUI" -> "Measure subclass";
    "Measure subclass" -> "MGraph";
    "MGraph" -> "Device drivers";
    "Device drivers" -> "Communication classes";
    "Measure subclass" -> "Autosave and history";
    "Measure subclass" -> "EUT monitor";
    "Measure subclass" -> "Report";
    "SCUQ" -> "Measure subclass" [style=dashed];
    "SCUQ" -> "MGraph" [style=dashed];
    "SCUQ" -> "Device drivers" [style=dashed];
}

Script or GUI

The operator layer loads configuration, creates or restores the measurement class, and starts measurement and evaluation. Qt applications move long hardware operations into worker threads.

Measure and measurement classes

Measure provides shared infrastructure for logging, user interaction, autosave, pickle history, device initialization, and safe shutdown. MSC, TEMCell, and AmplifierTest add their domain workflows.

MGraph

MGraph reads DOT topology, evaluates conditions with an explicit context, creates device instances, and calculates path corrections. Leveling and amplifier protection also use the measurement graph.

Device drivers and communication

Base drivers define the common API for a device class. Instrument-specific drivers map that API to SCPI or proprietary commands. Communication classes encapsulate GPIB, serial, Prologix, and other transports.

SCUQ

SCUQ carries nominal value, unit, uncertainty, and correlation through the calculation. mpylab’s centralized helpers convert between linear and logarithmic representations.