pylabrobot icon indicating copy to clipboard operation
pylabrobot copied to clipboard

add LH.transfer and LH.distribute

Open rickwierenga opened this issue 2 months ago • 4 comments

two new functions:

  • LH.transfer: 1 to 1 relation between source and destination. There might be multiple sources and destinations, but the number of items in each list is equal and the items at index i match.
await lh.transfer(
  plate_1.column(3),
  plate_3.column(3),
  vols=[50, 100, 150, 200, 250, 300, 350, 360],
)
  • LH.distribute: 1 to many relation between source and destination. In a dictionary, because the number of items in the destinations might not be equal for every source.
await lh.distribute(
  {
    plate_1.get_item("A1"): [(plate_2.get_item("B1"), 10), (plate_2.get_item("C1"), 10)],
    plate_1.get_item("A2"): [(plate_2.get_item("B2"), 10), (plate_2.get_item("C2"), 10), (plate_2.get_item("D2"), 10)],
    plate_1.get_item("A3"): [(plate_2.get_item("B3"), 10), (plate_2.get_item("C3"), 10)],
  },
  dead_volume=0
)

TODO:

  • [ ] handle cases where volume exceeds tip volume (need to re-aspirate)
  • [ ] take a tip generator as an argument so we can pick up new tips and handle more transfers/distributions than there are channels (this is big for hardware agnosticity, we can specify the same transfer on STAR and OT and it will use one channel for the OT and 8 for the STAR.)

rickwierenga avatar Oct 08 '25 01:10 rickwierenga

Whats the dead volume variable?

Also for an aliquot, one aspiration to many destination, it is universal for all liquid handlers I have worked with to always waste the first dispense and the last dispense in to source as they will always be off from the rest. This could or could not be baked in.

Colinwehrhan avatar Oct 08 '25 01:10 Colinwehrhan

thanks @Colinwehrhan

Whats the dead volume variable?

Volume that is aspirated on top of the sum of destination volumes for a certain channel, so the last dispense does not reach 0. In case of your suggestion to "waste" the first and last dispense this would not be necessary.

Also for an aliquot, one aspiration to many destination, it is universal for all liquid handlers I have worked with to always waste the first dispense and the last dispense in to source as they will always be off from the rest. This could or could not be baked in.

cool, yes will definitely add as an option

rickwierenga avatar Oct 08 '25 01:10 rickwierenga

Gotcha, also sometimes ppl waste it to the waste or another trough as to not to foam the sample source. As with all physical liquid handling there's always a variation you don't think of that is mission critical for an assay

Colinwehrhan avatar Oct 08 '25 02:10 Colinwehrhan

a variation you don't think of that is mission critical for an assay

so far it hasn't really been possible to build good abstractions for this kind of stuff. with PLR for the first time we have at least the opportunity to encode some of this knowledge in our functions&parameters.

rickwierenga avatar Oct 08 '25 03:10 rickwierenga