-
Notifications
You must be signed in to change notification settings - Fork 82
Hamilton Mfx module 188049 #456
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…d location measurements
Hi @linx5o,
I don't believe it is ...cat no |
found by @ben-ray: ![]() |
No worries @linx5o, The pictures help a lot and we can figure this out :)
...I don't think it is this one because @linx5o didn't mention that his MFX module is sloped, i.e. has a rigid top surface with a tilt? Investigation 🕵🏻♂️This PR introduces the following resource definition function: from pylabrobot.resources import PlateHolder, Coordinate
from pylabrobot.resources import (
MFX_CAR_L5_base,
)
def MFX_WP_module_flat(name: str) -> PlateHolder:
"""Hamilton cat. no.: 188049 (uncertain)
Module to position a Well Plate. Taller version of MFX_DWP_module_flat.
"""
# Resource size is carried over from MFX_DWP_module_flat.
# Child location offset for x, y are measured with caliper.
return PlateHolder(
name=name,
size_x=135.0,
size_y=94.0,
size_z=216 - 18.195 - 100, # mesured using probe
# probe height - carrier_height - deck_height
child_location=Coordinate(3.0, 4.0, 209.9 - 18.195 - 100),
pedestal_size_z=0,
)
enruis_mfx_module = MFX_WP_module_flat(name="enruis_mfx_module")
mfx_carrier_test = MFX_CAR_L5_base(
name="mfx_carrier_test",
modules={
0: enruis_mfx_module,
}
)
lh.deck.assign_child_resource(mfx_carrier_test, rails=1)
print(enruis_mfx_module.get_absolute_location() + enruis_mfx_module.child_location)
>>>Coordinate(x=103.0, y=72.0, z=209.9)
# i.e. the origin (flb) of the plate_holder's child_location Going through Labware Assistant 3D this seems like a good candidate: How to check for the difference? VENUS 4 is free to use and also shared publicly shared by Eric Sindelar on the labautomation.io forum. One can use Labware Assistant 3D to generate an MFX_CAR_L5_base with --> difference between definitions for the plate_holder's child_location:
Now, this doesn't have to mean VENUS is right, in many instances we found that VENUS definitions are more of a guide than an actual "ground truth", but usually that applies more to VENUS' plate/tube/etc definitions, not so much towards fine-machined metal carriers + mfx_modules. @linx5o, do you think this adjusted definition could work for your purposes / test it?: def MFX_WP_module_flat(name: str) -> PlateHolder:
"""Hamilton cat. no.: 188228
Module to position a Well Plate. Taller version of MFX_DWP_module_flat.
"""
# Resource size is carried over from MFX_DWP_module_flat.
# Child location offset for x, y are measured with caliper.
return PlateHolder(
name=name,
size_x=135.0,
size_y=94.0,
size_z=216 - 18.195 - 100, # mesured using probe
# probe height - carrier_height - deck_height
child_location=Coordinate(4.0, 3.5, 206.0 - 18.195 - 100),
pedestal_size_z=0,
) I believe your definition is close enough to the VENUS "ground truth" to make your definition refer to Hamilton cat. no. |
Note: Might I recommend renaming (We haven't figured out a PLR naming convention for MFX Modules yet, but the first identifier should always be the manufacturer. So far we tried to avoid ambiguous terms like MTP [micro-tube-plate], DWP [deep-well-plate], WP [well-plate?]. Though a couple are still remnant from old times. I'm making this recommendation here in anticipation of what the naming convention might look like) People who've been using these terms for decades usually say "ohh, these terms are standard in biotech" ... but at the same time acknowledge that this "standard" has different definitions for different people. |
@BioCam Could sloped be referring to the positioning guides along the side (The things that stick up to help guide the plate)? I can't really tell with 188228, but they don't seem to have a slope in them. I also remeasured the sizes. My x for off. It should be 134. I have used this definition for the last few days. No issues so far. |
…e docstring for clarity
No, I believe you are referring to what some people call plate_holder "lips", this stuff: "Sloped" refers to the fact that the top surface is higher on the right than on the left, usually by ~2 mm.
I don't understand what you mean by this. Could you please elaborate?
There are many reasons why these slight differences between VENUS' "ground truth" might not have caused any issues: --> difference between definitions for the plate_holder's child_location:
Regarding z, during pipetting you might never find an issues here... until you do:
The big question for me: Have you used your iSWAP to transport a plate to this MFX module? |
I see. Thank you for clarifying. I'm not particularly familiar with these naming schemes. I will double check this also.
I have change the size of the x axis in the definition: Have not tested yet. With regards to iSwap. I only have these modules defined. I don't have any generic plate holder. So any movements with iSwap wouldn't really show the effects of incorrect dimensions. They move fine between two instances of this module. I do need to use the pickup from top parameter to have it pickup lower down from the top. (May be due to my gripper module. The height seems correct but the module is two pointy pins on each side and when gripping to close to the top the plate just slides down.) I will try to do some more tests. |
I see, so you didn't change the I recommend you not do that:
Almost all MFX modules have the same If you use 134 mm you will see that the MFX Module doesn't sit flush on the carrier when using PLR's Visualizer. But, tbf... the MFX Module's Why does it not matter? Because PLR uses a front-left-bottom (flb) parent-child relationship. What does matter a lot is the def Hamilton_MFXmodule_tall_flat(name: str) -> PlateHolder:
"""Hamilton cat. no.: 188228
Module to position a short / 'MTP' wellplate, i.e. wellplate size_z < 39 mm before
breaching minimal safety height of 245 mm.
Taller MFX module version of MFX_DWP_module_flat.
"""
# Resource size is carried over from MFX_DWP_module_flat.
# Child location offset for x, y are measured with caliper.
return PlateHolder(
name=name,
size_x=135.0,
size_y=94.0,
size_z=216 - 18.195 - 100, # Did you measure this using clld probing?
# probe height - carrier_height - deck_height
child_location=Coordinate(4.0, 3.5, 206.0 - 18.195 - 100), <== CHANGES MADE HERE
pedestal_size_z=0,
) |
I see. I measure the height of the lips and pedestal with clld probing. For x, y offsets. I measured the tabs with a caliper. |
Hi @linx5o, just checking in whether you have been able to verify the above plate_holder / "MFX Module" definition so we can update/merge this PR? :) |
@BioCam Sorry, I have not been able to verify. I have had some other things to work on. Will try to find more info on it soon. |
Following the discussion about not yet implemented modules. PLR Forum.
I have attempted to create a definition for a module I have on hand.
There are no cat. no on the module. I also do not have access to the purchase history.
From the


VENUS four Operators Manual.pdf
provided by Eric Sindelar (senior Hamilton employee) on the labautomation.io forum. There are two potential candidates.This ebay listing suggests it is the prior. However, this other listing for 188042 more aligns with the image in the manual.

I therefore believe that this module should be 188049.
I have tested this module on the liquid handler. There are no errors and the height is correct upon visual inspection when using plates.