Skip to content

Commit 489788d

Browse files
committed
Merge branch 'edge' into fix_deck-view-size-issue
2 parents 7f9b706 + 410bfa9 commit 489788d

File tree

261 files changed

+12965
-3901
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

261 files changed

+12965
-3901
lines changed

api/docs/v1/pipettes.rst

+53-53
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ same behavior as before.
5555
The P20 Single GEN2 is back-compatible with the P10 Single in this regard. If your protocol
5656
specifies an ``instruments.P10_Single`` and your robot has an ``instruments.P20_Single_GEN2``
5757
attached, you can run your protocol, and the robot will act as if the maximum volume of the P20
58-
Single GEN2 is 10 μl.
58+
Single GEN2 is 10 µl.
5959

6060
If you have a P50 Single specified in your protocol, there is no automatic backwards compatibility.
6161
If you want to use a Gen2 Pipette, you must change your protocol to load either a P300 Single GEN2
62-
(if you are using volumes between 20 and 50 μl) or a P20 Single GEN2 (if you are using volumes
63-
below 20 μl).
62+
(if you are using volumes between 20 and 50 µl) or a P20 Single GEN2 (if you are using volumes
63+
below 20 µl).
6464

6565

6666
Plunger Flow Rates
@@ -99,92 +99,92 @@ The given defaults for every pipette model is the following:
9999
P10_Single
100100
----------
101101

102-
- Aspirate Default: 5 μl/s
103-
- Dispense Default: 10 μl/s
104-
- Blow Out Default: 1000 μl/s
105-
- Minimum Volume: 1 μl
106-
- Maximum Volume: 10 μl
102+
- Aspirate Default: 5 µl/s
103+
- Dispense Default: 10 µl/s
104+
- Blow Out Default: 1000 µl/s
105+
- Minimum Volume: 1 µl
106+
- Maximum Volume: 10 µl
107107

108108
P10_Multi
109109
---------
110110

111-
- Aspirate Default: 5 μl/s
112-
- Dispense Default: 10 μl/s
113-
- Blow Out Default: 1000 μl/s
114-
- Minimum Volume: 1 μl
115-
- Maximum Volume: 10 μl
111+
- Aspirate Default: 5 µl/s
112+
- Dispense Default: 10 µl/s
113+
- Blow Out Default: 1000 µl/s
114+
- Minimum Volume: 1 µl
115+
- Maximum Volume: 10 µl
116116

117117
P50_Single
118118
----------
119119

120-
- Aspirate Default: 25 μl/s
121-
- Dispense Default: 50 μl/s
122-
- Blow Out Default: 1000 μl/s
123-
- Minimum Volume: 5 μl
124-
- Maximum Volume: 50 μl
120+
- Aspirate Default: 25 µl/s
121+
- Dispense Default: 50 µl/s
122+
- Blow Out Default: 1000 µl/s
123+
- Minimum Volume: 5 µl
124+
- Maximum Volume: 50 µl
125125

126126
P50_Multi
127127
---------
128128

129-
- Aspirate Default: 25 μl/s
130-
- Dispense Default: 50 μl/s
131-
- Blow Out Default: 1000 μl/s
132-
- Minimum Volume: 5 μl
133-
- Maximum Volume: 50 μl
129+
- Aspirate Default: 25 µl/s
130+
- Dispense Default: 50 µl/s
131+
- Blow Out Default: 1000 µl/s
132+
- Minimum Volume: 5 µl
133+
- Maximum Volume: 50 µl
134134

135135
P300_Single
136136
-----------
137137

138-
- Aspirate Default: 150 μl/s
139-
- Dispense Default: 300 μl/s
140-
- Blow Out Default: 1000 μl/s
141-
- Minimum Volume: 30 μl
142-
- Maximum Volume: 300 μl
138+
- Aspirate Default: 150 µl/s
139+
- Dispense Default: 300 µl/s
140+
- Blow Out Default: 1000 µl/s
141+
- Minimum Volume: 30 µl
142+
- Maximum Volume: 300 µl
143143

144144
P300_Multi
145145
----------
146146

147-
- Aspirate Default: 150 μl/s
148-
- Dispense Default: 300 μl/s
149-
- Blow Out Default: 1000 μl/s
150-
- Minimum Volume: 30 μl
151-
- Maximum Volume: 300 μl
147+
- Aspirate Default: 150 µl/s
148+
- Dispense Default: 300 µl/s
149+
- Blow Out Default: 1000 µl/s
150+
- Minimum Volume: 30 µl
151+
- Maximum Volume: 300 µl
152152

153153
P1000_Single
154154
------------
155155

156-
- Aspirate Default: 500 μl/s
157-
- Dispense Default: 1000 μl/s
158-
- Blow Out Default: 1000 μl/s
159-
- Minimum Volume: 100 μl
160-
- Maximum Volume: 1000 μl
156+
- Aspirate Default: 500 µl/s
157+
- Dispense Default: 1000 µl/s
158+
- Blow Out Default: 1000 µl/s
159+
- Minimum Volume: 100 µl
160+
- Maximum Volume: 1000 µl
161161

162162
P20_Single_GEN2
163163
---------------
164164

165-
- Aspirate Default: 3.78 μl/s
166-
- Dispense Default: 3.78 μl/s
167-
- Blow Out Default: 3.78 μl/s
168-
- Minimum Volume: 1 μl
169-
- Maximum Volume: 20 μl
165+
- Aspirate Default: 3.78 µl/s
166+
- Dispense Default: 3.78 µl/s
167+
- Blow Out Default: 3.78 µl/s
168+
- Minimum Volume: 1 µl
169+
- Maximum Volume: 20 µl
170170

171171
P300_Single_GEN2
172172
----------------
173173

174-
- Aspirate Default: 46.43 μl/s
175-
- Dispense Default: 46.43 μl/s
176-
- Blow Out Default: 46.43 μl/s
177-
- Minimum Volume: 20 μl
178-
- Maximum Volume: 300 μl
174+
- Aspirate Default: 46.43 µl/s
175+
- Dispense Default: 46.43 µl/s
176+
- Blow Out Default: 46.43 µl/s
177+
- Minimum Volume: 20 µl
178+
- Maximum Volume: 300 µl
179179

180180
P1000_Single_GEN2
181181
-----------------
182182

183-
- Aspirate Default: 137.35 μl/s
184-
- Dispense Default: 137.35 μl/s
185-
- Blow Out Default: 137.35 μl/s
186-
- Minimum Volume: 100 μl
187-
- Maximum Volume: 1000 μl
183+
- Aspirate Default: 137.35 µl/s
184+
- Dispense Default: 137.35 µl/s
185+
- Blow Out Default: 137.35 µl/s
186+
- Minimum Volume: 100 µl
187+
- Maximum Volume: 1000 µl
188188

189189
Old Pipette Constructor
190190
=======================

api/docs/v2/complex_commands/parameters.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ One reason to set ``new_tip="always"`` is to avoid cross-contamination between w
6262

6363
:py:meth:`~.InstrumentContext.transfer` will pick up a new tip before *every* aspirate when ``new_tip="always"``. This includes when :ref:`tip refilling <complex-tip-refilling>` requires multiple aspirations from a single source well.
6464

65-
:py:meth:`~.InstrumentContext.distribute` and :py:meth:`~.InstrumentContext.consolidate` only pick up one tip, even when ``new_tip="always"``. For example, this distribute command returns to the source well a second time, because the amount to be distributed (400 µL total plus disposal volume) exceeds the pipette capacity (300 μL)::
65+
:py:meth:`~.InstrumentContext.distribute` and :py:meth:`~.InstrumentContext.consolidate` only pick up one tip, even when ``new_tip="always"``. For example, this distribute command returns to the source well a second time, because the amount to be distributed (400 µL total plus disposal volume) exceeds the pipette capacity (300 µL)::
6666

6767
pipette.distribute(
6868
volume=200,

api/docs/v2/modules/temperature_module.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,11 @@ The Temperature Module supports these 96-well block and labware combinations for
9898

9999
* - 96-well block contents
100100
- API Load Name
101-
* - Bio-Rad well plate 200 μL
101+
* - Bio-Rad well plate 200 µL
102102
- ``opentrons_96_aluminumblock_biorad_wellplate_200uL``
103-
* - Generic PCR strip 200 μL
103+
* - Generic PCR strip 200 µL
104104
- ``opentrons_96_aluminumblock_generic_pcr_strip_200uL``
105-
* - NEST well plate 100 μL
105+
* - NEST well plate 100 µL
106106
- ``opentrons_96_aluminumblock_nest_wellplate_100uL``
107107

108108
This command loads the same physical adapter and labware as the example in the Standalone Adapters section above, but it is also compatible with earlier API versions::

api/docs/v2/tutorial.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Hardware and Labware
3030

3131
Before running a protocol, you’ll want to have the right kind of hardware and labware ready for your Flex or OT-2.
3232

33-
- **Flex users** should review Chapter 2: Installation and Relocation in the `instruction manual <https://insights.opentrons.com/hubfs/Products/Flex/Opentrons%20Flex%20Manual.pdf>`_. Specifically, see the pipette information in the "Instrument Installation and Calibration" section. You can use either a 1-channel or 8-channel pipette for this tutorial. Most Flex code examples will use a `Flex 1-Channel 1000 μL pipette <https://shop.opentrons.com/opentrons-flex-1-channel-pipette/>`_.
33+
- **Flex users** should review Chapter 2: Installation and Relocation in the `instruction manual <https://insights.opentrons.com/hubfs/Products/Flex/Opentrons%20Flex%20Manual.pdf>`_. Specifically, see the pipette information in the "Instrument Installation and Calibration" section. You can use either a 1-channel or 8-channel pipette for this tutorial. Most Flex code examples will use a `Flex 1-Channel 1000 µL pipette <https://shop.opentrons.com/opentrons-flex-1-channel-pipette/>`_.
3434

3535
- **OT-2 users** should review the robot setup and pipette information on the `Get Started page <https://support.opentrons.com/s/ot2-get-started>`_. Specifically, see `attaching pipettes <https://support.opentrons.com/s/article/Get-started-Attach-pipettes>`_ and `initial calibration <https://support.opentrons.com/s/article/Get-started-Calibrate-the-deck>`_. You can use either a single-channel or 8-channel pipette for this tutorial. Most OT-2 code examples will use a `P300 Single-Channel GEN2 <https://shop.opentrons.com/single-channel-electronic-pipette-p20/>`_ pipette.
3636

api/src/opentrons/hardware_control/api.py

+2
Original file line numberDiff line numberDiff line change
@@ -1039,6 +1039,7 @@ async def aspirate(
10391039
mount: top_types.Mount,
10401040
volume: Optional[float] = None,
10411041
rate: float = 1.0,
1042+
correction_volume: float = 0.0,
10421043
) -> None:
10431044
"""
10441045
Aspirate a volume of liquid (in microliters/uL) using this pipette.
@@ -1073,6 +1074,7 @@ async def dispense(
10731074
volume: Optional[float] = None,
10741075
rate: float = 1.0,
10751076
push_out: Optional[float] = None,
1077+
correction_volume: float = 0.0,
10761078
) -> None:
10771079
"""
10781080
Dispense a volume of liquid in microliters(uL) using this pipette.

api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py

+22-5
Original file line numberDiff line numberDiff line change
@@ -502,10 +502,19 @@ def ready_for_tip_action(
502502
self._ihp_log.debug(f"{action} on {target.name}")
503503

504504
def plunger_position(
505-
self, instr: Pipette, ul: float, action: "UlPerMmAction"
505+
self,
506+
instr: Pipette,
507+
ul: float,
508+
action: "UlPerMmAction",
509+
correction_volume: float = 0.0,
506510
) -> float:
507-
mm = ul / instr.ul_per_mm(ul, action)
508-
position = instr.plunger_positions.bottom - mm
511+
if ul == 0:
512+
position = instr.plunger_positions.bottom
513+
else:
514+
multiplier = 1.0 + (correction_volume / ul)
515+
mm_dist_from_bottom = ul / instr.ul_per_mm(ul, action)
516+
mm_dist_from_bottom_corrected = mm_dist_from_bottom * multiplier
517+
position = instr.plunger_positions.bottom - mm_dist_from_bottom_corrected
509518
return round(position, 6)
510519

511520
def plunger_speed(
@@ -531,6 +540,7 @@ def plan_check_aspirate(
531540
mount: OT3Mount,
532541
volume: Optional[float],
533542
rate: float,
543+
correction_volume: float = 0.0,
534544
) -> Optional[LiquidActionSpec]:
535545
"""Check preconditions for aspirate, parse args, and calculate positions.
536546
@@ -566,7 +576,10 @@ def plan_check_aspirate(
566576
), "Cannot aspirate more than pipette max volume"
567577

568578
dist = self.plunger_position(
569-
instrument, instrument.current_volume + asp_vol, "aspirate"
579+
instr=instrument,
580+
ul=instrument.current_volume + asp_vol,
581+
action="aspirate",
582+
correction_volume=correction_volume,
570583
)
571584
speed = self.plunger_speed(
572585
instrument, instrument.aspirate_flow_rate * rate, "aspirate"
@@ -591,6 +604,7 @@ def plan_check_dispense(
591604
volume: Optional[float],
592605
rate: float,
593606
push_out: Optional[float],
607+
correction_volume: float = 0.0,
594608
) -> Optional[LiquidActionSpec]:
595609
"""Check preconditions for dispense, parse args, and calculate positions.
596610
@@ -659,7 +673,10 @@ def plan_check_dispense(
659673
)
660674

661675
dist = self.plunger_position(
662-
instrument, instrument.current_volume - disp_vol, "dispense"
676+
instr=instrument,
677+
ul=instrument.current_volume - disp_vol,
678+
action="dispense",
679+
correction_volume=correction_volume,
663680
)
664681
speed = self.plunger_speed(
665682
instrument, instrument.dispense_flow_rate * rate, "dispense"

api/src/opentrons/hardware_control/ot3api.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -2046,12 +2046,16 @@ async def aspirate(
20462046
mount: Union[top_types.Mount, OT3Mount],
20472047
volume: Optional[float] = None,
20482048
rate: float = 1.0,
2049+
correction_volume: float = 0.0,
20492050
) -> None:
20502051
"""
20512052
Aspirate a volume of liquid (in microliters/uL) using this pipette."""
20522053
realmount = OT3Mount.from_mount(mount)
20532054
aspirate_spec = self._pipette_handler.plan_check_aspirate(
2054-
realmount, volume, rate
2055+
mount=realmount,
2056+
volume=volume,
2057+
rate=rate,
2058+
correction_volume=correction_volume,
20552059
)
20562060
if not aspirate_spec:
20572061
return
@@ -2088,12 +2092,17 @@ async def dispense(
20882092
volume: Optional[float] = None,
20892093
rate: float = 1.0,
20902094
push_out: Optional[float] = None,
2095+
correction_volume: float = 0.0,
20912096
) -> None:
20922097
"""
20932098
Dispense a volume of liquid in microliters(uL) using this pipette."""
20942099
realmount = OT3Mount.from_mount(mount)
20952100
dispense_spec = self._pipette_handler.plan_check_dispense(
2096-
realmount, volume, rate, push_out
2101+
mount=realmount,
2102+
volume=volume,
2103+
rate=rate,
2104+
push_out=push_out,
2105+
correction_volume=correction_volume,
20972106
)
20982107
if not dispense_spec:
20992108
return

api/src/opentrons/hardware_control/protocols/liquid_handler.py

+4
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ async def aspirate(
9898
mount: MountArgType,
9999
volume: Optional[float] = None,
100100
rate: float = 1.0,
101+
correction_volume: float = 0.0,
101102
) -> None:
102103
"""
103104
Aspirate a volume of liquid (in microliters/uL) using this pipette
@@ -117,6 +118,7 @@ async def aspirate(
117118
volume : [float] The number of microliters to aspirate
118119
rate : [float] Set plunger speed for this aspirate, where
119120
speed = rate * aspirate_speed
121+
correction_volume : Correction volume in uL for the specified aspirate volume
120122
"""
121123
...
122124

@@ -126,6 +128,7 @@ async def dispense(
126128
volume: Optional[float] = None,
127129
rate: float = 1.0,
128130
push_out: Optional[float] = None,
131+
correction_volume: float = 0.0,
129132
) -> None:
130133
"""
131134
Dispense a volume of liquid in microliters(uL) using this pipette
@@ -136,6 +139,7 @@ async def dispense(
136139
volume : [float] The number of microliters to dispense
137140
rate : [float] Set plunger speed for this dispense, where
138141
speed = rate * dispense_speed
142+
correction_volume : Correction volume in uL for the specified dispense volume
139143
"""
140144
...
141145

0 commit comments

Comments
 (0)