Skill Tracer
Skills › Scientific Agent Skills › pylabrobot › analytical-equipment.md

analytical-equipment.md

191 lines · skills/pylabrobot/references/analytical-equipment.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Analytical equipment
2
3Verified against **PyLabRobot 0.2.2** on **2026-10-01**. This reference describes
4APIs without connecting to or commanding instruments.
5

Analytical equipment

Verified against PyLabRobot 0.2.2 on 2026-10-01. This reference describes APIs without connecting to or commanding instruments.

Raw lines 1 to 5
6## Plate-reader frontend
7
8Stable imports include:
9
10```python
11from pylabrobot.plate_reading import (
12 CLARIOstarBackend,
13 Cytation5Backend,
14 PlateReader,
15 PlateReaderChatterboxBackend,
17```
19`PlateReader` is a resource and requires dimensions plus a backend:
21```text
22PlateReader(name, size_x, size_y, size_z, backend, rotation=None,
23 category="plate_reader", model=None,
24 child_location=Coordinate(...), preferred_pickup_location=None)
25```
27Do not copy the stale constructor
28`PlateReader(name="CLARIOstar", backend=CLARIOstarBackend())`; the stable
29frontend requires `size_x`, `size_y`, and `size_z`.
31Verified frontend methods include:
33```text
34open(**backend_kwargs)
35close(**backend_kwargs)
36read_absorbance(wavelength, wells=None, use_new_return_type=False,
37 **backend_kwargs)
38read_fluorescence(excitation_wavelength, emission_wavelength, focal_height,
39 wells=None, use_new_return_type=False, **backend_kwargs)
40read_luminescence(focal_height, wells=None, use_new_return_type=False,
41 **backend_kwargs)
42```
44In 0.2.2 `use_new_return_type=False` returns the first measurement's nested
45`data` matrix, despite the annotated `List[Dict]` return type. Set
46`use_new_return_type=True` to retain measurement dictionaries, timestamps,
47wavelengths and temperature. Chatterbox returns synthetic zero measurements,
48`None` for unselected wells and a `NaN` temperature; strict JSON exporters must
49represent missing temperature explicitly. An empty `wells=[]` means all wells
50because the frontend uses `wells or plate.get_all_items()`.
52Record exact arguments, plate/well mapping, settings, raw response, and package
53version. Wavelengths are nm and focal height is mm. The legacy default discards
54additional measurement records; do not use it for kinetics or multi-read data.
56`PlateReader` does not expose a universal `set_temperature` method in the
57verified 0.2.2 frontend. Temperature, shaking, injectors, kinetics, pathlength,
58read mode, and optics are backend/model-specific; do not infer them from another
59reader.

Plate-reader frontend

Stable imports include:

from pylabrobot.plate_reading import (
    CLARIOstarBackend,
    Cytation5Backend,
    PlateReader,
    PlateReaderChatterboxBackend,
)

PlateReader is a resource and requires dimensions plus a backend:

PlateReader(name, size_x, size_y, size_z, backend, rotation=None,
            category="plate_reader", model=None,
            child_location=Coordinate(...), preferred_pickup_location=None)

Do not copy the stale constructor PlateReader(name="CLARIOstar", backend=CLARIOstarBackend()); the stable frontend requires size_x, size_y, and size_z.

Verified frontend methods include:

open(**backend_kwargs)
close(**backend_kwargs)
read_absorbance(wavelength, wells=None, use_new_return_type=False,
                **backend_kwargs)
read_fluorescence(excitation_wavelength, emission_wavelength, focal_height,
                  wells=None, use_new_return_type=False, **backend_kwargs)
read_luminescence(focal_height, wells=None, use_new_return_type=False,
                  **backend_kwargs)

In 0.2.2 use_new_return_type=False returns the first measurement's nested data matrix, despite the annotated List[Dict] return type. Set use_new_return_type=True to retain measurement dictionaries, timestamps, wavelengths and temperature. Chatterbox returns synthetic zero measurements, None for unselected wells and a NaN temperature; strict JSON exporters must represent missing temperature explicitly. An empty wells=[] means all wells because the frontend uses wells or plate.get_all_items().

Record exact arguments, plate/well mapping, settings, raw response, and package version. Wavelengths are nm and focal height is mm. The legacy default discards additional measurement records; do not use it for kinetics or multi-read data.

PlateReader does not expose a universal set_temperature method in the verified 0.2.2 frontend. Temperature, shaking, injectors, kinetics, pathlength, read mode, and optics are backend/model-specific; do not infer them from another reader.

Raw lines 6 to 60
61## Offline interface checks
63`PlateReaderChatterboxBackend` is available for software-only frontend testing.
64It can exercise method calls and resource state without an instrument, but it
65does not simulate optics, plate seating, thermal behavior, gain, focus,
66measurement noise, or assay chemistry.
68For import and method-presence checks without backend construction:
70```bash
71python3 skills/pylabrobot/scripts/inspect_backends.py \
72 --expected-version 0.2.2 --strict
73```
75The inspector does not call `setup()` and makes no transport connection.

Offline interface checks

PlateReaderChatterboxBackend is available for software-only frontend testing. It can exercise method calls and resource state without an instrument, but it does not simulate optics, plate seating, thermal behavior, gain, focus, measurement noise, or assay chemistry.

For import and method-presence checks without backend construction:

python3 skills/pylabrobot/scripts/inspect_backends.py \
  --expected-version 0.2.2 --strict

The inspector does not call setup() and makes no transport connection.

Raw lines 61 to 76
Runs code python3 skills/pylabrobot/scripts/inspect_backends.py :71
77## Released plate-reader inventory
79The 0.2.2 module exports `CLARIOstarBackend`, `Cytation5Backend`,
80`SynergyH1Backend`, Byonoy and SpectraMax drivers, plus
81`ExperimentalTecanInfinite200ProBackend` and `ExperimentalSparkBackend`.
82The `Experimental` names remain significant. Verify the exact import and
83required serial/FTDI/USB/SiLA/microscopy extra without constructing a device.
85The current hosted machine table describes development drivers, including
86Cytation 1 microscopy and Cytation 5 multi-mode reading. Its model labels do
87not establish matching modalities or firmware compatibility for every 0.2.2
88backend. Avoid copying the old blanket Cytation 1 absorbance/fluorescence/
89luminescence claim; check the exact model, optics, plate and implementation.

Released plate-reader inventory

The 0.2.2 module exports CLARIOstarBackend, Cytation5Backend, SynergyH1Backend, Byonoy and SpectraMax drivers, plus ExperimentalTecanInfinite200ProBackend and ExperimentalSparkBackend. The Experimental names remain significant. Verify the exact import and required serial/FTDI/USB/SiLA/microscopy extra without constructing a device.

The current hosted machine table describes development drivers, including Cytation 1 microscopy and Cytation 5 multi-mode reading. Its model labels do not establish matching modalities or firmware compatibility for every 0.2.2 backend. Avoid copying the old blanket Cytation 1 absorbance/fluorescence/ luminescence claim; check the exact model, optics, plate and implementation.

Raw lines 77 to 90
91## Plate-reader live-run checklist
93Before a separately authorized connection or read:
951. Confirm instrument model, serial/device ID, firmware, approved transport,
96 exclusive control, and current calibration/QC.
972. Confirm plate manufacturer/catalog, format, material, bottom, lid/seal,
98 orientation, barcode, and correct seating.
993. Confirm read mode and units: wavelength(s), focal height, gain, flashes,
100 integration, shaking, temperature, kinetics, injectors, well selection, and
101 read direction as applicable.
1024. Check tray/door state and robot/manual transfer path; prevent closing on an
103 obstruction or moving a plate while a device is active.
1045. Include blanks, standards, controls, expected ranges, saturation rules, and
105 acceptance criteria.
1066. Save raw data and complete settings before derived analysis.
108Opening/closing a tray is physical motion. Never call it merely to test
109connectivity.

Plate-reader live-run checklist

Before a separately authorized connection or read:

  1. Confirm instrument model, serial/device ID, firmware, approved transport, exclusive control, and current calibration/QC.
  2. Confirm plate manufacturer/catalog, format, material, bottom, lid/seal, orientation, barcode, and correct seating.
  3. Confirm read mode and units: wavelength(s), focal height, gain, flashes, integration, shaking, temperature, kinetics, injectors, well selection, and read direction as applicable.
  4. Check tray/door state and robot/manual transfer path; prevent closing on an obstruction or moving a plate while a device is active.
  5. Include blanks, standards, controls, expected ranges, saturation rules, and acceptance criteria.
  6. Save raw data and complete settings before derived analysis.

Opening/closing a tray is physical motion. Never call it merely to test connectivity.

Raw lines 91 to 110
111## Scales
113Stable frontend:
115```python
116from pylabrobot.scales import Scale
117```
119Verified methods are:
121```text
122read_weight(**backend_kwargs) -> float
123tare(**backend_kwargs)
124zero(**backend_kwargs)
125```
127`get_weight()` is a deprecated alias. `read_weight()` reports grams; stability
128and timeout semantics depend on the selected backend. The scale constructor
129requires a name, dimensions, and backend.
131The released package provides the model-specific backend:
133```python
134from pylabrobot.scales import MettlerToledoWXS205SDUBackend
135```
137The old `pylabrobot.scales.mettler_toledo` module is absent in 0.2.2.
138`MettlerToledoWXS205SDU` is a deprecated class that raises on construction; use
139the `Backend`-suffixed class. Do not instantiate it or call `setup()` during planning. The current inventory distinguishes models and suffixes; its Full entry is
140WXS205SDU/15, not a claim about every WXS205 variant.
142Before live weighing, verify:
144- model, port, units, resolution, range, calibration, leveling, warm-up, and
145 environmental limits;
146- tare container, stability/status flags, vibration, drafts, static, and
147 evaporation;
148- whether returned values are stable/net/gross and how errors are represented;
149- physical placement/removal route and collision clearance.
151Mass is not automatically volume. Converting grams to microlitres requires a
152validated density at the relevant temperature and uncertainty propagation. Do
153not assume water density equals exactly `1 g/mL`.

Scales

Stable frontend:

from pylabrobot.scales import Scale

Verified methods are:

read_weight(**backend_kwargs) -> float
tare(**backend_kwargs)
zero(**backend_kwargs)

get_weight() is a deprecated alias. read_weight() reports grams; stability and timeout semantics depend on the selected backend. The scale constructor requires a name, dimensions, and backend.

The released package provides the model-specific backend:

from pylabrobot.scales import MettlerToledoWXS205SDUBackend

The old pylabrobot.scales.mettler_toledo module is absent in 0.2.2. MettlerToledoWXS205SDU is a deprecated class that raises on construction; use the Backend-suffixed class. Do not instantiate it or call setup() during planning. The current inventory distinguishes models and suffixes; its Full entry is WXS205SDU/15, not a claim about every WXS205 variant.

Before live weighing, verify:

  • model, port, units, resolution, range, calibration, leveling, warm-up, and environmental limits;
  • tare container, stability/status flags, vibration, drafts, static, and evaporation;
  • whether returned values are stable/net/gross and how errors are represented;
  • physical placement/removal route and collision clearance.

Mass is not automatically volume. Converting grams to microlitres requires a validated density at the relevant temperature and uncertainty propagation. Do not assume water density equals exactly 1 g/mL.

Raw lines 111 to 154
155## Coordinating liquid handlers and analytical devices
157Treat each device as a separate state machine:
159- never overlap motion unless the workcell has an approved interlock and
160 scheduler;
161- transfer ownership of a plate explicitly between deck, arm, reader, scale,
162 and operator;
163- verify doors/trays/buckets are in the required state;
164- use unique plate IDs and record handoff timestamps;
165- stop safely on partial failure; do not blindly retry a measurement or move;
166- distinguish software resource assignment from physical plate location.
168An async Python call does not create a physical safety interlock.

Coordinating liquid handlers and analytical devices

Treat each device as a separate state machine:

  • never overlap motion unless the workcell has an approved interlock and scheduler;
  • transfer ownership of a plate explicitly between deck, arm, reader, scale, and operator;
  • verify doors/trays/buckets are in the required state;
  • use unique plate IDs and record handoff timestamps;
  • stop safely on partial failure; do not blindly retry a measurement or move;
  • distinguish software resource assignment from physical plate location.

An async Python call does not create a physical safety interlock.

Raw lines 155 to 169
170## Data integrity
172For every measurement, retain:
174- protocol and manifest revisions;
175- PyLabRobot/backend version and instrument identity/firmware;
176- plate/barcode and well map;
177- complete acquisition settings and units;
178- calibration/QC status, blanks/controls, timestamps, and error/status fields;
179- unmodified raw output plus checksums;
180- transformation code/version and rejected/out-of-range values.
182Validate dimensions and well labels before joining measurement data to sample
183metadata.

Data integrity

For every measurement, retain:

  • protocol and manifest revisions;
  • PyLabRobot/backend version and instrument identity/firmware;
  • plate/barcode and well map;
  • complete acquisition settings and units;
  • calibration/QC status, blanks/controls, timestamps, and error/status fields;
  • unmodified raw output plus checksums;
  • transformation code/version and rejected/out-of-range values.

Validate dimensions and well labels before joining measurement data to sample metadata.

Raw lines 170 to 184
185## Sources
187Reviewed **2026-10-01**: [0.2.2 released source files](https://pypi.org/project/PyLabRobot/0.2.2/#files)
188(`plate_reading/plate_reader.py`, `plate_reading/chatterbox.py`, `scales/scale.py`),
189[current machine inventory](https://docs.pylabrobot.org/stable/user_guide/machines.html),
190and [release review](review.md). Native chatterbox tests cover selected-well
191masking and both return contracts; no reader, microscope or scale was connected.

Sources

Reviewed 2026-10-01: 0.2.2 released source files (plate_reading/plate_reader.py, plate_reading/chatterbox.py, scales/scale.py), current machine inventory, and release review. Native chatterbox tests cover selected-well masking and both return contracts; no reader, microscope or scale was connected.

Raw lines 185 to 191