Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs(api): liquid presence verification #15695

Merged
merged 60 commits into from
Aug 16, 2024
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
799ee29
Test push
jwwojak Jul 9, 2024
827e28c
Removing test text, not important
jwwojak Jul 9, 2024
5116a9c
Edit LPD argument definition.
jwwojak Jul 10, 2024
e3fd8fd
H2 LLD section summary
jwwojak Jul 12, 2024
af41076
LLD intro and global method
jwwojak Jul 12, 2024
d429836
Adding link to drop_tip
jwwojak Jul 12, 2024
2fdc24e
Turning global LLD off
jwwojak Jul 12, 2024
2363e91
End of day save
jwwojak Jul 12, 2024
608a71e
Update loading.rst
jwwojak Jul 15, 2024
a491e76
Fix shortened API reference
jwwojak Jul 15, 2024
b96d9dd
Fixing code formatting
jwwojak Jul 15, 2024
3f797a7
End 'o day commit, will shorten code example
jwwojak Jul 15, 2024
48ae5d5
Main part decent draft
jwwojak Jul 16, 2024
7b1fe38
Small changes
jwwojak Jul 16, 2024
51d21fb
Removed text, added version macro
jwwojak Jul 17, 2024
5db9dd0
Saving because I haven't yet
jwwojak Jul 17, 2024
5677a16
Building block commands: detect & require
jwwojak Jul 17, 2024
ec25699
Misspellings in commented text
jwwojak Jul 17, 2024
1bfff50
More revisions
jwwojak Jul 17, 2024
8cb74dd
Updating LPV intro - stress Flex only
jwwojak Jul 17, 2024
f786e59
detect_ and require_ revisions
jwwojak Jul 18, 2024
bb661f1
Reviewer changes and feature name change
jwwojak Jul 24, 2024
5920bad
Small intro changes and to some how it works text
jwwojak Jul 24, 2024
a4f7577
Explain using LLD requires extra time to execute
jwwojak Jul 24, 2024
12f34e5
Not ready yet. More TK Monday.
jwwojak Jul 26, 2024
c6a6fde
Shorten code sample, revise explanation
jwwojak Jul 29, 2024
d8b5d7f
Test push
jwwojak Jul 9, 2024
dbb62f9
Removing test text, not important
jwwojak Jul 9, 2024
6aeb47d
Edit LPD argument definition.
jwwojak Jul 10, 2024
b6d3160
H2 LLD section summary
jwwojak Jul 12, 2024
b38a289
LLD intro and global method
jwwojak Jul 12, 2024
e40a07b
Adding link to drop_tip
jwwojak Jul 12, 2024
2fcc41c
Turning global LLD off
jwwojak Jul 12, 2024
07fddd3
End of day save
jwwojak Jul 12, 2024
00aaf91
Update loading.rst
jwwojak Jul 15, 2024
3292b61
Fix shortened API reference
jwwojak Jul 15, 2024
8560aa2
Fixing code formatting
jwwojak Jul 15, 2024
29b0dc7
End 'o day commit, will shorten code example
jwwojak Jul 15, 2024
bb36fa3
Main part decent draft
jwwojak Jul 16, 2024
883ed72
Small changes
jwwojak Jul 16, 2024
0710757
Removed text, added version macro
jwwojak Jul 17, 2024
8031d97
Saving because I haven't yet
jwwojak Jul 17, 2024
458d46a
Building block commands: detect & require
jwwojak Jul 17, 2024
16b50c5
Misspellings in commented text
jwwojak Jul 17, 2024
9e1b8b6
More revisions
jwwojak Jul 17, 2024
c4f0012
Updating LPV intro - stress Flex only
jwwojak Jul 17, 2024
ab42190
detect_ and require_ revisions
jwwojak Jul 18, 2024
a283b30
Reviewer changes and feature name change
jwwojak Jul 24, 2024
378c96b
Small intro changes and to some how it works text
jwwojak Jul 24, 2024
fd5b72e
Explain using LLD requires extra time to execute
jwwojak Jul 24, 2024
6a17891
Not ready yet. More TK Monday.
jwwojak Jul 26, 2024
36aea23
Shorten code sample, revise explanation
jwwojak Jul 29, 2024
b4352ae
Merge branch 'docs-liquid-presence-detection' of https://github.com/O…
jwwojak Jul 30, 2024
7f4ffbe
add behavior in simulation to API ref entries
ecormany Aug 2, 2024
28fb7ae
Apply suggestions from code review
jwwojak Aug 8, 2024
5cd4ae0
Revisions from reviewers
jwwojak Aug 8, 2024
0e7d19c
Another round of reviewer comments and changes
jwwojak Aug 12, 2024
7f993b2
Removed code sample, revise method text
jwwojak Aug 13, 2024
9ef431d
More reviewer changes
jwwojak Aug 15, 2024
c4106bf
review and edits
ecormany Aug 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions api/docs/v2/basic_commands/liquids.rst
Original file line number Diff line number Diff line change
Expand Up @@ -258,3 +258,28 @@ This example aspirates enough air to fill the remaining volume in a pipette::

.. versionadded:: 2.0

.. _detect-liquid-presence:

Detect Liquids
==============

The :py:meth:`.InstrumentContext.detect_liquid_presence` method tells the robot to check for a liquid and return the results. It returns ``True`` if liquid is detected and ``False`` if liquid is not detected. It will not raise an error or stop your protocol if a liquid is not present in a well or reservoir. See also :ref:`lpv`.

.. code-block:: python

pipette.detect_liquid_presence()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs a well argument.


.. versionadded:: 2.20

.. _require-liquid-presence:

Require Liquids
===============

The :py:meth:`.InstrumentContext.require_liquid_presence` method forces the robot to check for the presence of a liquid, even when :ref:`lpv` is specifically disabled. When using this method, the robot will raise an error that stops a protocol, writes a warning to the run logs, and also lets you recover from the error through your own error handling code.

.. code-block:: python

pipette.require_liquid_presence()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs a well argument.


.. versionadded:: 2.20
63 changes: 63 additions & 0 deletions api/docs/v2/pipettes/loading.rst
Original file line number Diff line number Diff line change
Expand Up @@ -215,3 +215,66 @@ Another example is a Flex protocol that uses a waste chute. Say you want to only
.. versionadded:: 2.0
.. versionchanged:: 2.16
Added support for ``TrashBin`` and ``WasteChute`` objects.

.. _lpv:

Liquid Presence Verification
============================

Liquid Presence Verification (LPV) is a pressure-based feature that gives all Opentrons pipettes the ability to detect the presence or absence of a liquid in a well or reservoir. You can use LPV to identify, avoid, and recover from liquid-related protocol errors or just check for the presence or absence of a fluid---all with or without interrupting a protocol run. You can activate LPV globally for an entire protocol run, or turn it on and off as needed. LPV is disabled by default.
jwwojak marked this conversation as resolved.
Show resolved Hide resolved

.. note::
If your protocol uses :ref:`partial tip pickup <partial-tip-pickup>`, the pressure sensors for the Flex 8-Channel pipette are on channels 1 and 8. For the 96-Channel Pipette, the pressure sensors are on channels 1 and 96.

Enable LPV Globally
-------------------

The easiest, and recommended, way to use LPV is by adding the optional Boolean argument, ``liquid_presence_detection=True`` to :py:meth:`.ProtocolContext.load_instrument` in your protocol. When ``True``, the robot will perform LPV on every aspiration. You can also turn LPV off and back on again later in a protocol. This example adds LPV to the 8-Channel Pipette used in the sample protocol at the top of the page.

.. code-block:: python

right = protocol.load_instrument(
instrument_name="flex_8channel_1000",
mount="right",
tip_racks=[tiprack2],
liquid_presence_detection=True
)

.. note::
LPV requires fresh, dry pipette tips. Protocols using LPV must discard used tips after an aspirate/dispense cycle and pick up new tips before the next cycle. The API will raise an error if LPV is active and your protocol attempts to reuse a pipette tip.

Let's take a look at how all this works. First, tell the robot to pick up a new, clean tip::

pipette.pick_up_tip(tiprack2)

Next, tell the robot to aspirate and dispense some liquid from the reservoir::

pipette.aspirate(100, reservoir["A1"])
pipette.dispense(100, plate["A1"])
ecormany marked this conversation as resolved.
Show resolved Hide resolved

LPV takes place during aspiration. Flex continues to execute your protocol until it no longer detects liquid. When the robot doesn't detect liquid, it raises an error and stops the protocol until the problem is resolved.

Turing LPV Off and On
---------------------

You can turn LPV off and on throughout a protocol. To turn LPV off, add ``pipette.liquid_presence_detection=False`` at the point in a protocol where it needs to be disabled, usually between picking up a new tip and aspirating a liquid. This overrides the global argument, ``liquid_presence_detection=True`` that we set on :py:meth:`~.ProtocolContext.load_instrument`. Let's try this starting after picking up a new tip.

.. code-block:: python

pipette.pick_up_tip(tiprack2)
pipette.liquid_presence_detection=False #LPV off
pipette.aspirate(100, reservoir["A2"])

Going forward, the pipette will not perform LPV until you turn this feature back on.

To reactivate LPV, add ``pipette.liquid_presence_detection=True`` at the point in a protocol where it needs to be enabled, usually between picking up a new tip and aspirating a liquid.

.. code-block:: python

pipette.pick_up_tip(tiprack2)
pipette.liquid_presence_detection=True #LPV on again
pipette.aspirate(100, reservoir["A3"])

LPV will resume until it is disabled again, raises an error, or the protocol completes.

.. versionadded:: 2.20
8 changes: 4 additions & 4 deletions api/src/opentrons/protocol_api/instrument_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -937,8 +937,8 @@ def pick_up_tip( # noqa: C901
# in which self.starting_tip consumes tips. It would currently vary
# depending on the configuration layout of a pipette at a given
# time, which means that some combination of starting tip and partial
# configuraiton are incompatible under the current understanding of
# starting tip behavior. Replacing starting_tip with an undeprecated
# configuration are incompatible under the current understanding of
# starting tip behavior. Replacing starting_tip with an un-deprecated
# Labware.has_tip may solve this.
raise CommandPreconditionViolated(
"Automatic tip tracking is not available when using a partial pipette"
Expand Down Expand Up @@ -2055,7 +2055,7 @@ def configure_nozzle_layout(

@requires_version(2, 20)
def detect_liquid_presence(self, well: labware.Well) -> bool:
"""Check if there is liquid in a well.
"""Check if there is liquid in a well. See :ref:`detect-liquid-presence`.

:returns: A boolean.
Copy link
Contributor

@ecormany ecormany Aug 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could remove line 2125, or move the prose description of the values of true and false here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will move the longer, prose description to :returns: (line 2125).

"""
Expand All @@ -2072,7 +2072,7 @@ def detect_liquid_presence(self, well: labware.Well) -> bool:

@requires_version(2, 20)
def require_liquid_presence(self, well: labware.Well) -> None:
"""If there is no liquid in a well, raise an error.
"""If there is no liquid in a well, raise an error. See :ref:`require-liquid-presence`.

:returns: None.
ecormany marked this conversation as resolved.
Show resolved Hide resolved
"""
Expand Down
4 changes: 3 additions & 1 deletion api/src/opentrons/protocol_api/protocol_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -910,7 +910,9 @@ def load_instrument(
control <advanced-control>` applications. You cannot
replace an instrument in the middle of a protocol being run
from the Opentrons App or touchscreen.
:param bool liquid_presence_detection: If ``True``, enable liquid presence detection for instrument. Only available on Flex robots in API Version 2.20 and above.
:param bool liquid_presence_detection: If ``True``, enables liquid presence detection for Flex 1-, 8-, or 96-channel pipettes. See :ref:`lpv`.

.. versionadded:: 2.20
"""
instrument_name = validation.ensure_lowercase_name(instrument_name)
checked_instrument_name = validation.ensure_pipette_name(instrument_name)
Expand Down
Loading