diff --git a/docs/resources/library/img/opentrons/ot2-1.5mL-tube-rack-24w.png b/docs/resources/library/img/opentrons/ot2-1.5mL-tube-rack-24w.png new file mode 100644 index 00000000000..5e3208bf87d Binary files /dev/null and b/docs/resources/library/img/opentrons/ot2-1.5mL-tube-rack-24w.png differ diff --git a/docs/resources/library/opentrons.md b/docs/resources/library/opentrons.md index c3ba94216d9..d5b0df51d56 100644 --- a/docs/resources/library/opentrons.md +++ b/docs/resources/library/opentrons.md @@ -39,6 +39,11 @@ Unfortunately, most of the other labware (plates) is missing information that is - `opentrons_24_tuberack_nest_0_5ml_screwcap` - `opentrons_24_tuberack_nest_1_5ml_screwcap` - `opentrons_24_tuberack_nest_1_5ml_snapcap` + +| Description | Image | PLR definition | +|-|-|-| +| 'opentrons_24_tuberack_generic_1point5ml_snapcap_short'
Part no.: 3405002
[manufacturer website](hhttps://www.thingiverse.com/thing:3405002) | ![](img/opentrons/ot2-1.5mL-tube-rack-24w.png) | `opentrons_24_tuberack_generic_1point5ml_snapcap_short` | + - `opentrons_24_tuberack_nest_2ml_screwcap` - `opentrons_24_tuberack_nest_2ml_snapcap` - `opentrons_6_tuberack_falcon_50ml_conical` diff --git a/pylabrobot/resources/opentrons/tube_racks.py b/pylabrobot/resources/opentrons/tube_racks.py index 81aab4c1bb5..b226b051324 100644 --- a/pylabrobot/resources/opentrons/tube_racks.py +++ b/pylabrobot/resources/opentrons/tube_racks.py @@ -1,5 +1,51 @@ from pylabrobot.resources.opentrons.load import load_ot_tube_rack +from pylabrobot.resources.resource_holder import ResourceHolder from pylabrobot.resources.tube_rack import TubeRack +from pylabrobot.resources.utils import create_ordered_items_2d + + +def opentrons_24_tuberack_generic_1point5ml_snapcap_short(name: str) -> TubeRack: + """ + OpenTrons 24 well rack with the shorter stand; 30mm shorter than default stand. + 3D print available here: https://www.thingiverse.com/thing:3405002 + Spec sheet (json): + https://raw.githubusercontent.com/Opentrons/opentrons/edge/shared-data/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_screwcap/1.json + """ + + WELL_DIAMETER = 9.2 # measured (circular -> inscribed square sizing is used elsewhere; see below) + WELL_DEPTH = 37.40 # measured + + # PLR's OT loader converts circular diameter to a square footprint using diameter / sqrt(2). + # Your earlier code already used inner well width/length of 9.2; if 9.2 is the *square* size, + # keep it. If 9.2 is the *diameter*, convert like load_ot_tube_rack does. + # + # If 9.2 is "inner square width", use: + well_size_x = well_size_y = WELL_DIAMETER + # + # If instead 9.2 is a measured *diameter*, use this: + # import math + # well_size_x = well_size_y = round(WELL_DIAMETER / math.sqrt(2), 3) + + return TubeRack( + name=name, + size_x=127.75, # spec + size_y=85.50, # spec + size_z=48.5, # measured (short stand) + model=opentrons_24_tuberack_generic_1point5ml_snapcap_short.__name__, + ordered_items=create_ordered_items_2d( + ResourceHolder, + num_items_x=6, + num_items_y=4, + dx=13.5, # measured + dy=13.5, # measured + dz=12, # measured + item_dx=19.89, # spec + item_dy=19.28, # spec + size_x=well_size_x, + size_y=well_size_y, + size_z=WELL_DEPTH, + ), + ) def opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical(name: str) -> TubeRack: