MFXCarrier#
MFX Carriers are a user-configurable carrier system, created by Hamilton. The user can configure the carrier system by placing plate sites, tip racks, tilt modules and other items at specific locations by screwing them into pre-threaded holes in the carrier. Different carrier bases are available.
In this tutorial, we will show how to create a custom carrier system using the MFX Carriers in PyLabRobot. We will use the MFX_CAR_L5_base
as the base, and a deep well plate module (MFX_DWP_rackbased_module
) and a tip module (MFX_TIP_module
) as the modules.
%load_ext autoreload
%autoreload 2
from pylabrobot.resources import (
MFX_CAR_L5_base,
MFX_DWP_rackbased_module,
MFX_TIP_module,
)
Start by creating variables for your mfx modules. Depending on the type of module, the class might be a pylabrobot.resources.resource_holder.ResourceHolder
(for tip rack holders), a pylabrobot.resources.carrier.PlateHolder
(for plate modules), or a Machine
class.
Let’s create plate and a tip rack modules:
my_plate_module = MFX_DWP_rackbased_module(name="my_plate_module")
my_plate_module
PlateHolder(name=my_plate_module, location=None, size_x=135.0, size_y=94.0, size_z=59.80500000000001, category=plate_holder)
my_tip_rack_module = MFX_TIP_module(name="my_tip_rack_module")
my_tip_rack_module
ResourceHolder(name=my_tip_rack_module, location=None, size_x=135.0, size_y=94.0, size_z=96.60500000000002, category=resource_holder)
Using a dictionary, you can place your mfx modules in arbitrary locations:
carrier = MFX_CAR_L5_base(
name="my_carrier",
modules={
0: my_plate_module,
3: my_tip_rack_module,
}
)
{0: PlateHolder(name=my_plate_module, location=(000.000, 005.000, 018.195), size_x=135.0, size_y=94.0, size_z=59.80500000000001, category=plate_holder), 3: ResourceHolder(name=my_tip_rack_module, location=(000.000, 293.000, 018.195), size_x=135.0, size_y=94.0, size_z=96.60500000000002, category=resource_holder)}
The children of an MFXCarrier are the sites you specified when creating the carrier.
carrier[0]
PlateHolder(name=carrier-my_carrier-spot-0, location=(000.000, 005.000, 018.195), size_x=135.0, size_y=94.0, size_z=59.80500000000001, category=plate_holder)
carrier[3]
ResourceHolder(name=carrier-my_carrier-spot-3, location=(000.000, 293.000, 018.195), size_x=135.0, size_y=94.0, size_z=96.60500000000002, category=resource_holder)
When a site is not defined, indexing into it will raise a KeyError
.
try:
carrier[1]
except KeyError as e:
print(f"KeyError, as expected.")
KeyError, as expected.
To define in PLR that there is a plate on some module in the carrier, you can assign a plate to that module using the usual assign_child_resource
method.
from pylabrobot.resources import Cos_96_wellplate_2mL_Vb
my_plate = Cos_96_wellplate_2mL_Vb(name="my_plate")
carrier[0].assign_child_resource(my_plate)
my_plate.parent
PlateHolder(name=carrier-my_carrier-spot-0, location=(000.000, 005.000, 018.195), size_x=135.0, size_y=94.0, size_z=59.80500000000001, category=plate_holder)
As with other carriers, you can also assign it directly to the site using the following syntax:
from pylabrobot.resources import HTF
my_tip_rack = HTF(name="my_tip_rack")
carrier[3] = my_tip_rack
my_tip_rack.parent
ResourceHolder(name=carrier-my_carrier-spot-3, location=(000.000, 293.000, 018.195), size_x=135.0, size_y=94.0, size_z=96.60500000000002, category=resource_holder)