Vector aspiration vs. dispense

Hi, this might be a silly question, but I’m noticing vector (8-channel) aspiration and dispense look different. dispenses (incl. of diff volumes) happen all at once, while aspirations (even of the same volumes) happen one at a time.

I’m aspirating from reservoir wells / dispensing into PCR plates, if this makes a difference.

I’ve noticed and seen on the VENUS software that aspirating in parallel is possible. How can I replicate that in PLR?

My code:

# Dispense
await lh.dispense(
            pcr_plate[col_well_range],
            vols=target_volumes,
            use_channels=list(range(len(target_volumes))),
            offsets=[Coordinate(0, 0, 10)] * len(target_volumes),
            jet=[True]*len(target_volumes))

# Aspirate
await lh.aspirate(
                    [aspiration_wells[i] for i in list(range(8))],
                    vols=[tip_capacity]*8,
                    use_channels=list(range(8)),
                    offsets=[Coordinate(0,0,1)]*8,
                    flow_rates=[None] * 8,
                    liquid_height=[None] *8,
                )

Thank you!!

are you aspirating with multiple channels form the same reservoir or different?

(this is definitely also possible in PLR, i do it almost every day)

when you say “one at a time”, does that mean one channel goes down into a/the well, then the next, then the next, etc?

Yes, that pattern.

I’m aspirating from the same reservoir.

what is [aspiration_wells[i] for i in list(range(8))]

specifically, is len(set([aspiration_wells[i] for i in list(range(8))])) == 1?

These are the wells of the reservoir, the length is 8:

[Well(name=res_12_04_well_0_0, location=Coordinate(010.280, 007.140, 003.550), size_x=8.2, size_y=71.2, size_z=26.85, category=well),
 Well(name=res_12_04_well_1_0, location=Coordinate(019.280, 007.140, 003.550), size_x=8.2, size_y=71.2, size_z=26.85, category=well),
 Well(name=res_12_04_well_2_0, location=Coordinate(028.280, 007.140, 003.550), size_x=8.2, size_y=71.2, size_z=26.85, category=well),
 Well(name=res_12_04_well_3_0, location=Coordinate(037.280, 007.140, 003.550), size_x=8.2, size_y=71.2, size_z=26.85, category=well),
 Well(name=res_12_04_well_4_0, location=Coordinate(046.280, 007.140, 003.550), size_x=8.2, size_y=71.2, size_z=26.85, category=well),
 Well(name=res_12_04_well_5_0, location=Coordinate(055.280, 007.140, 003.550), size_x=8.2, size_y=71.2, size_z=26.85, category=well),
 Well(name=res_12_04_well_6_0, location=Coordinate(064.280, 007.140, 003.550), size_x=8.2, size_y=71.2, size_z=26.85, category=well),
 Well(name=res_12_04_well_7_0, location=Coordinate(073.280, 007.140, 003.550), size_x=8.2, size_y=71.2, size_z=26.85, category=well)]

is the plate rotated when aspirating? these are all at different x locations, meaning the arm has to move

print([aspiration_wells[i].get_absolute_location(x="c", y="c") for i in list(range(8))])

simultaneous aspiration is only possible when the aspirations (or dispenses) all happen at the EXACT same y position

I noticed that too, what’s weird is that it is not moving x directions, just touching down in the same spot. The wells are in a nest_12_troughplate_15000uL_Vb if that changes anything?

do you mean x position?

thank you!

stupid, yes same x position. in fact different y :sweat_smile: at least 9mm apart

i am confused. you are trying to aspirate with all 8 channels from the same trough in a 12-troughplate.

however, your code tells PLR 8 different wells that are at different locations

yet you say: “just touching down in the same spot”

in order for PLR to aspirate from the same container (a Container is a Trough, Well, etc.), you have to pass the exact same object so that len(set(rs) == 1

see line

in that case, it will space the channels out in the container (configurable with spread parameter)

1 Like

I see. Thank you!!

do you think this is a bug? or am i misunderstanding

So sorry about the confusion. This was me failing to see the mm differences in where the tip spots touch down when I eyeball what the robot’s doing :woman_facepalming:

1 Like

no worries, thanks for confirming!