Standardized labware naming convention discussion

Perfect, then I will try to only use this term, and the pylabrobot/resources/README.md documentation is already named like that as well :slight_smile:

I understand; so we do not want to make any naming convention compulsory but only have recommended naming conventions?

Absolutely love this and can’t wait for the refactor :rocket:

That is an excellent question… this is taken from Hamilton nomenclature.
I guess there is a point to saying this is closer to everyday-language in the lab where DWP is a common acronym, but there is a reason why Opentrons seems to have chosen against his nomenclature.
My best guess is, like you mention, every plate is a wellplate (as Opentrons puts it).
I also had to dig quite a bit to find somewhere that gave the arbitrary distinction of “micro-titer plate” [=<500ul].

Okay, let’s remove _MTP_ and _DWP_ from the discussion board.

Next question: Should we then simply adopt the Opentrons plate naming convention and add the bottom type to the end?:
e.g.: ThermoScientific_96_wellplate_1200ul_Rd

Should manufacturer abbreviations be acceptable?
e.g.: Cos_96_wellplate_2mL_Vb (instead of Costar_96_wellplate_2mL_Vb)

That’s why I wrote “represent”, i.e. I meant the capital letter of the function represents the data type it returns :sweat_smile:

I agree. Do you think we should remove sample and reagent carriers, @rickwierenga ?

Sample carriers (i.e. carriers for tubes) are even in VENUS defined as racks and I am inclined to do the same in PLR, i.e. make them TubeRacks.

Reagent carriers… I am not sure. All these should be able to do is take Troughs / reservoirs as children in pre-defined sites.

You are welcome. You guys created a wonderfully simple and fast definition system here.

@evwolfson, you might not want to explicitly declare all of this every single time you write a new protocol.
PLR got you covered here too. The above example of a carrier instantiation can also be stored wherever you want as…

def special_carrier():
    mfx_carrier_1 = MFX_CAR_L5_base(name='mfx_carrier_1')

    # Assign DWP_modules
    mfx_carrier_1[0] = DWP_module_1 = MFX_DWP_rackbased_module(name="DWP_module_1")
    mfx_carrier_1[1] = DWP_module_2 = MFX_DWP_rackbased_module(name="DWP_module_2")
    
    # Assign TIP_modules
    mfx_carrier_1[2] = TIP_module_1 = MFX_TIP_module(name="TIP_module_1 ")
    mfx_carrier_1[3] = TIP_module_2 = MFX_TIP_module(name="TIP_module_2")
    mfx_carrier_1[4] = TIP_module_2 = MFX_TIP_module(name="TIP_module_3")
    return mfx_carrier_1

special_carrier_instance = special_carrier()
lh.deck.assign_child_resource(special_carrier_instance, rails=14)

…and then simply imported into your protocol as a pre-designed carrier configuration :slight_smile:

But as Rick said, PLR is giving the “building blocks”, due to the combinatorial explosion of MFXModules available, it is up to users to create these special configurations themselves and import them / define them as users want.

I understand, and agree on the runtime need part and that therefore I agree this information is not needed as a class attribute.
I can write a docstring guide that includes a template for different Resources to accelerate information addition to new definitions by users.

That is a fantastic idea. Thank you, @rickwierenga!

I have had a couple of occasions where I was interested in a VENUS-originated plate definition, but I had to abandon using it because I could not figure out what manufacturer and/or catalogue number it was.
These definitions are therefore arguably wasted code space.
Documentation that associates every Resource definition at least with its manufacturer and catalogue number will prevent this from happening in the future.

2 Likes