Demo - On-the-fly liquid pipetting adjustment

Just here to share some scripting ideas with the group in case it helps anyone down the road or helps inspire the solution to other problems!

I have a use case where I am aspirating/dispensing to several volumes in a loop from a single source reservoir to different wells. The volume changes for each dispense - think something like a dilution curve. To ensure accurate delivery of volume across a wide range of volumes, it’s important to change the aspiration/dispense speeds according to the liquid volume - for instance, 5uL requires significantly different aspiration speed than 50uL.

In Biomek software, this can be achieved by entering a script step into the asp/disp loop which modifies the following values:

MyVolumeArray(i) = {5,25,50}
Loop i = 0 to 2
World.LiquidTypes.MyLiquidClass.context.c__aspiratespeed = MyVolumeArray(i)/3
World.LiquidTypes.MyLiquidClass.context.c__dispensespeed = MyVolumeArray(i)/2

ASPIRATE volume=MyVolumeArray(i)  liquidType=MyLiquidClass
DISPENSE volume=MyVolumeArray(i)  liquidType=MyLiquidClass

NOTE: final value must be >0.49 as there is an implied Round(value,0) somewhere between loading the variable and passing it to firmware command. Luckily though, a speed of 0 will trigger a validation error before execution

This will result in 3s aspirations and 2s dispenses for each liquid transfer within the loop regardless - of volume. This could be expanded to tiptouch_theta, z_delta, delay, and any other liquid type parameter as is needed - the variables that can be changed are very intuitive looking at the liquid technique editor. Happy automating!

4 Likes

You can also do this by default by using the Pipetting Template Editor, and referencing the C__Volume variable instead of C__AspirationSpeed. This causes the transfer to ignore the value set within the step for asp speed and scale with the transfervolume instead.

1 Like

It’s been a while since I needed to apply this logic again, but I wanted to give your method a try since it is way simpler!

Unfortunately, setting the Speed parameter = C__Volume resulted in a Type Mismatch. Any idea how to resolve this?

C_AspirationSpeed appears to be Double whereas Volume looks to be a string?

My use case is trying to pair the dynamic aspiration speed with a dataset, so I could use ListMath.Divide(VolumeArray,2) to make every aspiration take 2 seconds regardless of tip in use or volume aspirated.

Sorry for late reply, but I didn’t really have an issue with it.

Maybe

=CDbl(C__Volume)

will work?