PyLabRobot Tecan Error in adding labware to Carrier

I am trying to add a Microplate_96_Well plate to MP_3Pos Carrier.

I get an error. This goes for any of the 96 well labwares i found in the tecan resources. The problem does not accure when i choose corning_96_wellplate_360ul_flat from the opentrons resource.

mp_3pos = MP_3Pos(name=‘mp_3pos’)
mp_3pos[0] = Microplate_96_Well(name=‘plate_1’, with_lid=False) ˋ

The error i get is:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[33], line 7 1 ## HAmilton 2 # plt_car = PLT_CAR_L5AC_A00(name=‘plate carrier’) 3 # plt_car[0] = Cos_96_DW_1mL(name=‘plate_01’) 4 5 ## Tecan 6 mp_3pos = MP_3Pos(name=‘mp_3pos’) ----> 7 mp_3pos[0] = Microplate_96_Well(name=‘plate_1’, with_lid=False) 8 # mp_3pos[0] = Microplate_Nunc_96_Well(name=‘plate_1’, with_lid=False) 9 # mp_3pos[0] = corning_96_wellplate_360ul_flat(name=‘plate_1’) File [c:\users\vikmol\onedrive\dokumenter\github\pylabrobot_dalsa\pylabrobot\resources\tecan\plates.py:90](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:90), in Microplate_96_Well(name, with_lid) [43](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:43) def Microplate_96_Well(name: str, with_lid: bool = False) → TecanPlate: [44](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:44) “”" white: pn 30122300, black: pn 30122298, cell culture/clear: pn 30122304, cell culture/black with clear bottom: pn 30122306 [45](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:45) [46](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:46) Coley (…) [74](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:74) ) [75](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:75) “”" [77](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:77) return TecanPlate( [78](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:78) name=name, [79](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:79) size_x=127.8, [80](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/tecan/plates.py:80) size_y=85.4,

[421](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/itemized_resource.py:421) ) [422](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/itemized_resource.py:422) item.location=Coordinate(x=dx + i * item_dx, y=dy + (num_items_y-j-1) * item_dy, z=dz) [423](file:///C:/users/vikmol/onedrive/dokumenter/github/pylabrobot_dalsa/pylabrobot/resources/itemized_resource.py:423) items[i].append(item) TypeError: Well.init() missing 1 required positional argument: ‘size_z’

The size_z argument here is the height of the well. I added this after the Tecan resources were created.

We have the Carrier.cfg file from the EVOware containing all labware definitions. Wilson (who created the EVO backend but is no longer on this project) created a script for converting these into pylabrobot resources.

I tried to extract which numbers in this file correspond to the z height by contrasting 96 Well Microplate, 96 Well Microplate portrait and 96 Well DeepWell portait:

15;96 Well Microplate;           0;12/8/8;   153/107/1146/732/107;  2026/1800/1970/1750;  33.2;  1;  1;  0/10/10;  100;  256;  -1;0;0;0;0;0;  144;112; 5;59;
15;96 Well Microplate portrait;  0;8/12/12;  112/144/742/1134/144;  2050/1940/1960/1900;  33.2;  1;  1;  0/10/10;  100;  256;  -1;0;0;0;0;0;  112;144; 5;23;
15;96 Well DeepWell portait;     0;8/12/12;  112/144/742/1134/144;  2050/1670/1690/1625;  33.2;  1;  1;  0/10/10;  100;  256;  -1;0;0;0;0;0;  112;144; 5;8;

The parts that are shared or rotated between the three are not candidates. Ideally, one parameter would be the same, and in the same position, for 96 Well Microplate, 96 Well Microplate portrait, but higher for 96 Well DeepWell portait. Unfortunately, I cannot find such a value.

The fourth group (2026/1800/1970/1750) corresponds to z_max, z_start, z_dispense, z_travel respectively, which are used by the EVO backend. Wilson found that the height of the plate is z_dispense-z_max. The well height should be extractable in the same way.

Could you measure the height of the plate you’re using to get an estimate of the value we’re looking for? Or look in the EVO software and see if there’s a place to edit/view resource definitions to find the value of the well height? Then we can find a way to extract this value from the given numbers and automatically compute it for all Tecan resources. (The EVO uses this same information afaik, so all required info should be here.)

1 Like

Based off the following screenshot of EVOWare, it appears that perhaps exact z heights of Tecan resources are not stored:

For now, I have used z_max - z_dispense for both the height of the plate (as Wilson) and the height of wells. Perhaps we can revise this in the future as we learn more.

z_start might be a better option for reference. Tecan training typically suggests that z_start is set to “right above” the top of the well. In practice, usually 0-1mm above the well. This height is used as a starting point when trying to detect liquid, so it is important that it never be set to a height within the well where liquid could be present.

z_dispense is usually set at a small distance below the well opening to prevent well contamination due to sputtering with poorly optimized LCs. It could be any height between z_start to z_max depending on who framed the labware.

1 Like

thanks for the insight! updated the definitions: