From 262b2d515f16acf82d2255d86f87995e34d72bb4 Mon Sep 17 00:00:00 2001 From: Camillo Moschner Date: Thu, 22 Oct 2026 10:35:27 +0100 Subject: [PATCH] v1 `CLARIOstar`: basic luminescence through the emission monochromator - `Luminescence.measure` reads the plate's luminescence from the top, each well at its centre, with enhanced dynamic range, through one emission band of the monochromator. - The emission band, gain, focal height, normalization time, measurement interval, settling, reading direction, corner and shaking are sent. - The emission limit follows the photomultipliers: up to 840 nm with the extended-red one on the luminescence path, 740 nm without. - `pylabrobot.lib.luminescence.LuminescenceResult`; `CLARIOstarLuminescenceResult` adds the gain. - `driver.luminescence` and `CLARIOstarDevice.luminescence` exist when the reader reports a luminescence channel. - `FluorescenceConfiguration.maximum_chromatics` is renamed `maximum_fluorescence_channels`. - Comments, docstrings and test names reworded, nothing changes on the wire; the test data files are renamed `*_ground_truth.json.gz`. Co-Authored-By: Claude Opus 5.5 --- pylabrobot/bmg_labtech/clariostar/__init__.py | 3 + pylabrobot/bmg_labtech/clariostar/device.py | 8 +- .../bmg_labtech/clariostar/driver/__init__.py | 3 + .../clariostar/driver/features/__init__.py | 5 + .../clariostar/driver/features/absorbance.py | 20 +- .../driver/features/absorbance_tests.py | 140 +++---- .../driver/features/fluorescence.py | 146 ++++--- .../driver/features/fluorescence_tests.py | 230 +++++------ .../driver/features/luminescence.py | 375 ++++++++++++++++++ .../driver/features/luminescence_tests.py | 222 +++++++++++ .../clariostar/driver/features/measurement.py | 45 +-- .../driver/features/temperature_controller.py | 2 +- .../absorbance_spectrum_verification.json.gz | Bin 350480 -> 350479 bytes .../filter_detection_captures.json.gz | Bin 64726 -> 0 bytes .../filter_detection_ground_truth.json.gz | Bin 0 -> 64675 bytes .../test_data/fluorescence_captures.json.gz | Bin 5466 -> 0 bytes .../fluorescence_ground_truth.json.gz | Bin 0 -> 5386 bytes .../test_data/z_profile_captures.json.gz | Bin 2849 -> 0 bytes .../test_data/z_profile_ground_truth.json.gz | Bin 0 -> 2819 bytes .../driver/ftdi_queued_reads_tests.py | 6 +- .../bmg_labtech/clariostar/driver/master.py | 13 +- .../clariostar/driver/master_tests.py | 2 +- .../clariostar/driver/simulator.py | 4 +- pylabrobot/lib/luminescence/__init__.py | 1 + pylabrobot/lib/luminescence/results.py | 28 ++ 25 files changed, 952 insertions(+), 301 deletions(-) create mode 100644 pylabrobot/bmg_labtech/clariostar/driver/features/luminescence.py create mode 100644 pylabrobot/bmg_labtech/clariostar/driver/features/luminescence_tests.py delete mode 100644 pylabrobot/bmg_labtech/clariostar/driver/features/test_data/filter_detection_captures.json.gz create mode 100644 pylabrobot/bmg_labtech/clariostar/driver/features/test_data/filter_detection_ground_truth.json.gz delete mode 100644 pylabrobot/bmg_labtech/clariostar/driver/features/test_data/fluorescence_captures.json.gz create mode 100644 pylabrobot/bmg_labtech/clariostar/driver/features/test_data/fluorescence_ground_truth.json.gz delete mode 100644 pylabrobot/bmg_labtech/clariostar/driver/features/test_data/z_profile_captures.json.gz create mode 100644 pylabrobot/bmg_labtech/clariostar/driver/features/test_data/z_profile_ground_truth.json.gz create mode 100644 pylabrobot/lib/luminescence/__init__.py create mode 100644 pylabrobot/lib/luminescence/results.py diff --git a/pylabrobot/bmg_labtech/clariostar/__init__.py b/pylabrobot/bmg_labtech/clariostar/__init__.py index 7a4b14aeda5..38f84198aea 100644 --- a/pylabrobot/bmg_labtech/clariostar/__init__.py +++ b/pylabrobot/bmg_labtech/clariostar/__init__.py @@ -11,6 +11,7 @@ CLARIOstarDriver, CLARIOstarFluorescenceResult, CLARIOstarFluorescenceSpectrumResult, + CLARIOstarLuminescenceResult, CLARIOstarSimulationDriver, CLARIOstarStatus, CLARIOstarZProfileResult, @@ -20,6 +21,8 @@ Fluorescence, FluorescenceConfiguration, FrameError, + Luminescence, + LuminescenceConfiguration, MeasurementSettings, ShakeSettings, TemperatureController, diff --git a/pylabrobot/bmg_labtech/clariostar/device.py b/pylabrobot/bmg_labtech/clariostar/device.py index 456c83b50a7..f8c90ef8f6c 100644 --- a/pylabrobot/bmg_labtech/clariostar/device.py +++ b/pylabrobot/bmg_labtech/clariostar/device.py @@ -10,11 +10,12 @@ from .driver.features.absorbance import Absorbance from .driver.features.drawer import Drawer from .driver.features.fluorescence import Fluorescence +from .driver.features.luminescence import Luminescence from .driver.features.temperature_controller import TemperatureController from .driver.master import CLARIOstarDriver from .driver.simulator import CLARIOstarSimulationDriver -# Preliminary: the operating manuals' nominal size, rounded to the cm, the same for the CLARIOstar +# Preliminary: the nominal size, rounded to the cm, the same for the CLARIOstar # and the CLARIOstar Plus; not yet measured. SIZE_X = 450.0 SIZE_Y = 510.0 @@ -189,6 +190,11 @@ def fluorescence(self) -> Optional[Fluorescence]: """Fluorescence measurement, or None if the reader has none; known after `setup`.""" return self.driver.fluorescence + @property + def luminescence(self) -> Optional[Luminescence]: + """Luminescence measurement, or None if the reader has none; known after `setup`.""" + return self.driver.luminescence + async def setup(self) -> None: """Connect, initialize the reader (about 13 s), and check it is the model this device is. diff --git a/pylabrobot/bmg_labtech/clariostar/driver/__init__.py b/pylabrobot/bmg_labtech/clariostar/driver/__init__.py index d366a713c83..c8e2f6842a5 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/__init__.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/__init__.py @@ -8,10 +8,13 @@ CLARIOstarAbsorbanceSpectrumResult, CLARIOstarFluorescenceResult, CLARIOstarFluorescenceSpectrumResult, + CLARIOstarLuminescenceResult, CLARIOstarZProfileResult, Drawer, Fluorescence, FluorescenceConfiguration, + Luminescence, + LuminescenceConfiguration, MeasurementSettings, ShakeSettings, TemperatureController, diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/__init__.py b/pylabrobot/bmg_labtech/clariostar/driver/features/__init__.py index 6bd7b6b61a4..ebc7ab5c0a8 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/features/__init__.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/__init__.py @@ -12,5 +12,10 @@ Fluorescence, FluorescenceConfiguration, ) +from .luminescence import ( + CLARIOstarLuminescenceResult, + Luminescence, + LuminescenceConfiguration, +) from .measurement import MeasurementSettings, ShakeSettings from .temperature_controller import TemperatureController diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/absorbance.py b/pylabrobot/bmg_labtech/clariostar/driver/features/absorbance.py index 70254a5199e..8b199766db0 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/features/absorbance.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/absorbance.py @@ -76,7 +76,7 @@ class AbsorbanceConfiguration(MeasurementConfiguration): wavelength_range: Tuple[int, int] = (220, 1000) """Wavelengths a read accepts, in nm (the manufacturer's spectrometer range).""" maximum_wavelengths: int = 8 - """Wavelengths per read (the vendor software manual: up to 8; 8 read on hardware).""" + """Wavelengths per read (up to 8; 8 read on hardware).""" # ---------------------------------------- @@ -155,10 +155,10 @@ def __init__( # ---------------------------------------- # Water pathlength correction after the wavelength fields, in nm: two wavelengths, a third - # unused, and its bandwidth, as the vendor always sends them. + # unused, and its bandwidth, always sent. _PATHLENGTH_CORRECTION = (900.0, 993.0, 0.0, 10.0) - # Pause, u16 BE each: when (0 off, 1 before plate reading), then seconds. Off, the vendor sends - # 5 s; on, 5 s captured. + # Pause, u16 BE each: when (0 off, 1 before plate reading), then seconds; off, 5 s are sent, + # and on, 5 s is verified. _NO_PAUSE = bytes.fromhex("00000005") _PAUSE_BEFORE_READING = 0x0001 @@ -177,7 +177,7 @@ def _encode_wavelengths(*nanometres: float) -> bytes: # Decoding # ---------------------------------------- - # Data reply layout byte [6]: the only one captured, with the temperature controller on or off. + # Data reply layout byte [6]: the only one verified, with the temperature controller on or off. _DATA_LAYOUT = 0xA9 @staticmethod @@ -195,8 +195,8 @@ def _decode_data_reply(self, reply: bytes, wavelengths: List[int]) -> _Decoded: """The samples per wavelength and the references, in the reply's well order (row by row), the wavelengths' calibration pairs and the reference's. - The reply holds n + 3 groups of one u32 per well (the n samples, chromatics 2 and 3, the - reference), then n + 3 calibration pairs, in the same order. + The reply holds n + 3 groups of one u32 per well (the n samples, two groups not decoded, + the reference), then n + 3 calibration pairs, in the same order. Raises: ValueError: if the reply is incomplete or not the layout of this read. @@ -271,8 +271,8 @@ def _check_arguments( Raises: ValueError: listing every violation: not 1 to `maximum_wavelengths` wavelengths, a wavelength - not a whole nm within `wavelength_range`, an unknown report, a matrix well scan (captured - but not decoded), a timeout not positive. + not a whole nm within `wavelength_range`, an unknown report, a matrix well scan (not + decoded), a timeout not positive. """ errors = [] maximum = self.configuration.maximum_wavelengths @@ -350,7 +350,7 @@ async def measure( wells: the wells to measure, on the plate; None measures every well. wavelengths: 1 to `configuration.maximum_wavelengths` wavelengths, each a whole nm within `configuration.wavelength_range`; all read in one pass. - measurement_settings: how to read; None reads with the defaults (the vendor's). + measurement_settings: how to read; None reads with the defaults. shake_settings: shake the plate before the read; None does not shake. report: what the results hold: optical density, or the raw sample counts with the reference counts and calibration pairs that compute it (`CLARIOstarAbsorbanceResult`). diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/absorbance_tests.py b/pylabrobot/bmg_labtech/clariostar/driver/features/absorbance_tests.py index 72be26c1b71..83d53ba7f6f 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/features/absorbance_tests.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/absorbance_tests.py @@ -1,5 +1,5 @@ -"""Absorbance tests over a fake io: what the driver sends is pinned to vendor captures, the -optical densities to the vendor software's own export of the same reply.""" +"""Absorbance tests over a fake io: what the driver sends, and the optical densities it computes, +are pinned to the ground truth.""" import asyncio import gzip @@ -40,7 +40,7 @@ from pylabrobot.resources import Plate, Well, cor_96_wellplate_360uL_Fb, create_ordered_items_2d from pylabrobot.resources.biorad.plates import biorad_96_wellplate_200uL_Vb -# The vendor's default endpoint read: 600 nm, every well of its plate. +# The default read: 600 nm, every well of the plate. BASELINE_RUN_FRAME = bytes.fromhex( "0200900c0431ec2166059604602c561d060c0800ffffffffffffffffffffffff00000000000000000000000000000000" "00000000000000000000000000000000000000000a020000000000000000000000000000000000000000000000000000" @@ -60,14 +60,14 @@ "0100010000153f0d" ) -# Orbital, 3 mm, the vendor's 7 flashes, 0.1 s settling, on 6.58 mm wells. +# Orbital, 3 mm, 7 flashes, 0.1 s settling, on 6.58 mm wells. ORBITAL_RUN_FRAME = bytes.fromhex( "0200950c0431e82164059e04642c4a1d000c0800ffffffffffffffffffffffff00000000000000000000000000000000" "00000000000000000000000000000000000000000a320000000000000000000000000000000000000000000000000000" "00000000270f270f02030292000501177000000064232826ca0000006400000005020000000000010000000100070001" "000013cd0d" ) -# Spiral, 4 mm, the vendor's 15 flashes, unidirectional, no settling; its pause sends 0 s. +# Spiral, 4 mm, 15 flashes, unidirectional, no settling; its pause sends 0 s. SPIRAL_RUN_FRAME = bytes.fromhex( "0200950c0431e82164059e04642c4a1d000c0800ffffffffffffffffffffffff00000000000000000000000000000000" "00000000000000000000000000000000000000008a060000000000000000000000000000000000000000000000000000" @@ -82,7 +82,7 @@ "00000000270f270f02030292000501177000000064232826ca0000006400000000020000000000010000000100070001" "000013d10d" ) -# The vendor's pre-separators of five shaken reads, by (pattern, rpm, seconds). +# The pre-separators of five shaken reads, by (pattern, rpm, seconds). SHAKE_PRE_SEPARATORS = { ("orbital", 300, 5): "32000000000000000000000002000000000002000500000000000000000000", ("orbital", 500, 5): "32000000000000000000000002000000000004000500000000000000000000", @@ -91,7 +91,7 @@ ("linear", 300, 5): "32000000000000000000000002000000000102000500000000000000000000", } -# A 5 s pause before reading, otherwise the vendor's default read, on the captured plate. +# A 5 s pause before reading, otherwise the default read, on the ground-truth plate. PAUSE_RUN_FRAME = bytes.fromhex( "0200900c0431e82164059e04642c4a1d000c0800ffffffffffffffffffffffff00000000000000000000000000000000" "00000000000000000000000000000000000000000a020000000000000000000000000000000000000000000000000000" @@ -114,7 +114,7 @@ "000047900000000000297a0d" ) -# Spectrum RUNs as the vendor sent them, all on the captured plate: 300-700/1 nm, +# Spectrum RUNs, all on the ground-truth plate: 300-700/1 nm, # 400-600/1, 300-700/5, column 1, orbital, and the verification read: # 220-1000/1, spiral, unidirectional, 20 flashes, double orbital shaking, 5 s pause. SPECTRUM_300_700_1_RUN_FRAME = bytes.fromhex( @@ -153,7 +153,7 @@ # A timeout that ends a read right after its RUN, so a test can pin the RUN and the STOP. IMMEDIATE_TIMEOUT = 1e-9 -# Column 1 at 600 nm, unidirectional, on the captured plate: RUN_REPLY, STATUS_MEASURED and +# Column 1 at 600 nm, unidirectional, on the ground-truth plate: RUN_REPLY, STATUS_MEASURED and # COLUMN_1_DATA_REPLY are this read's replies. COLUMN_1_RUN_FRAME = bytes.fromhex( "0200900c0431e82164059e04642c4a1d000c080080080080080080080080080000000000000000000000000000000000" @@ -165,7 +165,7 @@ STOP_FRAME = bytes.fromhex("02000a0c0b000000230d") STOP_REPLY = bytes.fromhex("0200180c0125062600000b0000000000000000c00001430d") -# A 96-well read at 600 nm (verification plate) and the vendor software's export of it. +# A 96-well read at 600 nm (verification plate) and its ground-truth optical densities. VERIFICATION_DATA_REPLY = bytes.fromhex( "02064c0c020506260000a901880188001dffe20220030001006001000100000001010000000000f10000645800005e80" "00deccd0001278e10001ffe700008b42000070eb000070f500006f6400006b1c00cad94700dcfc9700e7389600005f28" @@ -202,7 +202,7 @@ "00004790000047830000477c0000475b0000475c0000474c000047400000473e0000472b00004758012ce63d00028ec6" "0076afa900028c2e0038e03700028ec3000048320000000001c4620d" ) -VERIFICATION_EXPORT = [ +VERIFICATION_GROUND_TRUTH = [ [2.885, 2.909, 0.126, 1.208, 2.173, 2.738, 2.829, 2.828, 2.834, 2.852, 0.165, 0.128], [0.114, 2.906, 2.865, 2.878, 2.95, 2.967, 2.842, 2.844, 2.752, 2.69, 0.142, 0.147], [0.147, 0.149, 0.097, 0.108, 0.141, 0.159, 0.149, 0.167, 2.308, 2.275, 0.132, 0.107], @@ -237,11 +237,11 @@ def baseline_plate() -> Plate: ) -def captured_96_well_plate() -> Plate: - """The captured plate's geometry, with the vendor database's 6.58 mm wells: +def ground_truth_96_well_plate() -> Plate: + """The ground-truth plate's geometry, with 6.58 mm wells: 127.76 x 85.48 mm, A1 centre 14.38 / 11.24 mm, 9 mm pitch.""" return Plate( - "captured", + "ground_truth", size_x=127.76, size_y=85.48, size_z=14.0, @@ -350,7 +350,7 @@ async def measure_with( def without_pause_seconds(payload: bytes) -> bytes: - """`payload` with the no-pause seconds set to v1's 5: the vendor sends 5 or 0.""" + """`payload` with the no-pause seconds set to v1's 5: the ground truth has 5 or 0.""" payload = bytearray(payload) pause_seconds = len(payload) - 17 if payload[pause_seconds - 3 : pause_seconds + 1] == bytes(4): @@ -360,14 +360,14 @@ def without_pause_seconds(payload: bytes) -> bytes: class RunParametersTests(unittest.TestCase): def test_orbital(self): - plate = captured_96_well_plate() + plate = ground_truth_96_well_plate() parameters = run_parameters( plate, plate.get_all_items(), [600], 7, well_scan="orbital", scan_diameter=3 ) self.assertEqual(b"\x04" + parameters, ftdi_extract_payload(ORBITAL_RUN_FRAME)) def test_spiral_but_its_pause_seconds(self): - plate = captured_96_well_plate() + plate = ground_truth_96_well_plate() payload = b"\x04" + run_parameters( plate, plate.get_all_items(), @@ -387,7 +387,7 @@ def test_spiral_but_its_pause_seconds(self): ) def test_shake_but_its_pause_seconds(self): - plate = captured_96_well_plate() + plate = ground_truth_96_well_plate() payload = b"\x04" + run_parameters( plate, plate.get_all_items(), @@ -407,7 +407,7 @@ def test_shake_but_its_pause_seconds(self): ) def test_shake_patterns_speeds_and_durations(self): - plate = captured_96_well_plate() + plate = ground_truth_96_well_plate() for (pattern, speed, duration), recorded in SHAKE_PRE_SEPARATORS.items(): parameters = run_parameters( plate, @@ -428,7 +428,7 @@ def test_five_wavelengths(self): class SettingsTests(unittest.TestCase): - def test_the_defaults_are_the_vendors_default_read(self): + def test_the_defaults_are_the_ground_truth(self): plate = baseline_plate() parameters = absorbance_feature()._compute_run_parameters( plate, plate.get_all_items(), [600], MeasurementSettings(), None @@ -476,7 +476,7 @@ def test_every_range_error_is_listed_at_once(self): class SpectrumRunParametersTests(unittest.TestCase): def spectrum_payload(self, start, end, step, flashes, wells=None, shake=None, **measurement): - plate = captured_96_well_plate() + plate = ground_truth_96_well_plate() wells = plate.get_all_items() if wells is None else wells(plate) return b"\x04" + absorbance_feature()._compute_spectrum_run_parameters( plate, wells, start, end, step, MeasurementSettings(flashes=flashes, **measurement), shake @@ -524,14 +524,14 @@ def test_out_of_range_spectra_are_refused(self): def load_verification_spectrum() -> Tuple[List[bytes], List[int], Dict[str, List[float]]]: - """The 220-1000 nm verification read: its 5 data pages as received, its wavelengths, and the - vendor software's export of it, optical density per well and wavelength.""" + """The 220-1000 nm verification read: its 5 data pages as received, its wavelengths, and its + ground-truth optical densities, per well and wavelength.""" path = os.path.join( os.path.dirname(__file__), "test_data", "absorbance_spectrum_verification.json.gz" ) with gzip.open(path, "rt") as f: data = json.load(f) - return [bytes.fromhex(page) for page in data["pages"]], data["wavelengths"], data["export"] + return [bytes.fromhex(page) for page in data["pages"]], data["wavelengths"], data["expected"] # The verification read's settings, as its RUN encodes them. @@ -543,10 +543,10 @@ def load_verification_spectrum() -> Tuple[List[bytes], List[int], Dict[str, List class SpectrumReadTests(unittest.IsolatedAsyncioTestCase): async def read_verification_spectrum(self, report="optical_density"): - pages, wavelengths, export = load_verification_spectrum() + pages, wavelengths, expected = load_verification_spectrum() io = FakeFTDI(chunk=4096) io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURED, *pages] - absorbance = make_absorbance(io, captured_96_well_plate()) + absorbance = make_absorbance(io, ground_truth_96_well_plate()) result = await absorbance.measure_spectrum( start_wavelength=220, end_wavelength=1000, @@ -555,10 +555,10 @@ async def read_verification_spectrum(self, report="optical_density"): shake_settings=VERIFICATION_SPECTRUM_SHAKE, report=report, ) - return io, result, wavelengths, export + return io, result, wavelengths, expected - async def test_the_verification_read_matches_the_vendor_export(self): - io, result, wavelengths, export = await self.read_verification_spectrum() + async def test_the_verification_read_matches_the_ground_truth(self): + io, result, wavelengths, expected = await self.read_verification_spectrum() self.assertEqual( io.written, [STATUS_QUERY_FRAME, SPECTRUM_VERIFICATION_RUN_FRAME, STATUS_QUERY_FRAME] + [DATA_FRAME] * 5, @@ -567,16 +567,16 @@ async def test_the_verification_read_matches_the_vendor_export(self): self.assertEqual(list(result.data["A1"]), wavelengths) differences = [ abs(result.data[well][wavelength] - value) - for well, values in export.items() + for well, values in expected.items() for wavelength, value in zip(wavelengths, values) ] self.assertEqual(len(differences), 74_976) - self.assertLess(max(differences), 0.0006) # the export rounds to 3 decimals + self.assertLess(max(differences), 0.0006) # the ground truth rounds to 3 decimals self.assertEqual(result.temperature, 24.1) self.assertLessEqual(result.start_timestamp, result.end_timestamp) async def test_raw_counts_compute_the_optical_densities(self): - _, raw, wavelengths, export = await self.read_verification_spectrum(report="raw") + _, raw, wavelengths, expected = await self.read_verification_spectrum(report="raw") assert isinstance(raw, CLARIOstarAbsorbanceSpectrumResult) assert raw.references is not None and raw.calibration is not None assert raw.reference_calibration is not None @@ -585,8 +585,8 @@ async def test_raw_counts_compute_the_optical_densities(self): fraction = (raw.data[well][wavelength] / raw.calibration[wavelength][0]) * ( raw.reference_calibration[0] / raw.references[well] ) - expected = export[well][wavelengths.index(wavelength)] - self.assertAlmostEqual(-math.log10(fraction), expected, delta=0.0006) + expected_density = expected[well][wavelengths.index(wavelength)] + self.assertAlmostEqual(-math.log10(fraction), expected_density, delta=0.0006) def test_pages_out_of_order_or_missing_are_refused(self): pages = [ftdi_extract_payload(frame) for frame in load_verification_spectrum()[0]] @@ -598,7 +598,7 @@ def test_pages_out_of_order_or_missing_are_refused(self): async def test_a_timeout_not_positive_is_refused(self): io = FakeFTDI() - absorbance = make_absorbance(io, captured_96_well_plate()) + absorbance = make_absorbance(io, ground_truth_96_well_plate()) for timeout in (0, -1): with self.assertRaises(ValueError): await measure_with(absorbance, [600], timeout=timeout) @@ -613,7 +613,7 @@ class SimulatedSpectrumTests(unittest.IsolatedAsyncioTestCase): async def asyncSetUp(self): self.reader = CLARIOstarPlus(simulation=True) await self.reader.setup() - self.plate = captured_96_well_plate() + self.plate = ground_truth_96_well_plate() await self.reader.drawer.open() self.reader.plate_holder.assign_child_resource(self.plate) await self.reader.drawer.close() @@ -630,8 +630,8 @@ async def test_a_simulated_spectrum_reads_within_range(self): self.assertEqual(list(spectrum), list(range(400, 501, 10))) self.assertTrue(all(0.0 <= value <= 4.0 for value in spectrum.values())) - async def test_a_captured_spectrum_is_returned_again(self): - captured = await self.absorbance.measure_spectrum( + async def test_an_earlier_spectrum_is_returned_again(self): + earlier = await self.absorbance.measure_spectrum( start_wavelength=400, end_wavelength=500, step_size=10 ) replayed = await self.absorbance.measure_spectrum( @@ -639,23 +639,23 @@ async def test_a_captured_spectrum_is_returned_again(self): start_wavelength=400, end_wavelength=500, step_size=10, - simulated_data=captured, + simulated_data=earlier, ) - self.assertEqual(replayed.data, {well: captured.data[well] for well in COLUMN_1}) - with self.assertRaises(ValueError): # 405 nm was not captured + self.assertEqual(replayed.data, {well: earlier.data[well] for well in COLUMN_1}) + with self.assertRaises(ValueError): # 405 nm was not read await self.absorbance.measure_spectrum( - start_wavelength=400, end_wavelength=500, step_size=5, simulated_data=captured + start_wavelength=400, end_wavelength=500, step_size=5, simulated_data=earlier ) class OpticalDensityTests(unittest.TestCase): - def test_matches_the_vendor_export(self): + def test_matches_the_ground_truth(self): decoded = absorbance_feature()._decode_data_reply( ftdi_extract_payload(VERIFICATION_DATA_REPLY), [600] ) densities = _compute_readings(*decoded, "optical_density")[0] - exported = [value for row in VERIFICATION_EXPORT for value in row] - for density, value in zip(densities, exported): + expected = [value for row in VERIFICATION_GROUND_TRUTH for value in row] + for density, value in zip(densities, expected): self.assertAlmostEqual(density, value, delta=0.001) def test_a_reply_for_other_wavelengths_is_refused(self): @@ -669,7 +669,7 @@ class ReadTests(unittest.IsolatedAsyncioTestCase): async def test_read_column_1(self): io = FakeFTDI() io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURING, STATUS_MEASURED, COLUMN_1_DATA_REPLY] - plate = captured_96_well_plate() + plate = ground_truth_96_well_plate() column_1 = plate.get_items("A1:H1") results = await measure_with( make_absorbance(io, plate), [600], wells=column_1, bidirectional=False @@ -686,7 +686,7 @@ async def test_the_first_poll_waits_after_the_run(self): # As the reader answered: a poll sent right after the RUN's reply went unanswered. io = FakeFTDI() io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURING, STATUS_MEASURED, COLUMN_1_DATA_REPLY] - plate = captured_96_well_plate() + plate = ground_truth_96_well_plate() absorbance = make_absorbance(io, plate) absorbance._driver.default_poll_interval = 0.25 waits = [] @@ -722,7 +722,7 @@ async def test_a_timeout_stops_the_run(self): async def test_a_cancel_between_a_write_and_its_reply_leaves_the_link_clean(self): io = YieldingFTDI() - absorbance = make_absorbance(io, captured_96_well_plate()) + absorbance = make_absorbance(io, ground_truth_96_well_plate()) task = asyncio.create_task(absorbance.measure(wavelengths=[600], timeout=10)) io.cancel_on_status = task # cancelled after the first STATUS of the run is written with self.assertRaises(asyncio.CancelledError): @@ -773,20 +773,20 @@ async def test_the_ranges_are_the_configurations(self): await measure_with(absorbance, [600], **arguments) # type: ignore[arg-type] self.assertEqual(io.written, []) - async def test_raw_counts_compute_the_vendors_optical_densities(self): + async def test_raw_counts_compute_the_ground_truth_optical_densities(self): readings = {} for report in ("optical_density", "raw"): io = FakeFTDI() io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURED, VERIFICATION_DATA_REPLY] (readings[report],) = await measure_with( - make_absorbance(io, captured_96_well_plate()), [600], report=report + make_absorbance(io, ground_truth_96_well_plate()), [600], report=report ) # type: ignore[arg-type] density, raw = readings["optical_density"], readings["raw"] self.assertIs(type(density), AbsorbanceResult) assert isinstance(raw, CLARIOstarAbsorbanceResult) assert raw.references is not None and raw.calibration and raw.reference_calibration - exported = [value for row in VERIFICATION_EXPORT for value in row] - for well, value in zip(density.data, exported): # both row by row + expected = [value for row in VERIFICATION_GROUND_TRUTH for value in row] + for well, value in zip(density.data, expected): # both row by row fraction = (raw.data[well] / raw.calibration[0]) * ( raw.reference_calibration[0] / raw.references[well] ) @@ -816,8 +816,8 @@ def test_the_read_timeout_default_is_checked_when_set(self): with self.assertRaises(ValueError): absorbance.default_read_timeout = 0 - async def test_scan_and_settling_bytes_are_the_vendors(self): - # (arguments, scan byte, settling byte) as the vendor sent them: the corners and + async def test_scan_and_settling_bytes_are_the_ground_truth(self): + # (arguments, scan byte, settling byte) as the ground truth has them: the corners and # directions, the pauses and three orbital reads (the same field). cases: List[Tuple[Dict[str, Any], int, int]] = [ ({}, 0x0A, 0x05), @@ -860,7 +860,7 @@ async def test_every_read_defaults_to_five_flashes(self): for spectrum in (False, True): io = FakeFTDI() io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURING] - absorbance = make_absorbance(io, captured_96_well_plate()) + absorbance = make_absorbance(io, ground_truth_96_well_plate()) settings = MeasurementSettings(well_scan=well_scan) with self.assertRaises(TimeoutError): if spectrum: @@ -880,9 +880,9 @@ async def test_every_read_defaults_to_five_flashes(self): async def test_well_scans_out_of_range_send_nothing(self): io = FakeFTDI() - absorbance = make_absorbance(io, captured_96_well_plate()) + absorbance = make_absorbance(io, ground_truth_96_well_plate()) for arguments in ( - {"well_scan": "matrix", "matrix_size": 3}, # captured, its data not decoded + {"well_scan": "matrix", "matrix_size": 3}, # its data not decoded {"well_scan": "orbital", "scan_diameter": 0}, {"well_scan": "spiral", "scan_diameter": 7}, # wider than the 6.58 mm well {"well_scan": "spiral", "scan_diameter": 3.5}, @@ -1098,25 +1098,25 @@ async def asyncSetUp(self): assert isinstance(absorbance, CLARIOstarSimulationAbsorbance) self.absorbance = absorbance - async def test_captured_results_are_returned_again(self): - captured = await measure_with(self.absorbance, [450, 600]) - replayed = await measure_with(self.absorbance, [450, 600], simulated_data=captured) - self.assertEqual([r.data for r in replayed], [r.data for r in captured]) + async def test_earlier_results_are_returned_again(self): + earlier = await measure_with(self.absorbance, [450, 600]) + replayed = await measure_with(self.absorbance, [450, 600], simulated_data=earlier) + self.assertEqual([r.data for r in replayed], [r.data for r in earlier]) - async def test_a_subset_reads_its_wells_of_the_captured_plate(self): - (captured,) = await measure_with(self.absorbance, [600]) + async def test_a_subset_reads_its_wells_of_the_earlier_plate(self): + (earlier,) = await measure_with(self.absorbance, [600]) column_1 = self.plate.get_items("A1:H1") (replayed,) = await measure_with( - self.absorbance, [600], wells=column_1, simulated_data=[captured] + self.absorbance, [600], wells=column_1, simulated_data=[earlier] ) - self.assertEqual(replayed.data, {well: captured.data[well] for well in COLUMN_1}) + self.assertEqual(replayed.data, {well: earlier.data[well] for well in COLUMN_1}) async def test_raw_counts_need_simulated_data(self): with self.assertRaises(NotImplementedError): await measure_with(self.absorbance, [600], report="raw") - async def test_captured_raw_results_are_returned_again(self): - captured = CLARIOstarAbsorbanceResult( + async def test_earlier_raw_results_are_returned_again(self): + earlier = CLARIOstarAbsorbanceResult( data={well: 1000.0 for well in COLUMN_1}, wavelength=600, temperature=None, @@ -1131,15 +1131,15 @@ async def test_captured_raw_results_are_returned_again(self): [600], wells=self.plate.get_items("A1:H1"), report="raw", - simulated_data=[captured], + simulated_data=[earlier], ) assert isinstance(replayed, CLARIOstarAbsorbanceResult) self.assertEqual( (replayed.data, replayed.references, replayed.calibration, replayed.reference_calibration), - (captured.data, captured.references, captured.calibration, captured.reference_calibration), + (earlier.data, earlier.references, earlier.calibration, earlier.reference_calibration), ) with self.assertRaises(ValueError): - await measure_with(self.absorbance, [600], simulated_data=[captured]) + await measure_with(self.absorbance, [600], simulated_data=[earlier]) async def test_simulated_data_must_match_the_measurement(self): (whole_plate,) = await measure_with(self.absorbance, [600]) diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/fluorescence.py b/pylabrobot/bmg_labtech/clariostar/driver/features/fluorescence.py index 511937787d0..c38030096df 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/features/fluorescence.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/fluorescence.py @@ -1,9 +1,8 @@ """CLARIOstar fluorescence: plate reads, spectra, filter detection and z-profiles. -A plate read goes through one to five fluorescence channels in one pass (`FluorescenceChannel`, the -vendor's chromatics), from the top or the bottom optic. Excitation and emission each select their -wavelength through a monochromator or a filter. A spectrum scans the excitation or the emission -monochromator. +A plate read goes through one to five fluorescence channels in one pass (`FluorescenceChannel`), +from the top or the bottom optic. Excitation and emission each select their wavelength through a +monochromator or a filter. A spectrum scans the excitation or the emission monochromator. Filter detection scans every filter position; a z-profile reads one well over its focal heights, and with a target the reader fits the gain at its peak. """ @@ -69,8 +68,7 @@ class CLARIOstarFluorescenceResult(FluorescenceResult): gain: the detector gain, within `FluorescenceConfiguration.gain_range`. matrix_points: a matrix scan's counts, every measured point of each well in the order the reader sends them, keyed as ``data``; None for any other well scan. ``data`` then holds - the plain mean of each well's points; the vendor's own reduction is not verified (its - export of a 3 x 3 matrix reads 141 where the mean is 141.78). + the plain mean of each well's points. """ gain: int @@ -93,7 +91,7 @@ class CLARIOstarZProfileResult: target; None without a target. peak_focal_height: the focal height the firmware computes as the z-profile's maximum, in mm. temperature: temperature in degrees C; None: no z-scan with the temperature controller on is - captured, so the reply's temperature, if it holds one, is not decoded. + verified, so the reply's temperature, if it holds one, is not decoded. start_timestamp: when the z-scan started. end_timestamp: when its result was in. """ @@ -126,29 +124,29 @@ class FluorescenceConfiguration(MeasurementConfiguration): """Device facts of the fluorescence measurement.""" wavelength_range: Tuple[int, int] = (320, 840) - """Excitation and emission wavelengths, in nm (the operating manual's monochromator range with - an extended-red photomultiplier; up to 740 without, `Fluorescence._get_reader_configuration`).""" + """Excitation and emission wavelengths, in nm, with an extended-red photomultiplier; up to 740 + without (`Fluorescence._get_reader_configuration`).""" bandwidth_range: Tuple[int, int] = (8, 100) - """Excitation and emission bandwidths, in nm (the operating manual).""" + """Excitation and emission bandwidths, in nm.""" dichroic_range: Tuple[float, float] = (340.0, 760.0) - """Where the dichroic mirror splits excitation from emission, in nm (the operating manual; up - to 740 without an extended-red photomultiplier).""" + """Where the dichroic mirror splits excitation from emission, in nm; up to 740 without an + extended-red photomultiplier.""" gain_range: Tuple[int, int] = (0, 4095) - """Detector gain (the vendor software manual: 0 to 4095).""" + """Detector gain (0 to 4095).""" focal_height_range: Tuple[float, float] = (0.0, 25.0) - """Focal height, in mm, in 0.1 mm steps (the vendor software manual: up to 25 mm).""" + """Focal height, in mm, in 0.1 mm steps (up to 25 mm).""" excitation_filter_slots: int = 4 - """Excitation filter positions (the vendor software manual: up to 4).""" + """Excitation filter positions (up to 4).""" dichroic_filter_slots: int = 3 - """Dichroic filter positions (the vendor software manual: up to 3).""" + """Dichroic filter positions (up to 3).""" emission_filter_slots: int = 4 - """Emission filter positions (the vendor software manual: up to 4).""" + """Emission filter positions (up to 4).""" filter_slots_per_slide: int = 2 """Filter positions on each of the two excitation or emission slides (filter detection).""" - maximum_chromatics: int = 5 - """Fluorescence channels per read, the vendor's chromatics (the vendor software: up to 5).""" + maximum_fluorescence_channels: int = 5 + """Fluorescence channels per read (up to 5).""" maximum_spectrum_wavelengths: int = 1000 - """Wavelengths per spectrum (the vendor software manual: up to 1000 measurement points).""" + """Wavelengths per spectrum (up to 1000).""" # ---------------------------------------- @@ -159,13 +157,13 @@ class FluorescenceConfiguration(MeasurementConfiguration): def _compute_band_edges(wavelength: float, bandwidth: float) -> Tuple[int, int]: """The band's upper and lower edge in 0.1 nm: `wavelength` +/- half `bandwidth`. - The nominal edges; the vendor software sends each band narrower (14.6 nm of 15). + The nominal edges. """ return round((wavelength + bandwidth / 2) * 10), round((wavelength - bandwidth / 2) * 10) def _compute_dichroic(excitation: Tuple[int, int], emission: Tuple[int, int]) -> int: - """The default dichroic split in 0.1 nm, rounded half to even, as the vendor's. + """The default dichroic split in 0.1 nm, rounded half to even. Midway between the two bands' facing edges: the excitation band's top and the emission band's bottom, or the other way round with excitation above emission. Each band is (upper, lower) edge @@ -200,8 +198,8 @@ class Fluorescence(Measurement): _WELL_SCAN_CODE = 0x03 _TRAILER_START = 0x00 - # Without an extended-red photomultiplier reading fluorescence, the vendor software refuses - # excitation, emission or a dichroic split above 740 nm. + # Without an extended-red photomultiplier reading fluorescence, excitation, emission and a + # dichroic split above 740 nm are refused. _STANDARD_WAVELENGTH_RANGE = (320, 740) _STANDARD_DICHROIC_RANGE = (340.0, 740.0) @@ -235,9 +233,9 @@ def __init__( (`_get_reader_configuration`). """ super().__init__(driver, configuration or self._get_reader_configuration(driver.configuration)) - self._default_excitation_bandwidth = 15 # nm, the vendor's default - self._default_emission_bandwidth = 20 # nm, the vendor's default - self._default_optic_position: OpticPosition = "top" # the vendor's default + self._default_excitation_bandwidth = 15 # nm + self._default_emission_bandwidth = 20 # nm + self._default_optic_position: OpticPosition = "top" # The filters each slide holds, by slot: `detect_all_filters`, or assigned; None until then. self.excitation_filter_slide: Optional[ExcitationFilterSlide] = None self.dichroic_filter_slide: Optional[DichroicFilterSlide] = None @@ -256,7 +254,7 @@ def _check_default_bandwidth(self, name: str, value: int) -> None: @property def default_excitation_bandwidth(self) -> int: - """Excitation bandwidth, nm, of a monochromator read given none (the vendor's: 15).""" + """Excitation bandwidth, nm, of a monochromator read given none (15 by default).""" return self._default_excitation_bandwidth @default_excitation_bandwidth.setter @@ -267,7 +265,7 @@ def default_excitation_bandwidth(self, value: int) -> None: @property def default_emission_bandwidth(self) -> int: - """Emission bandwidth, nm, of a monochromator read given none (the vendor's: 20).""" + """Emission bandwidth, nm, of a monochromator read given none (20 by default).""" return self._default_emission_bandwidth @default_emission_bandwidth.setter @@ -292,7 +290,7 @@ def _check_optic_position(self, optic_position: str, name: str = "optic_position @property def default_optic_position(self) -> OpticPosition: - """The optic a read uses given none (the vendor's: top).""" + """The optic a read uses given none (top by default).""" return self._default_optic_position @default_optic_position.setter @@ -493,7 +491,7 @@ def _check_bands( f"dichroic_split_wavelength must lie between {lower} and {upper} nm, got {split}" ) if emission[0] < excitation[1]: - # TODO(device): no read with excitation above emission is captured. + # TODO(device): no read with excitation above emission is verified. self._warn_untested("a fluorescence read with excitation above emission") lowest_split, highest_split = self.configuration.dichroic_range if not lowest_split <= split <= highest_split: @@ -536,7 +534,7 @@ def _check_fluorescence_channel( fluorescence_channel.excitation_filter is not None or fluorescence_channel.emission_filter is not None ): - # No read with an excitation or emission filter and the dichroic mirror is captured. + # No read with an excitation or emission filter and the dichroic mirror is verified. errors.append("an excitation or emission filter needs a dichroic_filter") split = fluorescence_channel.dichroic_split_wavelength if split is not None and ( @@ -592,8 +590,8 @@ def _check_read( # After the focal height: the kind of read, discrete 00 or spectrum 02. _DISCRETE = 0x00 _SPECTRUM = 0x02 - # Between two of the vendor's chromatics, one per fluorescence channel. - _CHROMATIC_SEPARATOR = bytes.fromhex("00000c") + # Between two fluorescence channels' blocks. + _FLUORESCENCE_CHANNEL_SEPARATOR = bytes.fromhex("00000c") # The excitation and emission wavelength selectors, after the emission edges: a plate read's # monochromator or filter; a spectrum's scanned and fixed monochromators. _WAVELENGTH_SELECTORS: Dict[str, int] = { @@ -603,7 +601,7 @@ def _check_read( "scanned_monochromator": 0x02, "fixed_monochromator": 0x03, } - # Pause before reading: off. No fluorescence read with a pause is captured. + # Pause before reading: off. No fluorescence read with a pause is verified. _NO_PAUSE = bytes(3) def _compute_optics( @@ -683,7 +681,7 @@ def _encode_fluorescence_channel( gain: int, selectors: Optional[Tuple[int, int]] = None, ) -> bytes: - """One fluorescence channel's 17 bytes, the vendor's chromatic: gain u16 BE, the optics, `00`. + """One fluorescence channel's 17 bytes: gain u16 BE, the optics, `00`. Args: selectors: the wavelength selectors, emission then excitation; None for each one's @@ -704,7 +702,7 @@ def _compute_run_parameters( focal_height: float, kind: int, count: int, - chromatics: Sequence[bytes], + encoded_fluorescence_channels: Sequence[bytes], optics: int = 0, flying_mode: bool = False, enhanced_dynamic_range: bool = False, @@ -714,11 +712,11 @@ def _compute_run_parameters( The run start (`_compute_run_start`, with `optics`, `flying_mode`, `enhanced_dynamic_range` and `scan_byte`), the focal height in 0.01 mm, `kind`, `count` u16 BE and `00 00 00 00 00 0c`, - the `chromatics` (`_encode_fluorescence_channel`), no pause, the run end. + the `encoded_fluorescence_channels` (`_encode_fluorescence_channel`), no pause, the run end. Args: - kind: `_DISCRETE`, or `_SPECTRUM` with the start and end chromatics between which the reader - steps. + kind: `_DISCRETE`, or `_SPECTRUM` with the start and end fluorescence channels between + which the reader steps. count: the fluorescence channels of a discrete read, or a spectrum's wavelengths. """ return ( @@ -737,7 +735,7 @@ def _compute_run_parameters( + count.to_bytes(2, "big") + bytes(5) + b"\x0c" - + self._CHROMATIC_SEPARATOR.join(chromatics) + + self._FLUORESCENCE_CHANNEL_SEPARATOR.join(encoded_fluorescence_channels) + self._NO_PAUSE + self._compute_run_end(measurement.flashes) ) @@ -804,11 +802,11 @@ def _get_result_optics( # Filter detection # ---------------------------------------- - # Filter detection `24`, mode byte: the slide's code OR bit 5, which the vendor always sets. + # Filter detection `24`, mode byte: the slide's code OR bit 5, always set. _FILTER_SCAN_SLIDES: Dict[str, int] = {"excitation": 0x00, "emission": 0x01, "dichroic": 0x03} _FILTER_SCAN_BIT_5 = 0x20 - # The emission detector gains an emission scan sends before the slide positions, as the vendor - # sends them; excitation and dichroic scans send zeros. + # The emission detector gains an emission scan sends before the slide positions; excitation and + # dichroic scans send zeros. _EMISSION_SCAN_GAINS = (1100, 1200, 1100, 1150) # Seconds one position may take: excitation and dichroic 6.4 s at most, emission 48.6 s. _FILTER_SCAN_TIMEOUT = 20.0 @@ -874,10 +872,10 @@ def _compute_optical_filter( ) -> Optional[OpticalFilter]: """The excitation or emission filter a FILTER_RESULT describes; None for an empty position. - As the vendor decides: + By the result's fields: - a bandwidth: a band-pass between the edges; - else a first edge with a slope: a long-pass, open above; - - else a second edge with a slope: a short-pass, its band not stated (not captured). + - else a second edge with a slope: a short-pass, its band not stated (not verified). """ bandwidth, first_edge, second_edge, first_slope, second_slope = result if bandwidth > 0: @@ -885,7 +883,7 @@ def _compute_optical_filter( if first_edge > 0 and first_slope != 0: return OpticalFilter(slot, passbands=((first_edge / 10, None),)) if second_edge > 0 and second_slope != 0: - # TODO(device): no short-pass filter is captured; state its band once a reader reports one. + # TODO(device): no short-pass filter is verified; state its band once a reader reports one. logger.warning( "filter %d is a short-pass up to %s nm; its band is not stated", slot, second_edge / 10 ) @@ -898,15 +896,15 @@ def _compute_dichroic_filter( ) -> Optional[DichroicFilter]: """The dichroic a FILTER_RESULT describes; None for an empty position. - As the vendor decides: + By the result's fields: - a first edge: a long-pass that transmits from it, open above; - - else a second edge: a short-pass, its bands not stated (not captured). + - else a second edge: a short-pass, its bands not stated (not verified). """ _, first_edge, second_edge, _, _ = result if first_edge > 0: return DichroicFilter(slot, transmission_bands=((first_edge / 10, None),)) if second_edge > 0: - # TODO(device): no short-pass dichroic is captured; state its bands once a reader reports one. + # TODO(device): no short-pass dichroic is verified; state its bands once a reader reports one. logger.warning( "dichroic %d is a short-pass at %s nm; its bands are not stated", slot, second_edge / 10 ) @@ -918,7 +916,7 @@ def _compute_dichroic_filter( async def _detect_filter(self, slide: str, slot: int) -> bytes: """Scan one filter position (`24`) and return its FILTER_RESULT reply. - As the vendor: status until the data is ready (the reader may still be busy), SPECTRAL_DATA + Status until the data is ready (the reader may still be busy), SPECTRAL_DATA (`05 11`, not decoded) then FILTER_RESULT (`05 1b`), then status until idle. Any failure, a timeout or a cancelled call stops the scan (`0b 00`) first. @@ -973,7 +971,7 @@ async def _detect_filter(self, slide: str, slot: int) -> bytes: async def detect_all_filters( self, ) -> Tuple[ExcitationFilterSlide, DichroicFilterSlide, EmissionFilterSlide]: - """Detect the filters in every position, as the vendor's "Detect all filters". + """Detect the filters in every position. - One scan each: excitation 1 to 4, dichroic A to C, emission 5 to 8 (slots 1 to 4). - Excitation and dichroic positions take about 8 s each, emission about 49 s: about 4 minutes. @@ -987,8 +985,8 @@ async def detect_all_filters( Raises: RuntimeError: if the reader reports no spectrometer (absorbance), or no extended-red - photomultiplier for the emission scans, whose captured limits are its; if a scan ends - without its data. + photomultiplier for the emission scans, whose limits are verified only with one; if a + scan ends without its data. TimeoutError: if a position takes longer than its timeout (`_FILTER_SCAN_TIMEOUT`, `_EMISSION_FILTER_SCAN_TIMEOUT` for emission). ValueError: if a FILTER_RESULT is not one of its position. @@ -999,7 +997,7 @@ async def detect_all_filters( if device.extended_red_photomultiplier_tube is False: raise RuntimeError( "the reader reports no extended-red photomultiplier; the emission scans' limits are only " - "captured with one" + "verified with one" ) excitation_slide = ExcitationFilterSlide(self.configuration.excitation_filter_slots) dichroic_slide = DichroicFilterSlide(self.configuration.dichroic_filter_slots) @@ -1035,11 +1033,11 @@ async def detect_all_filters( # Z-profiles # ---------------------------------------- - # The gain definition bytes of `09`, the z-scan, as the vendor sends them. + # The gain definition bytes of `09`, the z-scan. _Z_PROFILE_GAIN_DEFINITION = bytes([0x04, 0x08]) - # The step between focal heights, in 0.01 mm: the only one captured. + # The step between focal heights, in 0.01 mm: the only one verified. _Z_PROFILE_RESOLUTION = 10 - # Before the optics, as the end of the RUN's chromatic header. + # Before the optics, as the end of a RUN's fluorescence channel header. _Z_PROFILE_OPTICS_HEADER = bytes.fromhex("0000000c") # Status reply byte 2 bit 5: the z-profile is ready. _Z_PROFILE_RESULT_READY = 0x20 @@ -1164,7 +1162,7 @@ def _decode_z_profile_result( peak_detector_percent=percent / 100 if percent else None, average_signal=int.from_bytes(reply[19:23], "big"), z_profile=z_profile, - # TODO(device): no z-scan with the temperature controller on is captured. + # TODO(device): no z-scan with the temperature controller on is verified. temperature=None, start_timestamp=start_timestamp, end_timestamp=end_timestamp, @@ -1274,7 +1272,7 @@ async def measure_z_profile( # Discrete reads # ---------------------------------------- - # Flashes per well flying mode reads with (the vendor software manual: 1 or 3). + # Flashes per well flying mode reads with (1 or 3). _FLYING_MODE_FLASHES = (1, 3) # Data reply layout byte [6], with the temperature controller on or off. _DATA_LAYOUT = 0xA1 @@ -1298,15 +1296,15 @@ def _check_arguments( The keywords are `measure`'s. Raises: - ValueError: listing every violation: not 1 to `maximum_chromatics` fluorescence channels, - not one gain per fluorescence channel, a fluorescence channel's + ValueError: listing every violation: not 1 to `maximum_fluorescence_channels` fluorescence + channels, not one gain per fluorescence channel, a fluorescence channel's (`_check_fluorescence_channel`, `_check_gain`; prefixed `fluorescence_channels[i]` when there are several), `_check_read`'s, `_check_optic_position`'s; flying mode with a well scan, with flashes other than `_FLYING_MODE_FLASHES`, with settling time or with enhanced dynamic range; enhanced dynamic range with orbital or spiral averaging. """ - maximum = self.configuration.maximum_chromatics + maximum = self.configuration.maximum_fluorescence_channels count = len(fluorescence_channels) errors = ( [] if 1 <= count <= maximum else [f"give 1 to {maximum} fluorescence channels, got {count}"] @@ -1359,7 +1357,7 @@ def _decode_data_reply( - Bytes 11-14: the ceiling a saturated count reads (700,000,000 with enhanced dynamic range). - Bytes 32-33: the temperature in 0.1 C, 0 when not monitored. - From byte 34: u32 BE counts, by fluorescence channel, then by well, a well's points - together (an absorbance matrix's layout; no fluorescence matrix of several wells captured). + together (an absorbance matrix's layout; no fluorescence matrix of several wells verified). Raises: ValueError: if the reply is incomplete or not the layout of this read. @@ -1501,13 +1499,13 @@ async def measure( Args: fluorescence_channels: one `FluorescenceChannel` (`pylabrobot.lib.fluorescence`), or 1 to - `configuration.maximum_chromatics` of them, each within `_check_fluorescence_channel`; a - bandwidth None is the default bandwidth, a filter given as a slot or a name the slides' - (`detect_all_filters`). + `configuration.maximum_fluorescence_channels` of them, each within + `_check_fluorescence_channel`; a bandwidth None is the default bandwidth, a filter given + as a slot or a name the slides' (`detect_all_filters`). gain: the detector gain within `configuration.gain_range`: one for every fluorescence channel, or one per fluorescence channel in the order given. wells: the wells to measure, on the plate; None measures every well. A matrix scan reads - one well (no fluorescence matrix of several wells is captured). + one well (no fluorescence matrix of several wells is verified). focal_height: mm above the plate's base, within `configuration.focal_height_range`, in 0.1 mm steps. None reads at `default_focal_height_percent_of_well_depth` (25: a quarter up the well, for low and moderate fills). For full wells, or the most signal, focus on a @@ -1552,7 +1550,7 @@ async def measure( if focal_height is None: focal_height = self._get_default_focal_height(wells) if measurement.well_scan == "matrix" and len(wells) > 1: - # No fluorescence matrix of several wells is captured: its reply layout is unknown. + # No fluorescence matrix of several wells is verified: its reply layout is unknown. raise ValueError(f"a fluorescence matrix scan reads one well, got {len(wells)}") parameters = self._compute_run_parameters( plate, @@ -1562,7 +1560,7 @@ async def measure( focal_height=focal_height, kind=self._DISCRETE, count=len(filled), - chromatics=[ + encoded_fluorescence_channels=[ self._encode_fluorescence_channel(fluorescence_channel, gain) for fluorescence_channel, gain in zip(filled, gains) ], @@ -1611,7 +1609,7 @@ async def measure( # ---------------------------------------- _SCANS = ("excitation", "emission") - # A spectrum's scan byte: read well by well, in no reading direction, as the vendor sends it. + # A spectrum's scan byte: read well by well, in no reading direction. # A plate read's scan byte (`0a`) makes the reader send pages of another layout. _SPECTRUM_SCAN_BYTE = 0x00 # A spectrum page's layout byte [6]. @@ -1668,7 +1666,7 @@ def _check_spectrum_arguments( errors.append(f"{name} must be a whole {lowest} to {highest} nm, got {value!r}") ends_valid = False if step_size != 1: - errors.append(f"step_size must be 1 nm, the only one captured, got {step_size!r}") + errors.append(f"step_size must be 1 nm, the only one verified, got {step_size!r}") if ends_valid: maximum = self.configuration.maximum_spectrum_wavelengths count = end_wavelength - start_wavelength + 1 @@ -1806,7 +1804,7 @@ async def measure_spectrum( emission_bandwidth: nm; None for `default_emission_bandwidth`. gain: the detector gain within `configuration.gain_range`. wells: the wells to measure, on the plate; None measures every well. - step_size: nm between wavelengths: 1, the only one captured. + step_size: nm between wavelengths: 1, the only one verified. focal_height: mm above the plate's base, within `configuration.focal_height_range`, in 0.1 mm steps. None reads at `default_focal_height_percent_of_well_depth` (25: a quarter up the well, for low and moderate fills). For full wells, or the most signal, focus on a @@ -1866,7 +1864,7 @@ async def measure_spectrum( focal_height=focal_height, kind=self._SPECTRUM, count=len(wavelengths), - chromatics=[ + encoded_fluorescence_channels=[ self._encode_fluorescence_channel(start, gain, selectors), self._encode_fluorescence_channel(end, gain, selectors), ], diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/fluorescence_tests.py b/pylabrobot/bmg_labtech/clariostar/driver/features/fluorescence_tests.py index cffa814dd90..9154b7d960c 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/features/fluorescence_tests.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/fluorescence_tests.py @@ -1,4 +1,4 @@ -"""Fluorescence tests over a fake io: what the driver sends is pinned to the vendor's frames. +"""Fluorescence tests over a fake io: what the driver sends is pinned to the ground-truth frames. Except for the band edges, which this driver sends at their nominal values, and the scan byte's bit 4, which it leaves clear in flying mode, enhanced dynamic range and a matrix. @@ -53,7 +53,7 @@ ) from pylabrobot.resources import Plate, Well, cor_96_wellplate_360uL_Fb, create_ordered_items_2d -# The vendor's default read: 485/15 to 528/20 nm, gain 1000, 8.5 mm, 10 flashes. +# The default read: 485/15 to 528/20 nm, gain 1000, 8.5 mm, 10 flashes. BASELINE_RUN_FRAME = bytes.fromhex( "02009c0c0431ec2166059604602c561d060c0800ffffffffffffffffffffffff00000000000000000000000000000000" "00000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000" @@ -146,8 +146,8 @@ "008e000000940000008f0000008a000000960000008c00000090000000930000008e00000089003fd70d" ) -# The same read as the vendor's software reports it, row by row. -TEMPERATURE_37_EXPORT = [ +# The same read's ground-truth counts, row by row. +TEMPERATURE_37_GROUND_TRUTH = [ [141, 143, 165, 157, 147, 152, 150, 147, 149, 148, 2757, 149], [154, 151, 157, 155, 145, 147, 163, 155, 1816, 174, 2125, 149], [2735, 2009, 181, 2159, 1928, 1844, 1777, 1729, 1799, 191, 2133, 153], @@ -332,7 +332,7 @@ def make_fluorescence(io: FakeFTDI, plate: Optional[Plate] = None) -> Fluorescen return Fluorescence(driver) -# The filters of the captured reader, as its filter detection reports them. +# The filters of the ground-truth reader, as its filter detection reports them. EX_TR = OpticalFilter(1, "Ex TR", passbands=((282.2, 371.8),)) LP_TR = DichroicFilter(1, "LP TR", transmission_bands=((421.8, None),)) EM_615_18 = OpticalFilter(1, "615-18", passbands=((604.9, 623.2),)) @@ -341,8 +341,8 @@ def make_fluorescence(io: FakeFTDI, plate: Optional[Plate] = None) -> Fluorescen # The default read's fluorescence channel; the reads below vary it or the read-wide settings. BASELINE = FluorescenceChannel(excitation_wavelength=485, emission_wavelength=528) TEN_FLASHES = MeasurementSettings(flashes=10) -CAPTURED_FOCAL_HEIGHT = 8.5 # mm, the vendor's default, every capture's -CAPTURED_READS: Dict[str, Tuple[bytes, FluorescenceChannel, Dict[str, Any]]] = { +GROUND_TRUTH_FOCAL_HEIGHT = 8.5 # mm, every ground-truth read's +GROUND_TRUTH_READS: Dict[str, Tuple[bytes, FluorescenceChannel, Dict[str, Any]]] = { "default": (BASELINE_RUN_FRAME, BASELINE, {}), "540_590_nm": ( WAVELENGTHS_540_590_RUN_FRAME, @@ -403,13 +403,13 @@ def make_fluorescence(io: FakeFTDI, plate: Optional[Plate] = None) -> Fluorescen def with_nominal_edges( - captured: bytes, fluorescence_channels: Sequence[FluorescenceChannel] + ground_truth: bytes, fluorescence_channels: Sequence[FluorescenceChannel] ) -> bytes: - """`captured`'s payload with each monochromator's band edges at their nominal values. + """`ground_truth`'s payload with each monochromator's band edges at their nominal values. - The vendor software sends each band narrower (14.6 nm of 15, 19.4 nm of 20). + The ground truth has each band narrower (14.6 nm of 15, 19.4 nm of 20). """ - payload = bytearray(ftdi_extract_payload(captured)) + payload = bytearray(ftdi_extract_payload(ground_truth)) # Each fluorescence channel is gain, the excitation edges, the dichroic, the emission edges, the # wavelength selectors and `00 00 0c`; the last is followed by 19 bytes. first = len(payload) - 36 - 20 * (len(fluorescence_channels) - 1) @@ -432,7 +432,7 @@ def with_nominal_edges( def without_equidistant_cycles(payload: bytes) -> bytes: - """`payload` with scan byte bit 4 clear: the vendor's equidistant kinetic cycles, which this + """`payload` with scan byte bit 4 clear: equidistant kinetic cycles, which this driver does not send (flying mode `1e`, enhanced dynamic range and a matrix `1a`).""" patched = bytearray(payload) patched[64] &= ~0x10 # the family byte, the 63-byte plate block, then the scan byte @@ -447,7 +447,7 @@ async def read( io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURING, STATUS_MEASURED, reply] feature = make_fluorescence(io, fluorescence_plate()) return feature, await feature.measure( - fluorescence_channel, **{"gain": 1000, "focal_height": CAPTURED_FOCAL_HEIGHT, **arguments} + fluorescence_channel, **{"gain": 1000, "focal_height": GROUND_TRUTH_FOCAL_HEIGHT, **arguments} ) @@ -470,7 +470,7 @@ async def test_a_set_default_bandwidth_is_sent_and_checked(self): replace(BASELINE, emission_wavelength=600), measurement_settings=TEN_FLASHES, gain=1000, - focal_height=CAPTURED_FOCAL_HEIGHT, + focal_height=GROUND_TRUTH_FOCAL_HEIGHT, ) given = replace(BASELINE, emission_wavelength=600, emission_bandwidth=100) self.assertEqual( # emission 600 nm, 100 nm wide @@ -478,8 +478,8 @@ async def test_a_set_default_bandwidth_is_sent_and_checked(self): with_nominal_edges(EMISSION_BANDWIDTH_100_RUN_FRAME, [given]), ) - async def test_captured_reads_are_sent_with_nominal_band_edges(self): - for name, (captured, fluorescence_channel, arguments) in CAPTURED_READS.items(): + async def test_ground_truth_reads_are_sent_with_nominal_band_edges(self): + for name, (ground_truth, fluorescence_channel, arguments) in GROUND_TRUTH_READS.items(): with self.subTest(name): io = FakeFTDI() _, result = await read( @@ -489,7 +489,8 @@ async def test_captured_reads_are_sent_with_nominal_band_edges(self): **{"measurement_settings": TEN_FLASHES, **arguments}, ) self.assertEqual( - ftdi_extract_payload(io.written[1]), with_nominal_edges(captured, [fluorescence_channel]) + ftdi_extract_payload(io.written[1]), + with_nominal_edges(ground_truth, [fluorescence_channel]), ) # The result says what the read used: a filter's passband, or the monochromator's band. excitation_filter, emission_filter = ( @@ -512,14 +513,14 @@ async def test_captured_reads_are_sent_with_nominal_band_edges(self): class ReadTests(unittest.IsolatedAsyncioTestCase): - async def test_counts_are_the_vendors_export(self): + async def test_counts_are_the_ground_truth(self): _, result = await read(FakeFTDI(), TEMPERATURE_37_DATA_REPLY) - exported = { + expected = { f"{'ABCDEFGH'[row]}{column + 1}": float(value) - for row, values in enumerate(TEMPERATURE_37_EXPORT) + for row, values in enumerate(TEMPERATURE_37_GROUND_TRUTH) for column, value in enumerate(values) } - self.assertEqual(result.data, exported) + self.assertEqual(result.data, expected) self.assertEqual((result.excitation_wavelength, result.emission_wavelength), (485, 528)) self.assertEqual(result.temperature, 37.0) @@ -588,7 +589,8 @@ async def test_out_of_range_reads_send_nothing(self): self.assertRaises(ValueError), ): await feature.measure( - fluorescence_channel, **{"gain": 1000, "focal_height": CAPTURED_FOCAL_HEIGHT, **arguments} + fluorescence_channel, + **{"gain": 1000, "focal_height": GROUND_TRUTH_FOCAL_HEIGHT, **arguments}, ) with self.assertRaises(ValueError) as raised: await feature.measure(replace(BASELINE, emission_wavelength=528.0), gain=fractional_gain) @@ -599,7 +601,7 @@ async def test_out_of_range_reads_send_nothing(self): class ExcitationAboveEmissionTests(unittest.IsolatedAsyncioTestCase): async def test_a_read_is_sent_with_the_split_between_the_bands_and_warns(self): - """Not captured: excitation 600/15 nm above emission 500/20 nm; the split lies midway between + """No ground truth: excitation 600/15 nm above emission 500/20 nm; the split lies midway between the bands' facing edges, 510.0 and 592.5 nm: 551.2 nm.""" io = FakeFTDI() with patch.object(measurement_module.logger, "warning") as warning: @@ -628,7 +630,7 @@ async def test_column_1_as_the_reader_read_it(self): io.replies.append(bytes.fromhex(session["fluorescence_column_1_reply"])) plate = cor_96_wellplate_360uL_Fb("plate") result = await make_fluorescence(io, plate).measure( - BASELINE, wells=plate.get_items("A1:H1"), gain=1000, focal_height=CAPTURED_FOCAL_HEIGHT + BASELINE, wells=plate.get_items("A1:H1"), gain=1000, focal_height=GROUND_TRUTH_FOCAL_HEIGHT ) self.assertEqual(io.written[1], bytes.fromhex(session["fluorescence_column_1_run"])) self.assertEqual(list(result.data.values()), [68.0, 62.0, 72.0, 64.0, 67.0, 69.0, 67.0, 68.0]) @@ -675,26 +677,26 @@ async def test_a_well_without_a_floor_thickness_sends_nothing(self): @functools.lru_cache(maxsize=None) -def load_captures() -> Dict[str, Any]: - """Larger frames, as hex: replies with the same read as the vendor's software reports it. +def load_ground_truth() -> Dict[str, Any]: + """Larger frames, as hex: replies with the same read's ground-truth counts. Row by row, one grid per fluorescence channel; each spectrum's replies in order. """ - path = os.path.join(os.path.dirname(__file__), "test_data", "fluorescence_captures.json.gz") + path = os.path.join(os.path.dirname(__file__), "test_data", "fluorescence_ground_truth.json.gz") with gzip.open(path, "rt") as f: return dict(json.load(f)) -def keyed_by_well(export: List[List[int]]) -> Dict[str, float]: - """An export grid, row by row, keyed by well identifier.""" +def keyed_by_well(grid: List[List[int]]) -> Dict[str, float]: + """A grid of counts, row by row, keyed by well identifier.""" return { f"{'ABCDEFGHIJKLMNOP'[row]}{column + 1}": float(value) - for row, values in enumerate(export) + for row, values in enumerate(grid) for column, value in enumerate(values) } -async def read_capture( +async def read_ground_truth( reply: bytes, fluorescence_channels: Union[FluorescenceChannel, Sequence[FluorescenceChannel]] = BASELINE, plate: Optional[Plate] = None, @@ -707,15 +709,15 @@ async def read_capture( feature = make_fluorescence(io, fluorescence_plate() if plate is None else plate) feature._driver.configuration.bottom_measurement_available = bottom_measurement_available return io, await feature.measure( - fluorescence_channels, **{"gain": 1000, "focal_height": CAPTURED_FOCAL_HEIGHT, **arguments} + fluorescence_channels, **{"gain": 1000, "focal_height": GROUND_TRUTH_FOCAL_HEIGHT, **arguments} ) class BottomOpticTests(unittest.IsolatedAsyncioTestCase): - async def test_a_bottom_read_is_the_vendors(self): - capture = load_captures()["bottom_optic"] - io, result = await read_capture( - bytes.fromhex(capture["reply"]), + async def test_a_bottom_read_is_the_ground_truth(self): + ground_truth = load_ground_truth()["bottom_optic"] + io, result = await read_ground_truth( + bytes.fromhex(ground_truth["reply"]), bottom_measurement_available=True, optic_position="bottom", measurement_settings=TEN_FLASHES, @@ -723,19 +725,19 @@ async def test_a_bottom_read_is_the_vendors(self): self.assertEqual( ftdi_extract_payload(io.written[1]), with_nominal_edges(BOTTOM_RUN_FRAME, [BASELINE]) ) - self.assertEqual(result.data, keyed_by_well(capture["export"])) + self.assertEqual(result.data, keyed_by_well(ground_truth["expected"])) async def test_the_default_optic_position_is_read_with_and_checked(self): - capture = load_captures()["bottom_optic"] + ground_truth = load_ground_truth()["bottom_optic"] io = FakeFTDI(chunk=4096) io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURING, STATUS_MEASURED] - io.replies.append(bytes.fromhex(capture["reply"])) + io.replies.append(bytes.fromhex(ground_truth["reply"])) feature = make_fluorescence(io, fluorescence_plate()) feature._driver.configuration.bottom_measurement_available = True self.assertEqual(feature.default_optic_position, "top") feature.default_optic_position = "bottom" await feature.measure( - BASELINE, measurement_settings=TEN_FLASHES, gain=1000, focal_height=CAPTURED_FOCAL_HEIGHT + BASELINE, measurement_settings=TEN_FLASHES, gain=1000, focal_height=GROUND_TRUTH_FOCAL_HEIGHT ) self.assertEqual( ftdi_extract_payload(io.written[1]), with_nominal_edges(BOTTOM_RUN_FRAME, [BASELINE]) @@ -752,7 +754,7 @@ async def test_no_bottom_optic_or_an_unknown_one_sends_nothing(self): feature._driver.configuration.bottom_measurement_available = available with self.subTest(position), self.assertRaises(ValueError): await feature.measure( # type: ignore[call-overload] - BASELINE, optic_position=position, gain=1000, focal_height=CAPTURED_FOCAL_HEIGHT + BASELINE, optic_position=position, gain=1000, focal_height=GROUND_TRUTH_FOCAL_HEIGHT ) self.assertEqual(io.written, []) @@ -769,23 +771,26 @@ async def test_no_bottom_optic_or_an_unknown_one_sends_nothing(self): class FluorescenceChannelsTests(unittest.IsolatedAsyncioTestCase): - async def test_two_fluorescence_channels_are_the_vendors_read(self): - capture = load_captures()["two_fluorescence_channels"] - io, results = await read_capture( - bytes.fromhex(capture["reply"]), DUAL_FLUORESCENCE_CHANNELS, measurement_settings=TEN_FLASHES + async def test_two_fluorescence_channels_are_the_ground_truth(self): + ground_truth = load_ground_truth()["two_fluorescence_channels"] + io, results = await read_ground_truth( + bytes.fromhex(ground_truth["reply"]), + DUAL_FLUORESCENCE_CHANNELS, + measurement_settings=TEN_FLASHES, ) expected = with_nominal_edges(DUAL_RUN_FRAME, DUAL_FLUORESCENCE_CHANNELS) self.assertEqual(ftdi_extract_payload(io.written[1]), expected) self.assertEqual( - [result.data for result in results], [keyed_by_well(grid) for grid in capture["export"]] + [result.data for result in results], + [keyed_by_well(grid) for grid in ground_truth["expected"]], ) self.assertEqual([result.excitation_wavelength for result in results], [485, 610]) self.assertEqual([result.emission_bandwidth for result in results], [20, 50]) async def test_each_fluorescence_channel_is_sent_with_its_own_gain(self): - capture = load_captures()["two_fluorescence_channels"] - io, results = await read_capture( - bytes.fromhex(capture["reply"]), + ground_truth = load_ground_truth()["two_fluorescence_channels"] + io, results = await read_ground_truth( + bytes.fromhex(ground_truth["reply"]), DUAL_FLUORESCENCE_CHANNELS, gain=[1000, 1500], measurement_settings=TEN_FLASHES, @@ -818,16 +823,16 @@ async def test_out_of_range_fluorescence_channels_send_nothing(self): class FlyingModeTests(unittest.IsolatedAsyncioTestCase): - async def test_flying_mode_is_the_vendors_read(self): - capture = load_captures()["flying_mode"] - io, result = await read_capture( - bytes.fromhex(capture["reply"]), + async def test_flying_mode_is_the_ground_truth(self): + ground_truth = load_ground_truth()["flying_mode"] + io, result = await read_ground_truth( + bytes.fromhex(ground_truth["reply"]), flying_mode=True, measurement_settings=MeasurementSettings(settling_time=0, flashes=1), ) expected = with_nominal_edges(FLYING_MODE_RUN_FRAME, [BASELINE]) self.assertEqual(ftdi_extract_payload(io.written[1]), without_equidistant_cycles(expected)) - self.assertEqual(result.data, keyed_by_well(capture["export"])) + self.assertEqual(result.data, keyed_by_well(ground_truth["expected"])) async def test_what_flying_mode_cannot_read_sends_nothing(self): io = FakeFTDI() @@ -845,22 +850,22 @@ async def test_what_flying_mode_cannot_read_sends_nothing(self): enhanced_dynamic_range=enhanced, measurement_settings=settings, gain=1000, - focal_height=CAPTURED_FOCAL_HEIGHT, + focal_height=GROUND_TRUTH_FOCAL_HEIGHT, ) self.assertEqual(io.written, []) class EnhancedDynamicRangeTests(unittest.IsolatedAsyncioTestCase): - async def test_enhanced_dynamic_range_is_the_vendors_read(self): - capture = load_captures()["enhanced_dynamic_range"] - reply = bytes.fromhex(capture["reply"]) + async def test_enhanced_dynamic_range_is_the_ground_truth(self): + ground_truth = load_ground_truth()["enhanced_dynamic_range"] + reply = bytes.fromhex(ground_truth["reply"]) with patch.object(measurement_module.logger, "warning") as warning: - io, result = await read_capture( + io, result = await read_ground_truth( reply, enhanced_dynamic_range=True, measurement_settings=TEN_FLASHES ) expected = with_nominal_edges(ENHANCED_DYNAMIC_RANGE_RUN_FRAME, [BASELINE]) self.assertEqual(ftdi_extract_payload(io.written[1]), without_equidistant_cycles(expected)) - self.assertEqual(result.data, keyed_by_well(capture["export"])) + self.assertEqual(result.data, keyed_by_well(ground_truth["expected"])) decode = make_fluorescence(FakeFTDI())._decode_data_reply _, ceiling, _ = decode(ftdi_extract_payload(reply), 1, 96) self.assertEqual(ceiling, 700_000_000) @@ -876,7 +881,7 @@ async def test_with_orbital_or_spiral_averaging_sends_nothing(self): enhanced_dynamic_range=True, measurement_settings=MeasurementSettings(well_scan=well_scan), # type: ignore[arg-type] gain=1000, - focal_height=CAPTURED_FOCAL_HEIGHT, + focal_height=GROUND_TRUTH_FOCAL_HEIGHT, ) self.assertEqual(io.written, []) @@ -884,7 +889,7 @@ async def test_with_orbital_or_spiral_averaging_sends_nothing(self): class MatrixTests(unittest.IsolatedAsyncioTestCase): async def test_a_matrix_returns_every_point(self): plate = fluorescence_plate() - io, result = await read_capture( + io, result = await read_ground_truth( MATRIX_DATA_REPLY, plate=plate, wells=[plate.get_well("A1")], @@ -896,7 +901,7 @@ async def test_a_matrix_returns_every_point(self): self.assertEqual(ftdi_extract_payload(io.written[1]), without_equidistant_cycles(expected)) points = [145.0, 147.0, 142.0, 136.0, 144.0, 144.0, 137.0, 142.0, 139.0] self.assertEqual(result.matrix_points, {"A1": points}) - # The plain mean: the driver's choice, not the vendor's (its export reads 141). + # The plain mean: the driver's choice (the ground truth reads 141). self.assertEqual(result.data, {"A1": sum(points) / 9}) async def test_a_matrix_of_several_wells_sends_nothing(self): @@ -904,13 +909,13 @@ async def test_a_matrix_of_several_wells_sends_nothing(self): plate = fluorescence_plate() feature = make_fluorescence(io, plate) settings = MeasurementSettings(well_scan="matrix", matrix_size=3) - with self.assertRaises(ValueError): # no fluorescence matrix of several wells is captured + with self.assertRaises(ValueError): # no fluorescence matrix of several wells is verified await feature.measure( BASELINE, wells=plate.get_items("A1:B1"), measurement_settings=settings, gain=1000, - focal_height=CAPTURED_FOCAL_HEIGHT, + focal_height=GROUND_TRUTH_FOCAL_HEIGHT, ) self.assertEqual(io.written, []) @@ -940,10 +945,10 @@ def plate_384() -> Plate: class PlateTests(unittest.IsolatedAsyncioTestCase): - async def test_384_wells_are_the_vendors_read(self): - capture = load_captures()["plate_384"] - io, result = await read_capture( - bytes.fromhex(capture["reply"]), + async def test_384_wells_are_the_ground_truth(self): + ground_truth = load_ground_truth()["plate_384"] + io, result = await read_ground_truth( + bytes.fromhex(ground_truth["reply"]), plate=plate_384(), focal_height=5.0, measurement_settings=TEN_FLASHES, @@ -951,7 +956,7 @@ async def test_384_wells_are_the_vendors_read(self): self.assertEqual( ftdi_extract_payload(io.written[1]), with_nominal_edges(PLATE_384_RUN_FRAME, [BASELINE]) ) - self.assertEqual(result.data, keyed_by_well(capture["export"])) + self.assertEqual(result.data, keyed_by_well(ground_truth["expected"])) async def test_a_single_well_as_the_reader_answered(self): io = FakeFTDI(chunk=4096) @@ -962,14 +967,14 @@ async def test_a_single_well_as_the_reader_answered(self): wells=[plate.get_well("A1")], measurement_settings=TEN_FLASHES, gain=1000, - focal_height=CAPTURED_FOCAL_HEIGHT, + focal_height=GROUND_TRUTH_FOCAL_HEIGHT, ) expected = with_nominal_edges(SINGLE_WELL_RUN_FRAME, [BASELINE]) self.assertEqual(ftdi_extract_payload(io.written[1]), expected) self.assertEqual(result.data, {"A1": 145.0}) -# The spectra's fixed excitation or emission and their scans, as the captures read them. +# The spectra's fixed excitation or emission and their scans, as the ground truth reads them. SPECTRUM_WELLS = ["A1", "B1", "C2", "D2"] EXCITATION_SPECTRUM: Dict[str, Any] = dict( scan="excitation", @@ -990,13 +995,13 @@ async def test_a_single_well_as_the_reader_answered(self): def spectrum_replies(name: str) -> List[bytes]: - """The reader's replies to capture `name`'s RUN, status polls and data requests, in order: each - page after a status with data ready, the last status idle.""" - return [bytes.fromhex(frame) for frame in load_captures()[name]["replies"]] + """The reader's replies to ground truth `name`'s RUN, status polls and data requests, in order: + each page after a status with data ready, the last status idle.""" + return [bytes.fromhex(frame) for frame in load_ground_truth()[name]["replies"]] def spectrum_pages(name: str) -> List[bytes]: - """The data pages of capture `name`, in the order received.""" + """The data pages of ground truth `name`, in the order received.""" replies = [ftdi_extract_payload(reply) for reply in spectrum_replies(name)] return [reply for reply in replies if reply[0] == 0x02] @@ -1021,11 +1026,11 @@ async def measure(self, replies: List[bytes], arguments: Dict[str, Any]): feature = make_fluorescence(io, plate) result = await feature.measure_spectrum( wells=[plate.get_well(well) for well in SPECTRUM_WELLS], - **{"gain": 1000, "focal_height": CAPTURED_FOCAL_HEIGHT, **arguments}, + **{"gain": 1000, "focal_height": GROUND_TRUTH_FOCAL_HEIGHT, **arguments}, ) return io, result - async def test_an_excitation_spectrum_is_the_vendors_read(self): + async def test_an_excitation_spectrum_is_the_ground_truth(self): io, result = await self.measure(spectrum_replies("excitation_spectrum"), EXCITATION_SPECTRUM) fluorescence_channels = [ FluorescenceChannel( @@ -1044,11 +1049,11 @@ async def test_an_excitation_spectrum_is_the_vendors_read(self): self.assertEqual((result.excitation_wavelength, result.excitation_bandwidth), (None, 10)) self.assertEqual((result.emission_wavelength, result.emission_bandwidth), (800, 20)) self.assertEqual(result.gain, 1000) - # The raw counts: the vendor's export is spectrally corrected. + # The raw counts: the ground truth's are spectrally corrected. self.assertEqual(counts_at(result, 400), {"A1": 41.0, "B1": 31.0, "C2": 22.0, "D2": 25.0}) self.assertEqual(list(counts_at(result, 620).values()), [46.0, 14.0, 17.0, 22.0]) - async def test_an_emission_spectrum_is_the_vendors_read(self): + async def test_an_emission_spectrum_is_the_ground_truth(self): io, result = await self.measure(spectrum_replies("emission_spectrum"), EMISSION_SPECTRUM) fluorescence_channels = [ FluorescenceChannel( @@ -1100,7 +1105,7 @@ async def test_a_short_page_stops_the_run_and_the_plate_is_read_again(self): replies = spectrum_replies("emission_spectrum") first_page = next(index for index, reply in enumerate(replies) if reply[4] == 0x02) # Not a reader's reply: the first page cut short, as an absorbance page arrived - # (ShortPageTests); no short fluorescence page is captured. + # (ShortPageTests); no short fluorescence page is verified. short = replies[:first_page] + [replies[first_page][:200], STOP_REPLY] io, result = await self.measure(short + replies, EMISSION_SPECTRUM) runs = [frame for frame in io.written if ftdi_extract_payload(frame)[0] == 0x04] @@ -1143,7 +1148,7 @@ async def test_out_of_range_spectra_send_nothing(self): for arguments in refused: with self.subTest(arguments=arguments), self.assertRaises(ValueError): await feature.measure_spectrum( - **{"gain": 1000, "focal_height": CAPTURED_FOCAL_HEIGHT, **arguments} + **{"gain": 1000, "focal_height": GROUND_TRUTH_FOCAL_HEIGHT, **arguments} ) self.assertEqual(io.written, []) @@ -1165,7 +1170,7 @@ def test_no_fluorescence_is_not_built(self): def test_the_wavelength_limits_follow_the_photomultipliers(self): # (extended red, dual, crossed over): the highest wavelength and dichroic split. for photomultipliers, highest in ( - ((True, True, False), (840, 760.0)), # the captured reader + ((True, True, False), (840, 760.0)), # the ground-truth reader ((True, True, True), (740, 740.0)), ((True, False, False), (840, 760.0)), ((False, False, False), (740, 740.0)), @@ -1193,7 +1198,9 @@ def load_filter_detection() -> List[Dict[str, Any]]: Each holds its `24` frame and the replies the driver reads, as hex: the status before the `24`, the reply to it, to `80` until data ready, to `05 11`, to `05 1b`, then the next status. """ - path = os.path.join(os.path.dirname(__file__), "test_data", "filter_detection_captures.json.gz") + path = os.path.join( + os.path.dirname(__file__), "test_data", "filter_detection_ground_truth.json.gz" + ) with gzip.open(path, "rt") as f: return list(json.load(f)["positions"]) @@ -1218,7 +1225,7 @@ def decode_filter_result(reply: bytes, slide: str) -> Tuple[int, int, int, int, def make_detecting_fluorescence(io: FakeFTDI) -> Fluorescence: - """A fluorescence feature of the captured reader, answered by the whole detection capture.""" + """A fluorescence feature of the ground-truth reader, answered by its whole filter detection.""" io.replies = [ bytes.fromhex(reply) for position in load_filter_detection() for reply in position["replies"] ] @@ -1254,7 +1261,7 @@ async def test_detection_as_the_reader_answered(self): self.assertEqual(io.replies, []) def test_long_pass_and_short_pass_filters_are_decoded(self): - """No long-pass or short-pass filter is captured: the replies are real results edited.""" + """No long-pass or short-pass filter has ground truth: the replies are real results edited.""" # Not a reader's reply: excitation 1's without its bandwidth, then also without its first edge. long_pass = bytearray(detection_result("excitation", 1)) long_pass[9:11] = bytes(2) @@ -1313,7 +1320,7 @@ async def test_no_spectrometer_or_extended_red_sends_nothing(self): def make_detected_slides(fluorescence_feature: Fluorescence) -> None: - """Give the feature the reader's slides as it detected them, named as the vendor names them.""" + """Give the feature the reader's slides as it detected them, with their filters' names.""" excitation = ExcitationFilterSlide(4) dichroic = DichroicFilterSlide(3) emission = EmissionFilterSlide(4) @@ -1336,7 +1343,7 @@ def make_detected_slides(fluorescence_feature: Fluorescence) -> None: async def read_with_slides(io: FakeFTDI, fluorescence_channel: FluorescenceChannel, **arguments): - """A whole-plate read through `fluorescence_channel`, gain 1000, the captured slides; feature, + """A whole-plate read through `fluorescence_channel`, gain 1000, the ground-truth slides; feature, result.""" io.replies = [ STATUS_IDLE, @@ -1348,12 +1355,12 @@ async def read_with_slides(io: FakeFTDI, fluorescence_channel: FluorescenceChann feature = make_fluorescence(io, fluorescence_plate()) make_detected_slides(feature) return feature, await feature.measure( - fluorescence_channel, **{"gain": 1000, "focal_height": CAPTURED_FOCAL_HEIGHT, **arguments} + fluorescence_channel, **{"gain": 1000, "focal_height": GROUND_TRUTH_FOCAL_HEIGHT, **arguments} ) class FilterSlideTests(unittest.IsolatedAsyncioTestCase): - async def test_slots_and_names_are_the_vendors_reads(self): + async def test_slots_and_names_are_the_ground_truth(self): """The three filters' read by slot and by name; the one-filter reads by slot.""" reads: Dict[str, Tuple[bytes, List[FluorescenceChannel]]] = { "three_filters": ( @@ -1374,14 +1381,14 @@ async def test_slots_and_names_are_the_vendors_reads(self): [FluorescenceChannel(excitation_filter=1, dichroic_filter=1, emission_wavelength=528)], ), } - for name, (captured, fluorescence_channels) in reads.items(): + for name, (ground_truth, fluorescence_channels) in reads.items(): for fluorescence_channel in fluorescence_channels: with self.subTest(name, fluorescence_channel=fluorescence_channel): io = FakeFTDI() _, result = await read_with_slides( io, fluorescence_channel, measurement_settings=TEN_FLASHES ) - expected = with_nominal_edges(captured, [fluorescence_channel]) + expected = with_nominal_edges(ground_truth, [fluorescence_channel]) self.assertEqual(ftdi_extract_payload(io.written[1]), expected) if fluorescence_channel.excitation_filter is not None: self.assertEqual(result.excitation_wavelength, (282.2 + 371.8) / 2) @@ -1389,8 +1396,8 @@ async def test_slots_and_names_are_the_vendors_reads(self): self.assertEqual(result.emission_bandwidth, 623.2 - 604.9) async def test_every_slot_is_its_detection_position(self): - """No RUN through slots 2 to 4 or dichroic B and C is captured: their RUN fields are the slide - positions of the detection's `24`.""" + """No RUN through slots 2 to 4 or dichroic B and C has ground truth: their RUN fields are the + slide positions of the detection's `24`.""" words = { (slide, slot): [int.from_bytes(request[i : i + 2], "big") for i in range(10, 28, 2)] for (slide, slot), request in zip( @@ -1447,24 +1454,24 @@ async def test_unknown_slots_and_names_send_nothing(self): self.assertEqual(io.written, []) -def load_z_profile_captures() -> Dict[str, Any]: +def load_z_profile_ground_truth() -> Dict[str, Any]: """The reader's z-scans: of A1 without a target, of D6 to 90 %, and a brightest-well search. Each holds its frame (`09`; the search `0c`, which the driver does not send, kept for its result) and the replies the driver reads, as hex: the status before it, the reply to it, to `80`, to `05 05`. """ - path = os.path.join(os.path.dirname(__file__), "test_data", "z_profile_captures.json.gz") + path = os.path.join(os.path.dirname(__file__), "test_data", "z_profile_ground_truth.json.gz") with gzip.open(path, "rt") as f: return dict(json.load(f)) -def with_nominal_z_scan_edges(captured: bytes) -> bytes: - """`captured`'s payload with 485/15 and 528/20 nm at their nominal edges (`with_nominal_edges`). +def with_nominal_z_scan_edges(ground_truth: bytes) -> bytes: + """`ground_truth`'s payload with 485/15 and 528/20 nm at their nominal edges. - The optics are the last 14 bytes. + As `with_nominal_edges`; the optics are the last 14 bytes. """ - payload = bytearray(ftdi_extract_payload(captured)) + payload = bytearray(ftdi_extract_payload(ground_truth)) for offset, edges in ((-14, _compute_band_edges(485, 15)), (-8, _compute_band_edges(528, 20))): for index, value in enumerate(edges): start = len(payload) + offset + 2 * index @@ -1473,18 +1480,19 @@ def with_nominal_z_scan_edges(captured: bytes) -> bytes: async def run_z_profile(name: str, well: str, **arguments): - """Capture `name`'s z-scan of `well` answered by its replies; the io, the capture, the result.""" - capture = load_z_profile_captures()[name] + """Ground truth `name`'s z-scan of `well` answered by its replies; the io, the ground truth, + the result.""" + ground_truth = load_z_profile_ground_truth()[name] io = FakeFTDI(chunk=4096) - io.replies = [bytes.fromhex(reply) for reply in capture["replies"]] + io.replies = [bytes.fromhex(reply) for reply in ground_truth["replies"]] plate = fluorescence_plate() feature = make_fluorescence(io, plate) result = await feature.measure_z_profile(BASELINE, well=plate.get_well(well), **arguments) - return io, capture, result + return io, ground_truth, result class ZProfileTests(unittest.IsolatedAsyncioTestCase): - async def test_z_scans_are_sent_and_decoded_as_the_vendors(self): + async def test_z_scans_are_sent_and_decoded_as_the_ground_truth(self): """A1 without a target and D6 to 90 %.""" z_scans = { "z_profile_without_target": ("A1", None, (15.0, None, "A1", None, None, 60920)), @@ -1492,10 +1500,10 @@ async def test_z_scans_are_sent_and_decoded_as_the_vendors(self): } for name, (well, target, expected) in z_scans.items(): with self.subTest(name): - io, capture, result = await run_z_profile(name, well, gain_target_percent=target) + io, ground_truth, result = await run_z_profile(name, well, gain_target_percent=target) self.assertEqual( ftdi_extract_payload(io.written[1]), - with_nominal_z_scan_edges(bytes.fromhex(capture["request"])), + with_nominal_z_scan_edges(bytes.fromhex(ground_truth["request"])), ) self.assertEqual( ( @@ -1521,7 +1529,7 @@ def test_a_height_below_0_is_decoded(self): """Not a reader's reply: the brightest-well search's result, last point and peak -0.60 mm.""" reply = bytearray( ftdi_extract_payload( - bytes.fromhex(load_z_profile_captures()["brightest_well_search"]["replies"][-1]) + bytes.fromhex(load_z_profile_ground_truth()["brightest_well_search"]["replies"][-1]) ) ) points = int.from_bytes(reply[23:25], "big") @@ -1538,7 +1546,7 @@ def test_a_height_below_0_is_decoded(self): def test_a_reply_not_of_this_plate_is_refused(self): """The brightest-well search's result, B11, cut short; then of column 13 (not a reply).""" reply = ftdi_extract_payload( - bytes.fromhex(load_z_profile_captures()["brightest_well_search"]["replies"][-1]) + bytes.fromhex(load_z_profile_ground_truth()["brightest_well_search"]["replies"][-1]) ) off_plate = bytearray(reply) off_plate[15] = 13 @@ -1550,9 +1558,9 @@ def test_a_reply_not_of_this_plate_is_refused(self): async def test_a_z_scan_ending_without_its_result_stops(self): """Not a reader's reply: an idle status with byte 2 bit 5 clear right after the `09`.""" - capture = load_z_profile_captures()["z_profile_without_target"] + ground_truth = load_z_profile_ground_truth()["z_profile_without_target"] io = FakeFTDI() - replies = [bytes.fromhex(reply) for reply in capture["replies"]] + replies = [bytes.fromhex(reply) for reply in ground_truth["replies"]] io.replies = [replies[0], replies[1], replies[0], STOP_REPLY] plate = fluorescence_plate() with self.assertRaises(RuntimeError): diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/luminescence.py b/pylabrobot/bmg_labtech/clariostar/driver/features/luminescence.py new file mode 100644 index 00000000000..6e266a6451c --- /dev/null +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/luminescence.py @@ -0,0 +1,375 @@ +"""CLARIOstar luminescence: the light a sample emits, through the emission monochromator. + +A basic plate read: the top optic, each well at its centre, enhanced dynamic range on, one +emission band through the monochromator. The focal height, gain, emission band, normalization time, +measurement interval, settling time, reading direction and shaking are sent; the bytes between them +are fixed. +""" + +import logging +from dataclasses import dataclass, replace +from datetime import datetime +from typing import TYPE_CHECKING, List, Optional, Sequence, Tuple + +from pylabrobot.lib.luminescence.results import LuminescenceResult +from pylabrobot.resources import Plate, Well + +from .fluorescence import Fluorescence, _compute_band_edges +from .measurement import ( + Measurement, + MeasurementConfiguration, + MeasurementSettings, + ShakeSettings, + _get_measured_identifiers, + _get_readings_by_well, +) + +if TYPE_CHECKING: + from ..configuration import DeviceConfiguration + from ..master import CLARIOstarDriver + +logger = logging.getLogger(__name__) + + +# ---------------------------------------- +# Results and device facts +# ---------------------------------------- + + +@dataclass +class CLARIOstarLuminescenceResult(LuminescenceResult): + """A CLARIOstar luminescence result, with the detector gain it was read with. + + Attributes: + gain: the detector gain, within `LuminescenceConfiguration.gain_range`. + """ + + gain: int + + +@dataclass +class LuminescenceConfiguration(MeasurementConfiguration): + """Device facts of the luminescence measurement.""" + + wavelength_range: Tuple[int, int] = (320, 840) + """Emission wavelength, in nm: the emission monochromator's (up to 740 without the extended-red + photomultiplier on the luminescence path, `Luminescence._get_reader_configuration`).""" + bandwidth_range: Tuple[int, int] = (8, 100) + """Emission bandwidth, in nm: the emission monochromator's, as for fluorescence.""" + gain_range: Tuple[int, int] = (0, 4095) + """Detector gain, as for fluorescence (2000 and 3500 read on hardware).""" + focal_height_range: Tuple[float, float] = (0.0, 25.0) + """Focal height, in mm, in 0.1 mm steps (0 to 25, as for fluorescence).""" + time_range: Tuple[float, float] = (0.01, 655.35) + """Normalization time and measurement interval, in s, in 0.01 s steps: what their u16 field + holds. The reader's own limits are not known; 0.20, 0.80, 1.00 and 2.00 s read on hardware.""" + + +class Luminescence(Measurement): + """Luminescence measurement. + + Reached as `driver.luminescence`, built at setup only if the reader reports a luminescence + measurement channel. + """ + + configuration: LuminescenceConfiguration + + _MODE = 0x01 + # No `_WELL_SCAN_CODE`: a luminescence read is a point read, without a well-scan field. + _TRAILER_START = 0x00 + + @classmethod + def _get_reader_configuration(cls, device: "DeviceConfiguration") -> LuminescenceConfiguration: + """The luminescence facts of the reader `device` describes: its wavelength limits. + + The extended range needs the extended-red photomultiplier on the luminescence path: fitted, + and on a dual-photomultiplier reader crossed over; otherwise fluorescence's standard range. + Unknown hardware keeps the defaults. + """ + configuration = LuminescenceConfiguration() + standard = device.extended_red_photomultiplier_tube is False or bool( + device.dual_photomultiplier_tubes and device.photomultiplier_tube_crossover is False + ) + if standard: + return replace(configuration, wavelength_range=Fluorescence._STANDARD_WAVELENGTH_RANGE) + return configuration + + def __init__( + self, driver: "CLARIOstarDriver", configuration: Optional[LuminescenceConfiguration] = None + ): + """Build the luminescence feature of `driver`. + + Args: + driver: the driver to send commands through. + configuration: the luminescence's device facts; None for the reader's + (`_get_reader_configuration`). + """ + super().__init__(driver, configuration or self._get_reader_configuration(driver.configuration)) + self._default_focal_height_percent_of_well_depth = 25.0 + + # ---------------------------------------- + # Defaults + # ---------------------------------------- + + @property + def default_focal_height_percent_of_well_depth(self) -> float: + """The focal height of a read given none, in percent of the well depth above its floor.""" + return self._default_focal_height_percent_of_well_depth + + @default_focal_height_percent_of_well_depth.setter + def default_focal_height_percent_of_well_depth(self, value: float) -> None: + """Set the default, raising unless it is 0 to 100 %.""" + self._check_default_focal_height_percent(value) + self._default_focal_height_percent_of_well_depth = value + + def _get_default_focal_height(self, wells: Sequence[Well]) -> float: + """The focal height `default_focal_height_percent_of_well_depth` up `wells`, mm.""" + return self._compute_default_focal_height( + wells, self._default_focal_height_percent_of_well_depth, self.configuration.focal_height_range + ) + + # ---------------------------------------- + # Discrete reads + # ---------------------------------------- + + # -- checks -------------------------------------------------------------------------------------- + + def _check_arguments( + self, + emission_wavelength: int, + emission_bandwidth: int, + gain: int, + focal_height: Optional[float], + normalization_time: float, + measurement_interval: float, + measurement: MeasurementSettings, + *, + timeout: Optional[float] = None, + ) -> None: + """Raise if the emission band, gain, focal height, times or read settings are out of range. + + The arguments are `measure`'s. + + Raises: + ValueError: listing every violation: an emission wavelength not a whole nm within + `wavelength_range`, `_check_bandwidth`'s, `_check_gain`'s, `_check_focal_height`'s (None + is the default's, checked with the plate), a normalization time or measurement interval + not in 0.01 s steps within `time_range`, a well scan other than a point, a pause before + reading, a timeout not positive. + """ + errors = [] + lowest, highest = self.configuration.wavelength_range + if not isinstance(emission_wavelength, int) or not lowest <= emission_wavelength <= highest: + errors.append( + f"emission_wavelength must be a whole {lowest} to {highest} nm, got {emission_wavelength!r}" + ) + errors += self._check_bandwidth( + "emission_bandwidth", emission_bandwidth, self.configuration.bandwidth_range + ) + errors += self._check_gain(gain, self.configuration.gain_range) + if focal_height is not None: + errors += self._check_focal_height(focal_height, self.configuration.focal_height_range) + shortest, longest = self.configuration.time_range + for name, value in ( + ("normalization_time", normalization_time), + ("measurement_interval", measurement_interval), + ): + if not shortest <= value <= longest or abs(value * 100 - round(value * 100)) > 1e-9: + errors.append(f"{name} must be {shortest} to {longest} s in 0.01 s steps, got {value}") + if measurement.well_scan != "point": + # Only point reads of luminescence are verified. + errors.append( + f"luminescence reads each well at its centre (well_scan 'point'), got " + f"{measurement.well_scan!r}" + ) + if measurement.pause_before_reading is not None: + errors.append("a pause before reading is not supported for luminescence") + if timeout is not None and not timeout > 0: + errors.append(f"timeout must be positive, got {timeout}") + if errors: + raise ValueError("; ".join(errors)) + + # -- RUN parameters ------------------------------------------------------------------------------ + + # Between the focal height and the gain, and between the gain and the emission edges; not + # decoded. + _AFTER_FOCAL_HEIGHT = bytes.fromhex("0000010000") + _AFTER_GAIN = bytes.fromhex("000100010001") + # Between the emission edges and the normalization time; not decoded. + _AFTER_EMISSION = bytes.fromhex("00050000") + # Between the normalization time and the run end; not decoded. + _BEFORE_RUN_END = bytes(4) + + def _compute_run_parameters( + self, + plate: Plate, + wells: List[Well], + measurement: MeasurementSettings, + shake: Optional[ShakeSettings], + *, + emission_wavelength: int, + emission_bandwidth: int, + gain: int, + focal_height: float, + normalization_time: float, + measurement_interval: float, + ) -> bytes: + """The RUN parameters of a luminescence read. + + The run start (`_compute_run_start`, with enhanced dynamic range), the focal height in + 0.01 mm, the gain u16 BE, the emission band's nominal edges in 0.1 nm (`_compute_band_edges`), + the normalization time in 0.01 s, then the run end with the measurement interval in 0.01 s + where an absorbance or fluorescence read has its flashes. + """ + upper, lower = _compute_band_edges(emission_wavelength, emission_bandwidth) + return ( + self._compute_run_start(plate, wells, measurement, shake, enhanced_dynamic_range=True) + + round(focal_height * 100).to_bytes(2, "big") + + self._AFTER_FOCAL_HEIGHT + + gain.to_bytes(2, "big") + + self._AFTER_GAIN + + upper.to_bytes(2, "big") + + lower.to_bytes(2, "big") + + self._AFTER_EMISSION + + round(normalization_time * 100).to_bytes(2, "big") + + self._BEFORE_RUN_END + + self._compute_run_end(round(measurement_interval * 100)) + ) + + # -- decoding ------------------------------------------------------------------------------------ + + # Data reply layout byte [6], of every luminescence read on hardware. + _DATA_LAYOUT = 0x25 + + def _decode_data_reply(self, reply: bytes, wells: int) -> Tuple[List[int], int, Optional[float]]: + """The counts row by row, the detector's ceiling, and the temperature. + + - Bytes 7-8, 9-10 and 18-19: the values, one per well. + - Bytes 11-14: the ceiling a saturated count reads (210,000,000 on hardware). + - Bytes 32-33: the temperature in 0.1 C, 0 when not monitored. + - From byte 34: u32 BE counts, one per well. + + Raises: + ValueError: if the reply is incomplete or not the layout of this read. + """ + if len(reply) < 34: + raise ValueError(f"luminescence reply too short: {len(reply)} bytes") + if reply[6] != self._DATA_LAYOUT: + raise ValueError(f"luminescence reply layout 0x{reply[6]:02x} is not decoded") + announced = int.from_bytes(reply[7:9], "big") + if announced != wells or int.from_bytes(reply[18:20], "big") != wells: + raise ValueError(f"luminescence reply announces {announced} values; expected {wells} wells") + if int.from_bytes(reply[9:11], "big") != wells or len(reply) < 34 + 4 * wells: + raise ValueError("luminescence reply is incomplete") + counts = [int.from_bytes(reply[34 + 4 * i : 38 + 4 * i], "big") for i in range(wells)] + raw_temperature = int.from_bytes(reply[32:34], "big") + temperature = raw_temperature / 10 if raw_temperature else None + return counts, int.from_bytes(reply[11:15], "big"), temperature + + # -- measuring ----------------------------------------------------------------------------------- + + async def measure( + self, + *, + wells: Optional[List[Well]] = None, + emission_wavelength: int = 580, + emission_bandwidth: int = 80, + gain: int = 3500, + focal_height: Optional[float] = None, + normalization_time: float = 1.0, + measurement_interval: float = 0.8, + measurement_settings: Optional[MeasurementSettings] = None, + shake_settings: Optional[ShakeSettings] = None, + timeout: Optional[float] = None, + ) -> CLARIOstarLuminescenceResult: + """Measure the plate's luminescence through the emission monochromator. + + Reads from the top with enhanced dynamic range on, each well at its centre. Cancelling the call + stops the run on the reader. No luminescent sample has been read with this driver yet: the + first read warns. + + Args: + wells: the wells to measure, on the plate; None measures every well. + emission_wavelength: whole nm within `configuration.wavelength_range`. + emission_bandwidth: whole nm within `configuration.bandwidth_range`. + gain: the detector gain within `configuration.gain_range`. + focal_height: mm above the plate's base, within `configuration.focal_height_range`, in + 0.1 mm steps. None reads at `default_focal_height_percent_of_well_depth` (25: a quarter + up the well, for low and moderate fills). + normalization_time: s the counts are normalized to, in 0.01 s steps within + `configuration.time_range` (2.00 roughly doubled the counts of 1.00 on hardware). + measurement_interval: s each well is measured, in 0.01 s steps within + `configuration.time_range` (at 0.20 a column-1 read, 8 wells, took 9.5 s on hardware + instead of 14.4 s). + measurement_settings: how to read: a point read without a pause; its flashes do not apply. + None reads with the defaults but no settling time. + shake_settings: shake the plate before the read; None does not shake. + timeout: seconds the run may take; `default_read_timeout` when None. The defaults read a + 96-well plate in about 105 s. + + Returns: + the counts of the measured wells, with the emission band and the gain they were read with. + + Raises: + RuntimeError: if no plate is in the plate holder, or the run ends without its data. + ValueError: if an argument is out of range (`_check_arguments`), the settings cannot read + the wells of the plate, or the reply is not this read's (`_decode_data_reply`). + TimeoutError: if the run takes longer than `timeout` seconds. + """ + measurement = ( + MeasurementSettings(settling_time=0.0) + if measurement_settings is None + else measurement_settings + ) + self._check_arguments( + emission_wavelength, + emission_bandwidth, + gain, + focal_height, + normalization_time, + measurement_interval, + measurement, + timeout=timeout, + ) + plate, wells = self._get_plate_and_wells(measurement, shake_settings, wells) + if focal_height is None: + focal_height = self._get_default_focal_height(wells) + parameters = self._compute_run_parameters( + plate, + wells, + measurement, + shake_settings, + emission_wavelength=emission_wavelength, + emission_bandwidth=emission_bandwidth, + gain=gain, + focal_height=focal_height, + normalization_time=normalization_time, + measurement_interval=measurement_interval, + ) + timeout = self.default_read_timeout if timeout is None else timeout + # TODO(device): no luminescent sample has been read yet, only an empty plate. + self._warn_untested("luminescence") + logger.info( + "luminescence: %d/%d nm, gain %d, %.2f s per well, %d of %d wells of %s", + emission_wavelength, + emission_bandwidth, + gain, + measurement_interval, + len(wells), + plate.num_items, + plate.name, + ) + start_timestamp = datetime.now() + replies, end_timestamp = await self._run_measurement(parameters, timeout) + identifiers = _get_measured_identifiers(plate, wells) + counts, ceiling, temperature = self._decode_data_reply(replies[0], len(identifiers)) + self._warn_saturated("luminescence", counts, ceiling) + return CLARIOstarLuminescenceResult( + data=_get_readings_by_well(plate, wells, [float(count) for count in counts]), + emission_wavelength=emission_wavelength, + emission_bandwidth=emission_bandwidth, + gain=gain, + temperature=temperature, + start_timestamp=start_timestamp, + end_timestamp=end_timestamp, + ) diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/luminescence_tests.py b/pylabrobot/bmg_labtech/clariostar/driver/features/luminescence_tests.py new file mode 100644 index 00000000000..b3fa5afc47b --- /dev/null +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/luminescence_tests.py @@ -0,0 +1,222 @@ +"""Luminescence tests over a fake io: what the driver sends is pinned to the ground truth, but for +the plate's geometry (a PLR plate; the plate block is tested with the other modes) and the emission +band's edges, which this driver sends at their nominal values; the counts are the ground truth's. + +What every mode shares (plate block, scan and settling bytes, shaking, the run and its stop) is +tested with absorbance and fluorescence; only luminescence's own fields and reply are here. +""" + +import unittest +from typing import Any, Dict, List + +from pylabrobot.bmg_labtech.clariostar.driver.configuration_tests import decoded +from pylabrobot.bmg_labtech.clariostar.driver.features.absorbance_tests import ( + RUN_REPLY, + STATUS_MEASURED, + STATUS_MEASURING, +) +from pylabrobot.bmg_labtech.clariostar.driver.features.drawer_tests import make_plate_holder +from pylabrobot.bmg_labtech.clariostar.driver.features.fluorescence_tests import ( + TEMPERATURE_37_DATA_REPLY, +) +from pylabrobot.bmg_labtech.clariostar.driver.features.luminescence import Luminescence +from pylabrobot.bmg_labtech.clariostar.driver.features.measurement import ( + Measurement, + MeasurementSettings, +) +from pylabrobot.bmg_labtech.clariostar.driver.framing import ftdi_extract_payload +from pylabrobot.bmg_labtech.clariostar.driver.master_tests import ( + STATUS_IDLE, + FakeFTDI, + make_driver, +) +from pylabrobot.resources import Plate, cor_96_wellplate_360uL_Fb + +# The ground truth: every well, 580-80 nm, gain 3500, focal height 8.5 mm, settling 0.0 s, +# normalization 1.00 s, measurement interval 0.80 s. +LUMINESCENCE_RUN_FRAME = bytes.fromhex( + "02009a0c0431e82164059604602c521d040c0800ffffffffffffffffffffffff00000000000000000000000000000000" + "00000000000000000000000000000000000000000a014000000000000000000000000000000000000000000000000000" + "00000000270f270f01035200000100000dac0001000100011834151c0005000000640000000000000000000001000000" + "0100500001000012f30d" +) + +# Its data reply: layout 25, 96 values, ceiling 210,000,000, no temperature. +LUMINESCENCE_DATA_REPLY = bytes.fromhex( + "0201aa0c02050626000025006000600c845880010001006001000100000001010000000000000000001c0000001c0000" + "00150000001200000011000000210000002100000010000000170000001400000008000000280000001e000000120000" + "001f00000012000000120000002300000015000000110000001f0000001a00000010000000160000000b000000100000" + "001b0000000d0000001f0000000b000000190000002300000029000000170000000f0000001900000020000000210000" + "0010000000100000000c000000110000001f0000001b00000016000000100000001f0000001400000017000000100000" + "001500000012000000150000001e000000190000001f0000001200000025000000120000001b000000150000001a0000" + "00100000003300000024000000230000001900000016000000150000001200000011000000150000001b000000160000" + "00370000001e000000190000000f000000160000001a0000001b0000001a000000140000001000000019000000200000" + "0012000000100000001700000016000000140000001200000015000000120000001100000011000c790d" +) + +# The ground truth's counts, row by row. +LUMINESCENCE_GROUND_TRUTH = [ + [28, 28, 21, 18, 17, 33, 33, 16, 23, 20, 8, 40], + [30, 18, 31, 18, 18, 35, 21, 17, 31, 26, 16, 22], + [11, 16, 27, 13, 31, 11, 25, 35, 41, 23, 15, 25], + [32, 33, 16, 16, 12, 17, 31, 27, 22, 16, 31, 20], + [23, 16, 21, 18, 21, 30, 25, 31, 18, 37, 18, 27], + [21, 26, 16, 51, 36, 35, 25, 22, 21, 18, 17, 21], + [27, 22, 55, 30, 25, 15, 22, 26, 27, 26, 20, 16], + [25, 32, 18, 16, 23, 22, 20, 18, 21, 18, 17, 17], +] + + +def plate() -> Plate: + """The plate the tests read: a Corning 96 360 uL flat-bottom.""" + return cor_96_wellplate_360uL_Fb("plate") + + +def make_luminescence(io: FakeFTDI, plate: Plate) -> Luminescence: + """A luminescence feature whose drawer holds `plate` in its plate holder.""" + driver = make_driver(io) + driver.configuration = decoded() + driver.drawer.plate_holder = make_plate_holder() + driver.drawer.plate_holder.assign_child_resource(plate) + return Luminescence(driver) + + +def with_fields(ground_truth: bytes, fields: Dict[int, int]) -> bytes: + """`ground_truth`'s payload on `plate()`: its plate geometry, and each u16 in `fields` replaced. + + `fields` maps payload offsets to values. + """ + payload = bytearray(ftdi_extract_payload(ground_truth)) + payload[1:13] = Measurement._encode_plate_geometry(plate())[:12] + for offset, value in fields.items(): + payload[offset : offset + 2] = value.to_bytes(2, "big") + return bytes(payload) + + +# Payload offsets of the luminescence fields, after the plate block, scan byte, pre-separator, +# `27 0f 27 0f` and the settling byte. +FOCAL_HEIGHT = 101 +GAIN = 108 +EMISSION_EDGES = 116 +NORMALIZATION_TIME = 124 +MEASUREMENT_INTERVAL = 141 + +# mm, the ground truth's. +GROUND_TRUTH_FOCAL_HEIGHT = 8.5 + +# The ground truth as this driver sends it: the emission band at its nominal edges, 620.0 / +# 540.0 nm; the ground truth has 619.6 / 540.4. +NOMINAL_EDGES = {EMISSION_EDGES: 6200, EMISSION_EDGES + 2: 5400} + + +async def read(io: FakeFTDI, **arguments): + """A read of the whole plate answered by the ground truth's reply; the result.""" + io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURING, STATUS_MEASURED, LUMINESCENCE_DATA_REPLY] + return await make_luminescence(io, plate()).measure( + **{"focal_height": GROUND_TRUTH_FOCAL_HEIGHT, **arguments} + ) + + +# The driver's asyncio.Lock needs an event loop on Python 3.9: build drivers inside one. +class LuminescenceTests(unittest.IsolatedAsyncioTestCase): + async def test_the_defaults_are_the_ground_truth(self): + io = FakeFTDI() + await read(io) + self.assertEqual( + ftdi_extract_payload(io.written[1]), with_fields(LUMINESCENCE_RUN_FRAME, NOMINAL_EDGES) + ) + + async def test_each_field_is_sent_where_the_ground_truth_has_it(self): + """Every luminescence field changed at once, to values a CLARIOstarPlus (firmware 1.35) + accepted.""" + io = FakeFTDI() + await read( + io, + focal_height=4.0, + gain=2000, + emission_wavelength=560, + emission_bandwidth=40, + normalization_time=2.0, + measurement_interval=0.2, + ) + fields = { + FOCAL_HEIGHT: 400, + GAIN: 2000, + EMISSION_EDGES: 5800, + EMISSION_EDGES + 2: 5400, + NORMALIZATION_TIME: 200, + MEASUREMENT_INTERVAL: 20, + } + self.assertEqual( + ftdi_extract_payload(io.written[1]), with_fields(LUMINESCENCE_RUN_FRAME, fields) + ) + + async def test_none_reads_a_quarter_up_the_well(self): + # Corning 96 360 uL: the well at 3.03 mm, its floor 0.50 mm, its depth 10.67 mm: 6.2 mm. + runs = [] + for focal_height in (None, 6.2): + io = FakeFTDI() + io.replies = [STATUS_IDLE, RUN_REPLY, STATUS_MEASURING, STATUS_MEASURED] + io.replies.append(LUMINESCENCE_DATA_REPLY) + feature = make_luminescence(io, cor_96_wellplate_360uL_Fb("plate")) + await feature.measure(focal_height=focal_height) + runs.append(io.written[1]) + self.assertEqual(runs[0], runs[1]) + with self.assertRaises(ValueError): + feature.default_focal_height_percent_of_well_depth = 101 + + async def test_counts_are_the_ground_truth(self): + result = await read(FakeFTDI()) + expected = { + f"{'ABCDEFGH'[row]}{column + 1}": float(value) + for row, values in enumerate(LUMINESCENCE_GROUND_TRUTH) + for column, value in enumerate(values) + } + self.assertEqual(result.data, expected) + self.assertIsNone(result.temperature) + with self.assertRaises(ValueError): # fluorescence's layout + make_luminescence(FakeFTDI(), plate())._decode_data_reply( + ftdi_extract_payload(TEMPERATURE_37_DATA_REPLY), 96 + ) + + async def test_what_luminescence_cannot_read_sends_nothing(self): + io = FakeFTDI() + feature = make_luminescence(io, plate()) + refused: List[Dict[str, Any]] = [ + dict(measurement_settings=MeasurementSettings(well_scan="orbital")), + dict(measurement_settings=MeasurementSettings(pause_before_reading=5)), + dict(measurement_interval=0.805), # not in 0.01 s steps + ] + for arguments in refused: + with self.assertRaises(ValueError): + await feature.measure(**arguments) + self.assertEqual(io.written, []) + + def test_the_wavelength_limits_follow_the_photomultipliers(self): + # (extended red, dual, crossed over): the highest emission wavelength. + for photomultipliers, highest in ( + ((True, True, False), 740), # the reader of the hardware reads + ((True, True, True), 840), + ((True, False, False), 840), + ((False, False, False), 740), + ): + with self.subTest(photomultipliers=photomultipliers): + driver = make_driver(FakeFTDI()) + driver.configuration = decoded() + driver.configuration.luminescence_channels = 1 + ( + driver.configuration.extended_red_photomultiplier_tube, + driver.configuration.dual_photomultiplier_tubes, + driver.configuration.photomultiplier_tube_crossover, + ) = photomultipliers + driver._discover_features() + assert driver.luminescence is not None + self.assertEqual(driver.luminescence.configuration.wavelength_range[1], highest) + + def test_luminescence_is_built_only_when_reported(self): + for channels, built in ((1, True), (0, False)): + driver = make_driver(FakeFTDI()) + driver.configuration = decoded() + driver.configuration.luminescence_channels = channels + driver._discover_features() + self.assertEqual(isinstance(driver.luminescence, Luminescence), built) diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/measurement.py b/pylabrobot/bmg_labtech/clariostar/driver/features/measurement.py index b0bc12f5dc6..f9208af59a9 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/features/measurement.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/measurement.py @@ -22,7 +22,7 @@ logger = logging.getLogger(__name__) -# The well mask holds 384 bits; a 1536-well plate has no captured encoding. +# The well mask holds 384 bits; a 1536-well plate has no verified encoding. _WELL_MASK_SIZE = 48 Corner = Literal["top_left", "top_right", "bottom_left", "bottom_right"] @@ -36,12 +36,12 @@ WellScan = Literal["point", "orbital", "spiral", "matrix"] # Pre-separator byte 0 bits: how each well is read (orbital `32`, spiral `06`, matrix `10`). _WELL_SCANS: Dict[str, int] = {"point": 0x00, "orbital": 0x30, "spiral": 0x04, "matrix": 0x10} -# The matrix sizes, points per side, the vendor software offers. +# The matrix sizes, points per side. _MATRIX_SIZES = (2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30) ShakePattern = Literal["orbital", "linear", "double_orbital"] # Shaking before reading, pre-separator: [12] = 02 before the (endpoint) read, [17] pattern, -# [18] speed code = rpm / 100 - 1, [20] seconds. Meander is not captured in a RUN. +# [18] speed code = rpm / 100 - 1, [20] seconds. Meander is not verified in a RUN. _SHAKE_PATTERNS: Dict[str, int] = {"orbital": 0x00, "linear": 0x01, "double_orbital": 0x02} @@ -61,17 +61,17 @@ class MeasurementConfiguration: """Device facts every measurement mode shares.""" settling_time_range: Tuple[float, float] = (0.0, 1.0) - """Seconds before each well is read (0, 0.1, 0.2, 0.5 and 1.0 captured).""" + """Seconds before each well is read (0, 0.1, 0.2, 0.5 and 1.0 verified).""" flashes_range: Tuple[int, int] = (1, 200) - """Flashes per well, every well scan (the vendor software manual: up to 200 per well).""" + """Flashes per well, every well scan (up to 200 per well).""" pause_range: Tuple[int, int] = (1, 3600) - """Pause before reading, seconds (the vendor software manual: up to 3600 s).""" + """Pause before reading, seconds (up to 3600 s).""" orbital_maximum_wells: int = 384 - """Orbital averaging works on plates of up to 384 wells (the vendor software manual: 6 to 384).""" + """Orbital averaging works on plates of up to 384 wells (6 to 384).""" matrix_maximum_wells: int = 384 - """A matrix scan works on plates of up to 384 wells (the vendor software: up to 384).""" + """A matrix scan works on plates of up to 384 wells (up to 384).""" shake_speed_range: Tuple[int, int] = (100, 700) - """Shaking before the read, rpm (the standalone shake's captured 100-700; 300, 500 in a RUN).""" + """Shaking before the read, rpm (100-700; 300 and 500 verified in a RUN).""" shake_duration_range: Tuple[int, int] = (1, 255) """Shaking before the read, seconds: one byte until a longer duration settles its order.""" @@ -143,8 +143,8 @@ class MeasurementSettings: diameter. flashes: whole flashes per well (per point of a matrix), within the configuration's `flashes_range`. - matrix_size: points per side of a matrix scan, one of 2 to 10, 15, 20, 25, 30 (the vendor - software's); None for any other well scan. + matrix_size: points per side of a matrix scan, one of 2 to 10, 15, 20, 25, 30; None + for any other well scan. Raises: ValueError: on construction, listing every field of the wrong kind (see `check` for the @@ -155,10 +155,10 @@ class MeasurementSettings: corner: Corner = "top_left" reading_direction: ReadingDirection = "column_major" bidirectional: bool = True - settling_time: float = 0.1 # the vendor's default + settling_time: float = 0.1 well_scan: WellScan = "point" - scan_diameter: int = 3 # the vendor's - flashes: int = 5 # as the vendor's default endpoint read + scan_diameter: int = 3 + flashes: int = 5 matrix_size: Optional[int] = None def __post_init__(self) -> None: @@ -194,7 +194,7 @@ def check( ) -> None: """Raise if these settings cannot read `wells` of `plate` on the reader. - The scan diameter's upper bound is inferred: 3 to 5 mm are captured, all on 6.58 mm wells. + The scan diameter's upper bound is inferred: 3 to 5 mm are verified, all on 6.58 mm wells. Raises: ValueError: listing every rule broken: a field outside the configuration's range, no wells, @@ -468,14 +468,14 @@ def _encode_plate_block(self, plate: Plate, wells: Sequence[Well]) -> bytes: # -- scan and settling bytes --------------------------------------------------------------------- - # Scan byte bit 2: flying mode. Bit 4, the vendor's equidistant kinetic cycles, stays 0. + # Scan byte bit 2: flying mode. Bit 4, equidistant kinetic cycles, stays 0. _FLYING_MODE = 0x04 def _compute_scan_byte(self, settings: MeasurementSettings, *, flying_mode: bool = False) -> int: """The scan byte of a read; `flying_mode` sets bit 2. Bit 7 unidirectional, bits 6-5 the start corner, bit 3 column-major, bit 2 flying mode, bit 1 - set. Captured: `0a` (default), `2a`, `4a`, `6a` (corners), `8a` (unidirectional), `02` + set. Verified: `0a` (default), `2a`, `4a`, `6a` (corners), `8a` (unidirectional), `02` (row-major), `0e` (flying mode). """ return ( @@ -576,8 +576,7 @@ def _compute_run_start( def _compute_run_end(self, flashes: int) -> bytes: """The RUN parameters of an endpoint read after the mode's own fields. - `_TRAILER_START`, the trailer, 1 cycle, the flashes (u16 BE), a 1 s cycle time, `00`, as the - vendor sends them. + `_TRAILER_START`, the trailer, 1 cycle, the flashes (u16 BE), a 1 s cycle time, `00`. """ return ( bytes([self._TRAILER_START]) @@ -619,7 +618,7 @@ async def _request_data(self, values: Optional[int]) -> List[bytes]: are in. A spectrum's data comes as several data replies, its pages, each sized to fit a frame (3 to 5 - in the captured spectra); each `05 02 00 00 00 00 00` returns the next. + in a spectrum); each `05 02 00 00 00 00 00` returns the next. Raises: FrameError: if a page arrives short or malformed. @@ -671,7 +670,7 @@ async def _run_measurement( ) -> Tuple[List[bytes], datetime]: """Send RUN and return the data replies, and when they were read. - As the vendor ends a read: status until the reader reports the data ready, then REQUEST DATA + A read ends with status until the reader reports the data ready, then REQUEST DATA for the whole data set (`05 02 00 00 00 00 00`), once or once per page, then status until idle. Data that comes a page at a time while the run continues is requested whenever the data ready bit is set, which each request clears, until all its pages are in. @@ -695,8 +694,8 @@ async def _run_measurement( read_at = datetime.now() start = time.monotonic() try: - # A poll sent right after the RUN's reply goes unanswered, as the reader answered; the - # vendor's first poll follows the reply after 46 ms or more. + # A poll sent right after the RUN's reply goes unanswered, as the reader answered: wait + # one poll interval first. await asyncio.sleep(self._driver.default_poll_interval) while True: status = await self._driver.send_command(self._driver.CommandFamily.STATUS, retries=5) diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/temperature_controller.py b/pylabrobot/bmg_labtech/clariostar/driver/features/temperature_controller.py index 3c46047d852..f0daf3a79df 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/features/temperature_controller.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/features/temperature_controller.py @@ -14,7 +14,7 @@ _OFF = 0x0000 _MONITOR = 0x0001 -# Setpoint range in degrees C, from the operating manual. 20.0 is refused (quit code 110). +# Setpoint range in degrees C. 20.0 is refused (quit code 110). _TEMPERATURE_RANGE = (25.0, 45.0) _EXTENDED_TEMPERATURE_RANGE = (10.0, 65.0) diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/absorbance_spectrum_verification.json.gz b/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/absorbance_spectrum_verification.json.gz index 8486b782468fd7882d845cbca9ee79ddefcf0cb1..a19ccf444ef2d02cf081690bc4b1a314f741dec2 100644 GIT binary patch delta 117495 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 delta 117514 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 C90{QS diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/filter_detection_captures.json.gz b/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/filter_detection_captures.json.gz deleted file mode 100644 index 965222288c173766add1c1ef5311d5b1d091af69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64726 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 z 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

0-k*g2$T?7DJ~ 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 literal 0 HcmV?d00001 diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/fluorescence_captures.json.gz b/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/fluorescence_captures.json.gz deleted file mode 100644 index c6c5400d0c1b0518ded8fff09fe64affaa15ed27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5466 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 Qfc)!!0XTUxd+A;P02011iU0rr diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/fluorescence_ground_truth.json.gz b/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/fluorescence_ground_truth.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..0767a20e3b21a114dca5e0078d8aa3fa38dc73d1 GIT binary patch literal 5386 zcmV+l74_;LiwFP!00002|IIwvjvP6T|5DHSp!?`wF&ajkGY0H(qwT>?V=(`|q(rJp zjG)s!gKcb~vQ$z?6h%=ymGQ5a_3QWVU%!0(`rG$U+siNidinkM?eiZmzq}Y{?6Q~* z%4m{H27VT64F1z9{>+Op&|-Qk{nvi%`0w41k5q2GjG>o-+5?RVp88cP7bm+XuhYdH>};4?g04tKhR`=9|G+NsKFEyezpNjCXZA%>MFtIsWhio4%KtqCl z&K0N_9PSE?$1)n|R-xJTe%PaQu+Br9hXxP*aHxaQCaC8I+WCYiIm8UXXF%0pOD>3T zv5%Y{8T-aZhVB468|(+Iv30H3qqs-*kBoB}L>HP;!BrW=1{Y@9vNNu*FANaJmI}Rq z8u%NKKDc~nPVj_(^CQ$>fBpC4<@^79{dj)<$JgJFZ`<*@9Ur&9FR!o1=Wjx!d3Phy zkbkyWq`99HX_Z)eA(mcp`4d>7)>zrH_x9>CoXUtD}?WXdI1?eO}Ke znU1ng3zdF4L57wYS!Gath~m1;^q}>cy3hN={fMr9rTQ8OK25l=D5v?Vo%fsfk=H-= z{ha#wo$5q4voRbJS(V16ZQkcmH)5Z8-)SE+!7pB{`w)CoMd`(J=8GWsHO+J!^lR&| z!L)JKSsL%!IP25d%dRr4??M5;Cu zpBGX!rPNt9xn)*CY!Wy&5xgjuTNRK^$E)!9W0l45S(P%Jv93i?6|Bl=eO*QYyT(~H zGQD^nM||N{QEu<|<=r|7|3vWDG|l@4cNZn`i@V>aw|+%|x4wsC1GUE-$s+9VQclF? z3yHOke<7P96J0CG!V7^3rNqo1R)K1R>@ozUtpgs2bQhU9h z9~;3iHnDEuqS8M=pNCBjKIvgWyID|QHd^>ps>8DYS~FXy1P3~QjQF*uF25bRq@dNtag7kjWS|1grtf0(mz^PzrUjyJ{+b{$J+Xo#$ zH3LostbhWO6;R;?lzX*^J0Rf`4nl>FHiZS{+wj8ipmy65u?=vqSe7;f*B;vtXbQN% z+E<JFeBiq}~z&NCJz?LjvFjDB9|+WQv=P zYHYat3PV0bq-#h33yh*rft(R!BK!wr3I&XmPys{u4-E?-Y)OxhVIYDmP_YF8W?XCm zE5+stb`5YjETq7mfmeO^`kr=ZFCeyok1CL{^7`2@63^1hCjv z5o@p{BW^_mK?t3ZDiP*xmfLTim+!|%UxKjI(v77CWNV+<`E0GvEH#!)LsG?Af(;2p zlGw52ck}Zh$%BxHMZj5vqz9-38vKkhn(7Z|3o%9)yOdibh!k zy^2@|TN*Sz?P5NsXo@2G*&jb2^RME05p%)_M{kJ9>?&L3q@c{+qJ@3Lb-wR&i^6cXN9i&{r<}Ha=}OP!+CE% zj8fVsg8w96UF^^FL@o&a8~vqSo9@q}N?&=d4l$pI#HjQU_N?S%_b#FlcWW=6I=Vsy zT{HBI96C@Qy+QmR95L`%z;6nzioX?Gz|}&xv7p}v4r%HS!3px+v+A%+bF^H8UfSP; zej0k1jv)Hh4Pl{U5000q*f*lLO^%vrgX`P>IL5c}rcKr%=H@ViyV+3y7aSTo`koML z&LNH%e?yzB0mB7batooov=BX_5HL*eD8A2*Er%G`RlM9AVoCg2Q8P!zoRJ39|z-;H!gcUMl7j zx;tAtbn<0eJi(SecWAUJ7+eV*RO{Q;Wm^sXczn6~#KT01#jpm<5AHQg z3w)0>YUtG#s>m2pv6us~#y4Q5rAk`Ok(-XI%CT=d?lJ})8uc4#V%rtm22Y!gJXl*i zz;r^xf=Z)MXFZsvdG!b@wDB#rK+MshWDXQGc0oW59PVN+G=EKPHw}SmhobKlMhOBj zaz{60nh4ud!^8(%BCP`h0S&9h$G9c!Nn1>4hafimad_wQ-oazFHbO?j0g8TlEYYg3 zshulaW#GkGj$}A)>0~T#Ly(f5&S`#kPCE>ap>z>Ivjzr(;h!EVdQdP0@$NW9!{ho| zG94`6PrOHYf&khwNqUrbo8mjkePIDpn81ujBV~ipVn{x}&DJGLCkP&9*J3H>=RZEZ z{_W$JulwBdfh4U;<w{z5EBj+$pd838$DuLXWkuRfExhHGQ zlQ#B|O7ez0<4fZrdo`R7<0}E2k794UIzfLY@=cV7<9I*i=_04f7wUIrksk`8SU`<}8inss}mRBbyF z>)rz}z?WNF!P--3wlvWO^YuXAx~v^9dp3M_*A47-KWY~MJ%9z>&Mshk;AYv@4lngo z8?2tzpF8}c-}YHkzeTgSE)pwgh8p^n10YwK6vonTTP>~!!0gh`^y#~*v9-_VY7gkz z)KkLNQOY{@dEjhX+J~O{JkG|P{D7Ab>spM;F?nG$zTm+Gv;0G4y!D&bU4*?lOH)7^BAp95{ z=KdOOK#;*ff;sWJR`3Z#V8+W_$wj;-1xsoG9Im3aJ6|5}W`Sj&3XaWqhb(~fPPWkn za0WXcR+~$82n7x6gi;k|K{Kdi-FevqZ^$LT|Kkfwlt$Z(KR!z zjLABFI2qZT^0p!27mvFk$9yqy9s&~jG9!s~RuQ&g(w$2BN=qA7C4HAg-6>(CL(D6~fl-8CMR@;G(mZw*^+QQN);T=M z{m5ZJePrlr6UkFi^7AbE@%T97!x#80&1-`wCA=h_djZdh=ULRF=vT!&yzX6$TgCID z;1iYhP2f|N^+z#(dP1k9&}p69$G)FpUnP7m*16q}bMm>wZx#3);`w=x=ipN#!sMbZ z*ELEn%B-BrtfbvV8f1)1N;*J>)5CrE_Y(FN@??aS7X`jZ(|egl^Ge!cQ_^8F9GwLm zxgLpEz7K;Bd9>cA*)D0EMWIib;aM3*56bnHP4tgST1Tb}j3TGE`*f2`lU&k3@yT_Q zdVk&HlGYIXrO`=EH@v&XXq_C30-w3!;iCEFTD5Y1Fh!loyz6L(vnt7br6eVfIe0+&upYa~!?fZRvhffsa z1iUd%zE>&({~+iT6=m-3*K4FPBH=BHa#Z$vtlQ6}5&XsTj&R`lWPJ+$mvt1eFWVD- z@(R5LKMc4doGtk2P>e0Xw?-=WC`v!`#rV2{X0&-Rzg6%(1zk7ASjqSNZ=|tipU43z zKZNnh@CP3p3Op<5A@|uU&#hvddVyyZbScU?(u`3dFD1W?dJ%Z;_w&eoA9QnyF&PxT zunND+vMA?UuG1;&@`AtXy}VWN5&J98??v87d72e`(px{9j`~bVJKZh5SJF5@4%z=Z zCEel##QAm{jGM!GQKCgrin};W$J{@ida+DT+fl`b*FD z6nF~{{NfR6N;oLO&?|?;DMo-igo|<*i{hEOAA9T<;T;su)GLQg2p>%-tH#lBf9Nj8 zf)mEgA?OjsI?FwLb)N9!$b%95&HFmmBlj&TLf0xrrBq_4VmuY)+$~S|?NlNKig3F` zD6#@i8X>2`*USC+G~508yhNUg!p~KaTdNYG$%?a~DF zuNXOFoQTK_e1#EvF%pAD zDe3fXNVp71cS<__DJ30PN%MDOZ<((sVacE-fYo72)rT@YaOGaxcU#%x>>JQOUGY`CgRQsze~XqHMh4i5jtP`$R}4 z#RJfcmO~NBQBkH^Srnn0h0rlSw$v}mH7d%pDD46-b1FunRU#Qh**9gsWMtxEgbE|l zS>?QH%5Yaa=BNnGqU?JTo_bW|#dfcZE*^eTjEkR5-)Q^n6giQfq+$G%@ln*PVx%pK zM|nO;D|w}VQ9NfQLTNVT+<8T=g?s+I$R(%9Jw={fcnRjx>R=?aS=^txcnUj9I zE~RDWJqFcV!vD*sZ{L14-JhPM`^yj0{nqaMJwJX&z)0O(6WsJ7ALsVBt)aHqauM$)dhbRDWwPbGm4> zd(kdPI-aNd{+Dm*%IgH_NqTBi(p5z%ok-WpYY|aAm*0YNqMvjMPtkuD!6C0)TTp^W zvY(b#zND#TFlkZJ-OIgvzt~BKV(%V`y?Z>#ED3ndEB1s}^z=JB!3H1x+H~Q6e#l3< zkY7AA<)Xz`HOHaJ;!w!1R*J7SUcSPoef3j&NsN4z!hWAazkEer9->8Q_sZRc`~+T6 z?f?j;82ydt=R~_K#T^YR?>NajN#ZVtJfxRM?x{F+t2ji*efyY45e}EbDxJ|qz^V6< z?Sc3HWF4AQy(mWYuHaV`{P(x{tlRuwn{N2e4*C0Z!}#{Y4~e=zX2vIPw@LU_&oySrJB3wFUO0Qaz+J@@$$|fo_kSNrJoa}o%>zpF`_@$ zqoCI|)1BYT5$2bkzV(laB`e+phw$wF7D)VS!j{eEAD+ldzk_BH&4;f{a*FD!I|Wm;PR00A+WumAu6 literal 0 HcmV?d00001 diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/z_profile_captures.json.gz b/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/z_profile_captures.json.gz deleted file mode 100644 index bca82e4ea91eab6510623073da4b35dea3b1816d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2849 zcmV++3*Ph}iwFn+00002|9W3=a&Km7Y-L|#VQ_SHa%FQaYIARH0PUOWj$F45$6qDb z&;1~Zy7pCyVxily4H!*oZxEnC-n|;}&#}&CyxulxF7+62#+*46btH-+e^P#Ys2|?F zdHXazK0W?0-oJnRILe3i_TjJJ{P^%;{PX+y{rvZXvBm^4%`~RbEQMfv4#ovzn-A1Y zn7^gtGk?sl^rsk;jPFhUdHvIfxsolJxHj^J$nnLdn}6Au`K>km;V<9J7y9n~yYX?p z(BIY@QJTFb<7e-~ZHsOF_ei4uNyqy6b=V$xu0u3#>DXO|Z8+{7-b~rcS!+ z+;#3ccb&V=SF96fR&~;Gziy{jh zjicgyhd#)|H*$UY%?J`L?hx^FE5ii5YiSKYL2BFJ`-Ouup588z<;XIIC9szoNG(?U3=dM}mJ# z`*y(p6G4{vlf==C?Gk?i706hB9qlz)|H+C!Sy`u%upVt)_JjBG{LEKBHZS@#iVRy#kTFb% zrx@oMO=NyZ;+WNdKLdfhR+RA|X~)_jFG5A^Tg(p?v5)T!WwEat50BYXo{Ljd%=>cRk3x733>~n%F`#+fjXKAwk(~M}yHpISZ*vVx7 zHwVL>>;ps|`Vt4pSbIG;lmG&K^m}M>Bm2K;*q;pc@k9G3`@iV}&&&RAI{d?6->VKM zotXEI{6jb3qR(TTmwPuqS7U$p`%g2E`q$%kAHF@_y&sQ1ynA~4?e|ZQPvyg#@pS7n zmM>8&zjPWq2jDU@X$=5!tk<2GnsD$JPE5_`PE5r$$i8r5ns4iHeIaWVo%CEM@LlJw zbJux=j=ibl?>cv#UrXmw{lB~~+$IK}(^)$hcCOJcS@@Y492FTOh`}hR@IVY^f^{MW z{Ze#q#GqxZ@FioY1sMi5@S2e^ff$tP$4(4#?|CN%DaF1MgH!_T#2_&$ASDJ78OxOz z9JCXIsdXX-!RY%)rXDV1xDkUnEW8r~pELoH6xe%YL?8zKvgdBZz!e|&gvHI2d?yC3 zpnVVnN9YfT!OUOtP7Jv9x)TE~$dEw{*n7JZ1MYZn5QCW@`kffeis9Ia0lOM@Vld^t z69Y!&q{M&?GC&Xmd$!IbSz4CZ=6!s}32GUtsL%tFkijTlUOU}QoJrd)U<2D5^}_zN+ZzjwP4gZVxo zZ^U4>Z}LVAE`{RQh{5Ik$3_fhg{2c!#C~GG5re5e@bLkR?9{#)IN0lQ*%V!$Dqoft4<{el=we?4|$ zz#0AvV!+2yc4EL4;{js8&7Ft=XN)h10mtljV!($!FT}tZB?v+c+%&Kg0|&oQV!%i2 zJ27zAftA4L3x zRbmh#orr;J$B7sah^G<*hJPtBASD7I1_%5d#9&TyIT3?__@l(2Q#=s^C0a@h8i3kvvW(>a* z1EcX9#J~*nN8@-yyj5aQu>XS?m=;gOz|@*g#Gq&e4`NW!&nq!dA^~DhMm-UOiuI<% zAY(l!F-XRqh(XlxP-LIWi5TR|I;5MPiiRG+g%`0@O zJL^z>g$_N_39rz3);IFMm(DL{dt!rAYQfrBKS`!3TrFMl<}=%yj#ziLX9tRXusz%2 zv9mqfO5fSuG*Nf9XDe!Fq}reKCAYT)wHw%;t(-^V0&zEdjo8b!7P;RF`;$<+vA{zky6ZXc787{xZrdd zY>zuw4%ptT?T-`Na};*A=OS1D*q+Pv*x8=zF7Is5EBkbM=}K9e46JVl?`&_DB($@= zpto7T_JW??g6&0z+6!zi7QJmFHC*CQ_fjf(y=^3nDOJ>hV0)QI+u2^O*6eIAH=lO4 zS3GJxu)V_W#P&)7>j2UzCG59>Ov$hZhEw!*3D{l<@CUHH63{-_-ki=8+sg;-w}DLV z<=EL?j>`Ik?PZQ(XM5RF*x6nh)ONO)V)Z-QOBSd9V0%f6c(A<~ak~%06v3dB?S-zt z3)>4xS*0+xKv>^kd%og22-u$Ye7X(f3F`yv#8tgLg=r691z>xQaT`O~UI)ukwwH0+ zK-pfzcq!YnI2%y5r~V7JXL}ku+p`V-Cnwn6l?{U#&G?*mwr7Egl=(-R0@$yzy>O%x+w;omkedY^Xs|uKji+qSYqAKo=M}z!?Rn$} z%J#6&Uz1GrUuAnv`=hsD)A=@#!&%hza4ny21Gx)puCC|B_I~;|CAggbnLz*mUVx&| diff --git a/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/z_profile_ground_truth.json.gz b/pylabrobot/bmg_labtech/clariostar/driver/features/test_data/z_profile_ground_truth.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..56182426507211c8ff70a875f4541f6fc5ced17d GIT binary patch literal 2819 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 V8#S)3=SAuM_%Ar None: self.absorbance = Absorbance(self) if self.configuration.fluorescence_channels and self.fluorescence is None: self.fluorescence = Fluorescence(self) + if self.configuration.luminescence_channels and self.luminescence is None: + self.luminescence = Luminescence(self) def _check_firmware_compatibility(self) -> None: """Log a warning if the firmware version has not been checked on hardware.""" @@ -845,7 +848,7 @@ async def discover(self) -> None: on hardware. """ versions = {"INIT reply": self.configuration.firmware_version} - # The stored parameters first, as the vendor software reads them right after INIT. + # The stored parameters first, right after INIT. try: parameters = await self.request_parameters() except ValueError as e: diff --git a/pylabrobot/bmg_labtech/clariostar/driver/master_tests.py b/pylabrobot/bmg_labtech/clariostar/driver/master_tests.py index 6d73816698b..fdc60d37f12 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/master_tests.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/master_tests.py @@ -51,7 +51,7 @@ "0001310007000000000000000071710d" ) -# Frames the vendor software exchanged with the same reader. +# Ground-truth frames of the same reader. # Idle at power-on, motors off. STATUS_MOTORS_OFF = bytes.fromhex("0200180c010500040000000000000000000000c00000f00d") # Stored parameters; the project and serial number, reply bytes 161-164, are zeroed and the checksum diff --git a/pylabrobot/bmg_labtech/clariostar/driver/simulator.py b/pylabrobot/bmg_labtech/clariostar/driver/simulator.py index 4b42f16720b..af75e4ed978 100644 --- a/pylabrobot/bmg_labtech/clariostar/driver/simulator.py +++ b/pylabrobot/bmg_labtech/clariostar/driver/simulator.py @@ -184,7 +184,7 @@ async def measure( results: List[AbsorbanceResult] = [] if simulated_data is None: if report == "raw": - raise NotImplementedError("raw counts are not simulated; give captured simulated_data") + raise NotImplementedError("raw counts are not simulated; give simulated_data") measured = len({id(well) for well in wells}) logger.debug("%s read: simulation: random optical densities", SIMULATED_LINK) for wavelength in wavelengths: @@ -298,7 +298,7 @@ async def measure_spectrum( timestamp = datetime.now() if simulated_data is None: if report == "raw": - raise NotImplementedError("raw counts are not simulated; give captured simulated_data") + raise NotImplementedError("raw counts are not simulated; give simulated_data") logger.debug("%s read: simulation: random optical densities", SIMULATED_LINK) data = { identifier: { diff --git a/pylabrobot/lib/luminescence/__init__.py b/pylabrobot/lib/luminescence/__init__.py new file mode 100644 index 00000000000..44fc9935dfc --- /dev/null +++ b/pylabrobot/lib/luminescence/__init__.py @@ -0,0 +1 @@ +from .results import LuminescenceResult diff --git a/pylabrobot/lib/luminescence/results.py b/pylabrobot/lib/luminescence/results.py new file mode 100644 index 00000000000..19a496d0724 --- /dev/null +++ b/pylabrobot/lib/luminescence/results.py @@ -0,0 +1,28 @@ +"""The result of a luminescence measurement, the same for every plate reader.""" + +from dataclasses import dataclass +from datetime import datetime +from typing import Dict, Optional + + +@dataclass +class LuminescenceResult: + """Luminescence intensities of one emission band, from one read of a plate. + + Attributes: + data: intensities of the measured wells in the reader's counts, keyed by well identifier + (``"B3"``), row by row; wells not measured are not in it. + emission_wavelength: emission wavelength in nm; None if the read selects no wavelength (all + the light the sample emits). + emission_bandwidth: emission bandwidth in nm; None as for the wavelength. + temperature: temperature in degrees C, or ``None`` if the reader did not measure one. + start_timestamp: when the read started. + end_timestamp: when the read's data was in. + """ + + data: Dict[str, float] + emission_wavelength: Optional[float] + emission_bandwidth: Optional[float] + temperature: Optional[float] + start_timestamp: datetime + end_timestamp: datetime