Skip to content

Conversation

@rickwierenga
Copy link
Member

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.)

@Colinwehrhan
Copy link

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.

@rickwierenga
Copy link
Member Author

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

@Colinwehrhan
Copy link

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

@rickwierenga
Copy link
Member Author

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 rickwierenga force-pushed the main branch 2 times, most recently from 1675cd6 to 2b2f7f9 Compare October 21, 2025 00:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants