UniteLabs
Labware

Standard Labware

Learn how to use the labware library by importing standard labware.

The labware library contains many pre-defined labware types and base classes to create custom labware. Before building your own labware definition, check if what you need already exists; it likely does for common Hamilton carriers, Corning-Costar plates, and standard tips.

What's available

Standard labware is organized by vendor sub-package:

Sub-packageContents
unitelabs.labware.hamiltonHamilton plate carriers, tip carriers, trough carriers, tip types
unitelabs.labware.corning_costarCorning-Costar 96/384-well plates
unitelabs.labwareGeneric base types: Standard96Plate, StandardTrough, Standard50mLTube, etc.

To see the full list of what is available in any sub-package at runtime:

from unitelabs.labware import hamilton, corning_costar

print(hamilton.__all__)       # all Hamilton carriers and tip types
print(corning_costar.__all__) # all Corning-Costar plates

Hamilton carriers

from unitelabs.labware.hamilton import (
    # Plate carriers (landscape, 5-slot)
    PLT_CAR_L5MD_A00,    # Medium density
    PLT_CAR_L5AC_A00,    # Anti-condensation
    PLT_CAR_L5FLEX_MD_A00,
    PLT_CAR_L5FLEX_AC_A00,
    PLT_CAR_L5PCR_A00,   # PCR plates
    # Plate carriers (portrait, 3-slot)
    PLT_CAR_P3MD_A00,
    PLT_CAR_P3AC_A00,
    # Tip carriers
    TIP_CAR_288_A00,
    TIP_CAR_480_A00,
)

Corning-Costar plates

from unitelabs.labware.corning_costar import (
    Cos_96_FB,    # 96-well flat bottom
    Cos_96_RD,    # 96-well round bottom
    Cos_384_Sq,   # 384-well square bottom
)

Generic standard types

These are available directly from unitelabs.labware and work across vendors:

from unitelabs.labware import (
    Standard96Plate,   # ANSI/SLAS standard 96-well plate
    StandardTrough,    # 300 mL reagent trough (96-hole access)
    Standard50mLTube,  # 50 mL conical tube
)

Importing a labware class, i.e. the tip carrier TIP_CAR_480_A00 from Hamilton is done with the following code:

from unitelabs.labware.hamilton import TIP_CAR_480_A00

In the same way, importing the 96-well flat bottom microplates from Corning-Costar looks like this:

from unitelabs.labware.corning_costar import Cos_96_FB

Inspecting labware properties

After importing a labware class, you can instantiate it. Using the dir( ... ) built-in function, all available properties and methods can be viewed. A selection is shown below:

from unitelabs.labware.hamilton import PLT_CAR_L5MD_A00


plate_carrier_1 = PLT_CAR_L5MD_A00()

print(plate_carrier_1.dimensions)
print(plate_carrier_1.height, plate_carrier_1.depth, plate_carrier_1.width)
print(plate_carrier_1.location)
print(plate_carrier_1.absolute_location)
print(plate_carrier_1.rotation)
print(plate_carrier_1.tracks)
print(plate_carrier_1.cols)
print(plate_carrier_1.rows)
print(plate_carrier_1.children)

This yields the following output:

Terminal
Vector(x=Decimal('135'), y=Decimal('497'), z=Decimal('130'))   # .dimension
130 497 135                         # .height, .depth, .width
None                                # .location
Vector(x=Decimal('0'), y=Decimal('0'), z=Decimal('0'))         # .absolute_location
0                                   # .rotation
6                                   # .tracks
1                                   # .cols
5                                   # .rows
[
  CarrierSite(identifier='81625615', rotation=0, dimensions=Vector(x=Decimal('127'), y=Decimal('86'), z=Decimal('0')), location=Vector(x=Decimal('4'), y=Decimal('392.5'), z=Decimal('111.75')), orientation=<Orientation.LANDSCAPE: 'LANDSCAPE'>),
  CarrierSite(identifier='90e13a32', rotation=0, dimensions=Vector(x=Decimal('127'), y=Decimal('86'), z=Decimal('0')), location=Vector(x=Decimal('4'), y=Decimal('296.5'), z=Decimal('111.75')), orientation=<Orientation.LANDSCAPE: 'LANDSCAPE'>),
  CarrierSite(identifier='0e66b837', rotation=0, dimensions=Vector(x=Decimal('127'), y=Decimal('86'), z=Decimal('0')), location=Vector(x=Decimal('4'), y=Decimal('200.5'), z=Decimal('111.75')), orientation=<Orientation.LANDSCAPE: 'LANDSCAPE'>),
  CarrierSite(identifier='d16d85e1', rotation=0, dimensions=Vector(x=Decimal('127'), y=Decimal('86'), z=Decimal('0')), location=Vector(x=Decimal('4'), y=Decimal('104.5'), z=Decimal('111.75')), orientation=<Orientation.LANDSCAPE: 'LANDSCAPE'>),
  CarrierSite(identifier='b2b1ced8', rotation=0, dimensions=Vector(x=Decimal('127'), y=Decimal('86'), z=Decimal('0')), location=Vector(x=Decimal('4'), y=Decimal('8.5'), z=Decimal('111.75')), orientation=<Orientation.LANDSCAPE: 'LANDSCAPE'>)
]

When instantiated, labware does not have a location yet. Labware can be added to a deck or other labware. The location will then be calculated relative to its parent. More on deck building is explained in Building a Deck.

Labware can be custom-made using the base classes provided. More on custom labware is explained in the custom labware guide.