Hamilton MFX Carriers
The MFX carrier system is specific to Hamilton liquid handlers, including Microlab STAR and Vantage. MFX carrier hardware is assembled from a base plate and individual MFX modules, so one base plate can hold modules with different functions and geometries. The labware library models this system: you select a base plate, the MFX modules, and their positions, and the library computes the sites, their heights, and the overall carrier geometry.
Use an MFX carrier when your hardware is a Hamilton base plate with MFX modules. For fixed carriers such as the 5-position plate or tip carrier, see Carriers and Adapters.
Prerequisites
unitelabs-labware0.15.0 or later installed- The base plate and module part numbers of your physical carrier
- Understanding of labware concept
Concepts
| Term | Meaning |
|---|---|
| Base plate | The flat base of an MFX carrier. Defines the carrier's number of positions, width in tracks, and orientation (landscape or portrait). |
| Module | An MFX module mounted on a base plate position. It sets the site height and type (tip, plate, etc.). |
| Position | A slot on the base plate, counted from 1 at the top of the carrier (the side with the highest y-value). |
| Site | The CarrierSite the library creates for each position that has a module. Empty positions do not get a site. |
The UniteLabs labware library defines the following base plates:
| Class | Positions | Tracks | Width (mm) | Orientation | Product number |
|---|---|---|---|---|---|
MFX_Baseplate_6T_5Pos | 5 | 6 | 135.0 | Landscape | 188039 |
MFX_Baseplate_6T_4Pos | 4 | 6 | 135.0 | Landscape | 188039 |
MFX_Baseplate_Shaker_7T_4Pos | 4 | 7 | 157.5 | Landscape | 187001 |
MFX_Baseplate_Portrait_5T_3Pos | 3 | 5 | 112.5 | Portrait | 188053 |
MFX_Baseplate_6T_4Pos and MFX_Baseplate_6T_5Pos are the same physical plate (188039) with two site layouts. The 4-position layout shifts the sites down by half a position (48 mm), so the pipetting channels of a 16-channel robot can reach them with random access. Choose the layout that matches how the modules are mounted on your instrument.
MFX modules live in unitelabs.labware.hamilton.carriers and are named after the Hamilton part, for example MFX_Mod_Tip_Module, MFX_Mod_PCR_96, MFX_Mod_MIDI_HP_Flat, MFX_Mod_HHC, and MFX_Mod_HHS_2mm_Flat_DWP. The Hamilton product number of a module is stored in its model attribute. Base plates carry theirs in the same attribute. Use it to match a class to the part on your carrier:
from unitelabs.labware.hamilton.carriers import MFX_Mod_HHC, MFX_Mod_PCR_96, MFX_Mod_Tip_Module
print(MFX_Mod_Tip_Module().model) # 188040
print(MFX_Mod_PCR_96().model) # 188049
print(MFX_Mod_HHC().model) # 6601900-01
MFX modules have variants ending in _Brackets which represent the same module mounted on the MFX Module Bracket PN 188133 (brackets are needed to mount 6T modules onto the 7T base plates) and raise the site by 10 mm. Use the variant that represents your actual hardware setup.
Assemble a Custom MFX Carrier
To define an MFX carrier, use the make_mfx_carrier function. It takes a list of (position, module) tuples and returns a carrier class. Positions are 1-based and must be unique.
from unitelabs.labware.hamilton import MFX_Baseplate_6T_5Pos, make_mfx_carrier
from unitelabs.labware.hamilton.carriers import MFX_Mod_MIDI_HP_Flat, MFX_Mod_Tip_Module
MyCarrier = make_mfx_carrier(
[
(1, MFX_Mod_Tip_Module()),
(2, MFX_Mod_Tip_Module()),
(3, MFX_Mod_Tip_Module()),
(4, MFX_Mod_MIDI_HP_Flat()),
(5, MFX_Mod_MIDI_HP_Flat()),
],
base=MFX_Baseplate_6T_5Pos,
)
carrier = MyCarrier(identifier="mfx_carrier")
print(MyCarrier.__name__)
print(carrier.dimensions)
for site in carrier.children:
print(site.location)
All five positions hold a module, so the defined carrier has five sites:
MFX_CAR_L5_3Tip_2MIDI
Vector(x=135, y=497, z=112)
Vector(x=4, y=392.5, z=112)
Vector(x=4, y=296.5, z=112)
Vector(x=4, y=200.5, z=112)
Vector(x=4, y=104.5, z=95)
Vector(x=4, y=8.5, z=95)
What happens in detail:
- Base plate. The example sets
base=MFX_Baseplate_6T_5Posas the carrier's base plate. - Site height. Each site's z is the base plate height (18 mm) plus the module's site height. For example, the tip module site is at a combined height of 18 + 94 = 112 mm.
- Carrier height. The carrier's z is defined as the tallest base plate and module combination, here 112 mm.
- Name. The class name follows the
MFX_CAR_{L|P}{positions}_{count}{Module}_…convention, whereLis landscape,Pis portrait, andpositionsis the base plate's total. You can override it by passingname="..."tomake_mfx_carrier.
Portrait Carriers
All modules on a carrier must share one orientation. To build a portrait carrier from landscape modules, pass orientation. The library re-orients every module:
from unitelabs.labware import Orientation
from unitelabs.labware.hamilton import MFX_Baseplate_Portrait_5T_3Pos, make_mfx_carrier
from unitelabs.labware.hamilton.carriers import MFX_Mod_Stacker_Module
StackCarrier = make_mfx_carrier(
[(1, MFX_Mod_Stacker_Module()), (2, MFX_Mod_Stacker_Module())],
base=MFX_Baseplate_Portrait_5T_3Pos,
orientation=Orientation.PORTRAIT,
name="MyStackCarrier",
)
Define as Dataclasses
To reuse an MFX carrier configuration across scripts, define it once as a dataclass. Subclass the base plate and set the modules. You can also define fixed carriers without modules in the same way, as shown under Plate Carriers.
import collections.abc
import dataclasses
from unitelabs.labware.hamilton import MFX_Baseplate_6T_5Pos
from unitelabs.labware.hamilton.carriers import HamiltonMFXModule, MFX_Mod_MIDI_HP_Flat, MFX_Mod_Tip_Module
@dataclasses.dataclass
class MFX_CAR_L5_3Tip_2MIDI(MFX_Baseplate_6T_5Pos):
"""MFX 5-position carrier: 3x Tip Module, 2x MIDI HP Flat."""
modules: dataclasses.InitVar[collections.abc.Sequence[tuple[int, HamiltonMFXModule]]] = (
(1, MFX_Mod_Tip_Module()),
(2, MFX_Mod_Tip_Module()),
(3, MFX_Mod_Tip_Module()),
(4, MFX_Mod_MIDI_HP_Flat()),
(5, MFX_Mod_MIDI_HP_Flat()),
)
Import it wherever you need the carrier:
from mfx_carriers import MFX_CAR_L5_3Tip_2MIDI
carrier = MFX_CAR_L5_3Tip_2MIDI(identifier="mfx_carrier")
Validation Errors
The library checks the configuration when you build it and raises a ValueError on incorrect use, for example when position 6 is specified on a 5-position plate:
Position 6 is out of range for 'MFX_Baseplate_6T_5Pos' (valid: 1-5). No standard base plate supports 6 landscape positions.
It also rejects duplicate positions, mixed module orientations without an orientation argument, and modules whose site is wider than the base plate.
Place Labware on the Carrier
Labware is placed on the carrier by site index, like any other carrier. The index counts sites, not positions. Empty positions are skipped. In the example above every position is filled, so the index is the position minus 1. On a carrier with only positions 1 and 5 filled, position 5 is index 1.
from unitelabs.labware import Standard96Plate
from unitelabs.labware.hamilton import HamiltonTip_300_Filter, HamiltonTipRack_300
from unitelabs.liquid_handling.testing import MicrolabSTARMock
# Instantiate the simulated Hamilton Microlab STAR
hamilton = MicrolabSTARMock()
# MFX_CAR_L5_3Tip_2MIDI is the class built in the example above
carrier = MFX_CAR_L5_3Tip_2MIDI(identifier="mfx_carrier")
carrier[0] = HamiltonTipRack_300(identifier="tips_1", filled_with=HamiltonTip_300_Filter) # position 1
carrier[1] = HamiltonTipRack_300(identifier="tips_2", filled_with=HamiltonTip_300_Filter) # position 2
carrier[2] = HamiltonTipRack_300(identifier="tips_3", filled_with=HamiltonTip_300_Filter) # position 3
carrier[3] = Standard96Plate(identifier="plate_1") # position 4
carrier[4] = Standard96Plate(identifier="plate_2") # position 5
hamilton.deck.add(carrier, track=10)
print(hamilton.deck.summary())
The carrier occupies tracks 10 to 15 and holds all five labware items:
Tracks Name ID Capacity Content X-Range Height
====================================================================================================
1 - 9 ┌─
10 - 15 ├─ MFX_CAR_L5_3Tip_2MIDI mfx_carrier 5 5 302.5 - 437.5 232.0
│ ├─ HamiltonTipRack_300 tips_1 96 tips 96 tips
│ ├─ HamiltonTipRack_300 tips_2 96 tips 96 tips
│ ├─ HamiltonTipRack_300 tips_3 96 tips 96 tips
│ ├─ Standard96Plate plate_1 28800 µl 0 µl
│ └─ Standard96Plate plate_2 28800 µl 0 µl
16 - 30 └─
See Building a Deck for how decks, tracks, and carriers fit together.
_Brackets variants. A wrong module results in incorrect site height, which can cause runtime errors or a crash.Last updated