Add Molecular Devices SpectraMax Gemini EM backend#1033
Conversation
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Reset WELLSCANMODE in read_fluorescence so a prior wellscan does not leak state into the next read. - Reject non-None focal_height in read_fluorescence, matching the precedent set by read_luminescence and read_fluorescence_wellscan. - Derive read_fluorescence_wellscan center_x/center_y from plate geometry; previously the defaults were captured from a single dev plate and silently wrong elsewhere. - Compare wells by id-set in _assert_full_plate and _get_well_region so the full-plate fast path is order-independent. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Pushed
All 69 tests in |
Prefix the Gemini-specific public read methods that are not part of the PlateReaderBackend spec with experimental_: - experimental_read_fluorescence_wellscan - experimental_read_fluorescence_emission_spectrum - experimental_read_fluorescence_excitation_spectrum - experimental_read_time_resolved_fluorescence read_time_resolved_fluorescence exists on the parent MolecularDevicesBackend, so the un-prefixed name now raises NotImplementedError pointing users to the experimental version rather than silently falling through to the parent implementation, which uses incompatible response-field counts for !READTYPE on the Gemini EM. Tests and the user-guide notebook are updated to call the renamed methods. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@brad-usredoxlabs really good PR! pushed some changes and converted the hello world from markdown to notebook so it's easier to run. could you please verify this works? also renamed the non-standard-PLR methods to |
read_fluorescence_polarization uses **backend_kwargs to absorb the parent signature instead of restating it. Match the existing pattern used by read_absorbance (also a stub) and add # type: ignore[override]. This was a pre-existing type-check failure on the PR; the experimental_ rename in 0f39187 happened to fix the analogous error on read_time_resolved_fluorescence and surfaced this one as the only remaining mypy issue. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Use backend.read_fluorescence(plate=plate, ...) directly to match the luminescence/TRF/spectra/wellscan style already used in the notebook — the PlateReader wrapper requires focal_height, which the Gemini EM does not support. Also adds drawer open/close demonstration cells. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
thanks and congrats on first PR! |
Summary
Adds a Molecular Devices SpectraMax Gemini EM plate reader backend, including exports, backend tests, and user-facing documentation.
Validation
python3 -m unittest pylabrobot.plate_reading.molecular_devices.backend_tests/dev/ttyUSB0: setup, status, temperature, open, close/dev/ttyUSB0: fluorescence, luminescence, TRF endpoint, TRF kinetic, emission spectrum, excitation spectrum, fill wellscan, and partial-region fluorescenceHardware Results
nanvalues appeared as expected where the reader returned blanks.Notes
Hardware validation was run on a Linux laptop directly connected to the SpectraMax Gemini EM through a USB-to-RS-232 adapter.
ruffwas not run locally becausepython3 -m ruffis not installed in this environment.