diff --git a/docs/api/pylabrobot.resources.rst b/docs/api/pylabrobot.resources.rst
index 020cb2c0b9..d42e61f896 100644
--- a/docs/api/pylabrobot.resources.rst
+++ b/docs/api/pylabrobot.resources.rst
@@ -89,18 +89,6 @@ Falcon
falcon.tubes
-Greiner
--------
-
-.. autosummary::
- :toctree: _autosummary
- :nosignatures:
- :recursive:
-
- greiner
- greiner.plates
-
-
Hamilton
--------
@@ -115,18 +103,6 @@ Hamilton
hamilton.STARLetDeck
-Limbro
-------
-
-.. autosummary::
- :toctree: _autosummary
- :nosignatures:
- :recursive:
-
- limbro
- limbro.plates
-
-
ML Star resources
-----------------
diff --git a/docs/resources/library/agenbio.md b/docs/resources/library/agenbio.md
new file mode 100644
index 0000000000..ebde6f8374
--- /dev/null
+++ b/docs/resources/library/agenbio.md
@@ -0,0 +1,10 @@
+# Agenbio
+
+[Company Page](https://agenbio.en.made-in-china.com)
+
+## Plates
+
+| Description | Image | PLR definition |
+|-|-|-|
+| 'AGenBio_4_wellplate_Vb'
Part no.: RES-75-4MW
[manufacturer website](https://agenbio.en.made-in-china.com/product/ZTqYVMiCkpcF/China-Medical-Consumable-Plastic-Reagent-Reservoir-Disposable-4-Channel-Troughs-Reagent-Reservoir.html?) | ![](img/agenbio/AGenBio_4_wellplate_Vb.webp) | `AGenBio_4_wellplate_Vb` |
+| 'AGenBio_1_wellplate_Fl'
Part no.: RES-75-4MW
[manufacturer website](https://agenbio.en.made-in-china.com/product/pZWaBIPvZMkm/China-Res-190-F-Lad-Consumables-of-Flat-Reservoir.html) | ![](img/agenbio/AGenBio_1_wellplate_Fl.webp) | `AGenBio_1_wellplate_Fl` |
diff --git a/docs/resources/library/celltreat.md b/docs/resources/library/celltreat.md
index 23a437fc93..4c52f59e85 100644
--- a/docs/resources/library/celltreat.md
+++ b/docs/resources/library/celltreat.md
@@ -1,8 +1,8 @@
# CellTreat
-## Plats
+## Plates
| Description | Image | PLR definition |
|-|-|-|
| 'CellTreat_6_DWP_16300ul_Fb'
Part no.: 229105
[manufacturer website](https://www.celltreat.com/product/229105/) | ![](img/celltreat/CellTreat_6_DWP_16300ul_Fb.jpg) | `CellTreat_6_DWP_16300ul_Fb` |
-| 'CellTreat_96_DWP_350ul_Ub'
Part no.: 229591
[manufacturer website](https://www.celltreat.com/product/229591/) | ![](img/celltreat/CellTreat_96_DWP_350ul_Ub.jpg) | `CellTreat_96_DWP_350ul_Ub` |
+| Same as 229590 (229590 is sold with lids) 'CellTreat_96_wellplate_350ul_Ub'
Part no.: 229591
[manufacturer website](https://www.celltreat.com/product/229591/) | ![](img/celltreat/CellTreat_96_wellplate_350ul_Ub.jpg) | `CellTreat_96_wellplate_350ul_Ub` |
diff --git a/docs/resources/library/corning_costar.md b/docs/resources/library/corning_costar.md
index 4a55ab1bb2..2d07614a0e 100644
--- a/docs/resources/library/corning_costar.md
+++ b/docs/resources/library/corning_costar.md
@@ -10,6 +10,7 @@ As of 2014, Corning had five major business sectors: display technologies, envir
| Description | Image | PLR definition |
|--------------------|--------------------|--------------------|
-| 'Cos_6_MWP_16800ul_Fb'
Part no.: 3516
[manufacturer website](https://ecatalog.corning.com/life-sciences/b2b/UK/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3516)
- Material: ?
- Cleanliness: 3516: sterilized by gamma irradiation
- Nonreversible lids with condensation rings to reduce contamination
- Treated for optimal cell attachment
- Cell growth area: 9.5 cm² (approx.)
- Total volume: 16.8 mL| ![](img/corning_costar/Cos_6_MWP_16800ul_Fb.jpg) | `Cos_6_MWP_16800ul_Fb` |
-| 'Cos_96_DWP_2mL_Vb'
Part no.: 3516
[manufacturer website](https://ecatalog.corning.com/life-sciences/b2b/UK/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3516)
- Material: Polypropylene
- Resistant to many common organic solvents (e.g., DMSO, ethanol, methanol)
- 3960: Sterile and DNase- and RNase-free
- Total volume: 2 mL
- Features uniform skirt heights for greater robotic gripping surface| ![](img/corning_costar/Cos_96_DWP_2mL_Vb.jpg) | `Cos_96_DWP_2mL_Vb` |
-[ 'Cor_96_wellplate_360ul_Fb'
Part no.: 353376
[manufacturer website](https://ecatalog.corning.com/life-sciences/b2b/NL/en/Microplates/Assay-Microplates/96-Well-Microplates/Falcon®-96-well-Polystyrene-Microplates/p/353376)
- Material: TC-treated polystyrene
- Cleanliness: sterile
- Total volume: 392 uL
- Working volume: 25-340 uL | ![](img/corning_costar/Cos_96_wellplate_360ul_Fb.jpg) | `Cor_96_wellplate_360ul_Fb` |
+| 'Cos_6_wellplate_16800ul_Fb'
Part no.: 3516
[manufacturer website](https://ecatalog.corning.com/life-sciences/b2b/UK/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3516)
- Material: ?
- Cleanliness: 3516: sterilized by gamma irradiation
- Nonreversible lids with condensation rings to reduce contamination
- Treated for optimal cell attachment
- Cell growth area: 9.5 cm² (approx.)
- Total volume: 16.8 mL| ![](img/corning_costar/Cos_6_wellplate_16800ul_Fb.jpg) | `Cos_6_wellplate_16800ul_Fb` |
+| 'Cos_96_wellplate_2mL_Vb'
Part no.: 3516
[manufacturer website](https://ecatalog.corning.com/life-sciences/b2b/UK/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3516)
- Material: Polypropylene
- Resistant to many common organic solvents (e.g., DMSO, ethanol, methanol)
- 3960: Sterile and DNase- and RNase-free
- Total volume: 2 mL
- Features uniform skirt heights for greater robotic gripping surface| ![](img/corning_costar/Cos_96_wellplate_2mL_Vb.jpg) | `Cos_96_wellplate_2mL_Vb` |
+'Cor_96_wellplate_360ul_Fb'
Part no.: 353376
[manufacturer website](https://ecatalog.corning.com/life-sciences/b2b/NL/en/Microplates/Assay-Microplates/96-Well-Microplates/Falcon®-96-well-Polystyrene-Microplates/p/353376)
- Material: TC-treated polystyrene
- Cleanliness: sterile
- Total volume: 392 uL
- Working volume: 25-340 uL | ![](img/corning_costar/Cor_96_wellplate_360ul_Fb.jpg) | `Cor_96_wellplate_360ul_Fb` |
+'Cor_6_wellplate_Fl'
Part no.: 3471
[manufacturer website](https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar®-Multiple-Well-Cell-Culture-Plates/p/3471) | ![](img/corning_costar/Cor_6_wellplate_Fl.jpg) | `Cor_6_wellplate_Fl` |
diff --git a/docs/resources/library/eppendorf.md b/docs/resources/library/eppendorf.md
index 0c70ad2f81..0ceabd1e5a 100644
--- a/docs/resources/library/eppendorf.md
+++ b/docs/resources/library/eppendorf.md
@@ -13,3 +13,9 @@ Company page: [Eppendorf Wikipedia](https://en.wikipedia.org/wiki/Eppendorf_(com
| Description | Image | PLR definition |
|--------------------|--------------------|--------------------|
| 'Eppendorf_96_wellplate_250ul_Vb'
Part no.: 0030133374
[manufacturer website](https://www.eppendorf.com/gb-en/Products/Laboratory-Consumables/Plates/Eppendorf-twintec-PCR-Plates-p-0030133374)
- Material: polycarbonate (frame), polypropylene (wells)
- part of the twin.tec(R) product line
- WARNING: not ANSI/SLAS 1-2004 footprint dimenions (123x81 mm^2!) ==> requires `PlateAdapter`
- 'Can be divided into 4 segments of 24 wells each to prevent waste and save money'. | ![](img/eppendorf/Eppendorf_96_wellplate_250ul_Vb_COMPLETE.png) ![](img/eppendorf/Eppendorf_96_wellplate_250ul_Vb_DIVIDED.png) | `Eppendorf_96_wellplate_250ul_Vb` |
+
+## Tubes
+
+| Description | Image | PLR definition |
+|--------------------|--------------------|--------------------|
+| "Common eppendorf tube" 'Eppendorf_DNA_LoBind_1_5ml_Vb'
Part no.: 0030133374
[manufacturer website](https://www.fishersci.com/shop/products/dna-lobind-microcentrifuge-tubes/13698791) | ![](img/eppendorf/Eppendorf_DNA_LoBind_1_5ml_Vb.webp) | `Eppendorf_DNA_LoBind_1_5ml_Vb` |
diff --git a/docs/resources/library/falcon.md b/docs/resources/library/falcon.md
index f6432be107..329abae70f 100644
--- a/docs/resources/library/falcon.md
+++ b/docs/resources/library/falcon.md
@@ -1,5 +1,13 @@
# Falcon
+# Plates
+
+| Description | Image | PLR definition |
+|--------------------|--------------------|--------------------|
+| Falcon_96_wellplate_Fl [manufacturer website](https://www.fishersci.com/shop/products/falcon-96-well-cell-culture-treated-flat-bottom-microplate/087722C) | ![](img/falcon/Falcon_96_wellplate_Fl.webp) | `Falcon_96_wellplate_Fl`
+| Falcon_96_wellplate_Rb [manufacturer website](https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/96-Well-Microplates/Falcon®-96-well-Polystyrene-Microplates/p/353077) | ![](img/falcon/Falcon_96_wellplate_Rb.jpg) | `Falcon_96_wellplate_Rb`
+| Falcon_96_wellplate_Fl_Black [manufacturer website](https://www.fishersci.com/shop/products/falcon-96-well-imaging-plate-lid/08772225) | ![](img/falcon/Falcon_96_wellplate_Fl_Black.jpg) | `Falcon_96_wellplate_Fl_Black`
+
## Tubes
| Description | Image | PLR definition |
diff --git a/docs/resources/library/img/agenbio/AGenBio_4_wellplate_Vb.webp b/docs/resources/library/img/agenbio/AGenBio_4_wellplate_Vb.webp
new file mode 100644
index 0000000000..5646736908
Binary files /dev/null and b/docs/resources/library/img/agenbio/AGenBio_4_wellplate_Vb.webp differ
diff --git a/docs/resources/library/img/celltreat/CellTreat_96_DWP_350ul_Ub.jpg b/docs/resources/library/img/celltreat/CellTreat_96_wellplate_350ul_Ub.jpg
similarity index 100%
rename from docs/resources/library/img/celltreat/CellTreat_96_DWP_350ul_Ub.jpg
rename to docs/resources/library/img/celltreat/CellTreat_96_wellplate_350ul_Ub.jpg
diff --git a/docs/resources/library/img/corning_costar/Cos_96_wellplate_360ul_Fb.jpg b/docs/resources/library/img/corning_costar/Cor_96_wellplate_360ul_Fb.jpg
similarity index 100%
rename from docs/resources/library/img/corning_costar/Cos_96_wellplate_360ul_Fb.jpg
rename to docs/resources/library/img/corning_costar/Cor_96_wellplate_360ul_Fb.jpg
diff --git a/docs/resources/library/img/corning_costar/Cos_6_MWP_16800ul_Fb.jpg b/docs/resources/library/img/corning_costar/Cos_6_wellplate_16800ul_Fb.jpg
similarity index 100%
rename from docs/resources/library/img/corning_costar/Cos_6_MWP_16800ul_Fb.jpg
rename to docs/resources/library/img/corning_costar/Cos_6_wellplate_16800ul_Fb.jpg
diff --git a/docs/resources/library/img/corning_costar/Cos_96_DWP_2mL_Vb.jpg b/docs/resources/library/img/corning_costar/Cos_96_wellplate_2mL_Vb.jpg
similarity index 100%
rename from docs/resources/library/img/corning_costar/Cos_96_DWP_2mL_Vb.jpg
rename to docs/resources/library/img/corning_costar/Cos_96_wellplate_2mL_Vb.jpg
diff --git a/docs/resources/library/img/eppendorf/Eppendorf_DNA_LoBind_1_5ml_Vb.webp b/docs/resources/library/img/eppendorf/Eppendorf_DNA_LoBind_1_5ml_Vb.webp
new file mode 100644
index 0000000000..1e307803c5
Binary files /dev/null and b/docs/resources/library/img/eppendorf/Eppendorf_DNA_LoBind_1_5ml_Vb.webp differ
diff --git a/docs/resources/library/img/falcon/Falcon_96_wellplate_Fl.webp b/docs/resources/library/img/falcon/Falcon_96_wellplate_Fl.webp
new file mode 100644
index 0000000000..ddbba0b534
Binary files /dev/null and b/docs/resources/library/img/falcon/Falcon_96_wellplate_Fl.webp differ
diff --git a/docs/resources/library/img/falcon/Falcon_96_wellplate_Fl_Black.jpg.webp b/docs/resources/library/img/falcon/Falcon_96_wellplate_Fl_Black.jpg.webp
new file mode 100644
index 0000000000..f8f9109b5d
Binary files /dev/null and b/docs/resources/library/img/falcon/Falcon_96_wellplate_Fl_Black.jpg.webp differ
diff --git a/docs/resources/library/img/falcon/Falcon_96_wellplate_Rb.jpg b/docs/resources/library/img/falcon/Falcon_96_wellplate_Rb.jpg
new file mode 100644
index 0000000000..cde7e11211
Binary files /dev/null and b/docs/resources/library/img/falcon/Falcon_96_wellplate_Rb.jpg differ
diff --git a/docs/resources/library/img/porvair/Porvair_24_wellplate_Vb.jpg b/docs/resources/library/img/porvair/Porvair_24_wellplate_Vb.jpg
new file mode 100644
index 0000000000..3c078e1d17
Binary files /dev/null and b/docs/resources/library/img/porvair/Porvair_24_wellplate_Vb.jpg differ
diff --git a/docs/resources/library/img/revvity/revvity_ProxiPlate-384-Plus-White-384-shallow-well-Microplate.jpg b/docs/resources/library/img/revvity/Revvity_384_wellplate_28ul_Ub.jpg
similarity index 100%
rename from docs/resources/library/img/revvity/revvity_ProxiPlate-384-Plus-White-384-shallow-well-Microplate.jpg
rename to docs/resources/library/img/revvity/Revvity_384_wellplate_28ul_Ub.jpg
diff --git a/docs/resources/library/img/vwr/VWRReagentReservoirs25mL.jpg b/docs/resources/library/img/vwr/VWRReagentReservoirs25mL.jpg
new file mode 100644
index 0000000000..a2ca6352ab
Binary files /dev/null and b/docs/resources/library/img/vwr/VWRReagentReservoirs25mL.jpg differ
diff --git a/docs/resources/library/porvair.md b/docs/resources/library/porvair.md
index 8d20653956..97f4343e04 100644
--- a/docs/resources/library/porvair.md
+++ b/docs/resources/library/porvair.md
@@ -4,6 +4,12 @@ Company history: [Porvair Filtration Group](https://www.porvairfiltration.com/ab
> Porvair Filtration Group, a wholly owned subsidiary of Porvair plc, is a specialist filtration and environmental technology group involved in developing, designing and manufacturing filtration and separation solutions to industry sectors such as the aviation, molten metal, energy, water treatment and life sciences markets. Porvair plc is a publically owned company with four principal subsidiaries: Porvair Filtration Group Ltd., Porvair Sciences Ltd., Selee Corporation and Seal Analytical Ltd.
+## Plates
+
+| Description | Image | PLR definition |
+|--------------------|--------------------|--------------------|
+| 'Porvair_24_wellplate_Vb'
Part no.: 390108
[manufacturer website](https://www.microplates.com/product/78-ml-reservoir-plate-2-rows-of-12-v-bottom/) | ![](img/porvair/Porvair_24_wellplate_Vb.jpg) | `Porvair_24_wellplate_Vb` |
+
## Reservoirs
| Description | Image | PLR definition |
diff --git a/docs/resources/library/revvity.md b/docs/resources/library/revvity.md
index 6ca88c0134..fcdacfd40d 100644
--- a/docs/resources/library/revvity.md
+++ b/docs/resources/library/revvity.md
@@ -8,4 +8,4 @@ Company wikipedia: [Revvity, Inc. (formerly PerkinElmer, Inc.)](https://en.wikip
| Description | Image | PLR definition |
|--------------------|--------------------|--------------------|
-| 'Revvity_ProxiPlate_384Plus'
Part no.: 6008280
[manufacturer website](https://www.perkinelmer.com/uk/Product/proxiplate-384-plus-50w-6008280) | ![](img/revvity/revvity_ProxiPlate-384-Plus-White-384-shallow-well-Microplate.jpg) | `Revvity_ProxiPlate_384Plus`
+| 'Revvity_384_wellplate_28ul_Ub'
Part no.: 6008280
[manufacturer website](https://www.revvity.com/product/proxiplate-384-plus-50w-6008280) | ![](img/revvity/Revvity_384_wellplate_28ul_Ub.jpg) | `Revvity_384_wellplate_28ul_Ub`
diff --git a/docs/resources/library/vwr.md b/docs/resources/library/vwr.md
new file mode 100644
index 0000000000..6252969895
--- /dev/null
+++ b/docs/resources/library/vwr.md
@@ -0,0 +1,9 @@
+# VWR
+
+Company page: [Wikipedia](https://en.wikipedia.org/wiki/VWR_International)
+
+## Troughs
+
+| Description | Image | PLR definition |
+|--------------------|--------------------|--------------------|
+| 'VWRReagentReservoirs25mL'
Part no.: 89094
[manufacturer website](https://us.vwr.com/store/product/4694822/vwr-disposable-pipetting-reservoirs)
Polystyrene Reservoirs | ![](img/vwr/VWRReagentReservoirs25mL.jpg.avif) | `VWRReagentReservoirs25mL` |
diff --git a/pylabrobot/resources/__init__.py b/pylabrobot/resources/__init__.py
index e8d913b08c..6f82dac134 100644
--- a/pylabrobot/resources/__init__.py
+++ b/pylabrobot/resources/__init__.py
@@ -58,9 +58,7 @@
from .corning_axygen import *
from .eppendorf import *
from .falcon import *
-from .greiner import *
from .hamilton import *
-from .limbro import *
from .ml_star import *
from .opentrons import *
from .porvair import *
diff --git a/pylabrobot/resources/alpaqua/magnetic_racks.py b/pylabrobot/resources/alpaqua/magnetic_racks.py
index df3eff83e6..ff736d5719 100644
--- a/pylabrobot/resources/alpaqua/magnetic_racks.py
+++ b/pylabrobot/resources/alpaqua/magnetic_racks.py
@@ -1,4 +1,3 @@
-"""Alpaqua magnetic racks"""
# currently implemented as PlateAdapter to enable simple and fast assignment
# of plates to them, with self-correcting location placement
diff --git a/pylabrobot/resources/celltreat/plates.py b/pylabrobot/resources/celltreat/plates.py
index 62e2f212dd..8717631c95 100644
--- a/pylabrobot/resources/celltreat/plates.py
+++ b/pylabrobot/resources/celltreat/plates.py
@@ -18,19 +18,38 @@
def CellTreat_96_wellplate_350ul_Ub(name: str, lid: Optional[Lid] = None) -> Plate:
"""
CellTreat cat. no.: 229591
+
+ Same as 229590 (229590 is sold with lids)
+
- Material: Polystyrene
- Tissue culture treated: No
"""
# WELL_UBOTTOM_HEIGHT = 2.81 # absolute height of cylindrical segment, measured
# WELL_DIAMETER = 6.69 # measured
+ WELL_RADIUS = 3.175
+
well_kwargs = {
"size_x": 6.35,
"size_y": 6.35,
"size_z": 10.04,
"bottom_type": WellBottomType.U,
+ "compute_volume_from_height": lambda liquid_height: compute_volume_from_height_cylinder(
+ liquid_height, WELL_RADIUS
+ ),
+ "compute_height_from_volume": lambda liquid_volume: compute_height_from_volume_cylinder(
+ liquid_volume, WELL_RADIUS
+ ),
+ "material_z_thickness": 1.55,
+ "cross_section_type": CrossSectionType.CIRCLE,
+ "max_volume": 300,
}
+ # in 229590, which should be the same.
+ # dx=10.7, # measured
+ # dy=8.75, # measured
+ # dz=2.6, # calibrated manually
+
return Plate(
name=name,
size_x=127.76,
@@ -124,45 +143,7 @@ def CellTreat_6_wellplate_16300ul_Fb_Lid(name: str) -> Lid:
def CellTreat_96_wellplate_U(name: str, lid: Optional[Lid] = None) -> Plate:
- """
- CellTreat cat. no.: 229590
- - Material: Polystyrene
- - Tissue culture treated: No
- """
- WELL_RADIUS = 3.175
-
- well_kwargs = {
- "size_x": 6.35,
- "size_y": 6.35,
- "size_z": 10.04,
- "bottom_type": WellBottomType.U,
- "compute_volume_from_height": lambda liquid_height: compute_volume_from_height_cylinder(
- liquid_height, WELL_RADIUS
- ),
- "compute_height_from_volume": lambda liquid_volume: compute_height_from_volume_cylinder(
- liquid_volume, WELL_RADIUS
- ),
- "material_z_thickness": 1.55,
- "cross_section_type": CrossSectionType.CIRCLE,
- "max_volume": 300,
- }
-
- return Plate(
- name=name,
- size_x=127.76,
- size_y=85.11,
- size_z=14.30, # without lid
- lid=lid,
- model=CellTreat_96_wellplate_U.__name__,
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.7, # measured
- dy=8.75, # measured
- dz=2.6, # calibrated manually
- item_dx=9,
- item_dy=9,
- **well_kwargs,
- ),
+ raise NotImplementedError(
+ "This plate is the same as CellTreat_96_wellplate_350ul_Ub. This "
+ "function will be removed in the future."
)
diff --git a/pylabrobot/resources/corning_axygen/plates.py b/pylabrobot/resources/corning_axygen/plates.py
index c23fecf6e6..c3cee09308 100644
--- a/pylabrobot/resources/corning_axygen/plates.py
+++ b/pylabrobot/resources/corning_axygen/plates.py
@@ -1,5 +1,3 @@
-"""Corning Axygen plates"""
-
from pylabrobot.resources.plate import Lid, Plate
from pylabrobot.resources.well import (
Well,
diff --git a/pylabrobot/resources/corning_costar/plates.py b/pylabrobot/resources/corning_costar/plates.py
index 74707c9fae..704147a7dc 100644
--- a/pylabrobot/resources/corning_costar/plates.py
+++ b/pylabrobot/resources/corning_costar/plates.py
@@ -1,1120 +1,24 @@
-"""Corning Costar plates"""
-
-from typing import Optional
-from pylabrobot.resources.errors import (
- ResourceDefinitionIncompleteError,
-)
-from pylabrobot.resources.plate import Lid, Plate
-from pylabrobot.resources.well import (
- Well,
- WellBottomType,
- CrossSectionType,
-)
-from pylabrobot.resources.utils import create_ordered_items_2d
-
-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,
- compute_height_from_volume_conical_frustum,
- compute_volume_from_height_conical_frustum,
-)
-
-
-def _compute_volume_from_height_Cos_1536_10ul(h: float) -> float:
- volume = min(h, 0.25) * min(h, 0.25) * (2.9845 - 1.0472 * min(h, 0.25))
- if h <= 5.75:
- volume += (h - 0.25) * 3.6100
- if h > 6.0:
- raise ValueError(f"Height {h} is too large for Cos_1536_10ul")
- return volume
-
-
-def Cos_1536_10ul_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_1536_10ul_Lid",
- # )
-
-
-def Cos_1536_10ul(name: str, with_lid: bool = False) -> Plate:
- """Cos_1536_10ul"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_1536_10ul")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=10.25,
- lid=Cos_1536_10ul_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_1536_10ul",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=48,
- num_items_y=32,
- dx=9.675,
- dy=7.175,
- dz=0.5,
- item_dx=2.25,
- item_dy=2.25,
- size_x=1.9,
- size_y=1.9,
- size_z=5.75,
- bottom_type=WellBottomType.U,
- cross_section_type=CrossSectionType.RECTANGLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_1536_10ul,
- ),
- )
-
-
-def Cos_1536_10ul_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_1536_10ul"""
- return Cos_1536_10ul(name=name, with_lid=with_lid)
-
-
-def Cos_1536_10ul_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_1536_10ul"""
- return Cos_1536_10ul(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_384_DW(h: float) -> float:
- volume = min(h, 1.0) * min(h, 1.0) * (4.3982 - 1.0472 * min(h, 1.0))
- if h <= 24.5:
- volume += (h - 1.0) * 10.0800
- if h > 25.5:
- raise ValueError(f"Height {h} is too large for Cos_384_DW")
- return volume
-
-
-def Cos_384_DW_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_384_DW_Lid",
- # )
-
-
-def Cos_384_DW(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_DW"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_384_DW")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=28.0,
- lid=Cos_384_DW_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_384_DW",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=24,
- num_items_y=16,
- dx=9.95,
- dy=7.85,
- dz=1.0,
- item_dx=4.5,
- item_dy=4.5,
- size_x=3.6,
- size_y=2.8,
- size_z=24.5,
- bottom_type=WellBottomType.U,
- cross_section_type=CrossSectionType.RECTANGLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_384_DW,
- ),
- )
-
-
-def Cos_384_DW_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_DW"""
- return Cos_384_DW(name=name, with_lid=with_lid)
-
-
-def Cos_384_DW_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_DW"""
- return Cos_384_DW(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_384_PCR(h: float) -> float:
- volume = min(h, 9.5) * 2.8510
- if h > 9.5:
- raise ValueError(f"Height {h} is too large for Cos_384_PCR")
- return volume
-
-
-def Cos_384_PCR_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_384_PCR_Lid",
- # )
-
-
-def Cos_384_PCR(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_PCR"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_384_PCR")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=16.0,
- lid=Cos_384_PCR_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_384_PCR",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=24,
- num_items_y=16,
- dx=10.1,
- dy=7.6,
- dz=1.0,
- item_dx=4.5,
- item_dy=4.5,
- size_x=3.3,
- size_y=3.3,
- size_z=9.5,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_384_PCR,
- ),
- )
-
-
-def Cos_384_PCR_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_PCR"""
- return Cos_384_PCR(name=name, with_lid=with_lid)
-
-
-def Cos_384_PCR_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_PCR"""
- return Cos_384_PCR(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_384_Sq(h: float) -> float:
- volume = min(h, 11.56) * 12.2500
- if h > 11.56:
- raise ValueError(f"Height {h} is too large for Cos_384_Sq")
- return volume
-
-
-def Cos_384_Sq_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_384_Sq_Lid",
- # )
-
-
-def Cos_384_Sq(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_Sq"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_384_Sq")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.24,
- lid=Cos_384_Sq_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_384_Sq",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=24,
- num_items_y=16,
- dx=10.0,
- dy=7.5,
- dz=1.0,
- item_dx=4.5,
- item_dy=4.5,
- size_x=3.5,
- size_y=3.5,
- size_z=11.56,
- bottom_type=WellBottomType.FLAT,
- cross_section_type=CrossSectionType.RECTANGLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_384_Sq,
- ),
- )
-
-
-def Cos_384_Sq_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_Sq"""
- return Cos_384_Sq(name=name, with_lid=with_lid)
-
-
-def Cos_384_Sq_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_Sq"""
- return Cos_384_Sq(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_384_Sq_Rd(h: float) -> float:
- volume = min(h, 1.0) * min(h, 1.0) * (4.3982 - 1.0472 * min(h, 1.0))
- if h <= 11.6:
- volume += (h - 1.0) * 10.0800
- if h > 12.6:
- raise ValueError(f"Height {h} is too large for Cos_384_Sq_Rd")
- return volume
-
-
-def Cos_384_Sq_Rd_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_384_Sq_Rd_Lid",
- # )
-
-
-def Cos_384_Sq_Rd(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_Sq_Rd"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_384_Sq_Rd")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.5,
- lid=Cos_384_Sq_Rd_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_384_Sq_Rd",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=24,
- num_items_y=16,
- dx=9.95,
- dy=7.85,
- dz=1.0,
- item_dx=4.5,
- item_dy=4.5,
- size_x=3.6,
- size_y=2.8,
- size_z=11.6,
- bottom_type=WellBottomType.U,
- cross_section_type=CrossSectionType.RECTANGLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_384_Sq_Rd,
- ),
- )
-
-
-def Cos_384_Sq_Rd_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_Sq_Rd"""
- return Cos_384_Sq_Rd(name=name, with_lid=with_lid)
-
-
-def Cos_384_Sq_Rd_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_384_Sq_Rd"""
- return Cos_384_Sq_Rd(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_DW_1mL(h: float) -> float:
- volume = min(h, 2.5) * min(h, 2.5) * (10.2102 - 1.0472 * min(h, 2.5))
- if h <= 40.0:
- volume += (h - 2.5) * 33.1831
- if h > 42.5:
- raise ValueError(f"Height {h} is too large for Cos_96_DW_1mL")
- return volume
-
-
-def Cos_96_DW_1mL_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_DW_1mL_Lid",
- # )
-
-
-def Cos_96_DW_1mL(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_1mL"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_DW_1mL")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=42.0,
- lid=Cos_96_DW_1mL_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_DW_1mL",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.75,
- dy=8.25,
- dz=1.0,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.5,
- size_y=6.5,
- size_z=40.0,
- bottom_type=WellBottomType.U,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_DW_1mL,
- ),
- )
-
-
-def Cos_96_DW_1mL_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_1mL"""
- return Cos_96_DW_1mL(name=name, with_lid=with_lid)
-
-
-def Cos_96_DW_1mL_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_1mL"""
- return Cos_96_DW_1mL(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_DW_2mL(h: float) -> float:
- volume = min(h, 4.0) * min(h, 4.0) * (12.5664 - 1.0472 * min(h, 4.0))
- if h <= 42.0:
- volume += (h - 4.0) * 64.0000
- if h > 46.0:
- raise ValueError(f"Height {h} is too large for Cos_96_DW_2mL")
- return volume
-
-
-def Cos_96_DW_2mL_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_DW_2mL_Lid",
- # )
-
-
-def Cos_96_DW_2mL(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_2mL"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_DW_2mL")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=43.5,
- lid=Cos_96_DW_2mL_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_DW_2mL",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.0,
- dy=7.5,
- dz=1.0,
- item_dx=9.0,
- item_dy=9.0,
- size_x=8.0,
- size_y=8.0,
- size_z=42.0,
- bottom_type=WellBottomType.U,
- cross_section_type=CrossSectionType.RECTANGLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_DW_2mL,
- ),
- )
-
-
-def Cos_96_DW_2mL_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_2mL"""
- return Cos_96_DW_2mL(name=name, with_lid=with_lid)
-
-
-def Cos_96_DW_2mL_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_2mL"""
- return Cos_96_DW_2mL(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_DW_500ul(h: float) -> float:
- volume = min(h, 1.5) * 10.7233
- if h <= 25.0:
- volume += (h - 1.5) * 34.7486
- if h > 26.5:
- raise ValueError(f"Height {h} is too large for Cos_96_DW_500ul")
- return volume
-
-
-def Cos_96_DW_500ul_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_DW_500ul_Lid",
- # )
-
-
-def Cos_96_DW_500ul(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_500ul"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_DW_500ul")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=27.5,
- lid=Cos_96_DW_500ul_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_DW_500ul",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.55,
- dy=8.05,
- dz=2.0,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.9,
- size_y=6.9,
- size_z=25.0,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_DW_500ul,
- ),
- )
-
-
-def Cos_96_DW_500ul_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_500ul"""
- return Cos_96_DW_500ul(name=name, with_lid=with_lid)
-
-
-def Cos_96_DW_500ul_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_DW_500ul"""
- return Cos_96_DW_500ul(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_EZWash(h: float) -> float:
- volume = min(h, 11.3) * 37.3928
- if h > 11.3:
- raise ValueError(f"Height {h} is too large for Cos_96_EZWash")
- return volume
-
-
-def Cos_96_EZWash_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_EZWash_Lid",
- # )
-
-
-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.")
-
-
-def Cos_96_EZWash_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_EZWash"""
- return Cos_96_EZWash(name=name, with_lid=with_lid)
-
-
-def Cos_96_EZWash_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_EZWash"""
- return Cos_96_EZWash(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_FL(h: float) -> float:
- volume = min(h, 10.67) * 34.2808
- if h > 10.67:
- raise ValueError(f"Height {h} is too large for Cos_96_FL")
- return volume
-
-
-def Cos_96_FL_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_FL_Lid",
- # )
-
-
-def Cos_96_FL(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_FL"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_FL")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.24,
- lid=Cos_96_FL_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_FL",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.57,
- dy=8.07,
- dz=1.0,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.86,
- size_y=6.86,
- size_z=10.67,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_FL,
- ),
- )
-
-
-def _compute_volume_from_height_Cos_96_Filter(h: float) -> float:
- volume = min(h, 12.2) * 34.7486
- if h > 12.2:
- raise ValueError(f"Height {h} is too large for Cos_96_Filter")
- return volume
-
-
-def Cos_96_Filter_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_Filter_Lid",
- # )
-
-
-def Cos_96_Filter(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Filter"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_Filter")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.5,
- lid=Cos_96_Filter_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_Filter",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.55,
- dy=8.05,
- dz=2.1,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.9,
- size_y=6.9,
- size_z=12.2,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_Filter,
- ),
- )
-
-
-def Cos_96_Filter_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Filter"""
- return Cos_96_Filter(name=name, with_lid=with_lid)
-
-
-def Cos_96_Filter_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Filter"""
- return Cos_96_Filter(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def Cos_96_Fl_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Fl"""
- return Cos_96_FL(name=name, with_lid=with_lid)
-
-
-def Cos_96_Fl_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Fl"""
- return Cos_96_FL(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_HalfArea(h: float) -> float:
- volume = min(h, 10.7) * 17.7369
- if h > 10.7:
- raise ValueError(f"Height {h} is too large for Cos_96_HalfArea")
- return volume
-
-
-def Cos_96_HalfArea_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_HalfArea_Lid",
- # )
-
-
-def Cos_96_HalfArea(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_HalfArea"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_HalfArea")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.5,
- lid=Cos_96_HalfArea_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_HalfArea",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=11.5,
- dy=9.0,
- dz=1.0,
- item_dx=9.0,
- item_dy=9.0,
- size_x=5.0,
- size_y=5.0,
- size_z=10.7,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_HalfArea,
- ),
- )
-
-
-def Cos_96_HalfArea_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_HalfArea"""
- return Cos_96_HalfArea(name=name, with_lid=with_lid)
-
-
-def Cos_96_HalfArea_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_HalfArea"""
- return Cos_96_HalfArea(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_PCR(h: float) -> float:
- volume = min(h, 11.5) * 6.5450
- if h <= 20.5:
- volume += (h - 11.5) * 23.8237
- if h > 32.0:
- raise ValueError(f"Height {h} is too large for Cos_96_PCR")
- return volume
-
-
-def Cos_96_PCR_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_PCR_Lid",
- # )
-
-
-def Cos_96_PCR(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_PCR"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_PCR")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=22.5,
- lid=Cos_96_PCR_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_PCR",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=11.0,
- dy=8.5,
- dz=0.5,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.0,
- size_y=6.0,
- size_z=20.5,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_PCR,
- ),
- )
-
-
-def Cos_96_PCR_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_PCR"""
- return Cos_96_PCR(name=name, with_lid=with_lid)
-
-
-def Cos_96_PCR_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_PCR"""
- return Cos_96_PCR(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_ProtCryst(h: float) -> float:
- volume = min(h, 1.6) * 7.5477
- if h > 1.6:
- raise ValueError(f"Height {h} is too large for Cos_96_ProtCryst")
- return volume
-
-
-def Cos_96_ProtCryst_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_ProtCryst_Lid",
- # )
-
-
-def Cos_96_ProtCryst(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_ProtCryst"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_ProtCryst")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=20.0,
- lid=Cos_96_ProtCryst_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_ProtCryst",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=24,
- num_items_y=8,
- dx=10.15,
- dy=9.95,
- dz=10.0,
- item_dx=4.5,
- item_dy=9.0,
- size_x=3.1,
- size_y=3.1,
- size_z=1.6,
- bottom_type=WellBottomType.FLAT,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_ProtCryst,
- ),
- )
-
-
-def Cos_96_ProtCryst_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_ProtCryst"""
- return Cos_96_ProtCryst(name=name, with_lid=with_lid)
-
-
-def Cos_96_ProtCryst_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_ProtCryst"""
- return Cos_96_ProtCryst(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_Rd(h: float) -> float:
- volume = min(h, 0.6) * min(h, 0.6) * (10.0531 - 1.0472 * min(h, 0.6))
- if h <= 11.3:
- volume += (h - 0.6) * 34.7486
- if h > 11.9:
- raise ValueError(f"Height {h} is too large for Cos_96_Rd")
- return volume
-
-
-def Cos_96_Rd_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_Rd_Lid",
- # )
-
-
-def Cos_96_Rd(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Rd"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_Rd")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.5,
- lid=Cos_96_Rd_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_Rd",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.55,
- dy=8.05,
- dz=0.75,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.9,
- size_y=6.9,
- size_z=11.3,
- bottom_type=WellBottomType.U,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_Rd,
- ),
- )
-
-
-def Cos_96_Rd_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Rd"""
- return Cos_96_Rd(name=name, with_lid=with_lid)
-
-
-def Cos_96_Rd_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Rd"""
- return Cos_96_Rd(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_SpecOps(h: float) -> float:
- volume = min(h, 11.0) * 34.7486
- if h > 11.0:
- raise ValueError(f"Height {h} is too large for Cos_96_SpecOps")
- return volume
-
-
-def Cos_96_SpecOps_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_SpecOps_Lid",
- # )
-
-
-def Cos_96_SpecOps(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_SpecOps"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_SpecOps")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.3,
- lid=Cos_96_SpecOps_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_SpecOps",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.55,
- dy=8.05,
- dz=0.1,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.9,
- size_y=6.9,
- size_z=11.0,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_SpecOps,
- ),
- )
-
-
-def Cos_96_SpecOps_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_SpecOps"""
- return Cos_96_SpecOps(name=name, with_lid=with_lid)
-
-
-def Cos_96_SpecOps_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_SpecOps"""
- return Cos_96_SpecOps(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_UV(h: float) -> float:
- volume = min(h, 11.0) * 34.7486
- if h > 11.0:
- raise ValueError(f"Height {h} is too large for Cos_96_UV")
- return volume
-
-
-def Cos_96_UV_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_UV_Lid",
- # )
-
-
-def Cos_96_UV(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_UV"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_UV")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.3,
- lid=Cos_96_UV_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_UV",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.55,
- dy=8.05,
- dz=1.0,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.9,
- size_y=6.9,
- size_z=11.0,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_UV,
- ),
- )
-
-
-def Cos_96_UV_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_UV"""
- return Cos_96_UV(name=name, with_lid=with_lid)
-
-
-def Cos_96_UV_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_UV"""
- return Cos_96_UV(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Cos_96_Vb(h: float) -> float:
- volume = min(h, 1.4) * 10.5564
- if h <= 10.9:
- volume += (h - 1.4) * 36.9605
- if h > 12.3:
- raise ValueError(f"Height {h} is too large for Cos_96_Vb")
- return volume
-
-
-def Cos_96_Vb_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Cos_96_Vb_Lid",
- # )
-
-
-def Cos_96_Vb(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Vb"""
-
- raise ResourceDefinitionIncompleteError(resource_name="Cos_96_Vb")
-
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.24,
- lid=Cos_96_Vb_Lid(name=name + "_lid") if with_lid else None,
- model="Cos_96_Vb",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=10.55,
- dy=8.05,
- dz=1.0,
- item_dx=9.0,
- item_dy=9.0,
- size_x=6.9,
- size_y=6.9,
- size_z=10.9,
- bottom_type=WellBottomType.V,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Cos_96_Vb,
- ),
- )
-
-
-def Cos_96_Vb_L(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Vb"""
- return Cos_96_Vb(name=name, with_lid=with_lid)
-
-
-def Cos_96_Vb_P(name: str, with_lid: bool = False) -> Plate:
- """Cos_96_Vb"""
- return Cos_96_Vb(name=name, with_lid=with_lid).rotated(z=90)
-
+from typing import Optional
+from pylabrobot.resources.plate import Lid, Plate
+from pylabrobot.resources.well import (
+ Well,
+ WellBottomType,
+ CrossSectionType,
+)
+from pylabrobot.resources.utils import create_ordered_items_2d
-############ User-defined PLR Cos 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,
+ compute_height_from_volume_conical_frustum,
+ compute_volume_from_height_conical_frustum,
+)
-# # # # # # # # # # Cos_6_wellplate_16800ul_Fb # # # # # # # # # #
+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.")
def Cos_6_wellplate_16800ul_Fb_Lid(name: str) -> Lid:
@@ -1366,6 +270,9 @@ def Cor_96_wellplate_360ul_Fb(name: str, with_lid: bool = False) -> Plate:
)
+# # # # # # # # # # Cor_6_wellplate_Fl # # # # # # # # # #
+
+
def Cor_6_wellplate_Fl(name: str, lid: Optional[Lid] = None) -> Plate:
"""
Corning cat. no.: 3471
diff --git a/pylabrobot/resources/eppendorf/plates.py b/pylabrobot/resources/eppendorf/plates.py
index b765d9d26a..1e4e2b1fa7 100644
--- a/pylabrobot/resources/eppendorf/plates.py
+++ b/pylabrobot/resources/eppendorf/plates.py
@@ -1,5 +1,3 @@
-"""Thermo Fisher & Thermo Fisher Scientific plates"""
-
from pylabrobot.resources.well import (
Well,
WellBottomType,
@@ -9,7 +7,7 @@
from pylabrobot.resources.plate import Lid, Plate
-# # # # # # # # # # Thermo_AB_96_wellplate_300ul_Vb_EnduraPlate # # # # # # # # # #
+# # # # # # # # # # Eppendorf_96_wellplate_250ul_Vb # # # # # # # # # #
def _compute_volume_from_height_Eppendorf_96_wellplate_250ul_Vb(
diff --git a/pylabrobot/resources/greiner/__init__.py b/pylabrobot/resources/greiner/__init__.py
deleted file mode 100644
index 15ff2bd6e6..0000000000
--- a/pylabrobot/resources/greiner/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .plates import *
diff --git a/pylabrobot/resources/greiner/plates.py b/pylabrobot/resources/greiner/plates.py
deleted file mode 100644
index 3ee48ead9e..0000000000
--- a/pylabrobot/resources/greiner/plates.py
+++ /dev/null
@@ -1,217 +0,0 @@
-"""Greiner plates"""
-
-from pylabrobot.resources.plate import Lid, Plate
-from pylabrobot.resources.well import Well, WellBottomType
-from pylabrobot.resources.utils import create_ordered_items_2d
-
-
-def _compute_volume_from_height_Gre_384_Sq(h: float) -> float:
- volume = min(h, 11.6499996185) * 14.0625
- if h > 11.6499996185:
- raise ValueError(f"Height {h} is too large for Gre_384_Sq")
- return volume
-
-
-def Gre_384_Sq_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Gre_384_Sq_Lid",
- # )
-
-
-def Gre_384_Sq(name: str, with_lid: bool = False) -> Plate:
- """Gre_384_Sq"""
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.5,
- lid=Gre_384_Sq_Lid(name + "_lid") if with_lid else None,
- model="Gre_384_Sq",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=24,
- num_items_y=16,
- # dy=-1215.5, # from hamilton definition
- dx=7 + 2.25, # (86 - 16*4.5) / 2 + half well width
- dy=9.5 + 2.25, # (86 - 16*4.5) / 2 + half well width
- dz=2.85,
- item_dx=4.5,
- item_dy=4.5,
- size_x=4.5,
- size_y=4.5,
- size_z=11.6499996185,
- bottom_type=WellBottomType.UNKNOWN,
- compute_volume_from_height=_compute_volume_from_height_Gre_384_Sq,
- ),
- )
-
-
-def _compute_volume_from_height_Gre_1536_Sq(h: float) -> float:
- volume = min(h, 5.0) * 2.3409
- if h > 5.0:
- raise ValueError(f"Height {h} is too large for Gre_1536_Sq")
- return volume
-
-
-def Gre_1536_Sq_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Gre_1536_Sq_Lid",
- # )
-
-
-def Gre_1536_Sq(name: str, with_lid: bool = False) -> Plate:
- """Gre_1536_Sq"""
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=10.4,
- lid=Gre_1536_Sq_Lid(name + "_lid") if with_lid else None,
- model="Gre_1536_Sq",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=48,
- num_items_y=32,
- dx=9.5,
- # dy=-2589.25, # from hamilton definition
- dy=25.8925, # ? based on Gre_384_Sq
- dz=5.4,
- item_dx=2.25,
- item_dy=2.25,
- size_x=2.25,
- size_y=2.25,
- size_z=5.0,
- bottom_type=WellBottomType.UNKNOWN,
- compute_volume_from_height=_compute_volume_from_height_Gre_1536_Sq,
- ),
- )
-
-
-def Gre_1536_Sq_L(name: str, with_lid: bool = False) -> Plate:
- """Gre_1536_Sq"""
- return Gre_1536_Sq(name=name, with_lid=with_lid)
-
-
-def Gre_1536_Sq_P(name: str, with_lid: bool = False) -> Plate:
- """Gre_1536_Sq"""
- return Gre_1536_Sq(name=name, with_lid=with_lid).rotated(z=90)
-
-
-def _compute_volume_from_height_Greiner96Well_655_101(
- h: float,
-) -> float:
- volume = min(h, 10.9) * 35.0152
- if h > 10.9:
- raise ValueError(f"Height {h} is too large for Greiner96Well_655_101")
- return volume
-
-
-def Greiner96Well_655_101_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Greiner96Well_655_101_Lid",
- # )
-
-
-# done with python
-# plate, description, eqn = create_plate_for_writing(path, ctr_filepath=ctr_path)
-# ctr_path = 'Well655_101.ctr'
-# write_plate_definition(sys.stdout, plate=plate, description=description, eqn=eqn)
-def Greiner96Well_655_101(name: str, with_lid: bool = False) -> Plate:
- """Greiner96Well_655_101"""
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.4,
- lid=Greiner96Well_655_101_Lid(name + "_lid") if with_lid else None,
- model="Greiner96Well_655_101",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=9.5,
- # dy=-532.0, # from hamilton definition
- dy=5.320, # based on Gre_384_Sq
- dz=2.5,
- item_dx=9.0,
- item_dy=9.0,
- size_x=9.0,
- size_y=9.0,
- size_z=10.9,
- bottom_type=WellBottomType.UNKNOWN,
- compute_volume_from_height=_compute_volume_from_height_Greiner96Well_655_101,
- ),
- )
-
-
-def _compute_volume_from_height_Greiner96Well_650_201_RB(
- h: float,
-) -> float:
- volume = min(h, 2.36) * min(h, 2.36) * (10.9327 - 1.0472 * min(h, 2.36))
- if h <= 10.9:
- volume += (h - 2.36) * 38.0459
- if h > 13.26:
- raise ValueError(f"Height {h} is too large for Greiner96Well_650_201_RB")
- return volume
-
-
-def Greiner96Well_650_201_RB_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Greiner96Well_650_201_RB_Lid",
- # )
-
-
-def Greiner96Well_650_201_RB(name: str, with_lid: bool = False) -> Plate:
- """Greiner96Well_650_201_RB"""
- return Plate(
- name=name,
- size_x=127.0,
- size_y=86.0,
- size_z=14.6,
- lid=Greiner96Well_650_201_RB_Lid(name + "_lid") if with_lid else None,
- model="Greiner96Well_650_201_RB",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=12,
- num_items_y=8,
- dx=9.88,
- # dy=-531.74, # from hamilton definition
- dy=5.3174, # based on Gre_384_Sq
- dz=2.5,
- item_dx=9.0,
- item_dy=9.0,
- size_x=9.0,
- size_y=9.0,
- size_z=10.9,
- bottom_type=WellBottomType.U,
- compute_volume_from_height=_compute_volume_from_height_Greiner96Well_650_201_RB,
- ),
- )
diff --git a/pylabrobot/resources/limbro/__init__.py b/pylabrobot/resources/limbro/__init__.py
deleted file mode 100644
index 15ff2bd6e6..0000000000
--- a/pylabrobot/resources/limbro/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .plates import *
diff --git a/pylabrobot/resources/limbro/plates.py b/pylabrobot/resources/limbro/plates.py
deleted file mode 100644
index e602fdf974..0000000000
--- a/pylabrobot/resources/limbro/plates.py
+++ /dev/null
@@ -1,201 +0,0 @@
-"""Limbro plates"""
-
-from pylabrobot.resources.plate import Lid, Plate
-from pylabrobot.resources.well import (
- Well,
- WellBottomType,
- CrossSectionType,
-)
-from pylabrobot.resources.utils import create_ordered_items_2d
-
-
-def _compute_volume_from_height_Limbro_24_Large(h: float) -> float:
- volume = min(h, 13.0) * 226.9801
- if h > 13.0:
- raise ValueError(f"Height {h} is too large for Limbro_24_Large")
- return volume
-
-
-def Limbro_24_Large_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Limbro_24_Large_Lid",
- # )
-
-
-def Limbro_24_Large(name: str, with_lid: bool = False) -> Plate:
- """Limbro_24_Large"""
- return Plate(
- name=name,
- size_x=109.0,
- size_y=152.0,
- size_z=25.0,
- lid=Limbro_24_Large_Lid(name + "_lid") if with_lid else None,
- model="Limbro_24_Large",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=4,
- num_items_y=6,
- dx=6.0,
- dy=11.5,
- dz=1.0,
- item_dx=22.4,
- item_dy=22.4,
- size_x=17.0,
- size_y=17.0,
- size_z=13.0,
- bottom_type=WellBottomType.FLAT,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Limbro_24_Large,
- ),
- )
-
-
-def _compute_volume_from_height_Limbro_24_Small(h: float) -> float:
- volume = min(h, 1.5) * min(h, 1.5) * (7.8540 - 1.0472 * min(h, 1.5))
- if h > 1.5:
- raise ValueError(f"Height {h} is too large for Limbro_24_Small")
- return volume
-
-
-def Limbro_24_Small_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Limbro_24_Small_Lid",
- # )
-
-
-def Limbro_24_Small(name: str, with_lid: bool = False) -> Plate:
- """Limbro_24_Small"""
- return Plate(
- name=name,
- size_x=109.0,
- size_y=152.0,
- size_z=25.0,
- lid=Limbro_24_Small_Lid(name + "_lid") if with_lid else None,
- model="Limbro_24_Small",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=4,
- num_items_y=6,
- dx=17.5,
- dy=17.5,
- dz=1.0,
- item_dx=22.4,
- item_dy=22.4,
- size_x=5.0,
- size_y=5.0,
- size_z=1.5,
- bottom_type=WellBottomType.U,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Limbro_24_Small,
- ),
- )
-
-
-def _compute_volume_from_height_Limbro_48_Large(h: float) -> float:
- volume = min(h, 13.0) * 113.0973
- if h > 13.0:
- raise ValueError(f"Height {h} is too large for Limbro_48_Large")
- return volume
-
-
-def Limbro_48_Large_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Limbro_48_Large_Lid",
- # )
-
-
-def Limbro_48_Large(name: str, with_lid: bool = False) -> Plate:
- """Limbro_48_Large"""
- return Plate(
- name=name,
- size_x=109.0,
- size_y=152.0,
- size_z=25.0,
- lid=Limbro_48_Large_Lid(name + "_lid") if with_lid else None,
- model="Limbro_48_Large",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=4,
- num_items_y=12,
- dx=16.0,
- dy=8.0,
- dz=1.0,
- item_dx=22.4,
- item_dy=11.2,
- size_x=12.0,
- size_y=12.0,
- size_z=13.0,
- bottom_type=WellBottomType.FLAT,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Limbro_48_Large,
- ),
- )
-
-
-def _compute_volume_from_height_Limbro_96_Large(h: float) -> float:
- volume = min(h, 13.0) * 113.0973
- if h > 13.0:
- raise ValueError(f"Height {h} is too large for Limbro_96_Large")
- return volume
-
-
-def Limbro_96_Large_Lid(name: str) -> Lid:
- raise NotImplementedError("This lid is not currently defined.")
- # See https://github.com/PyLabRobot/pylabrobot/pull/161.
- # return Lid(
- # name=name,
- # size_x=127.0,
- # size_y=86.0,
- # size_z=None, # measure the total z height
- # nesting_z_height=None, # measure overlap between lid and plate
- # model="Limbro_96_Large_Lid",
- # )
-
-
-def Limbro_96_Large(name: str, with_lid: bool = False) -> Plate:
- """Limbro_96_Large"""
- return Plate(
- name=name,
- size_x=109.0,
- size_y=152.0,
- size_z=25.0,
- lid=Limbro_96_Large_Lid(name + "_lid") if with_lid else None,
- model="Limbro_96_Large",
- ordered_items=create_ordered_items_2d(
- Well,
- num_items_x=8,
- num_items_y=12,
- dx=9.0,
- dy=9.0,
- dz=1.0,
- item_dx=11.2,
- item_dy=11.2,
- size_x=12.0,
- size_y=12.0,
- size_z=13.0,
- bottom_type=WellBottomType.FLAT,
- cross_section_type=CrossSectionType.CIRCLE,
- compute_volume_from_height=_compute_volume_from_height_Limbro_96_Large,
- ),
- )
diff --git a/pylabrobot/resources/opentrons/plate_adapters.py b/pylabrobot/resources/opentrons/plate_adapters.py
index f50b128af3..607d12487e 100644
--- a/pylabrobot/resources/opentrons/plate_adapters.py
+++ b/pylabrobot/resources/opentrons/plate_adapters.py
@@ -1,5 +1,3 @@
-"""Opentrons Plate Adapters"""
-
from pylabrobot.resources.plate_adapter import PlateAdapter
diff --git a/pylabrobot/resources/porvair/plates.py b/pylabrobot/resources/porvair/plates.py
index 2a161ca6af..06046699c8 100644
--- a/pylabrobot/resources/porvair/plates.py
+++ b/pylabrobot/resources/porvair/plates.py
@@ -1,5 +1,3 @@
-"""Porvair plates"""
-
from typing import Optional
from pylabrobot.resources.plate import Lid, Plate
from pylabrobot.resources.well import (
diff --git a/pylabrobot/resources/revvity/plates.py b/pylabrobot/resources/revvity/plates.py
index e8f7a6dbfb..6c8107a8be 100644
--- a/pylabrobot/resources/revvity/plates.py
+++ b/pylabrobot/resources/revvity/plates.py
@@ -1,5 +1,3 @@
-"""Revvity plates"""
-
from pylabrobot.resources.plate import Lid, Plate
from pylabrobot.resources.well import (
Well,
@@ -13,7 +11,7 @@
)
-# # # # # # # # # # Revvity_384_wellplate_28ul_Ub_Lid # # # # # # # # # #
+# # # # # # # # # # Revvity_384_wellplate_28ul_Ub # # # # # # # # # #
def _compute_volume_from_height_Revvity_384_wellplate_28ul_Ub(
diff --git a/pylabrobot/resources/thermo_fisher/plates.py b/pylabrobot/resources/thermo_fisher/plates.py
index d222535d4c..82d7190527 100644
--- a/pylabrobot/resources/thermo_fisher/plates.py
+++ b/pylabrobot/resources/thermo_fisher/plates.py
@@ -74,20 +74,6 @@ def Thermo_TS_96_wellplate_1200ul_Rb_Lid(name: str) -> Lid:
# )
-def ThermoScientific_96_DWP_1200ul_Rd(name: str, with_lid: bool = False) -> Plate:
- raise NotImplementedError(
- "This function is deprecated and will be removed in a future version."
- " Use 'Thermo_TS_96_wellplate_1200ul_Rb' instead."
- )
-
-
-def ThermoScientific_96_wellplate_1200ul_Rd(name: str, with_lid: bool = False) -> Plate:
- raise NotImplementedError(
- "This function is deprecated and will be removed in a future version."
- " Use 'Thermo_TS_96_wellplate_1200ul_Rb' instead."
- )
-
-
def Thermo_TS_96_wellplate_1200ul_Rb(name: str, with_lid: bool = False) -> Plate:
"""Thermo Fisher Scientific/Fisher Scientific cat. no.: AB1127/10243223.
- Material: Polypropylene (AB-1068, polystyrene).
diff --git a/pylabrobot/resources/thermo_fisher/troughs.py b/pylabrobot/resources/thermo_fisher/troughs.py
index f3607294be..f354c4531d 100644
--- a/pylabrobot/resources/thermo_fisher/troughs.py
+++ b/pylabrobot/resources/thermo_fisher/troughs.py
@@ -2,7 +2,7 @@
def ThermoFisherMatrixTrough8094(name: str) -> Trough:
- """Thermo Fisher Trough 8094 - 25mL
+ """Thermo Fisher Trough 8094 - 25mL. Part number 8094.
https://www.thermofisher.com/order/catalog/product/8094
"""
return Trough(
diff --git a/pylabrobot/resources/vwr/troughs.py b/pylabrobot/resources/vwr/troughs.py
index 0c561c0aa0..252c9cc434 100644
--- a/pylabrobot/resources/vwr/troughs.py
+++ b/pylabrobot/resources/vwr/troughs.py
@@ -2,6 +2,7 @@
def VWRReagentReservoirs25mL(name: str) -> Trough:
+ """part number 89094"""
return Trough(
name=name,
size_x=44,