Bridge family · qcodes

OpenMHS family: qcodes

QCoDeS instruments through QcodesDriver

Recipe published26 packageshardwaresimulated
On this page 9 sections
  1. Launch
  2. Registry coverage
  3. Applicability
  4. Capability mapping
  5. Safety
  6. Fidelity
  7. Pitfalls
  8. First task cards
  9. Sources

QCoDeS instruments through QcodesDriver

Generated by MHS/registry/build_registry.py on 2026-10-20T00:00:00Z from 26 registry records and their task cards. A plan, not a conformance claim.

  • bridge_status: available
  • helper: QcodesDriver
  • exemplar: MHS/drivers/labs/qcodes__qcodes_contrib_drivers

Launch

Every driver package starts the same way; per-repo configuration (environment id, model path, port, baud rate, VISA resource) lives in the package's driver.py, never in launch flags:

text
mhs serve <driver-dir>

A package is done when python3 -m mhs.driver check <driver-dir> --backend fake exits 0 (evidence contract_checked; a fake never yields an MHS-Device level).

Registry coverage

  • Repos: 26
  • Decisions: bridge-runtime 2, family-config 3, reference 4, skip 17
  • Waves: 3: 1, 5: 2, 9: 23
  • Dispatchable now: 0
  • Modes: hardware 6, simulated 4

Applicability

QCoDeS instrument classes: triage rule 9, family:qcodes. QcodesDriver is a configuration-only helper over the Python-object bridge. Each field is a Field in parameters plus one parameter_bindings entry: parameter (the attribute path of a Parameter), get: True, set (equal to Field.writable), timeout_ms (1..60000) and source_ref (the path:LINE[-END] of its constructor). Gate G7 proves a self.<name> = Parameter(...) assignment in __init__ of the card's entry class or its in-clone ancestry, with Parameter imported from qcodes.parameters and an explicit get_cmd (and set_cmd for a write); a same-file factory needs factory_ref. Parameters created by add_parameter, channel lists, submodules or dynamic factories are not provable today, and most QCoDeS drivers use add_parameter: such a card stops blocked with the G7 finding QCODES_PARAMETER_SOURCE.

The PM100D exemplar serves a Thorlabs PM100D optical power meter (R1): seven Parameters, two writes through cap.device.configure.v1 (one Limit.operator_required), the stop write("ABOR") (the abort command the source sends before it re-initializes a measurement), and a source-cited reason for every Parameter it does not serve. The QCoDeS driver guide gives the complete contract.

Capability mapping

native callOpenMHS targetnotes
Parameter.get()a parameters Field and a parameter_bindings entry with get: Trueevery read is a new native get; cache and get_latest are never substituted
Parameter.set(value)a writable Field (set: True), served as cap.device.configure.v1the whole setter is awaited, steps and delays included; a QCoDeS validator becomes a sourced Limit only where it bounds the device, else Limit.operator_required
Parameter unit, scale, get_parser, val_mappingthe Field's type and unit follow what get() returns after the parsersa unit OpenMHS does not know (dB) goes into the description, not unit; a scale without a get_parser makes the upstream get fail on the reply string
the instrument's write() / ask()a native stop: safety_bindings.estop with invoke: write and a stop or abort command the source itself sendsthe stop shares the VISA session with a running call; prefer a write that expects no reply
Instrument.close()native_close = "close"teardown, never a capability
construction with a VISA addresslifecycle: the native.py factoryQCoDeS constructors talk to the instrument before they return; disclose those commands
add_parameter, channels, submodules, ArrayParameternot expressibleG7 reports QCODES_PARAMETER_SOURCE or QCODES_UNDECLARED_MEMBER: stop blocked

Class ids come from python3 -m mhs.driver catalog search <words>. The deprecated classes cap.device.describe.v1, cap.world.state.v1, cap.world.snapshot.v1 and cap.world.restore.v1 are replaced by the protocol methods mhs.devices.get, mhs.resource.read, mhs.snapshot and mhs.restore.

Safety

The risk floor of a device is the highest catalogue risk_class of its classes (CAP-017); a driver may declare a higher risk, never a lower one. Hardware at R1 or above needs a native stop (safety_bindings.estop) and a non-empty safe state. Sources, heaters, magnets and RF outputs: parameter validators are not safety limits, risk follows the hazard table of the safety specification, and a model-authored R2 or R3 package never runs its hardware backend before a human signs reviewed_by. Cancelling a Parameter set is not a stop acknowledgement.

Fidelity

A source-shaped fake holds one stand-in per bound Parameter (get(), and set() where the upstream has a set_cmd) plus the instrument methods the driver calls, with placeholder values typed as the upstream parsers return them. It yields contract_checked evidence only: VISA timing, SCPI error queues and instrument state machines are not modelled.

Pitfalls

Contributed drivers vary in quality: check every parser, scale and set_cmd placeholder against the source. A MEAS:...? read reconfigures the instrument; a constructor that writes settings belongs to the hardware factory, not to a capability.

First task cards

  • gh.qcodes/qcodes_contrib_drivers: family-config, wave 3, rank 17, MHS/registry/tasks/labs/qcodes__qcodes_contrib_drivers.json
  • gh.aalto-qcd/qickodes: family-config, wave 5, rank 9, MHS/registry/tasks/labs/aalto-qcd__qickodes.json
  • gh.qcoherence/qcodes-drivers: family-config, wave 5, rank 44, MHS/registry/tasks/labs/qcoherence__qcodes-drivers.json
  • gh.microsoft/qcodes: bridge-runtime, wave 9, rank 24, MHS/registry/tasks/labs/microsoft__qcodes.json
  • gh.sldesnoo-delft/q1simulator: bridge-runtime, wave 9, rank 71, MHS/registry/tasks/labs/sldesnoo-delft__q1simulator.json

Sources

  • Task cards: MHS/registry/tasks/<track>/<owner>__<repo>.json (schema/taskcard.schema.json).
  • Triage rules and the helper table: MHS/registry/triage.py; curated decisions: MHS/registry/overrides/.
  • Driver API and gate: MHS/sdk/docs/driver-authoring.md; exemplars: MHS/drivers/.
  • QCoDeS driver contract and driver authoring.
  • PM100D exemplar fake, tests, source facts and result/evidence scope.

Packages

Top 24 of 26 by stars. Filter the full list.

PackageTierRingEvidenceStars
microsoft/qcodes
microsoft/qcodes: DAQ and electronic measurement model for microscopy imaging; optics; electronic measurement and DAQ (l
Tier A3agent read463
bluesky/bluesky
bluesky/bluesky: experiment orchestration for microscopy imaging; optics; electronic measurement and DAQ (lab instrument
Tier D3agent read242
dicarlolab-delft/pycqed_py3
dicarlolab-delft/pycqed_py3: orchestration/scheduling for physics (lab instrumentation track). OpenMHS plan: reference o
Tier D3static scan74
qcodes/qcodes_contrib_drivers
qcodes/qcodes_contrib_drivers: instrument SDK for microscopy imaging; optics; electronic measurement and DAQ (lab instru
Tier B1contract checked69
toolsforexperiments/plottr
toolsforexperiments/plottr: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not
Tier D3static scan55
rubenknex/qtplot
rubenknex/qtplot: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not integrated
Tier D3static scan14
toolsforexperiments/instrumentserver
toolsforexperiments/instrumentserver: protocol implementation/bridge for electronic measurement (lab instrumentation tra
Tier D3static scan13
qcodes/broadbean
qcodes/broadbean: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not integrated
Tier D3static scan10
aalto-qcd/qickodes
aalto-qcd/qickodes: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: family-config w
Tier B3static scan9
jonaskoelzer/qcodes-tutorials
jonaskoelzer/qcodes-tutorials: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: n
Tier D3static scan7
qutech/qumada
qutech/qumada: orchestration/scheduling for electronic measurement (lab instrumentation track). OpenMHS plan: reference
Tier D3static scan7
andncl/arbok_driver
andncl/arbok_driver: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: not integrated
Tier D3static scan6
knalj/qcodesgui
knalj/qcodesgui: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not integrated
Tier D3static scan5
sldesnoo-delft/q1simulator
sldesnoo-delft/q1simulator: quantum electronic pulse sequence simulation for microscopy imaging; optics; electronic meas
Tier A3static scan5
andncl/arbok_inspector
andncl/arbok_inspector: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not inte
Tier D3static scan4
decs-visa/qcodes_contrib_drivers
decs-visa/qcodes_contrib_drivers: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: n
Tier B3static scan2
levylabpitt/levylab-qcodes
levylabpitt/levylab-qcodes: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not
Tier D3static scan2
qcoherence/qcodes-drivers
qcoherence/qcodes-drivers: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: family-c
Tier B3static scan2
qnlsydney/qcodes_measurements
qnlsydney/qcodes_measurements: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: n
Tier D3static scan2
knightforest/qctools
knightforest/qctools: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not integr
Tier D3static scan1
ku-do-lab/peppermint
ku-do-lab/peppermint: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not integr
Tier D3static scan1
qcodes/qcodes_loop
qcodes/qcodes_loop: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not integrat
Tier D3static scan1
qcodespp/qcodespp
qcodespp/qcodespp: control framework for electronic measurement (lab instrumentation track). OpenMHS plan: not integrate
Tier D3static scan1
bluesky/bluesky-queueserver
bluesky/bluesky-queueserver: orchestration/scheduling (lab instrumentation track). OpenMHS plan: reference only (host).
Tier D3static scan0