diff --git a/api/src/opentrons/hardware_control/instruments/nozzle_manager.py b/api/src/opentrons/hardware_control/instruments/nozzle_manager.py index 2faa859e66d..09c969d522d 100644 --- a/api/src/opentrons/hardware_control/instruments/nozzle_manager.py +++ b/api/src/opentrons/hardware_control/instruments/nozzle_manager.py @@ -104,6 +104,10 @@ def front_nozzle_offset(self) -> Point: y_rows_length = int(difference[1] // INTERNOZZLE_SPACING) return map_store_list[starting_idx + y_rows_length] + @property + def tip_count(self) -> int: + return len(self.map_store) + @classmethod def build( cls, @@ -200,15 +204,17 @@ class NozzleConfigurationManager: def __init__( self, nozzle_map: NozzleMap, - current_scalar: float, + pick_up_current_map: Dict[int, float], ) -> None: self._physical_nozzle_map = nozzle_map self._current_nozzle_configuration = nozzle_map - self._current_scalar: Final[float] = current_scalar + self._pick_up_current_map: Final[Dict[int, float]] = pick_up_current_map @classmethod def build_from_nozzlemap( - cls, nozzle_map: Dict[str, List[float]], current_scalar: float + cls, + nozzle_map: Dict[str, List[float]], + pick_up_current_map: Dict[int, float], ) -> "NozzleConfigurationManager": sorted_nozzlemap = list(nozzle_map.keys()) @@ -224,12 +230,16 @@ def build_from_nozzlemap( back_left_nozzle=first_nozzle, front_right_nozzle=last_nozzle, ) - return cls(starting_nozzle_config, current_scalar) + return cls(starting_nozzle_config, pick_up_current_map) @property def starting_nozzle_offset(self) -> Point: return self._current_nozzle_configuration.starting_nozzle_offset + @property + def current_configuration(self) -> NozzleMap: + return self._current_nozzle_configuration + def update_nozzle_configuration( self, back_left_nozzle: str, @@ -256,13 +266,8 @@ def update_nozzle_configuration( front_right_nozzle=front_right_nozzle, ) - def get_current_for_tip_configuration(self) -> float: - # TODO While implementing this PR I realized that - # the current scalar truly is inefficient for - # encapsulating varying currents needed for - # pick up tip so we'll need to follow this up - # with a lookup table. - return self._current_scalar + def get_tip_configuration_current(self) -> float: + return self._pick_up_current_map[self._current_nozzle_configuration.tip_count] def critical_point_with_tip_length( self, diff --git a/api/src/opentrons/hardware_control/instruments/ot2/pipette.py b/api/src/opentrons/hardware_control/instruments/ot2/pipette.py index fa23462a2ab..fe888ea35b4 100644 --- a/api/src/opentrons/hardware_control/instruments/ot2/pipette.py +++ b/api/src/opentrons/hardware_control/instruments/ot2/pipette.py @@ -5,7 +5,7 @@ """ Classes and functions for pipette state tracking """ import logging -from typing import Any, Dict, Optional, Set, Tuple, Union, cast, List +from typing import Any, Dict, Optional, Set, Tuple, Union, cast from opentrons_shared_data.pipette.pipette_definition import ( PipetteConfigurations, @@ -90,6 +90,7 @@ def __init__( self._pipette_version = self._config.version self._max_channels = self._config.channels self._backlash_distance = config.backlash_distance + self._pick_up_configurations = config.pick_up_tip_configurations self._liquid_class_name = pip_types.LiquidClasses.default self._liquid_class = self._config.liquid_properties[self._liquid_class_name] @@ -201,8 +202,12 @@ def liquid_class_name(self) -> pip_types.LiquidClasses: return self._liquid_class_name @property - def nozzle_offset(self) -> List[float]: - return self._nozzle_offset + def nozzle_offset(self) -> Point: + return self._nozzle_manager.starting_nozzle_offset + + @property + def nozzle_manager(self) -> nozzle_manager.NozzleConfigurationManager: + return self._nozzle_manager @property def pipette_offset(self) -> PipetteOffsetByPipetteMount: diff --git a/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py b/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py index aca6dc8c751..1ab50898f3b 100644 --- a/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +++ b/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py @@ -793,7 +793,7 @@ def add_tip_to_instr() -> None: current={ Axis.by_mount( mount - ): instrument.pick_up_configurations.current + ): instrument.nozzle_manager.get_tip_configuration_current() }, speed=pick_up_speed, relative_down=top_types.Point(0, 0, press_dist), diff --git a/api/src/opentrons/hardware_control/instruments/ot3/pipette.py b/api/src/opentrons/hardware_control/instruments/ot3/pipette.py index 3d423e46d31..a1192b36977 100644 --- a/api/src/opentrons/hardware_control/instruments/ot3/pipette.py +++ b/api/src/opentrons/hardware_control/instruments/ot3/pipette.py @@ -1,7 +1,7 @@ import logging import functools -from typing import Any, List, Dict, Optional, Set, Tuple, Union, cast +from typing import Any, Dict, Optional, Set, Tuple, Union, cast from opentrons.types import Point @@ -165,8 +165,12 @@ def tip_overlap(self) -> Dict[str, float]: return self._tip_overlap_lookup @property - def nozzle_offset(self) -> List[float]: - return self._nozzle_offset + def nozzle_offset(self) -> Point: + return self._nozzle_manager.starting_nozzle_offset + + @property + def nozzle_manager(self) -> nozzle_manager.NozzleConfigurationManager: + return self._nozzle_manager @property def pipette_offset(self) -> PipetteOffsetByPipetteMount: diff --git a/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py b/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py index 7569b3598c9..6cc64ba35d4 100644 --- a/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +++ b/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py @@ -44,6 +44,7 @@ ) from opentrons.hardware_control.dev_types import PipetteDict +from ..nozzle_manager import NozzleConfigurationType from .pipette import Pipette from .instrument_calibration import PipetteOffsetByPipetteMount @@ -742,7 +743,11 @@ def build_presses() -> Iterator[Tuple[float, float]]: backup_dist = -press_dist yield (press_dist, backup_dist) - if instrument.channels == 96: + if ( + instrument.channels == 96 + and instrument.nozzle_manager.current_configuration.configuration + == NozzleConfigurationType.FULL + ): return ( PickUpTipSpec( plunger_prep_pos=instrument.plunger_positions.bottom, @@ -779,7 +784,7 @@ def build_presses() -> Iterator[Tuple[float, float]]: current={ Axis.by_mount( mount - ): instrument.pick_up_configurations.current + ): instrument.nozzle_manager.get_tip_configuration_current() }, speed=pick_up_speed, relative_down=top_types.Point(0, 0, press_dist), diff --git a/api/tests/opentrons/hardware_control/instruments/test_nozzle_manager.py b/api/tests/opentrons/hardware_control/instruments/test_nozzle_manager.py index a7e29f39638..b2b97856640 100644 --- a/api/tests/opentrons/hardware_control/instruments/test_nozzle_manager.py +++ b/api/tests/opentrons/hardware_control/instruments/test_nozzle_manager.py @@ -12,7 +12,7 @@ def build_nozzle_manger( nozzle_map: Dict[str, List[float]] ) -> nozzle_manager.NozzleConfigurationManager: return nozzle_manager.NozzleConfigurationManager.build_from_nozzlemap( - nozzle_map, current_scalar=1 + nozzle_map, pick_up_current_map={1: 0.1} ) diff --git a/api/tests/opentrons/hardware_control/test_pipette.py b/api/tests/opentrons/hardware_control/test_pipette.py index 582e95b589e..c6b298c51c8 100644 --- a/api/tests/opentrons/hardware_control/test_pipette.py +++ b/api/tests/opentrons/hardware_control/test_pipette.py @@ -166,7 +166,7 @@ def test_critical_points_pipette_offset( ) -> None: hw_pipette = pipette_builder(model, calibration) # pipette offset + nozzle offset to determine critical point - offsets = calibration.offset + Point(*hw_pipette.nozzle_offset) + offsets = calibration.offset + hw_pipette.nozzle_offset assert hw_pipette.critical_point() == offsets assert hw_pipette.critical_point(types.CriticalPoint.NOZZLE) == offsets assert hw_pipette.critical_point(types.CriticalPoint.TIP) == offsets diff --git a/api/tests/opentrons/hardware_control/test_pipette_handler.py b/api/tests/opentrons/hardware_control/test_pipette_handler.py index b7f92f64645..b6e7fb3a6ce 100644 --- a/api/tests/opentrons/hardware_control/test_pipette_handler.py +++ b/api/tests/opentrons/hardware_control/test_pipette_handler.py @@ -10,6 +10,9 @@ from opentrons.hardware_control.instruments.ot2.pipette_handler import ( PipetteHandlerProvider, ) +from opentrons.hardware_control.instruments.nozzle_manager import ( + NozzleConfigurationType, +) from opentrons.hardware_control.instruments.ot3.pipette import Pipette as OT3Pipette from opentrons.hardware_control.instruments.ot3.pipette_handler import ( OT3PipetteHandler, @@ -117,6 +120,9 @@ def test_plan_check_pick_up_tip_with_presses_argument_ot3( decoy.when(mock_pipette_ot3.pick_up_configurations.current).then_return(1) decoy.when(mock_pipette_ot3.config.quirks).then_return([]) decoy.when(mock_pipette_ot3.channels).then_return(channels) + decoy.when( + mock_pipette_ot3.nozzle_manager.current_configuration.configuration + ).then_return(NozzleConfigurationType.FULL) if presses_input is None: decoy.when(mock_pipette_ot3.config.pick_up_presses).then_return( diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_0.json index 44e1bf84760..841fad486b7 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_0.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.4, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.1, + "3": 0.15, + "4": 0.2, + "5": 0.25, + "6": 0.3, + "7": 0.35, + "8": 0.4 + } }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_3.json index b71b9f112e2..52dcb1d594c 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_3.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.4, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.1, + "3": 0.15, + "4": 0.2, + "5": 0.25, + "6": 0.3, + "7": 0.35, + "8": 0.4 + } }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_4.json index 7884060abb7..a66b26a1b03 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_4.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.4, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.1, + "3": 0.15, + "4": 0.2, + "5": 0.25, + "6": 0.3, + "7": 0.35, + "8": 0.4 + } }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_5.json index e8447efdce0..c0afb132bcf 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_5.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.55, "speed": 30.0, "presses": 3, "increment": 3.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.14, + "3": 0.21, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_6.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_6.json index e8447efdce0..c0afb132bcf 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_6.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_6.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.55, "speed": 30.0, "presses": 3, "increment": 3.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.14, + "3": 0.21, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/1_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/1_0.json index 2da0be49f08..0a2ee6a1ef6 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/1_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/1_0.json @@ -1,10 +1,9 @@ { "$otSharedSchema": "#/pipette/schemas/2/pipettePropertiesSchema.json", - "displayName": "Flex 8-Channel 1000 μL", + "displayName": "Flex 8-Channel 1000 uL", "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.5, "presses": 1, "speed": 10, "increment": 0.0, @@ -40,7 +39,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_0.json index 502ada5dd9b..1bc84ff4ac9 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_0.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.5, "presses": 1, "speed": 10, "increment": 0.0, @@ -40,7 +39,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_3.json index 502ada5dd9b..1bc84ff4ac9 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_3.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.5, "presses": 1, "speed": 10, "increment": 0.0, @@ -40,7 +39,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_4.json index f8e508bdfd7..cfc6ec19250 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_4.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.55, "presses": 1, "speed": 10, "increment": 0.0, @@ -40,7 +39,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.2, + "2": 0.14, + "3": 0.21, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_5.json index f8e508bdfd7..cfc6ec19250 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_5.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.55, "presses": 1, "speed": 10, "increment": 0.0, @@ -40,7 +39,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.2, + "2": 0.14, + "3": 0.21, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p20/2_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p20/2_0.json index c02138a297e..5bbe6687b47 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p20/2_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p20/2_0.json @@ -4,7 +4,6 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.6, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.28, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p20/2_1.json b/shared-data/pipette/definitions/2/general/eight_channel/p20/2_1.json index c02138a297e..5bbe6687b47 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p20/2_1.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p20/2_1.json @@ -4,7 +4,6 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.6, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.28, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_0.json index 23354433c5f..a4fc47d004e 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_0.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.6, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } }, "channels": 8, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_3.json index 66ba1354970..9f76fca6456 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_3.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.6, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } }, "channels": 8, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_4.json index 66ba1354970..9f76fca6456 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_4.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.6, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } }, "channels": 8, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_5.json index f2813129e2e..a1e9fb3e327 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_5.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.9, "speed": 30.0, "presses": 3, "increment": 3.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.23, + "3": 0.34, + "4": 0.45, + "5": 0.56, + "6": 0.68, + "7": 0.79, + "8": 0.9 + } }, "channels": 8, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/2_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/2_0.json index c8b47ddd04c..e28d4e6e9ad 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/2_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/2_0.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.8, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.13, + "2": 0.2, + "3": 0.3, + "4": 0.4, + "5": 0.5, + "6": 0.6, + "7": 0.7, + "8": 0.8 + } }, "channels": 8, "shaftDiameter": 3.5, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/2_1.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/2_1.json index c8b47ddd04c..e28d4e6e9ad 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/2_1.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/2_1.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.8, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.13, + "2": 0.2, + "3": 0.3, + "4": 0.4, + "5": 0.5, + "6": 0.6, + "7": 0.7, + "8": 0.8 + } }, "channels": 8, "shaftDiameter": 3.5, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_0.json index 04979895755..671431e59dd 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_0.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.6, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } }, "channels": 8, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_3.json index 9b4d07690a7..1f421a6fc74 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_3.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.6, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } }, "channels": 8, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_4.json index 4ec2c916d3e..33bad67b01d 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_4.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.6, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } }, "channels": 8, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_5.json index 744cd90444e..88b0c72bd49 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_5.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.8, "speed": 30.0, "presses": 3, "increment": 3.0, @@ -34,7 +33,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.1, + "2": 0.2, + "3": 0.3, + "4": 0.4, + "5": 0.5, + "6": 0.6, + "7": 0.7, + "8": 0.8 + } }, "channels": 8, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_0.json index 4f4ace328ab..cc541b473b8 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_0.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.5, "presses": 1, "speed": 10, "increment": 0.0, @@ -46,7 +45,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_3.json index 4f4ace328ab..cc541b473b8 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_3.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.5, "presses": 1, "speed": 10, "increment": 0.0, @@ -46,7 +45,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_4.json index 8ebb55ff42f..82f9c6c2d38 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_4.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.55, "presses": 1, "speed": 10, "increment": 0.0, @@ -46,7 +45,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.2, + "2": 0.14, + "3": 0.2, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_5.json index 8ebb55ff42f..82f9c6c2d38 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_5.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.55, "presses": 1, "speed": 10, "increment": 0.0, @@ -46,7 +45,17 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], + "perTipPickupCurrent": { + "1": 0.2, + "2": 0.14, + "3": 0.2, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json index 7d972aa3b17..8324eac7263 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 1.5, "presses": 0.0, "speed": 5.5, "increment": 0.0, @@ -41,7 +40,22 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96] + "availableConfigurations": [1, 8, 12, 96], + "perTipPickupCurrent": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75, + "96": 1.5 + } }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json index c18e9fded71..586f91a7915 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 1.5, "presses": 0.0, "speed": 5.5, "increment": 0.0, @@ -41,7 +40,22 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96] + "availableConfigurations": [1, 8, 12, 96], + "perTipPickupCurrent": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75, + "96": 1.5 + } }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json index c18e9fded71..586f91a7915 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 1.5, "presses": 0.0, "speed": 5.5, "increment": 0.0, @@ -41,7 +40,22 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96] + "availableConfigurations": [1, 8, 12, 96], + "perTipPickupCurrent": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75, + "96": 1.5 + } }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json index bac55b3996f..c7257738b14 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 1.5, "presses": 0.0, "speed": 5.5, "increment": 0.0, @@ -41,7 +40,22 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96] + "availableConfigurations": [1, 8, 12, 96], + "perTipPickupCurrent": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75, + "96": 1.5 + } }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json index bac55b3996f..9c5cf5e9f5f 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 1.5, "presses": 0.0, "speed": 5.5, "increment": 0.0, @@ -41,7 +40,22 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96] + "availableConfigurations": [1, 8, 12, 16, 24, 48, 96], + "perTipPickupCurrent": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75, + "96": 1.5 + } }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p10/1_0.json b/shared-data/pipette/definitions/2/general/single_channel/p10/1_0.json index 8cc699533ec..9125997370a 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p10/1_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p10/1_0.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p10/1_3.json b/shared-data/pipette/definitions/2/general/single_channel/p10/1_3.json index 1e6765e00b4..0f3f1c6f52f 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p10/1_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p10/1_3.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p10/1_4.json b/shared-data/pipette/definitions/2/general/single_channel/p10/1_4.json index a044395382c..2367214103c 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p10/1_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p10/1_4.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p10/1_5.json b/shared-data/pipette/definitions/2/general/single_channel/p10/1_5.json index a044395382c..2367214103c 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p10/1_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p10/1_5.json @@ -4,7 +4,6 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_0.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_0.json index c5e73bc3e7e..9f0481c163e 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_0.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 9.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_3.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_3.json index 38a62cda856..204c5f79ee2 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_3.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 9.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_4.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_4.json index 38a62cda856..204c5f79ee2 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_4.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 9.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_5.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_5.json index a2fc3c6edc2..155a692e7ab 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_5.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.15, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.15 + } }, "channels": 1, "shaftDiameter": 9.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_0.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_0.json index 3c1777feffe..49f6ed48a2b 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_0.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.17, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.17 + } }, "channels": 1, "shaftDiameter": 6.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_1.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_1.json index 7609ef93972..0905fddc243 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_1.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_1.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.17, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.17 + } }, "channels": 1, "shaftDiameter": 6.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_2.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_2.json index 7609ef93972..0905fddc243 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_2.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_2.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.17, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.17 + } }, "channels": 1, "shaftDiameter": 6.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_0.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_0.json index 972a8516216..eb7f7ffb4f4 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_0.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.15, "presses": 1, "speed": 5, "increment": 0.0, @@ -39,7 +38,10 @@ } }, "partialTipConfigurations": { - "partialTipSupported": false + "partialTipSupported": false, + "perTipPickupCurrent": { + "1": 0.15 + } }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_3.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_3.json index 972a8516216..eb7f7ffb4f4 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_3.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.15, "presses": 1, "speed": 5, "increment": 0.0, @@ -39,7 +38,10 @@ } }, "partialTipConfigurations": { - "partialTipSupported": false + "partialTipSupported": false, + "perTipPickupCurrent": { + "1": 0.15 + } }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_4.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_4.json index 98c7d9707e0..7a39720e26f 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_4.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.2, "presses": 1, "speed": 10, "increment": 0.0, @@ -39,7 +38,10 @@ } }, "partialTipConfigurations": { - "partialTipSupported": false + "partialTipSupported": false, + "perTipPickupCurrent": { + "1": 0.2 + } }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_5.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_5.json index 98c7d9707e0..7a39720e26f 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_5.json @@ -4,7 +4,6 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.2, "presses": 1, "speed": 10, "increment": 0.0, @@ -39,7 +38,10 @@ } }, "partialTipConfigurations": { - "partialTipSupported": false + "partialTipSupported": false, + "perTipPickupCurrent": { + "1": 0.2 + } }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p20/2_0.json b/shared-data/pipette/definitions/2/general/single_channel/p20/2_0.json index 7d8dc7fa606..d8b29fffc10 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p20/2_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p20/2_0.json @@ -4,7 +4,6 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.1, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p20/2_1.json b/shared-data/pipette/definitions/2/general/single_channel/p20/2_1.json index a7a3649cdea..e169dffa2d5 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p20/2_1.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p20/2_1.json @@ -4,7 +4,6 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.1, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p20/2_2.json b/shared-data/pipette/definitions/2/general/single_channel/p20/2_2.json index a7a3649cdea..e169dffa2d5 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p20/2_2.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p20/2_2.json @@ -4,7 +4,6 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.1, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/1_0.json b/shared-data/pipette/definitions/2/general/single_channel/p300/1_0.json index 4f174a5eb8c..42002c7e177 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/1_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/1_0.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/1_3.json b/shared-data/pipette/definitions/2/general/single_channel/p300/1_3.json index 8e7663ad458..1b283387165 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/1_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/1_3.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/1_4.json b/shared-data/pipette/definitions/2/general/single_channel/p300/1_4.json index 5bc84742f62..a14d368c703 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/1_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/1_4.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/1_5.json b/shared-data/pipette/definitions/2/general/single_channel/p300/1_5.json index 5bc84742f62..a14d368c703 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/1_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/1_5.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/2_0.json b/shared-data/pipette/definitions/2/general/single_channel/p300/2_0.json index 5a9dae759b4..54fb5335317 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/2_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/2_0.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.125, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.125 + } }, "channels": 1, "shaftDiameter": 3.5, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/2_1.json b/shared-data/pipette/definitions/2/general/single_channel/p300/2_1.json index 3686e581240..94b2212053a 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/2_1.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/2_1.json @@ -4,7 +4,6 @@ "model": "p300", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "current": 0.125, "speed": 10.0, "presses": 1, "increment": 0.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.125 + } }, "channels": 1, "shaftDiameter": 3.5, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1_0.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1_0.json index a23409dfdf9..96753c43a21 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/1_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1_0.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1_3.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1_3.json index 34329f19cbd..010e4d3a55c 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/1_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1_3.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1_4.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1_4.json index a6e1872d352..4349c86a6c6 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/1_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1_4.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -34,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1_5.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1_5.json index 7a4f2053d1d..4349c86a6c6 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/1_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1_5.json @@ -3,10 +3,7 @@ "displayName": "P50 Single-Channel GEN1", "model": "p50", "displayCategory": "GEN1", - "majorVersion": 1, - "minorVersion": 5, "pickUpTipConfigurations": { - "current": 0.1, "speed": 30.0, "presses": 3, "increment": 1.0, @@ -36,7 +33,10 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null + "availableConfigurations": null, + "perTipPickupCurrent": { + "1": 0.1 + } }, "channels": 1, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_0.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_0.json index 32b0e88ab38..ac78ce6b439 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_0.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.15, "presses": 1, "speed": 5, "increment": 0.0, @@ -45,7 +44,10 @@ } }, "partialTipConfigurations": { - "partialTipSupported": false + "partialTipSupported": false, + "perTipPickupCurrent": { + "1": 0.15 + } }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_3.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_3.json index 32b0e88ab38..ac78ce6b439 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_3.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.15, "presses": 1, "speed": 5, "increment": 0.0, @@ -45,7 +44,10 @@ } }, "partialTipConfigurations": { - "partialTipSupported": false + "partialTipSupported": false, + "perTipPickupCurrent": { + "1": 0.15 + } }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_4.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_4.json index 470c9a9985c..66fb9ba7bd3 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_4.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.2, "presses": 1, "speed": 10, "increment": 0.0, @@ -45,7 +44,10 @@ } }, "partialTipConfigurations": { - "partialTipSupported": false + "partialTipSupported": false, + "perTipPickupCurrent": { + "1": 0.2 + } }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_5.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_5.json index 470c9a9985c..66fb9ba7bd3 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_5.json @@ -4,7 +4,6 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "current": 0.2, "presses": 1, "speed": 10, "increment": 0.0, @@ -45,7 +44,10 @@ } }, "partialTipConfigurations": { - "partialTipSupported": false + "partialTipSupported": false, + "perTipPickupCurrent": { + "1": 0.2 + } }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/python/opentrons_shared_data/pipette/model_constants.py b/shared-data/python/opentrons_shared_data/pipette/model_constants.py index d57ffa587ab..00c577823d2 100644 --- a/shared-data/python/opentrons_shared_data/pipette/model_constants.py +++ b/shared-data/python/opentrons_shared_data/pipette/model_constants.py @@ -76,8 +76,8 @@ "liquid_class": "default", }, "pickUpCurrent": { - "top_level_name": "pickUpTipConfigurations", - "nested_name": "current", + "top_level_name": "partialTipConfigurations", + "nested_name": "perTipPickupCurrent", }, "pickUpDistance": { "top_level_name": "pickUpTipConfigurations", diff --git a/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py b/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py index 40e4f8c6464..1c8ba455c65 100644 --- a/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py +++ b/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py @@ -148,9 +148,14 @@ def _find_default(name: str, configs: Dict[str, Any]) -> MutableConfig: lookup_dict = _MAP_KEY_TO_V2[name] nested_name = lookup_dict["nested_name"] - min_max_dict = _MIN_MAX_LOOKUP[nested_name] - type_lookup = _TYPE_LOOKUP[nested_name] - units_lookup = _UNITS_LOOKUP[nested_name] + if name == "pickUpCurrent": + min_max_dict = _MIN_MAX_LOOKUP["current"] + type_lookup = _TYPE_LOOKUP["current"] + units_lookup = _UNITS_LOOKUP["current"] + else: + min_max_dict = _MIN_MAX_LOOKUP[nested_name] + type_lookup = _TYPE_LOOKUP[nested_name] + units_lookup = _UNITS_LOOKUP[nested_name] if name == "tipLength": # This is only a concern for OT-2 configs and I think we can # be less smart about handling multiple tip types. Instead, just @@ -164,6 +169,9 @@ def _find_default(name: str, configs: Dict[str, Any]) -> MutableConfig: default_value = configs["liquid_properties"][LIQUID_CLASS][ lookup_dict["top_level_name"] ][tip_list[-1]][nested_name] + elif name == "pickUpCurrent": + default_value_dict = configs[lookup_dict["top_level_name"]][nested_name] + default_value = default_value_dict[configs["channels"].value] elif lookup_dict.get("liquid_class"): _class = LiquidClasses[lookup_dict["liquid_class"]] default_value = configs[lookup_dict["top_level_name"]][_class][nested_name] diff --git a/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py b/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py index 4214f376396..70e03377339 100644 --- a/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py +++ b/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py @@ -141,7 +141,7 @@ class PlungerPositions(BaseModel): class PlungerHomingConfigurations(BaseModel): current: float = Field( - ..., + default=0.0, description="Either the z motor current needed for picking up tip or the plunger motor current for dropping tip off the nozzle.", ) speed: float = Field( @@ -180,9 +180,9 @@ class PartialTipDefinition(BaseModel): description="A list of the types of partial tip configurations supported, listed by channel ints", alias="availableConfigurations", ) - per_tip_pickup_current: float = Field( - default=0.5, - description="A current scale for pick up tip in a partial tip configuration", + per_tip_pickup_current: Dict[int, float] = Field( + ..., + description="A current dictionary look-up by partial tip configuration.", alias="perTipPickupCurrent", ) diff --git a/shared-data/python/opentrons_shared_data/pipette/scripts/build_json_script.py b/shared-data/python/opentrons_shared_data/pipette/scripts/build_json_script.py index 54dfe3d1060..90c7757b6a7 100644 --- a/shared-data/python/opentrons_shared_data/pipette/scripts/build_json_script.py +++ b/shared-data/python/opentrons_shared_data/pipette/scripts/build_json_script.py @@ -111,14 +111,18 @@ def _build_motor_configurations( def _build_partial_tip_configurations(channels: int) -> PartialTipDefinition: if channels == 8: return PartialTipDefinition( - partialTipSupported=True, availableConfigurations=[1, 2, 3, 4, 5, 6, 7, 8] + partialTipSupported=True, + availableConfigurations=[1, 2, 3, 4, 5, 6, 7, 8], + perTipPickupCurrent={}, ) elif channels == 96: return PartialTipDefinition( - partialTipSupported=True, availableConfigurations=[1, 8, 12, 96] + partialTipSupported=True, + availableConfigurations=[1, 8, 12, 96], + perTipPickupCurrent={}, ) else: - return PartialTipDefinition(partialTipSupported=False) + return PartialTipDefinition(partialTipSupported=False, perTipPickupCurrent={}) def build_geometry_model_v2( diff --git a/shared-data/python/opentrons_shared_data/pipette/scripts/update_configuration_files.py b/shared-data/python/opentrons_shared_data/pipette/scripts/update_configuration_files.py index c1dbfb90bc5..220214cd1e7 100644 --- a/shared-data/python/opentrons_shared_data/pipette/scripts/update_configuration_files.py +++ b/shared-data/python/opentrons_shared_data/pipette/scripts/update_configuration_files.py @@ -145,7 +145,7 @@ def update( Recursively update the given dictionary to ensure no data is lost when updating. """ next_key = next(iter_of_configs, None) - if next_key and isinstance(dict_to_update[next_key], dict): + if next_key and isinstance(dict_to_update.get(next_key), dict): dict_to_update[next_key] = update( dict_to_update.get(next_key, {}), iter_of_configs, value_to_update )