UniteLabs
Labware

Building a deck

Building a deck from labware components.

Decks are typically used for arranging labware on the working deck of a liquid handler. Labware can be placed on the deck and the location of the labware will then be measured relative to the deck origin. The coordinate system of the deck is 3-dimensional with x-, y-, z- coordinates which correspond to width, depth, height respectively. When standing in front of the device, the origin is in the bottom, left corner that is in the front of the device. Depending on the device, the origin can be below the deck and beyond the marked tracks. Make sure to familiarize yourself with the respective deck specifics using the guide for that device (e.g. see Liquid handling / Positioning and movement).

Decks have a dimension that is constrained by the liquid handler space. When importing the deck directly as shown below, default constraints are applied.

from unitelabs.liquid_handling.hamilton import HamiltonDeck

deck = HamiltonDeck()
print(deck.summary())

Which returns:

  Tracks  Name               ID          Capacity     Content        X-Range   Height 
======================================================================================
  1 - 30  ──         

However, if the deck is created automatically using the specific liquid handler class, the deck dimensions are pre-configured for that particular liquid handler model (See Liquid handling / Getting started with liquid handlers for reference).

from unitelabs.liquid_handling.hamilton import MicrolabSTAR

# Initialize the Hamilton Microlab STAR
hamilton = MicrolabSTAR(name="Microlab STAR")

await hamilton.initialize()

print(hamilton.deck.summary())

Now we can start and add our first carrier. We will use a landscape tip carrier with 5 slots for tips racks. The location of the carrier on the deck is provided in absolute coordinates and passed using the Vector class. We place the carrier starting on rail 16.

from unitelabs.liquid_handling.hamilton import HamiltonDeck
from unitelabs.labware import Vector
from unitelabs.labware.hamilton import TIP_CAR_480_A00

deck = HamiltonDeck()
tip_carrier = TIP_CAR_480_A00(identifier="tip_carrier")
deck.add(tip_carrier, track=16)
# Alternatively the exact location can be set
# deck.add(tip_carrier, location=Vector(x=(16 - 1) * 22.5, y=63, z=0))
print(deck.summary())

Now our deck looks like this:

  Tracks  Name               ID          Capacity     Content        X-Range   Height 
======================================================================================
  1 - 15  ┌─                                                                          
 16 - 21  ├─ TIP_CAR_480_A00 tip_carrier      0 tips      0 tips  337.5 - 472.5  130.0 
          │   ├─                                                                      
          │   ├─                                                                      
          │   ├─                                                                      
          │   ├─                                                                      
          │   └─                                                                      
 22 - 30
Dynamic max deck size and deck dimension: When using a dedicated liquid handler class, like the MicrolabSTAR class, a deck is autogenerated and dynamically configured during the initialization process.

We can add more labware to the carrier like a pre-defined Hamilton tip rack and Hamilton standard filter tips. In the following code we first instantiate the StandardTipRack, then fill it with StandardFilterTips and then set the tip rack into the second slot (from behind) of the tip carrier we created earlier. The tip_carrier object is linked to the deck.

from unitelabs.labware.hamilton import StandardFilterTip, StandardTipRack

tip_rack = StandardTipRack(filled_with=StandardFilterTip)
tip_carrier[1] = tip_rack

print(deck.summary())

Printing the deck summary shows that the tip rack and the tips were added successfully.

  Tracks  Name                   ID          Capacity     Content      X-Range Height 
======================================================================================
  1 - 15  ┌─                                                                          
 16 - 21  ├─ TIP_CAR_480_A00     tip_carrier   96 tips   96 tips   337.5 - 472.5 135.0 
          │   ├─                                                                      
          │   ├─ StandardTipRack e3e3a74b      96 tips   96 tips                         
          │   ├─                                                                          
          │   ├─                                                                          
          │   └─                                                                          
 22 - 30  └─  

Adding plates can be done in the same way as adding racks. We will import a plate carrier and add a standard plate to it. We place the carrier starting on rail 10:

from unitelabs.labware.hamilton import TIP_CAR_480_A00, PLT_CAR_L5MD_A00
from unitelabs.labware.corning_costar import Cos_96_FB

plate_1 = Cos_96_FB()
plate_carrier = PLT_CAR_L5MD_A00(identifier="plate_carrier")
plate_carrier[1] = plate_1
deck.add(plate_carrier, track=10)

print(deck.summary())
  Tracks  Name                   ID          Capacity     Content      X-Range Height 
======================================================================================
  1 -  9  ┌─                                                                                        
 10 - 15  ├─ PLT_CAR_L5MD_A00    plate_carrier 5 plates 1 plates   202.5 - 337.5 130.0 
          │   ├─                                                                          
          │   ├─ Cos_96_FB       a9e7efb0      34560 µl     0 µl                         
          │   ├─                                                                          
          │   ├─                                                                          
          │   └─                                                                          
 16 - 21  ├─ TIP_CAR_480_A00     tip_carrier   96 tips   96 tips   337.5 - 472.5 135.0 
          │   ├─                                                                      
          │   ├─ StandardTipRack e3e3a74b      96 tips   96 tips                         
          │   ├─                                                                          
          │   ├─                                                                          
          │   └─                                                                          
 22 - 30  └─  

It is often required to create custom labware. Check out the Creating custom labware guide to learn more on that topic! The Getting started with liquid handlers guide explains how the deck is added to the liquid handler class and used in operation.


Copyright © 2025