feat(api): dynamic liquid tracking instrument papi changes #17294
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
This pr contains the
protocol_api
changes that will allow you to call dynamic liquid tracking from a protocol.It won't actually work yet because the hardware api changes need to get merged in, but they're a-comin.
Static Liquid Tracking
The introduction of dynamic liquid tracking will also amend static liquid tracking behavior. Before, you would call an aspirate with static liquid tracking like this:
pip.aspirate(volume=whatever, location=w.meniscus(z=z_offset))
Currently on edge, the location
well.meniscus()
will automatically and immutably point to the projected liquid meniscus at the end of a liquid handling operation, which is not always what you want. For example, if you were to do this with a dispense, the pipette tip would hover above the liquid and then dispense into the air.Using this code, however, you can call aspirate with static liquid tracking to target the ending liquid height:
pip.aspirate(volume=whatever, location=w.meniscus(z=z_offset, target="end"))
,call dispense with static liquid tracking to target the beginning liquid height:
pip.dispense(volume=whatever, location=w.meniscus(z=z_offset, target="beginning"))
,or call either one with dynamic liquid tracking:
pip.aspirate(volume=whatever, location=w.meniscus(z=z_offset, target="dynamic_meniscus"))
pip.dispense(volume=whatever, location=w.meniscus(z=z_offset, target="dynamic_meniscus"))
This won't break any existing protocols with static liquid tracking, because if the location
meniscus
is specified but no target given, thetarget
will default toend
, which was the previous behavior.Changelog
MeniscusTracking
type to store the desired target for liquid trackingAspirateWhileTracking
/DispenseWhileTracking
commands when dynamic liquid tracking is requestedTests
Dynamic liquid tracking won't work in a protocol yet since the hardware control changes still need to be added, but:
target="beginning"
work as expected in a protocoltarget="end"
work as expected in a protocol