capa¶
Control and DAQ for a custom controlled-atmosphere pyrolysis lab instrument (cone-calorimeter-class). capa drives a heterogeneous rig — NI-DAQ, Watlow heaters, Alicat mass-flow controllers, Sartorius balances, USB and FLIR IR cameras — through async-first device libraries, records every run as a self-contained on-disk bundle, and treats research workflows (calibrations, custom routines) as first-class plugins.
Pre-alpha
The public surface of capa.runtime, capa.devices, and
capa.config is unstable. Pin to a commit.
Pick a path¶
-
I'm new — give me a feel for it
First sealed bundle in about five minutes, no hardware required. Walks you from launch to a finished run on the built-in simulator.
-
I'm setting up a real rig
Hardware install, first wiring, your first real bundle. Then the daily cadence and where to look when something feels off.
-
I run experiments here every day
The operator handbook, the Setup / Run / Method tabs, the manual controls, and how to abort safely.
-
I'm reading a finished bundle
What's in the directory, how to read the parquet and sqlite files, and how to verify a bundle is sealed and intact.
-
I want to write a plugin
Procedures, profiles, device adapters, custom sinks, and method steps — all of these are entry-point-discovered plugins.
-
I'm touching the source
The runtime topology, the threading model, the channel pipeline, and how to run the test suite locally.
Three concepts that unlock the rest¶
-
Bundle
A self-contained on-disk record of one run — config, method, calibration snapshot, equipment manifest, events, samples, video. Five years from now you can open it and know exactly what was measured.
-
Channel
A named quantity (
heater_pv,mfc_flow) bound to a device parameter. Channels never store data themselves — they read from bindings. -
Procedure
The class of experiment (free run, recipe runner, heat-flux tune, …). Procedures are plugins, not core code.
See the Glossary for the full vocabulary.
Status¶
Beta runtime, alpha UX, pre-alpha API. The per-resource-worker runtime
(Conductor + WorkerPool) is the current production runtime — the
single-loop ExperimentEngine is gone. The unstable-API and development
sections also live in the README.