I have a sequence with 2 different labware coming from LIIMS. Due to height of these labware, for 1, I want to do cLLD and for second i want to do touch off. I was thinking 2 options, first if there is a way to find all the positions of 1 labware, so i can sperate it or sort it accordingly and then do cllD and then touch off or if I can pass the array for touch off and cLLD. so channels can work based on those. Any suggestions will be greatly appreciated.
Hi Kalpesh,
You have the option to have mixed positions which may require different liquid handling parameters in the same aspiration and dispense step. The following post provides a bit more context on all the parameters that can be indexed by channel via arrays:
https://forums.pylabrobot.org/t/tip-handling-for-widely-varying-volumes/496/13?u=nickhealy_hamilton
That said, if the liquid handling requirements for the different labware types are drastically different, it will take a bit of programming to properly satisfy all the related step parameters. Touch-off and cLLD aspirations will have some mutually exclusive parameters for each channel (ex liquid following), so one would need to maintain several arrays of step parameter values to program the aspiration properly.
If it were me, I would opt for your other suggestion of splitting the source sequence containing the different labware into separate sequences and transfers, with simplified aspiration parameters for each transfer/labware which requires different liquid handling approaches.
I can follow up with a programming example if needed. Thanks.
-Nick
Hello @NickHealy_Hamilton
Thansk for quick response. I agree with you but I am not sure how to seprate a sequence based on labware name? can u please share some example code for how to seprate the sequence and if this is not possible then can u send me an example of how the cLLD and touch off thing will work.
Hi Kalpesh,
Without any context for how your code is currently set up I put together a generic filtering option that can be extrapolated depending on how you want to use it. At its base form you can loop over any sequence and then use an if statement to to add to a “filtered” sequence based on what you are looking for. The code below takes a sequence of intermingled labware and then separates them based on the unique labware ids. Each filtered sequence gets sorted into a new sequence array entry. Using the function “SeqGetLabwareIds” from the HSLSeqLib can used to get the array of unique labware ids that are in a sequence. This is what i use in the example to determine the labware to filter.
Hi Kalpesh,
For the example of pipetting with arrays. You need to set up some rules ahead of time to use as your filter when setting the arrays. For my example I use the labware file path as the filter. For plate definition 1 I use cLLD with 2.0 mm submerge, but with plate definition 2 I use touch off with 0.5 mm from the bottom. When one is turned on, the other must be turned off. Using the LabwarePropertyQuery library I can get the labware definition file path which in the example I refer to as “ConfigFile”. See below:
Once these arrays are set, they can put placed in the aspiration commands using an index counter to set where channel 1 will get the information. All the other channels will use an n + {1,2,3 etc} pattern for the index to set the values. It is important at the end of the loop to progress this index the number of channels being used otherwise you won’t progress on the next loop of pipetting. See below how these arrays were defined in the pipetting steps:
See below for the array index progression:
@BrandonBare_Hamilton : This is awesome both examples are great, i think we will use the second option as that will make our programming on the next level for complications.