From b362992a99cce7928c0276adc07e2767df49a01b Mon Sep 17 00:00:00 2001 From: Camillo Moschner Date: Fri, 20 Mar 2026 11:22:38 +0000 Subject: [PATCH 1/4] migrate Cor_96_wellplate_360ul_Fb to height_volume_data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace geometry-based compute functions with a pre-calculated `height_volume_data` dict derived from the tech drawing frustum (6.35→6.86 mm taper). Volumes chosen for easy pipetting; heights to be replaced with empirical LLD measurements next --- pylabrobot/resources/corning/plates.py | 35 +++++++++++++------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/pylabrobot/resources/corning/plates.py b/pylabrobot/resources/corning/plates.py index 0553e606de2..4569b2f9c77 100644 --- a/pylabrobot/resources/corning/plates.py +++ b/pylabrobot/resources/corning/plates.py @@ -1,9 +1,7 @@ """Corning plates.""" from pylabrobot.resources.height_volume_functions import ( - calculate_liquid_height_container_1segment_round_fbottom, calculate_liquid_height_in_container_2segments_square_vbottom, - calculate_liquid_volume_container_1segment_round_fbottom, calculate_liquid_volume_container_2segments_square_vbottom, ) from pylabrobot.resources.plate import Lid, Plate @@ -16,6 +14,23 @@ # # # # # # # # # # Cor_96_wellplate_360ul_Fb # # # # # # # # # # +# Pre-calculated height (mm) -> volume (uL) from tech drawing frustum geometry. +# Well tapers from 6.35 mm (bottom) to 6.86 mm (top) over 10.67 mm depth. +# Volumes chosen for easy pipetting; first non-zero point is the dead volume +# (covers full flat bottom + LLD-detectable). +# TODO: replace with empirical LLD measurements. +_cor_96_wellplate_360ul_Fb_height_volume_data = { + 0.0: 0.0, + 0.63: 20.0, + 1.56: 50.0, + 3.09: 100.0, + 4.58: 150.0, + 6.04: 200.0, + 7.47: 250.0, + 8.87: 300.0, + 10.24: 350.0, +} + def Cor_96_wellplate_360ul_Fb(name: str, with_lid: bool = False) -> Plate: """ @@ -60,8 +75,7 @@ def Cor_96_wellplate_360ul_Fb(name: str, with_lid: bool = False) -> Plate: bottom_type=WellBottomType.FLAT, cross_section_type=CrossSectionType.CIRCLE, max_volume=360, - compute_volume_from_height=_compute_volume_from_height_Cor_96_wellplate_360ul_Fb, - compute_height_from_volume=_compute_height_from_volume_Cor_96_wellplate_360ul_Fb, + height_volume_data=_cor_96_wellplate_360ul_Fb_height_volume_data, ), ) @@ -81,19 +95,6 @@ def Cor_96_wellplate_360ul_Fb_Lid(name: str) -> Lid: ) -# Volume-height functions -def _compute_volume_from_height_Cor_96_wellplate_360ul_Fb(h: float) -> float: - return calculate_liquid_volume_container_1segment_round_fbottom( - d=6.86, h_cylinder=10.67, liquid_height=h - ) - - -def _compute_height_from_volume_Cor_96_wellplate_360ul_Fb(liquid_volume: float) -> float: - return calculate_liquid_height_container_1segment_round_fbottom( - d=6.86, h_cylinder=10.67, liquid_volume=liquid_volume - ) - - # Previous names in PLR: def Cos_96_EZWash(name: str, with_lid: bool = False) -> Plate: raise ValueError("Deprecated. You probably want to use Cor_96_wellplate_360ul_Fb instead.") From b47763aec1e3c4a16bd56c5e474f90d313cc942c Mon Sep 17 00:00:00 2001 From: Camillo Moschner Date: Fri, 20 Mar 2026 12:32:06 +0000 Subject: [PATCH 2/4] on STAR testing of `height_volume_data` --- pylabrobot/resources/corning/plates.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pylabrobot/resources/corning/plates.py b/pylabrobot/resources/corning/plates.py index 4569b2f9c77..f94e9b3e0c8 100644 --- a/pylabrobot/resources/corning/plates.py +++ b/pylabrobot/resources/corning/plates.py @@ -21,16 +21,16 @@ # TODO: replace with empirical LLD measurements. _cor_96_wellplate_360ul_Fb_height_volume_data = { 0.0: 0.0, - 0.63: 20.0, - 1.56: 50.0, - 3.09: 100.0, - 4.58: 150.0, - 6.04: 200.0, - 7.47: 250.0, - 8.87: 300.0, - 10.24: 350.0, -} - + 0.45: 20.0, # dead volume + 1.69: 50.0, + 3.22: 100.0, + 4.72: 150.0, + 6.19: 200.0, + 7.72: 250.0, + 8.99: 300.0, + 10.62: 350.0, + 10.95: 360.0, + } def Cor_96_wellplate_360ul_Fb(name: str, with_lid: bool = False) -> Plate: """ From e5dc287628e95312e43da0b23e9affe22ade79b9 Mon Sep 17 00:00:00 2001 From: Camillo Moschner Date: Fri, 20 Mar 2026 13:03:30 +0000 Subject: [PATCH 3/4] Update Cor_96_wellplate_360ul_Fb with empirical cLLD height_volume_data Replace pre-calculated frustum geometry with empirical cLLD measurements for the Corning 3603 96-well plate. Dead volume comment clarified. Co-Authored-By: Claude Opus 4.6 (1M context) --- pylabrobot/resources/corning/plates.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pylabrobot/resources/corning/plates.py b/pylabrobot/resources/corning/plates.py index f94e9b3e0c8..0a1b6d08dc3 100644 --- a/pylabrobot/resources/corning/plates.py +++ b/pylabrobot/resources/corning/plates.py @@ -14,14 +14,10 @@ # # # # # # # # # # Cor_96_wellplate_360ul_Fb # # # # # # # # # # -# Pre-calculated height (mm) -> volume (uL) from tech drawing frustum geometry. # Well tapers from 6.35 mm (bottom) to 6.86 mm (top) over 10.67 mm depth. -# Volumes chosen for easy pipetting; first non-zero point is the dead volume -# (covers full flat bottom + LLD-detectable). -# TODO: replace with empirical LLD measurements. _cor_96_wellplate_360ul_Fb_height_volume_data = { 0.0: 0.0, - 0.45: 20.0, # dead volume + 0.45: 20.0, # "dead volume" to cover the full flat bottom and ensure LLD detectability 1.69: 50.0, 3.22: 100.0, 4.72: 150.0, From 1a6e45129130ca89681b464f4199bfb6ee0db3ca Mon Sep 17 00:00:00 2001 From: Camillo Moschner Date: Fri, 20 Mar 2026 13:09:23 +0000 Subject: [PATCH 4/4] Fix ruff formatting: closing brace indent and blank line Co-Authored-By: Claude Opus 4.6 (1M context) --- pylabrobot/resources/corning/plates.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pylabrobot/resources/corning/plates.py b/pylabrobot/resources/corning/plates.py index 0a1b6d08dc3..70bd4747108 100644 --- a/pylabrobot/resources/corning/plates.py +++ b/pylabrobot/resources/corning/plates.py @@ -26,7 +26,8 @@ 8.99: 300.0, 10.62: 350.0, 10.95: 360.0, - } +} + def Cor_96_wellplate_360ul_Fb(name: str, with_lid: bool = False) -> Plate: """