diff --git a/api/src/opentrons/hardware_control/instruments/ot2/pipette.py b/api/src/opentrons/hardware_control/instruments/ot2/pipette.py index f8a9d48da60..436cf121e7a 100644 --- a/api/src/opentrons/hardware_control/instruments/ot2/pipette.py +++ b/api/src/opentrons/hardware_control/instruments/ot2/pipette.py @@ -17,6 +17,7 @@ PipetteModelVersionType, PipetteNameType, PipetteLiquidPropertiesDefinition, + PressFitPickUpTipConfiguration, ) from opentrons_shared_data.pipette import ( load_data as load_pipette_data, @@ -58,6 +59,12 @@ ) from opentrons.hardware_control.dev_types import InstrumentHardwareConfigs +from opentrons.hardware_control.util import ( + pick_up_speed_by_configuration, + pick_up_distance_by_configuration, + pick_up_current_by_configuration, + nominal_tip_overlap_dictionary_by_configuration, +) RECONFIG_KEYS = {"quirks"} @@ -112,9 +119,16 @@ def __init__( pipette_channels=config.channels, pipette_version=config.version, ) + self._valid_nozzle_maps = load_pipette_data.load_valid_nozzle_maps( + self._pipette_model.pipette_type, + self._pipette_model.pipette_channels, + self._pipette_model.pipette_version, + ) self._nozzle_offset = self._config.nozzle_offset self._nozzle_manager = ( - nozzle_manager.NozzleConfigurationManager.build_from_config(self._config) + nozzle_manager.NozzleConfigurationManager.build_from_config( + self._config, self._valid_nozzle_maps + ) ) self._current_volume = 0.0 self._working_volume = float(self._liquid_class.max_volume) @@ -148,7 +162,9 @@ def __init__( self._active_tip_settings.default_blowout_flowrate.default ) - self._tip_overlap_lookup = self._liquid_class.tip_overlap_dictionary + self._versioned_tip_overlap_dictionary = ( + self.get_nominal_tip_overlap_dictionary_by_configuration() + ) if use_old_aspiration_functions: self._pipetting_function_version = PIPETTING_FUNCTION_FALLBACK_VERSION @@ -216,8 +232,8 @@ def pipette_offset(self) -> PipetteOffsetByPipetteMount: return self._pipette_offset @property - def tip_overlap(self) -> Dict[str, float]: - return self._tip_overlap_lookup + def tip_overlap(self) -> Dict[str, Dict[str, float]]: + return self._versioned_tip_overlap_dictionary @property def channels(self) -> pip_types.PipetteChannelType: @@ -290,9 +306,14 @@ def reset_state(self) -> None: self.active_tip_settings.default_blowout_flowrate.default ) - self._tip_overlap_lookup = self.liquid_class.tip_overlap_dictionary + self._versioned_tip_overlap_dictionary = ( + self.get_nominal_tip_overlap_dictionary_by_configuration() + ) + self._nozzle_manager = ( - nozzle_manager.NozzleConfigurationManager.build_from_config(self._config) + nozzle_manager.NozzleConfigurationManager.build_from_config( + self._config, self._valid_nozzle_maps + ) ) def reset_pipette_offset(self, mount: Mount, to_default: bool) -> None: @@ -520,6 +541,45 @@ def remove_tip(self) -> None: def has_tip(self) -> bool: return self._has_tip + def get_pick_up_speed_by_configuration( + self, + config: PressFitPickUpTipConfiguration, + ) -> float: + return pick_up_speed_by_configuration( + config, + self._nozzle_manager.current_configuration.valid_map_key, + pip_types.PipetteTipType(self._liquid_class.max_volume), + ) + + def get_pick_up_distance_by_configuration( + self, + config: PressFitPickUpTipConfiguration, + ) -> float: + return pick_up_distance_by_configuration( + config, + self._nozzle_manager.current_configuration.valid_map_key, + pip_types.PipetteTipType(self._liquid_class.max_volume), + ) + + def get_pick_up_current_by_configuration( + self, + config: PressFitPickUpTipConfiguration, + ) -> float: + return pick_up_current_by_configuration( + config, + self._nozzle_manager.current_configuration.valid_map_key, + pip_types.PipetteTipType(self._liquid_class.max_volume), + ) + + def get_nominal_tip_overlap_dictionary_by_configuration( + self, + ) -> Dict[str, Dict[str, float]]: + return nominal_tip_overlap_dictionary_by_configuration( + self._config, + self._nozzle_manager.current_configuration.valid_map_key, + pip_types.PipetteTipType(self._liquid_class.max_volume), + ) + # Cache max is chosen somewhat arbitrarily. With a float is input we don't # want this to unbounded. @functools.lru_cache(maxsize=100) @@ -571,7 +631,9 @@ def as_dict(self) -> "Pipette.DictType": "default_dispense_flow_rates": self.dispense_flow_rates_lookup, "tip_length": self.current_tip_length, "return_tip_height": self.active_tip_settings.default_return_tip_height, - "tip_overlap": self.tip_overlap, + "tip_overlap": self.tip_overlap[ + "v0" + ], # TODO(cb, 2024-06-11): hard coded to "v0" - when versioned tip overlaps are fully integrated this must change "back_compat_names": self._config.pipette_backcompat_names, "supported_tips": self.liquid_class.supported_tips, } 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 35b38a1732a..2f098bc9df0 100644 --- a/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +++ b/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py @@ -772,7 +772,7 @@ def plan_check_pick_up_tip( # type: ignore[no-untyped-def] if instrument.has_tip: raise UnexpectedTipAttachError("pick_up_tip", instrument.name, mount.name) self._ihp_log.debug(f"Picking up tip on {mount.name}") - tip_count = instrument.nozzle_manager.current_configuration.tip_count + if presses is None or presses < 0: checked_presses = instrument.pick_up_configurations.press_fit.presses else: @@ -783,11 +783,12 @@ def plan_check_pick_up_tip( # type: ignore[no-untyped-def] else: check_incr = increment - pick_up_speed = instrument.pick_up_configurations.press_fit.speed_by_tip_count[ - tip_count - ] - pick_up_distance = ( - instrument.pick_up_configurations.press_fit.distance_by_tip_count[tip_count] + pick_up_speed = instrument.get_pick_up_speed_by_configuration( + instrument.pick_up_configurations.press_fit + ) + + pick_up_distance = instrument.get_pick_up_distance_by_configuration( + instrument.pick_up_configurations.press_fit ) def build_presses() -> Iterator[Tuple[float, float]]: @@ -817,9 +818,9 @@ def add_tip_to_instr() -> None: current={ Axis.by_mount( mount - ): instrument.pick_up_configurations.press_fit.current_by_tip_count[ - tip_count - ] + ): instrument.get_pick_up_current_by_configuration( + instrument.pick_up_configurations.press_fit + ) }, speed=pick_up_speed, relative_down=top_types.Point(0, 0, press_dist), @@ -846,9 +847,9 @@ def add_tip_to_instr() -> None: current={ Axis.by_mount( mount - ): instrument.pick_up_configurations.press_fit.current_by_tip_count[ - instrument.nozzle_manager.current_configuration.tip_count - ] + ): instrument.get_pick_up_current_by_configuration( + instrument.pick_up_configurations.press_fit + ) }, 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 7d72058d1ce..986dd88130b 100644 --- a/api/src/opentrons/hardware_control/instruments/ot3/pipette.py +++ b/api/src/opentrons/hardware_control/instruments/ot3/pipette.py @@ -49,6 +49,13 @@ from opentrons.hardware_control.errors import InvalidCriticalPoint from opentrons.hardware_control import nozzle_manager +from opentrons.hardware_control.util import ( + pick_up_speed_by_configuration, + pick_up_distance_by_configuration, + pick_up_current_by_configuration, + nominal_tip_overlap_dictionary_by_configuration, +) + mod_log = logging.getLogger(__name__) @@ -96,9 +103,16 @@ def __init__( pipette_channels=config.channels, pipette_version=config.version, ) + self._valid_nozzle_maps = load_pipette_data.load_valid_nozzle_maps( + self._pipette_model.pipette_type, + self._pipette_model.pipette_channels, + self._pipette_model.pipette_version, + ) self._nozzle_offset = self._config.nozzle_offset self._nozzle_manager = ( - nozzle_manager.NozzleConfigurationManager.build_from_config(self._config) + nozzle_manager.NozzleConfigurationManager.build_from_config( + self._config, self._valid_nozzle_maps + ) ) self._current_volume = 0.0 self._working_volume = float(self._liquid_class.max_volume) @@ -133,7 +147,9 @@ def __init__( ) self._flow_acceleration = self._active_tip_settings.default_flow_acceleration - self._tip_overlap_lookup = self._liquid_class.tip_overlap_dictionary + self._versioned_tip_overlap_dictionary = ( + self.get_nominal_tip_overlap_dictionary_by_configuration() + ) if use_old_aspiration_functions: self._pipetting_function_version = PIPETTING_FUNCTION_FALLBACK_VERSION @@ -161,8 +177,8 @@ def backlash_distance(self) -> float: return self._backlash_distance @property - def tip_overlap(self) -> Dict[str, float]: - return self._tip_overlap_lookup + def tip_overlap(self) -> Dict[str, Dict[str, float]]: + return self._versioned_tip_overlap_dictionary @property def nozzle_offset(self) -> Point: @@ -254,9 +270,13 @@ def reset_state(self) -> None: ) self._flow_acceleration = self._active_tip_settings.default_flow_acceleration - self._tip_overlap_lookup = self.liquid_class.tip_overlap_dictionary + self._versioned_tip_overlap_dictionary = ( + self.get_nominal_tip_overlap_dictionary_by_configuration() + ) self._nozzle_manager = ( - nozzle_manager.NozzleConfigurationManager.build_from_config(self._config) + nozzle_manager.NozzleConfigurationManager.build_from_config( + self._config, self._valid_nozzle_maps + ) ) def reset_pipette_offset(self, mount: OT3Mount, to_default: bool) -> None: @@ -560,7 +580,7 @@ def as_dict(self) -> "Pipette.DictType": "default_flow_acceleration": self.active_tip_settings.default_flow_acceleration, "tip_length": self.current_tip_length, "return_tip_height": self.active_tip_settings.default_return_tip_height, - "tip_overlap": self.tip_overlap, + "tip_overlap": self.tip_overlap["v0"], "back_compat_names": self._config.pipette_backcompat_names, "supported_tips": self.liquid_class.supported_tips, } @@ -655,11 +675,13 @@ def set_tip_type(self, tip_type: pip_types.PipetteTipType) -> None: self._flow_acceleration = self._active_tip_settings.default_flow_acceleration self._fallback_tip_length = self._active_tip_settings.default_tip_length - self._tip_overlap_lookup = self.liquid_class.tip_overlap_dictionary + self._versioned_tip_overlap_dictionary = ( + self.get_nominal_tip_overlap_dictionary_by_configuration() + ) self._working_volume = min(tip_type.value, self.liquid_class.max_volume) - def get_pick_up_configuration_for_tip_count( - self, count: int + def get_pick_up_configuration( # noqa: C901 + self, ) -> Union[CamActionPickUpTipConfiguration, PressFitPickUpTipConfiguration]: for config in ( self._config.pick_up_tip_configurations.press_fit, @@ -667,20 +689,76 @@ def get_pick_up_configuration_for_tip_count( ): if not config: continue - - if isinstance(config, PressFitPickUpTipConfiguration) and all( - [ - config.speed_by_tip_count.get(count), - config.distance_by_tip_count.get(count), - config.current_by_tip_count.get(count), - ] - ): - return config - elif config.current_by_tip_count.get(count) is not None: - return config + config_values = None + try: + config_values = config.configuration_by_nozzle_map[ + self._nozzle_manager.current_configuration.valid_map_key + ][self._active_tip_setting_name.name] + except KeyError: + try: + config_values = config.configuration_by_nozzle_map[ + self._nozzle_manager.current_configuration.valid_map_key + ].get("default") + if config_values is None: + raise KeyError( + f"Default tip type configuration values do not exist for Nozzle Map {self._nozzle_manager.current_configuration.valid_map_key}." + ) + except KeyError: + # No valid key found for the approved nozzle map under this configuration - try the next + continue + if config_values is not None: + if isinstance(config, PressFitPickUpTipConfiguration) and all( + [ + config_values.speed, + config_values.distance, + config_values.current, + ] + ): + return config + elif config_values.current is not None: + return config raise CommandPreconditionViolated( - message=f"No pick up tip configuration for {count} tips", + message="No valid pick up tip configuration values found in instrument definition.", + ) + + def get_pick_up_speed_by_configuration( + self, + config: Union[CamActionPickUpTipConfiguration, PressFitPickUpTipConfiguration], + ) -> float: + return pick_up_speed_by_configuration( + config, + self._nozzle_manager.current_configuration.valid_map_key, + self._active_tip_setting_name, + ) + + def get_pick_up_distance_by_configuration( + self, + config: Union[CamActionPickUpTipConfiguration, PressFitPickUpTipConfiguration], + ) -> float: + return pick_up_distance_by_configuration( + config, + self._nozzle_manager.current_configuration.valid_map_key, + self._active_tip_setting_name, + ) + + def get_pick_up_current_by_configuration( + self, + config: Union[CamActionPickUpTipConfiguration, PressFitPickUpTipConfiguration], + ) -> float: + return pick_up_current_by_configuration( + config, + self._nozzle_manager.current_configuration.valid_map_key, + self._active_tip_setting_name, + ) + + def get_nominal_tip_overlap_dictionary_by_configuration( + self, + ) -> Dict[str, Dict[str, float]]: + return nominal_tip_overlap_dictionary_by_configuration( + self._config, + self._nozzle_manager.current_configuration.valid_map_key, + self._active_tip_setting_name, ) 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 1dc40a4caa0..8133eb081c9 100644 --- a/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +++ b/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py @@ -747,7 +747,7 @@ def plan_ht_pick_up_tip(self, tip_count: int) -> TipActionSpec: raise UnexpectedTipAttachError("pick_up_tip", instrument.name, mount.name) self._ihp_log.debug(f"Picking up tip on {mount.name}") - pick_up_config = instrument.get_pick_up_configuration_for_tip_count(tip_count) + pick_up_config = instrument.get_pick_up_configuration() if not isinstance(pick_up_config, CamActionPickUpTipConfiguration): raise CommandPreconditionViolated( f"Low-throughput pick up tip got wrong config for {instrument.name} on {mount.name}" @@ -755,11 +755,17 @@ def plan_ht_pick_up_tip(self, tip_count: int) -> TipActionSpec: tip_motor_moves = self._build_tip_motor_moves( prep_move_dist=pick_up_config.prep_move_distance, - clamp_move_dist=pick_up_config.distance, + clamp_move_dist=instrument.get_pick_up_distance_by_configuration( + pick_up_config + ), prep_move_speed=pick_up_config.prep_move_speed, - clamp_move_speed=pick_up_config.speed, + clamp_move_speed=instrument.get_pick_up_speed_by_configuration( + pick_up_config + ), plunger_current=instrument.plunger_motor_current.run, - tip_motor_current=pick_up_config.current_by_tip_count[tip_count], + tip_motor_current=instrument.get_pick_up_current_by_configuration( + pick_up_config + ), ) return TipActionSpec( @@ -782,7 +788,7 @@ def plan_lt_pick_up_tip( raise UnexpectedTipAttachError("pick_up_tip", instrument.name, mount.name) self._ihp_log.debug(f"Picking up tip on {mount.name}") - pick_up_config = instrument.get_pick_up_configuration_for_tip_count(tip_count) + pick_up_config = instrument.get_pick_up_configuration() if not isinstance(pick_up_config, PressFitPickUpTipConfiguration): raise CommandPreconditionViolated( f"Low-throughput pick up tip got wrong config for {instrument.name} on {mount.name}" @@ -797,7 +803,7 @@ def plan_lt_pick_up_tip( else: check_incr = increment - pick_up_speed = pick_up_config.speed_by_tip_count[tip_count] + pick_up_speed = instrument.get_pick_up_speed_by_configuration(pick_up_config) def build_presses() -> List[TipActionMoveSpec]: # Press the nozzle into the tip number of times, @@ -806,7 +812,8 @@ def build_presses() -> List[TipActionMoveSpec]: for i in range(checked_presses): # move nozzle down into the tip press_dist = ( - -1.0 * pick_up_config.distance_by_tip_count[tip_count] + -1.0 + * instrument.get_pick_up_distance_by_configuration(pick_up_config) + -1.0 * check_incr * i ) press_moves.append( @@ -814,9 +821,11 @@ def build_presses() -> List[TipActionMoveSpec]: distance=press_dist, speed=pick_up_speed, currents={ - Axis.by_mount(mount): pick_up_config.current_by_tip_count[ - tip_count - ] + Axis.by_mount( + mount + ): instrument.get_pick_up_current_by_configuration( + pick_up_config + ) }, ) ) diff --git a/api/src/opentrons/hardware_control/nozzle_manager.py b/api/src/opentrons/hardware_control/nozzle_manager.py index a25e5e57319..bf42476f7ee 100644 --- a/api/src/opentrons/hardware_control/nozzle_manager.py +++ b/api/src/opentrons/hardware_control/nozzle_manager.py @@ -9,6 +9,7 @@ from opentrons_shared_data.pipette.pipette_definition import ( PipetteGeometryDefinition, PipetteRowDefinition, + ValidNozzleMaps, ) from opentrons_shared_data.errors import ErrorCodes, GeneralError, PythonException @@ -98,6 +99,8 @@ class NozzleMap: # evaluate them to generate serdes code so please only use ordered dicts here map_store: Dict[str, Point] #: A map of all of the nozzles active in this configuration + valid_map_key: str + #: A key indicating which valid nozzle map from the pipette definition represents this configuration rows: Dict[str, List[str]] #: A map of all the rows active in this configuration columns: Dict[str, List[str]] @@ -214,7 +217,7 @@ def tip_count(self) -> int: return len(self.map_store) @classmethod - def build( + def build( # noqa: C901 cls, physical_nozzles: "OrderedDict[str, Point]", physical_rows: "OrderedDict[str, List[str]]", @@ -222,6 +225,7 @@ def build( starting_nozzle: str, back_left_nozzle: str, front_right_nozzle: str, + valid_nozzle_maps: ValidNozzleMaps, ) -> "NozzleMap": try: back_left_row_index, back_left_column_index = _row_col_indices_for_nozzle( @@ -280,9 +284,20 @@ def build( f"Partial Nozzle Layouts may not be configured to contain more than {MAXIMUM_NOZZLE_COUNT} channels." ) + validated_map_key = None + for map_key in valid_nozzle_maps.maps.keys(): + if valid_nozzle_maps.maps[map_key] == list(map_store.keys()): + validated_map_key = map_key + break + if validated_map_key is None: + raise IncompatibleNozzleConfiguration( + "Attempted Nozzle Configuration does not match any approved map layout for the current pipette." + ) + return cls( starting_nozzle=starting_nozzle, map_store=map_store, + valid_map_key=validated_map_key, rows=rows, full_instrument_map_store=physical_nozzles, full_instrument_rows=physical_rows, @@ -313,15 +328,17 @@ def __init__( class NozzleConfigurationManager: def __init__( - self, - nozzle_map: NozzleMap, + self, nozzle_map: NozzleMap, valid_nozzle_maps: ValidNozzleMaps ) -> None: self._physical_nozzle_map = nozzle_map self._current_nozzle_configuration = nozzle_map + self._valid_nozzle_maps = valid_nozzle_maps @classmethod def build_from_config( - cls, pipette_geometry: PipetteGeometryDefinition + cls, + pipette_geometry: PipetteGeometryDefinition, + valid_nozzle_maps: ValidNozzleMaps, ) -> "NozzleConfigurationManager": sorted_nozzle_map = OrderedDict( ( @@ -346,8 +363,9 @@ def build_from_config( starting_nozzle=back_left, back_left_nozzle=back_left, front_right_nozzle=front_right, + valid_nozzle_maps=valid_nozzle_maps, ) - return cls(starting_nozzle_config) + return cls(starting_nozzle_config, valid_nozzle_maps) @property def starting_nozzle_offset(self) -> Point: @@ -380,6 +398,7 @@ def update_nozzle_configuration( starting_nozzle=starting_nozzle or back_left_nozzle, back_left_nozzle=back_left_nozzle, front_right_nozzle=front_right_nozzle, + valid_nozzle_maps=self._valid_nozzle_maps, ) def get_tip_count(self) -> int: diff --git a/api/src/opentrons/hardware_control/util.py b/api/src/opentrons/hardware_control/util.py index a7965853212..4eb5d004a1f 100644 --- a/api/src/opentrons/hardware_control/util.py +++ b/api/src/opentrons/hardware_control/util.py @@ -2,11 +2,19 @@ import asyncio import logging from enum import Enum -from typing import Dict, Any, Optional, List, Mapping, Tuple, TypeVar +from typing import Dict, Any, Optional, List, Mapping, Tuple, TypeVar, Union from .types import CriticalPoint, MotionChecks, Axis from .errors import OutOfBoundsMove +from opentrons_shared_data.errors.exceptions import MissingConfigurationData from opentrons.types import Point +from opentrons_shared_data.pipette.types import PipetteTipType +from opentrons_shared_data.pipette.pipette_definition import ( + PipetteConfigurations, + PressFitPickUpTipConfiguration, + CamActionPickUpTipConfiguration, + PressAndCamConfigurationValues, +) mod_log = logging.getLogger(__name__) @@ -115,3 +123,112 @@ def ot2_axis_to_string(axis: Axis) -> str: return axis_str_map[axis] except KeyError: return axis.name + + +def _get_press_and_cam_configuration_values( + config: Union[CamActionPickUpTipConfiguration, PressFitPickUpTipConfiguration], + valid_nozzle_map_key: str, + active_tip_type: PipetteTipType, +) -> PressAndCamConfigurationValues: + try: + return config.configuration_by_nozzle_map[valid_nozzle_map_key][ + active_tip_type.name + ] + except KeyError: + default = config.configuration_by_nozzle_map[valid_nozzle_map_key].get( + "default" + ) + if default is not None: + return default + raise MissingConfigurationData( + message=f"Default tip type configuration values do not exist for Nozzle Map {valid_nozzle_map_key}." + ) + + +def pick_up_speed_by_configuration( + config: Union[CamActionPickUpTipConfiguration, PressFitPickUpTipConfiguration], + valid_nozzle_map_key: str, + active_tip_type: PipetteTipType, +) -> float: + """ + Returns the pick up Speed for a given configuration of a given pipette. + + Parameters: + config: A PressFitPickUpTipConfiguration or a CamActionPickUpTipConfiguration (96ch Only) containing values for speed. + valid_nozzle_map_key: The string key representing the current pre-validated map of nozzles the pipette has been configured to use. + active_tip_type: The PipetteTipType to be attached to the pipette. + """ + configuration_values = _get_press_and_cam_configuration_values( + config, valid_nozzle_map_key, active_tip_type + ) + return configuration_values.speed + + +def pick_up_distance_by_configuration( + config: Union[CamActionPickUpTipConfiguration, PressFitPickUpTipConfiguration], + valid_nozzle_map_key: str, + active_tip_type: PipetteTipType, +) -> float: + """ + Returns the pick up Distance for a given configuration of a given pipette. + + Parameters: + config: A PressFitPickUpTipConfiguration or a CamActionPickUpTipConfiguration (96ch Only) containing values for distance. + valid_nozzle_map_key: The string key representing the current pre-validated map of nozzles the pipette has been configured to use. + active_tip_type: The PipetteTipType to be attached to the pipette. + """ + configuration_values = _get_press_and_cam_configuration_values( + config, valid_nozzle_map_key, active_tip_type + ) + return configuration_values.distance + + +def pick_up_current_by_configuration( + config: Union[CamActionPickUpTipConfiguration, PressFitPickUpTipConfiguration], + valid_nozzle_map_key: str, + active_tip_type: PipetteTipType, +) -> float: + """ + Returns the pick up Current for a given configuration of a given pipette. + + Parameters: + config: A PressFitPickUpTipConfiguration or a CamActionPickUpTipConfiguration (96ch Only) containing values for current. + valid_nozzle_map_key: The string key representing the current pre-validated map of nozzles the pipette has been configured to use. + active_tip_type: The PipetteTipType to be attached to the pipette. + """ + configuration_values = _get_press_and_cam_configuration_values( + config, valid_nozzle_map_key, active_tip_type + ) + return configuration_values.current + + +def nominal_tip_overlap_dictionary_by_configuration( + configurations: PipetteConfigurations, + valid_nozzle_map_key: str, + active_tip_type: PipetteTipType, +) -> Dict[str, Dict[str, float]]: + """ + Returns the pick up speed for a given configuration of a given pipette. + + Parameters: + configurations: The PipetterConfigurations of the pipette the tips will be attached to. + valid_nozzle_map_key: The string key representing the current pre-validated map of nozzles the pipette has been configured to use. + active_tip_type: The PipetteTipType to be attached to the pipette. + """ + for config in ( + configurations.pick_up_tip_configurations.press_fit, + configurations.pick_up_tip_configurations.cam_action, + ): + if not config: + continue + try: + configuration_values = _get_press_and_cam_configuration_values( + config, valid_nozzle_map_key, active_tip_type + ) + return configuration_values.versioned_tip_overlap_dictionary + except KeyError: + # No valid key found for the approved nozzle map under this configuration - try the next + continue + raise MissingConfigurationData( + message=f"No valid tip overlap dictionaries identified for map {valid_nozzle_map_key} using tip type {active_tip_type}." + ) diff --git a/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py b/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py index d2a674516ff..e29976d3fc4 100644 --- a/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py +++ b/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py @@ -10,12 +10,12 @@ pipette_definition, ) - from opentrons.hardware_control.dev_types import PipetteDict from opentrons.hardware_control.nozzle_manager import ( NozzleConfigurationManager, NozzleMap, ) +from opentrons_shared_data.errors.exceptions import MissingConfigurationData from ..types import FlowRates from ...types import Point @@ -63,7 +63,15 @@ def configure_virtual_pipette_nozzle_layout( config = self._get_virtual_pipette_full_config_by_model_string( pipette_model_string ) - new_nozzle_manager = NozzleConfigurationManager.build_from_config(config) + + valid_nozzle_maps = load_pipette_data.load_valid_nozzle_maps( + config.pipette_type, + config.channels, + config.version, + ) + new_nozzle_manager = NozzleConfigurationManager.build_from_config( + config, valid_nozzle_maps + ) if back_left_nozzle and front_right_nozzle: new_nozzle_manager.update_nozzle_configuration( back_left_nozzle, front_right_nozzle, starting_nozzle @@ -127,7 +135,7 @@ def _get_virtual_pipette_full_config_by_model_string( pipette_model.pipette_version, ) - def _get_virtual_pipette_static_config_by_model( + def _get_virtual_pipette_static_config_by_model( # noqa: C901 self, pipette_model: pipette_definition.PipetteModelVersionType, pipette_id: str ) -> LoadedStaticPipetteData: if pipette_id not in self._liquid_class_by_id: @@ -150,8 +158,59 @@ def _get_virtual_pipette_static_config_by_model( tip_configuration = config.liquid_properties[liquid_class].supported_tips[ tip_type ] + valid_nozzle_maps = load_pipette_data.load_valid_nozzle_maps( + pipette_model.pipette_type, + pipette_model.pipette_channels, + pipette_model.pipette_version, + ) + nozzle_manager = NozzleConfigurationManager.build_from_config( + config, valid_nozzle_maps + ) + + tip_overlap_dict_for_tip_type = None + for configuration in ( + config.pick_up_tip_configurations.press_fit, + config.pick_up_tip_configurations.cam_action, + ): + if not config: + continue + + approved_map = None + for map_key in valid_nozzle_maps.maps.keys(): + if valid_nozzle_maps.maps[map_key] == list( + nozzle_manager.current_configuration.map_store.keys() + ): + approved_map = map_key + if approved_map is None: + raise MissingConfigurationData( + message="Virtual Static Nozzle Configuration does not match any approved map layout for the current pipette." + ) + + if configuration is not None: + try: + tip_overlap_dict_for_tip_type = ( + configuration.configuration_by_nozzle_map[ + nozzle_manager.current_configuration.valid_map_key + ][tip_type.name].versioned_tip_overlap_dictionary["v0"] + ) + break + except KeyError: + try: + default = configuration.configuration_by_nozzle_map[ + nozzle_manager.current_configuration.valid_map_key + ].get("default") + if default is not None: + tip_overlap_dict_for_tip_type = ( + default.versioned_tip_overlap_dictionary["v0"] + ) + break + except KeyError: + tip_overlap_dict_for_tip_type = None + if tip_overlap_dict_for_tip_type is None: + raise ValueError( + "Virtual Static Nozzle Configuration does not have a valid pick up tip configuration." + ) - nozzle_manager = NozzleConfigurationManager.build_from_config(config) pip_back_left = config.pipette_bounding_box_offsets.back_left_corner pip_front_right = config.pipette_bounding_box_offsets.front_right_corner return LoadedStaticPipetteData( @@ -173,9 +232,7 @@ def _get_virtual_pipette_static_config_by_model( default_aspirate=tip_configuration.default_aspirate_flowrate.values_by_api_level, default_dispense=tip_configuration.default_dispense_flowrate.values_by_api_level, ), - nominal_tip_overlap=config.liquid_properties[ - liquid_class - ].tip_overlap_dictionary, + nominal_tip_overlap=tip_overlap_dict_for_tip_type, nozzle_map=nozzle_manager.current_configuration, back_left_corner_offset=Point( pip_back_left[0], pip_back_left[1], pip_back_left[2] 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 bd521a6e8a2..5030bec31fe 100644 --- a/api/tests/opentrons/hardware_control/instruments/test_nozzle_manager.py +++ b/api/tests/opentrons/hardware_control/instruments/test_nozzle_manager.py @@ -11,7 +11,240 @@ PipetteChannelType, PipetteVersionType, ) -from opentrons_shared_data.pipette.pipette_definition import PipetteConfigurations +from opentrons_shared_data.pipette.pipette_definition import ( + PipetteConfigurations, + ValidNozzleMaps, +) +from tests.opentrons.protocol_engine.pipette_fixtures import ( + NINETY_SIX_ROWS, + NINETY_SIX_COLS, + EIGHT_CHANNEL_COLS, +) + +# Ninety six channel valid nozzle maps +NINETY_SIX_FULL: Dict[str, List[str]] = { + "Full": sum( + [ + NINETY_SIX_ROWS["A"], + NINETY_SIX_ROWS["B"], + NINETY_SIX_ROWS["C"], + NINETY_SIX_ROWS["D"], + NINETY_SIX_ROWS["E"], + NINETY_SIX_ROWS["F"], + NINETY_SIX_ROWS["G"], + NINETY_SIX_ROWS["H"], + ], + [], + ) +} +NINETY_SIX_COL_1: Dict[str, List[str]] = {"Column1": NINETY_SIX_COLS["1"]} +NINETY_SIX_COL_12: Dict[str, List[str]] = {"Column12": NINETY_SIX_COLS["12"]} +NINETY_SIX_ROW_A: Dict[str, List[str]] = {"RowA": NINETY_SIX_ROWS["A"]} +NINETY_SIX_ROW_H: Dict[str, List[str]] = {"RowH": NINETY_SIX_ROWS["H"]} + +A1_D6: Dict[str, List[str]] = { + "A1_D6": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "D1", + "D2", + "D3", + "D4", + "D5", + "D6", + ] +} +E7_H12: Dict[str, List[str]] = { + "E7_H12": [ + "E7", + "E8", + "E9", + "E10", + "E11", + "E12", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12", + ] +} +E1_H6: Dict[str, List[str]] = { + "E1_H6": [ + "E1", + "E2", + "E3", + "E4", + "E5", + "E6", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + ] +} +A1_B12: Dict[str, List[str]] = { + "A1_B12": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "B10", + "B11", + "B12", + ] +} +G1_H12: Dict[str, List[str]] = { + "G1_H12": [ + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12", + ] +} +A1_H3: Dict[str, List[str]] = { + "A1_H3": [ + "A1", + "A2", + "A3", + "B1", + "B2", + "B3", + "C1", + "C2", + "C3", + "D1", + "D2", + "D3", + "E1", + "E2", + "E3", + "F1", + "F2", + "F3", + "G1", + "G2", + "G3", + "H1", + "H2", + "H3", + ] +} +A10_H12: Dict[str, List[str]] = { + "A10_H12": [ + "A10", + "A11", + "A12", + "B10", + "B11", + "B12", + "C10", + "C11", + "C12", + "D10", + "D11", + "D12", + "E10", + "E11", + "E12", + "F10", + "F11", + "F12", + "G10", + "G11", + "G12", + "H10", + "H11", + "H12", + ] +} + +# Eight channel valid nozzle maps +EIGHT_CHANNEL_FULL: Dict[str, List[str]] = {"Full": EIGHT_CHANNEL_COLS["1"]} +A1_D1: Dict[str, List[str]] = {"A1_D1": ["A1", "B1", "C1", "D1"]} +E1_H1: Dict[str, List[str]] = {"E1_H1": ["E1", "F1", "G1", "H1"]} +A1: Dict[str, List[str]] = {"A1": ["A1"]} +H1: Dict[str, List[str]] = {"H1": ["H1"]} @pytest.mark.parametrize( @@ -30,7 +263,9 @@ def test_single_pipettes_always_full( config = load_definition( pipette_details[0], PipetteChannelType.SINGLE_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, ValidNozzleMaps(maps=A1) + ) assert ( subject.current_configuration.configuration == nozzle_manager.NozzleConfigurationType.FULL @@ -65,7 +300,9 @@ def test_single_pipette_map_entries( config = load_definition( pipette_details[0], PipetteChannelType.SINGLE_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, ValidNozzleMaps(maps=A1) + ) def test_map_entries(nozzlemap: nozzle_manager.NozzleMap) -> None: assert nozzlemap.back_left == "A1" @@ -100,7 +337,9 @@ def test_single_pipette_map_geometry( config = load_definition( pipette_details[0], PipetteChannelType.SINGLE_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, ValidNozzleMaps(maps=A1) + ) def test_map_geometry(nozzlemap: nozzle_manager.NozzleMap) -> None: assert nozzlemap.xy_center_offset == Point(*config.nozzle_map["A1"]) @@ -131,7 +370,10 @@ def test_multi_config_identification( config = load_definition( pipette_details[0], PipetteChannelType.EIGHT_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, + ValidNozzleMaps(maps=EIGHT_CHANNEL_FULL | A1_D1 | A1 | H1), + ) assert ( subject.current_configuration.configuration @@ -177,15 +419,6 @@ def test_multi_config_identification( == nozzle_manager.NozzleConfigurationType.SINGLE ) - subject.update_nozzle_configuration("C1", "F1", "C1") - assert ( - cast( - nozzle_manager.NozzleConfigurationType, - subject.current_configuration.configuration, - ) - == nozzle_manager.NozzleConfigurationType.COLUMN - ) - subject.reset_to_default_configuration() assert ( subject.current_configuration.configuration @@ -209,7 +442,10 @@ def test_multi_config_map_entries( config = load_definition( pipette_details[0], PipetteChannelType.EIGHT_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, + ValidNozzleMaps(maps=EIGHT_CHANNEL_FULL | A1_D1 | A1 | H1), + ) def test_map_entries( nozzlemap: nozzle_manager.NozzleMap, nozzles: List[str] @@ -238,8 +474,6 @@ def test_map_entries( test_map_entries(subject.current_configuration, ["A1"]) subject.update_nozzle_configuration("H1", "H1", "H1") test_map_entries(subject.current_configuration, ["H1"]) - subject.update_nozzle_configuration("C1", "F1", "C1") - test_map_entries(subject.current_configuration, ["C1", "D1", "E1", "F1"]) def assert_offset_in_center_of( @@ -274,7 +508,10 @@ def test_multi_config_geometry( config = load_definition( pipette_details[0], PipetteChannelType.EIGHT_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, + ValidNozzleMaps(maps=EIGHT_CHANNEL_FULL | A1_D1 | E1_H1 | A1 | H1), + ) def test_map_geometry( nozzlemap: nozzle_manager.NozzleMap, @@ -302,12 +539,6 @@ def test_map_geometry( subject.update_nozzle_configuration("A1", "A1", "A1") test_map_geometry(subject.current_configuration, "A1", "A1", "A1", "A1") - subject.update_nozzle_configuration("D1", "D1", "D1") - test_map_geometry(subject.current_configuration, "D1", "D1", "D1", "D1") - - subject.update_nozzle_configuration("C1", "G1", "C1") - test_map_geometry(subject.current_configuration, "G1", "C1", "E1", "E1") - subject.update_nozzle_configuration("E1", "H1", "E1") test_map_geometry( subject.current_configuration, "H1", "E1", ("E1", "H1"), ("E1", "H1") @@ -328,7 +559,23 @@ def test_96_config_identification( config = load_definition( pipette_details[0], PipetteChannelType.NINETY_SIX_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, + ValidNozzleMaps( + maps=NINETY_SIX_FULL + | NINETY_SIX_COL_1 + | NINETY_SIX_COL_12 + | NINETY_SIX_ROW_A + | NINETY_SIX_ROW_H + | A1_D6 + | E7_H12 + | E1_H6 + | A1_B12 + | G1_H12 + | A1_H3 + | A10_H12 + ), + ) assert ( subject.current_configuration.configuration @@ -355,14 +602,6 @@ def test_96_config_identification( ) == nozzle_manager.NozzleConfigurationType.COLUMN ) - subject.update_nozzle_configuration("A8", "H8") - assert ( - cast( - nozzle_manager.NozzleConfigurationType, - subject.current_configuration.configuration, - ) - == nozzle_manager.NozzleConfigurationType.COLUMN - ) subject.update_nozzle_configuration("A1", "A12") assert ( @@ -380,14 +619,6 @@ def test_96_config_identification( ) == nozzle_manager.NozzleConfigurationType.ROW ) - subject.update_nozzle_configuration("D1", "D12") - assert ( - cast( - nozzle_manager.NozzleConfigurationType, - subject.current_configuration.configuration, - ) - == nozzle_manager.NozzleConfigurationType.ROW - ) subject.update_nozzle_configuration("E1", "H6") assert ( @@ -406,14 +637,6 @@ def test_96_config_identification( == nozzle_manager.NozzleConfigurationType.SUBRECT ) - subject.update_nozzle_configuration("C4", "F9") - assert ( - cast( - nozzle_manager.NozzleConfigurationType, - subject.current_configuration.configuration, - ) - == nozzle_manager.NozzleConfigurationType.SUBRECT - ) subject.update_nozzle_configuration("A1", "B12") assert ( cast( @@ -457,7 +680,23 @@ def test_96_config_map_entries( config = load_definition( pipette_details[0], PipetteChannelType.NINETY_SIX_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, + ValidNozzleMaps( + maps=NINETY_SIX_FULL + | NINETY_SIX_COL_1 + | NINETY_SIX_COL_12 + | NINETY_SIX_ROW_A + | NINETY_SIX_ROW_H + | A1_D6 + | E7_H12 + | E1_H6 + | A1_B12 + | G1_H12 + | A1_H3 + | A10_H12 + ), + ) def test_map_entries( nozzlemap: nozzle_manager.NozzleMap, @@ -641,22 +880,6 @@ def _nozzles() -> Iterator[str]: {"12": ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"]}, ) - subject.update_nozzle_configuration("A8", "H8") - test_map_entries( - subject.current_configuration, - { - "A": ["A8"], - "B": ["B8"], - "C": ["C8"], - "D": ["D8"], - "E": ["E8"], - "F": ["F8"], - "G": ["G8"], - "H": ["H8"], - }, - {"8": ["A8", "B8", "C8", "D8", "E8", "F8", "G8", "H8"]}, - ) - subject.update_nozzle_configuration("A1", "A12") test_map_entries( subject.current_configuration, @@ -726,40 +949,6 @@ def _nozzles() -> Iterator[str]: "12": ["H12"], }, ) - subject.update_nozzle_configuration("D1", "D12") - test_map_entries( - subject.current_configuration, - { - "D": [ - "D1", - "D2", - "D3", - "D4", - "D5", - "D6", - "D7", - "D8", - "D9", - "D10", - "D11", - "D12", - ] - }, - { - "1": ["D1"], - "2": ["D2"], - "3": ["D3"], - "4": ["D4"], - "5": ["D5"], - "6": ["D6"], - "7": ["D7"], - "8": ["D8"], - "9": ["D9"], - "10": ["D10"], - "11": ["D11"], - "12": ["D12"], - }, - ) subject.update_nozzle_configuration("A1", "D6") test_map_entries( @@ -780,25 +969,6 @@ def _nozzles() -> Iterator[str]: }, ) - subject.update_nozzle_configuration("A7", "D12") - test_map_entries( - subject.current_configuration, - { - "A": ["A7", "A8", "A9", "A10", "A11", "A12"], - "B": ["B7", "B8", "B9", "B10", "B11", "B12"], - "C": ["C7", "C8", "C9", "C10", "C11", "C12"], - "D": ["D7", "D8", "D9", "D10", "D11", "D12"], - }, - { - "7": ["A7", "B7", "C7", "D7"], - "8": ["A8", "B8", "C8", "D8"], - "9": ["A9", "B9", "C9", "D9"], - "10": ["A10", "B10", "C10", "D10"], - "11": ["A11", "B11", "C11", "D11"], - "12": ["A12", "B12", "C12", "D12"], - }, - ) - subject.update_nozzle_configuration("E1", "H6") test_map_entries( subject.current_configuration, @@ -837,13 +1007,6 @@ def _nozzles() -> Iterator[str]: }, ) - subject.update_nozzle_configuration("C4", "D5") - test_map_entries( - subject.current_configuration, - {"C": ["C4", "C5"], "D": ["D4", "D5"]}, - {"4": ["C4", "D4"], "5": ["C5", "D5"]}, - ) - @pytest.mark.parametrize( "pipette_details", [(PipetteModelType.p1000, PipetteVersionType(major=3, minor=5))] @@ -854,7 +1017,23 @@ def test_96_config_geometry( config = load_definition( pipette_details[0], PipetteChannelType.NINETY_SIX_CHANNEL, pipette_details[1] ) - subject = nozzle_manager.NozzleConfigurationManager.build_from_config(config) + subject = nozzle_manager.NozzleConfigurationManager.build_from_config( + config, + ValidNozzleMaps( + maps=NINETY_SIX_FULL + | NINETY_SIX_COL_1 + | NINETY_SIX_COL_12 + | NINETY_SIX_ROW_A + | NINETY_SIX_ROW_H + | A1_D6 + | E7_H12 + | E1_H6 + | A1_B12 + | G1_H12 + | A1_H3 + | A10_H12 + ), + ) def test_map_geometry( config: PipetteConfigurations, @@ -912,8 +1091,3 @@ def test_map_geometry( test_map_geometry( config, subject.current_configuration, "E7", "H7", ("E7", "H12"), ("E7", "H7") ) - - subject.update_nozzle_configuration("C4", "D5") - test_map_geometry( - config, subject.current_configuration, "C4", "D4", ("C4", "D5"), ("C4", "D4") - ) diff --git a/api/tests/opentrons/hardware_control/test_pipette_handler.py b/api/tests/opentrons/hardware_control/test_pipette_handler.py index 1134a09b807..b6e776a0778 100644 --- a/api/tests/opentrons/hardware_control/test_pipette_handler.py +++ b/api/tests/opentrons/hardware_control/test_pipette_handler.py @@ -19,6 +19,7 @@ from opentrons_shared_data.pipette.pipette_definition import ( PressFitPickUpTipConfiguration, CamActionPickUpTipConfiguration, + PressAndCamConfigurationValues, ) @@ -115,16 +116,22 @@ def test_plan_check_pick_up_tip_with_presses_argument( expected_array_length ) decoy.when( - mock_pipette.pick_up_configurations.press_fit.distance_by_tip_count - ).then_return({1: 5}) + mock_pipette.get_pick_up_distance_by_configuration( + mock_pipette.pick_up_configurations.press_fit + ) + ).then_return(5) decoy.when(mock_pipette.pick_up_configurations.press_fit.increment).then_return(0) decoy.when( - mock_pipette.pick_up_configurations.press_fit.speed_by_tip_count - ).then_return({1: 10}) + mock_pipette.get_pick_up_speed_by_configuration( + mock_pipette.pick_up_configurations.press_fit + ) + ).then_return(10) decoy.when(mock_pipette.config.end_tip_action_retract_distance_mm).then_return(0) decoy.when( - mock_pipette.pick_up_configurations.press_fit.current_by_tip_count - ).then_return({1: 1.0}) + mock_pipette.get_pick_up_current_by_configuration( + mock_pipette.pick_up_configurations.press_fit + ) + ).then_return(1.0) decoy.when(mock_pipette.nozzle_manager.current_configuration.tip_count).then_return( 1 ) @@ -158,28 +165,40 @@ def test_plan_check_pick_up_tip_with_presses_argument_ot3( mount = OT3Mount.LEFT presses = presses_input increment = 1 + pac_values = PressAndCamConfigurationValues( + speed=5.5, distance=10, current=1.0, tipOverlaps={"v0": {"default": 1.0}} + ) decoy.when(mock_pipette_ot3.has_tip).then_return(False) - decoy.when( - mock_pipette_ot3.get_pick_up_configuration_for_tip_count(channels) - ).then_return( + decoy.when(mock_pipette_ot3.get_pick_up_configuration()).then_return( CamActionPickUpTipConfiguration( - distance=10, - speed=5.5, prep_move_distance=19.0, prep_move_speed=10, - currentByTipCount={96: 1.0}, + configurationsByNozzleMap={"Full": {"default": pac_values}}, connectTiprackDistanceMM=8, ) if channels == 96 else PressFitPickUpTipConfiguration( presses=2, increment=increment, - distanceByTipCount={channels: 10}, - speedByTipCount={channels: 5.5}, - currentByTipCount={channels: 1.0}, + configurationsByNozzleMap={"Full": {"default": pac_values}}, ) ) + decoy.when( + mock_pipette_ot3.get_pick_up_distance_by_configuration( + mock_pipette_ot3.get_pick_up_configuration() + ) + ).then_return(10) + decoy.when( + mock_pipette_ot3.get_pick_up_speed_by_configuration( + mock_pipette_ot3.get_pick_up_configuration() + ) + ).then_return(5.5) + decoy.when( + mock_pipette_ot3.get_pick_up_current_by_configuration( + mock_pipette_ot3.get_pick_up_configuration() + ) + ).then_return(1.0) decoy.when(mock_pipette_ot3.plunger_motor_current.run).then_return(1) decoy.when(mock_pipette_ot3.config.quirks).then_return([]) decoy.when(mock_pipette_ot3.channels).then_return(channels) diff --git a/api/tests/opentrons/protocol_api/test_instrument_context.py b/api/tests/opentrons/protocol_api/test_instrument_context.py index d0e18f6fda9..43fbd62e09d 100644 --- a/api/tests/opentrons/protocol_api/test_instrument_context.py +++ b/api/tests/opentrons/protocol_api/test_instrument_context.py @@ -34,6 +34,7 @@ from opentrons.hardware_control.nozzle_manager import NozzleMap from opentrons.protocol_api.disposal_locations import TrashBin, WasteChute from opentrons.protocol_api._nozzle_layout import NozzleLayout +from opentrons_shared_data.pipette.pipette_definition import ValidNozzleMaps from opentrons.types import Location, Mount, Point from opentrons_shared_data.errors.exceptions import ( @@ -515,6 +516,7 @@ def test_blow_out_raises_no_location( starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="A1", + valid_nozzle_maps=ValidNozzleMaps(maps={"Full": ["A1"]}), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_configure_nozzle_layout.py b/api/tests/opentrons/protocol_engine/commands/test_configure_nozzle_layout.py index 67b4294c1be..2159d5efb9c 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_configure_nozzle_layout.py +++ b/api/tests/opentrons/protocol_engine/commands/test_configure_nozzle_layout.py @@ -25,6 +25,7 @@ QuadrantNozzleLayoutConfiguration, SingleNozzleLayoutConfiguration, ) +from opentrons_shared_data.pipette.pipette_definition import ValidNozzleMaps from ..pipette_fixtures import ( NINETY_SIX_MAP, NINETY_SIX_COLS, @@ -44,6 +45,7 @@ starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="A1", + valid_nozzle_maps=ValidNozzleMaps(maps={"A1": ["A1"]}), ), {"primary_nozzle": "A1"}, ], @@ -56,6 +58,9 @@ starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="H1", + valid_nozzle_maps=ValidNozzleMaps( + maps={"Column1": NINETY_SIX_COLS["1"]} + ), ), {"primary_nozzle": "A1", "front_right_nozzle": "H1"}, ], @@ -70,6 +75,9 @@ starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="E1", + valid_nozzle_maps=ValidNozzleMaps( + maps={"A1_E1": ["A1", "B1", "C1", "D1", "E1"]} + ), ), {"primary_nozzle": "A1", "front_right_nozzle": "E1"}, ], diff --git a/api/tests/opentrons/protocol_engine/pipette_fixtures.py b/api/tests/opentrons/protocol_engine/pipette_fixtures.py index 70937beeb9f..146a0cb12d1 100644 --- a/api/tests/opentrons/protocol_engine/pipette_fixtures.py +++ b/api/tests/opentrons/protocol_engine/pipette_fixtures.py @@ -1,10 +1,12 @@ """Nozzle Map data to use in tests.""" +from typing import Dict, List from collections import OrderedDict from opentrons.types import Point from opentrons.hardware_control.nozzle_manager import NozzleMap from opentrons_shared_data.pipette.dev_types import PipetteNameType +from opentrons_shared_data.pipette.pipette_definition import ValidNozzleMaps NINETY_SIX_ROWS = OrderedDict( @@ -325,6 +327,7 @@ def get_default_nozzle_map(pipette_type: PipetteNameType) -> NozzleMap: """Get default nozzle map for a given pipette type.""" if "multi" in pipette_type.value: + multi_full: Dict[str, List[str]] = {"Full": EIGHT_CHANNEL_COLS["1"]} return NozzleMap.build( physical_nozzles=EIGHT_CHANNEL_MAP, physical_rows=EIGHT_CHANNEL_ROWS, @@ -332,8 +335,23 @@ def get_default_nozzle_map(pipette_type: PipetteNameType) -> NozzleMap: starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="H1", + valid_nozzle_maps=ValidNozzleMaps(maps=multi_full), ) elif "96" in pipette_type.value: + all_nozzles = sum( + [ + NINETY_SIX_ROWS["A"], + NINETY_SIX_ROWS["B"], + NINETY_SIX_ROWS["C"], + NINETY_SIX_ROWS["D"], + NINETY_SIX_ROWS["E"], + NINETY_SIX_ROWS["F"], + NINETY_SIX_ROWS["G"], + NINETY_SIX_ROWS["H"], + ], + [], + ) + ninety_six_full: Dict[str, List[str]] = {"Full": all_nozzles} return NozzleMap.build( physical_nozzles=NINETY_SIX_MAP, physical_rows=NINETY_SIX_ROWS, @@ -341,8 +359,10 @@ def get_default_nozzle_map(pipette_type: PipetteNameType) -> NozzleMap: starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="H12", + valid_nozzle_maps=ValidNozzleMaps(maps=ninety_six_full), ) else: + single_full: Dict[str, List[str]] = {"Full": ["A1"]} return NozzleMap.build( physical_nozzles=OrderedDict({"A1": Point(0, 0, 0)}), physical_rows=OrderedDict({"A": ["A1"]}), @@ -350,4 +370,5 @@ def get_default_nozzle_map(pipette_type: PipetteNameType) -> NozzleMap: starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="A1", + valid_nozzle_maps=ValidNozzleMaps(maps=single_full), ) diff --git a/api/tests/opentrons/protocol_engine/resources/test_pipette_data_provider.py b/api/tests/opentrons/protocol_engine/resources/test_pipette_data_provider.py index 049441da52a..37fc0635c3f 100644 --- a/api/tests/opentrons/protocol_engine/resources/test_pipette_data_provider.py +++ b/api/tests/opentrons/protocol_engine/resources/test_pipette_data_provider.py @@ -147,13 +147,13 @@ def test_load_virtual_pipette_nozzle_layout( ) -> None: """It should return a NozzleMap object.""" subject_instance.configure_virtual_pipette_nozzle_layout( - "my-pipette", "p300_multi_v2.1", "A1", "E1", "A1" + "my-pipette", "p300_multi_v2.1", "D1", "H1", "H1" ) result = subject_instance.get_nozzle_layout_for_pipette("my-pipette") assert result.configuration.value == "COLUMN" - assert result.starting_nozzle == "A1" - assert result.front_right == "E1" - assert result.back_left == "A1" + assert result.starting_nozzle == "H1" + assert result.front_right == "H1" + assert result.back_left == "D1" subject_instance.configure_virtual_pipette_nozzle_layout( "my-pipette", "p300_multi_v2.1" diff --git a/api/tests/opentrons/protocol_engine/state/test_pipette_view.py b/api/tests/opentrons/protocol_engine/state/test_pipette_view.py index 96c7905dcd4..8c27360ebad 100644 --- a/api/tests/opentrons/protocol_engine/state/test_pipette_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_pipette_view.py @@ -6,6 +6,7 @@ from opentrons_shared_data.pipette.dev_types import PipetteNameType from opentrons_shared_data.pipette import pipette_definition +from opentrons_shared_data.pipette.pipette_definition import ValidNozzleMaps from opentrons.config.defaults_ot2 import Z_RETRACT_DISTANCE from opentrons.types import MountType, Mount as HwMount, Point @@ -562,6 +563,7 @@ def test_nozzle_configuration_getters() -> None: starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="A1", + valid_nozzle_maps=ValidNozzleMaps(maps={"A1": ["A1"]}), ) subject = get_pipette_view(nozzle_layout_by_id={"pipette-id": nozzle_map}) assert subject.get_nozzle_layout_type("pipette-id") == NozzleConfigurationType.FULL @@ -592,6 +594,7 @@ class _PipetteSpecs(NamedTuple): starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="H1", + valid_nozzle_maps=ValidNozzleMaps(maps={"Full": EIGHT_CHANNEL_COLS["1"]}), ), destination_position=Point(100, 200, 300), nozzle_bounds_result=( @@ -617,6 +620,7 @@ class _PipetteSpecs(NamedTuple): starting_nozzle="H1", back_left_nozzle="H1", front_right_nozzle="H1", + valid_nozzle_maps=ValidNozzleMaps(maps={"H1": ["H1"]}), ), destination_position=Point(100, 200, 300), nozzle_bounds_result=( @@ -642,6 +646,23 @@ class _PipetteSpecs(NamedTuple): starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="H12", + valid_nozzle_maps=ValidNozzleMaps( + maps={ + "Full": sum( + [ + NINETY_SIX_ROWS["A"], + NINETY_SIX_ROWS["B"], + NINETY_SIX_ROWS["C"], + NINETY_SIX_ROWS["D"], + NINETY_SIX_ROWS["E"], + NINETY_SIX_ROWS["F"], + NINETY_SIX_ROWS["G"], + NINETY_SIX_ROWS["H"], + ], + [], + ) + } + ), ), destination_position=Point(100, 200, 300), nozzle_bounds_result=( @@ -667,6 +688,7 @@ class _PipetteSpecs(NamedTuple): starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="H1", + valid_nozzle_maps=ValidNozzleMaps(maps={"Column1": NINETY_SIX_COLS["1"]}), ), destination_position=Point(100, 200, 300), nozzle_bounds_result=( @@ -690,6 +712,7 @@ class _PipetteSpecs(NamedTuple): starting_nozzle="A12", back_left_nozzle="A12", front_right_nozzle="H12", + valid_nozzle_maps=ValidNozzleMaps(maps={"Column12": NINETY_SIX_COLS["12"]}), ), destination_position=Point(100, 200, 300), nozzle_bounds_result=( @@ -713,6 +736,7 @@ class _PipetteSpecs(NamedTuple): starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="A12", + valid_nozzle_maps=ValidNozzleMaps(maps={"RowA": NINETY_SIX_ROWS["A"]}), ), destination_position=Point(100, 200, 300), nozzle_bounds_result=( diff --git a/api/tests/opentrons/protocol_engine/state/test_tip_state.py b/api/tests/opentrons/protocol_engine/state/test_tip_state.py index 23e30362a0a..dfd693822c3 100644 --- a/api/tests/opentrons/protocol_engine/state/test_tip_state.py +++ b/api/tests/opentrons/protocol_engine/state/test_tip_state.py @@ -10,6 +10,7 @@ Parameters as LabwareParameters, ) from opentrons_shared_data.pipette import pipette_definition +from opentrons_shared_data.pipette.pipette_definition import ValidNozzleMaps from opentrons.hardware_control.nozzle_manager import NozzleMap from opentrons.protocol_engine import actions, commands @@ -966,6 +967,7 @@ def test_drop_tip( starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="A1", + valid_nozzle_maps=ValidNozzleMaps(maps={"A1": ["A1"]}), ), 1, ), @@ -977,6 +979,23 @@ def test_drop_tip( starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="H12", + valid_nozzle_maps=ValidNozzleMaps( + maps={ + "Full": sum( + [ + NINETY_SIX_ROWS["A"], + NINETY_SIX_ROWS["B"], + NINETY_SIX_ROWS["C"], + NINETY_SIX_ROWS["D"], + NINETY_SIX_ROWS["E"], + NINETY_SIX_ROWS["F"], + NINETY_SIX_ROWS["G"], + NINETY_SIX_ROWS["H"], + ], + [], + ) + } + ), ), 96, ), @@ -988,6 +1007,9 @@ def test_drop_tip( starting_nozzle="A1", back_left_nozzle="A1", front_right_nozzle="E1", + valid_nozzle_maps=ValidNozzleMaps( + maps={"A1_E1": ["A1", "B1", "C1", "D1", "E1"]} + ), ), 5, ), @@ -1111,6 +1133,11 @@ def test_next_tip_uses_active_channels( starting_nozzle="A12", back_left_nozzle="A12", front_right_nozzle="H12", + valid_nozzle_maps=ValidNozzleMaps( + maps={ + "A12_H12": ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"] + } + ), ), ) subject.handle_action( @@ -1217,6 +1244,54 @@ def _reconfigure_nozzle_layout(start: str, back_l: str, front_r: str) -> NozzleM starting_nozzle=start, back_left_nozzle=back_l, front_right_nozzle=front_r, + valid_nozzle_maps=ValidNozzleMaps( + maps={ + "A1": ["A1"], + "H1": ["H1"], + "A12": ["A12"], + "H12": ["H12"], + "A1_H3": [ + "A1", + "A2", + "A3", + "B1", + "B2", + "B3", + "C1", + "C2", + "C3", + "D1", + "D2", + "D3", + "E1", + "E2", + "E3", + "F1", + "F2", + "F3", + "G1", + "G2", + "G3", + "H1", + "H2", + "H3", + ], + "A1_F2": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2", + "D1", + "D2", + "E1", + "E2", + "F1", + "F2", + ], + } + ), ), ) subject.handle_action( @@ -1328,6 +1403,27 @@ def _reconfigure_nozzle_layout(start: str, back_l: str, front_r: str) -> NozzleM starting_nozzle=start, back_left_nozzle=back_l, front_right_nozzle=front_r, + valid_nozzle_maps=ValidNozzleMaps( + maps={ + "A1": ["A1"], + "H1": ["H1"], + "A12": ["A12"], + "H12": ["H12"], + "Full": sum( + [ + NINETY_SIX_ROWS["A"], + NINETY_SIX_ROWS["B"], + NINETY_SIX_ROWS["C"], + NINETY_SIX_ROWS["D"], + NINETY_SIX_ROWS["E"], + NINETY_SIX_ROWS["F"], + NINETY_SIX_ROWS["G"], + NINETY_SIX_ROWS["H"], + ], + [], + ), + } + ), ), ) subject.handle_action( diff --git a/hardware-testing/hardware_testing/opentrons_api/helpers_ot3.py b/hardware-testing/hardware_testing/opentrons_api/helpers_ot3.py index d1ff8f91d53..3b7d2fbb086 100644 --- a/hardware-testing/hardware_testing/opentrons_api/helpers_ot3.py +++ b/hardware-testing/hardware_testing/opentrons_api/helpers_ot3.py @@ -556,9 +556,11 @@ async def update_pick_up_current( """Update pick-up-tip current.""" pipette = _get_pipette_from_mount(api, mount) config_model = pipette.pick_up_configurations.press_fit - config_model.current_by_tip_count = { - k: current for k in config_model.current_by_tip_count.keys() - } + for map_key in config_model.configuration_by_nozzle_map.keys(): + for tip_type in config_model.configuration_by_nozzle_map[map_key].keys(): + config_model.configuration_by_nozzle_map[map_key][ + tip_type + ].current = current pipette.pick_up_configurations.press_fit = config_model @@ -568,9 +570,11 @@ async def update_pick_up_distance( """Update pick-up-tip distance.""" pipette = _get_pipette_from_mount(api, mount) config_model = pipette.pick_up_configurations.press_fit - config_model.distance_by_tip_count = { - k: distance for k in config_model.distance_by_tip_count.keys() - } + for map_key in config_model.configuration_by_nozzle_map.keys(): + for tip_type in config_model.configuration_by_nozzle_map[map_key].keys(): + config_model.configuration_by_nozzle_map[map_key][ + tip_type + ].distance = distance pipette.pick_up_configurations.press_fit = config_model diff --git a/robot-server/robot_server/robot/calibration/check/user_flow.py b/robot-server/robot_server/robot/calibration/check/user_flow.py index 1366c0054ed..bdd343b8c7c 100644 --- a/robot-server/robot_server/robot/calibration/check/user_flow.py +++ b/robot-server/robot_server/robot/calibration/check/user_flow.py @@ -851,8 +851,8 @@ def _get_tip_length(self) -> float: self.active_tiprack._core.get_definition(), ).tipLength except cal_types.TipLengthCalNotFound: - tip_overlap = self.hw_pipette.tip_overlap.get( - self.active_tiprack.uri, self.hw_pipette.tip_overlap["default"] + tip_overlap = self.hw_pipette.tip_overlap["v0"].get( + self.active_tiprack.uri, self.hw_pipette.tip_overlap["v0"]["default"] ) tip_length = self.active_tiprack.tip_length return tip_length - tip_overlap diff --git a/robot-server/robot_server/robot/calibration/deck/user_flow.py b/robot-server/robot_server/robot/calibration/deck/user_flow.py index 55ed1351f84..a857e593820 100644 --- a/robot-server/robot_server/robot/calibration/deck/user_flow.py +++ b/robot-server/robot_server/robot/calibration/deck/user_flow.py @@ -365,7 +365,7 @@ def _get_tip_length(self) -> float: self._tip_rack._core.get_definition(), ).tipLength except cal_types.TipLengthCalNotFound: - tip_overlap = self._hw_pipette.tip_overlap.get(self._tip_rack.uri, 0) + tip_overlap = self._hw_pipette.tip_overlap["v0"].get(self._tip_rack.uri, 0) tip_length = self._tip_rack.tip_length return tip_length - tip_overlap diff --git a/robot-server/robot_server/robot/calibration/pipette_offset/user_flow.py b/robot-server/robot_server/robot/calibration/pipette_offset/user_flow.py index 695e8428634..c68255ce2f3 100644 --- a/robot-server/robot_server/robot/calibration/pipette_offset/user_flow.py +++ b/robot-server/robot_server/robot/calibration/pipette_offset/user_flow.py @@ -328,7 +328,7 @@ def _get_stored_pipette_offset_cal( def _get_tip_length(self) -> float: stored_tip_length_cal = self._get_stored_tip_length_cal() if stored_tip_length_cal is None or self._should_perform_tip_length: - tip_overlap = self._hw_pipette.tip_overlap.get(self._tip_rack.uri, 0) + tip_overlap = self._hw_pipette.tip_overlap["v0"].get(self._tip_rack.uri, 0) tip_length = self._tip_rack.tip_length return tip_length - tip_overlap else: diff --git a/robot-server/robot_server/robot/calibration/tip_length/user_flow.py b/robot-server/robot_server/robot/calibration/tip_length/user_flow.py index fec0fa42639..a51f5f5412e 100644 --- a/robot-server/robot_server/robot/calibration/tip_length/user_flow.py +++ b/robot-server/robot_server/robot/calibration/tip_length/user_flow.py @@ -200,7 +200,8 @@ async def save_offset(self): def _get_default_tip_length(self) -> float: tiprack: labware.Labware = self._deck[TIP_RACK_SLOT] # type: ignore full_length = tiprack.tip_length - overlap_dict: Dict[str, float] = self._hw_pipette.tip_overlap + # add the versioned stuff here + overlap_dict: Dict[str, float] = self._hw_pipette.tip_overlap["v0"] overlap = overlap_dict.get(tiprack.uri, 0) return full_length - overlap diff --git a/shared-data/errors/definitions/1/errors.json b/shared-data/errors/definitions/1/errors.json index d711e4667e8..71cfb1ed764 100644 --- a/shared-data/errors/definitions/1/errors.json +++ b/shared-data/errors/definitions/1/errors.json @@ -237,6 +237,10 @@ "4008": { "detail": "Invalid stored data", "category": "generalError" + }, + "4009": { + "detail": "Missing configuration data", + "category": "generalError" } } } diff --git a/shared-data/js/__tests__/pipettes.test.ts b/shared-data/js/__tests__/pipettes.test.ts index 91f0e8f9d69..4b045ee48a4 100644 --- a/shared-data/js/__tests__/pipettes.test.ts +++ b/shared-data/js/__tests__/pipettes.test.ts @@ -108,13 +108,35 @@ describe('pipette data accessors', () => { nozzleMap: expect.anything(), pathTo3D: 'pipette/definitions/2/geometry/single_channel/p1000/placeholder.gltf', + validNozzleMaps: { + maps: { + SingleA1: ['A1'], + }, + }, pickUpTipConfigurations: { pressFit: { - speedByTipCount: expect.anything(), presses: 1, increment: 0, - distanceByTipCount: expect.anything(), - currentByTipCount: expect.anything(), + configurationsByNozzleMap: { + SingleA1: { + default: { + speed: 10, + distance: 13, + current: 0.2, + tipOverlaps: { + v0: { + default: 10.5, + 'opentrons/opentrons_flex_96_tiprack_1000ul/1': 9.65, + 'opentrons/opentrons_flex_96_tiprack_200ul/1': 9.76, + 'opentrons/opentrons_flex_96_tiprack_50ul/1': 10.09, + 'opentrons/opentrons_flex_96_filtertiprack_1000ul/1': 9.65, + 'opentrons/opentrons_flex_96_filtertiprack_200ul/1': 9.76, + 'opentrons/opentrons_flex_96_filtertiprack_50ul/1': 10.09, + }, + }, + }, + }, + }, }, }, partialTipConfigurations: { diff --git a/shared-data/js/types.ts b/shared-data/js/types.ts index 5cdfb302d71..23230112e7a 100644 --- a/shared-data/js/types.ts +++ b/shared-data/js/types.ts @@ -402,17 +402,28 @@ export interface FlowRateSpec { max: number } +interface pressAndCamConfigurationValues { + speed: number + distance: number + current: number + tipOverlaps: { [version: string]: { [labwareURI: string]: number } } +} export interface PipetteV2GeneralSpecs { displayName: string model: string displayCategory: PipetteDisplayCategory + validNozzleMaps: { + maps: { [nozzleMapKey: string]: string[] } + } pickUpTipConfigurations: { pressFit: { - speedByTipCount: Record presses: number increment: number - distanceByTipCount: Record - currentByTipCount: Record + configurationsByNozzleMap: { + [nozzleMapKey: string]: { + [tipType: string]: pressAndCamConfigurationValues + } + } } } dropTipConfigurations: { 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 8c24542c6c0..67beda30ecd 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 @@ -3,39 +3,168 @@ "displayName": "P10 8-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.1, - "3": 0.15, - "4": 0.2, - "5": 0.25, - "6": 0.3, - "7": 0.35, - "8": 0.4 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.25, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.35, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.4, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 6f0fa466c48..b647f5a4c8f 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 @@ -3,39 +3,168 @@ "displayName": "P10 8-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.1, - "3": 0.15, - "4": 0.2, - "5": 0.25, - "6": 0.3, - "7": 0.35, - "8": 0.4 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.25, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.35, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.4, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 012aa496e1a..a8cb1b2c5a7 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 @@ -3,39 +3,168 @@ "displayName": "P10 8-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.1, - "3": 0.15, - "4": 0.2, - "5": 0.25, - "6": 0.3, - "7": 0.35, - "8": 0.4 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.25, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.35, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.4, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 1bffbaa9c99..7e3c95b51b0 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 @@ -3,39 +3,168 @@ "displayName": "P10 8-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 3.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.14, - "3": 0.21, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.14, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.21, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.28, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.34, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.41, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.48, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 1bffbaa9c99..7e3c95b51b0 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 @@ -3,39 +3,168 @@ "displayName": "P10 8-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 3.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.14, - "3": 0.21, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.14, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.21, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.28, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.34, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.41, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.48, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 64a5635a9ba..c0315a48914 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 @@ -3,39 +3,159 @@ "displayName": "Flex 8-Channel 1000 uL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.19, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.25, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.31, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.44, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + } + } } } }, 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 7370f0c95e6..62033d0444c 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 @@ -3,39 +3,186 @@ "displayName": "Flex 8-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.19, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.25, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.31, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.44, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + } } } }, 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 7370f0c95e6..62033d0444c 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 @@ -3,39 +3,186 @@ "displayName": "Flex 8-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.19, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.25, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.31, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.44, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + } } } }, 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 1ff8e5e541d..7d985e34e2c 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 @@ -3,39 +3,186 @@ "displayName": "Flex 8-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.14, - "3": 0.21, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.14, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.21, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.28, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.34, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.41, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.48, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + } } } }, 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 1ff8e5e541d..7d985e34e2c 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 @@ -3,39 +3,186 @@ "displayName": "Flex 8-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.14, - "3": 0.21, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.14, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.21, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.28, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.34, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.41, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.48, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + } + } + } + } } } }, 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 c5de4c3dfea..e30013a862e 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 @@ -3,39 +3,186 @@ "displayName": "P20 8-Channel GEN2", "model": "p20", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 11.0, - "2": 11.0, - "3": 11.0, - "4": 11.0, - "5": 11.0, - "6": 11.0, - "7": 11.0, - "8": 11.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.28, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.28, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.53, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } + } + } } } }, 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 c5de4c3dfea..8e887440424 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 @@ -3,39 +3,186 @@ "displayName": "P20 8-Channel GEN2", "model": "p20", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 11.0, - "2": 11.0, - "3": 11.0, - "4": 11.0, - "5": 11.0, - "6": 11.0, - "7": 11.0, - "8": 11.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.28, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.28, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.53, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + } } } }, 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 62a07594ceb..1b0697c27a3 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 @@ -3,39 +3,159 @@ "displayName": "P300 8-Channel GEN1", "model": "p300", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.53, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 8cd85d92367..5d9b1fbb4eb 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 @@ -3,39 +3,159 @@ "displayName": "P300 8-Channel GEN1", "model": "p300", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.53, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + } } } }, 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 8cd85d92367..70929033f6c 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 @@ -3,39 +3,159 @@ "displayName": "P300 8-Channel GEN1", "model": "p300", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.53, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 f399118fa50..ab55292911a 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 @@ -3,39 +3,159 @@ "displayName": "P300 8-Channel GEN1", "model": "p300", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 3.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.23, - "3": 0.34, - "4": 0.45, - "5": 0.56, - "6": 0.68, - "7": 0.79, - "8": 0.9 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.34, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.56, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.68, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.79, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.9, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + } } } }, 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 9d1a4a28cfe..7c50400b26c 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 @@ -3,39 +3,150 @@ "displayName": "P300 8-Channel GEN2", "model": "p300", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 11.0, - "2": 11.0, - "3": 11.0, - "4": 11.0, - "5": 11.0, - "6": 11.0, - "7": 11.0, - "8": 11.0 - }, - "currentByTipCount": { - "1": 0.13, - "2": 0.2, - "3": 0.3, - "4": 0.4, - "5": 0.5, - "6": 0.6, - "7": 0.7, - "8": 0.8 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.4, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.5, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.7, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.8, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } + } + } } } }, 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 9d1a4a28cfe..8f48ffd5c6f 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 @@ -3,39 +3,150 @@ "displayName": "P300 8-Channel GEN2", "model": "p300", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 11.0, - "2": 11.0, - "3": 11.0, - "4": 11.0, - "5": 11.0, - "6": 11.0, - "7": 11.0, - "8": 11.0 - }, - "currentByTipCount": { - "1": 0.13, - "2": 0.2, - "3": 0.3, - "4": 0.4, - "5": 0.5, - "6": 0.6, - "7": 0.7, - "8": 0.8 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.4, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.5, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.7, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 11.0, + "current": 0.8, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + } } } }, 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 648e4a44f96..67992bb6ade 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 @@ -3,39 +3,159 @@ "displayName": "P50 8-Channel GEN1", "model": "p50", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.53, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 7177ddbcb4b..6da05c29e6c 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 @@ -3,39 +3,159 @@ "displayName": "P50 8-Channel GEN1", "model": "p50", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.53, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 9197b2c57b6..32b199e2ccb 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 @@ -3,39 +3,159 @@ "displayName": "P50 8-Channel GEN1", "model": "p50", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.23, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.45, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.53, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 a1107144e8e..d75bbe30154 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 @@ -3,39 +3,159 @@ "displayName": "P50 8-Channel GEN1", "model": "p50", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0, - "2": 30.0, - "3": 30.0, - "4": 30.0, - "5": 30.0, - "6": 30.0, - "7": 30.0, - "8": 30.0 - }, "presses": 3, "increment": 3.0, - "distanceByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, - "currentByTipCount": { - "1": 0.1, - "2": 0.2, - "3": 0.3, - "4": 0.4, - "5": 0.5, - "6": 0.6, - "7": 0.7, - "8": 0.8 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.3, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.4, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.5, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.6, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.7, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + }, + "Full": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.8, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 0d3d4d8d5a3..514677f27f1 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 @@ -3,39 +3,150 @@ "displayName": "Flex 8-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.19, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.25, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.31, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.44, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + } } } }, 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 0d3d4d8d5a3..514677f27f1 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 @@ -3,39 +3,150 @@ "displayName": "Flex 8-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.13, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.19, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.25, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.31, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.38, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.44, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + } } } }, 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 5cba86df8c3..3f0b0020c03 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 @@ -3,39 +3,150 @@ "displayName": "Flex 8-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.14, - "3": 0.2, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.14, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.28, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.34, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.41, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.48, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + } } } }, 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 5cba86df8c3..3f0b0020c03 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 @@ -3,39 +3,150 @@ "displayName": "Flex 8-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "H1toG1": ["G1", "H1"], + "H1toF1": ["F1", "G1", "H1"], + "H1toE1": ["E1", "F1", "G1", "H1"], + "H1toD1": ["D1", "E1", "F1", "G1", "H1"], + "H1toC1": ["C1", "D1", "E1", "F1", "G1", "H1"], + "H1toB1": ["B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Full": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.14, - "3": 0.2, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toG1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.14, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toF1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toE1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.28, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toD1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.34, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toC1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.41, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "H1toB1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.48, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + }, + "Full": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } + } + } } } }, 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 acbeb0d5eb8..4e4ad89ca3f 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 @@ -3,61 +3,504 @@ "displayName": "Flex 96-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "SingleA12": ["A12"], + "SingleH12": ["H12"], + "Column1": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Column12": ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"], + "Full": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "B10", + "B11", + "B12", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "C10", + "C11", + "C12", + "D1", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "D10", + "D11", + "D12", + "E1", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "E10", + "E11", + "E12", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12" + ] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, "increment": 0.0, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0, - "12": 10.0, - "16": 10.0, - "24": 10.0, - "48": 10.0 - }, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0, - "12": 13.0, - "16": 13.0, - "24": 13.0, - "48": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.25, - "3": 0.3, - "4": 0.35, - "5": 0.4, - "6": 0.45, - "7": 0.5, - "8": 0.55, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleA12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } }, "camAction": { "prep_move_distance": 9.0, "prep_move_speed": 10.0, - "speed": 5.5, - "distance": 10.0, "connectTiprackDistanceMM": 7.0, - "currentByTipCount": { - "96": 1.5 + "configurationsByNozzleMap": { + "Full": { + "default": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 439061fbf9e..2b0faca936d 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 @@ -3,61 +3,504 @@ "displayName": "Flex 96-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "SingleA12": ["A12"], + "SingleH12": ["H12"], + "Column1": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Column12": ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"], + "Full": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "B10", + "B11", + "B12", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "C10", + "C11", + "C12", + "D1", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "D10", + "D11", + "D12", + "E1", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "E10", + "E11", + "E12", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12" + ] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, "increment": 0.0, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0, - "12": 10.0, - "16": 10.0, - "24": 10.0, - "48": 10.0 - }, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0, - "12": 13.0, - "16": 13.0, - "24": 13.0, - "48": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.25, - "3": 0.3, - "4": 0.35, - "5": 0.4, - "6": 0.45, - "7": 0.5, - "8": 0.55, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleA12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } }, "camAction": { - "speed": 5.5, - "distance": 10.0, "prep_move_distance": 9.0, "prep_move_speed": 10.0, "connectTiprackDistanceMM": 7.0, - "currentByTipCount": { - "96": 1.5 + "configurationsByNozzleMap": { + "Full": { + "default": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 ce9eb5ec8db..853da180a1b 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 @@ -3,61 +3,504 @@ "displayName": "Flex 96-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "SingleA12": ["A12"], + "SingleH12": ["H12"], + "Column1": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Column12": ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"], + "Full": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "B10", + "B11", + "B12", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "C10", + "C11", + "C12", + "D1", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "D10", + "D11", + "D12", + "E1", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "E10", + "E11", + "E12", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12" + ] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, "increment": 0.0, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0, - "12": 10.0, - "16": 10.0, - "24": 10.0, - "48": 10.0 - }, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0, - "12": 13.0, - "16": 13.0, - "24": 13.0, - "48": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.25, - "3": 0.3, - "4": 0.35, - "5": 0.4, - "6": 0.45, - "7": 0.5, - "8": 0.55, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleA12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } }, "camAction": { - "speed": 5.5, - "distance": 10.0, "prep_move_distance": 9.0, "prep_move_speed": 10.0, "connectTiprackDistanceMM": 7.0, - "currentByTipCount": { - "96": 1.5 + "configurationsByNozzleMap": { + "Full": { + "default": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 10193ab1c72..84e2492dfb4 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 @@ -3,62 +3,504 @@ "displayName": "Flex 96-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "SingleA12": ["A12"], + "SingleH12": ["H12"], + "Column1": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Column12": ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"], + "Full": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "B10", + "B11", + "B12", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "C10", + "C11", + "C12", + "D1", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "D10", + "D11", + "D12", + "E1", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "E10", + "E11", + "E12", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12" + ] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, "increment": 0.0, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0, - "12": 10.0, - "16": 10.0, - "24": 10.0, - "48": 10.0 - }, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0, - "12": 13.0, - "16": 13.0, - "24": 13.0, - "48": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.25, - "3": 0.3, - "4": 0.35, - "5": 0.4, - "6": 0.45, - "7": 0.5, - "8": 0.55, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleA12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } }, "camAction": { - "speed": 5.5, - "distance": 10.0, "prep_move_distance": 9.0, "prep_move_speed": 10.0, "connectTiprackDistanceMM": 7.0, - - "currentByTipCount": { - "96": 1.5 + "configurationsByNozzleMap": { + "Full": { + "default": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 d68a15a0df1..515db5e61f8 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 @@ -3,61 +3,504 @@ "displayName": "Flex 96-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "SingleA12": ["A12"], + "SingleH12": ["H12"], + "Column1": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Column12": ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"], + "Full": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "B10", + "B11", + "B12", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "C10", + "C11", + "C12", + "D1", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "D10", + "D11", + "D12", + "E1", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "E10", + "E11", + "E12", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12" + ] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, "increment": 0.0, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0, - "12": 10.0, - "16": 10.0, - "24": 10.0, - "48": 10.0 - }, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0, - "12": 13.0, - "16": 13.0, - "24": 13.0, - "48": 13.0 - }, - "currentByTipCount": { - "1": 0.2, - "2": 0.25, - "3": 0.3, - "4": 0.35, - "5": 0.4, - "6": 0.45, - "7": 0.5, - "8": 0.55, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleA12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + }, + "Column12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } }, "camAction": { - "speed": 5.5, - "distance": 10.0, "prep_move_distance": 8.25, "prep_move_speed": 10.0, "connectTiprackDistanceMM": 7.0, - "currentByTipCount": { - "96": 1.5 + "configurationsByNozzleMap": { + "Full": { + "default": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_6.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_6.json index c59dfce42ab..273e3ef82a5 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_6.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_6.json @@ -3,62 +3,520 @@ "displayName": "Flex 96-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"], + "SingleH1": ["H1"], + "SingleA12": ["A12"], + "SingleH12": ["H12"], + "Column1": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + "Column12": ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"], + "RowA": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12" + ], + "RowH": [ + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12" + ], + "Full": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "B10", + "B11", + "B12", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "C10", + "C11", + "C12", + "D1", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "D10", + "D11", + "D12", + "E1", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "E10", + "E11", + "E12", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12" + ] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, "increment": 0.0, - "speedByTipCount": { - "1": 10.0, - "2": 10.0, - "3": 10.0, - "4": 10.0, - "5": 10.0, - "6": 10.0, - "7": 10.0, - "8": 10.0, - "12": 10.0, - "16": 10.0, - "24": 10.0, - "48": 10.0 - }, - "distanceByTipCount": { - "1": 13.0, - "2": 13.0, - "3": 13.0, - "4": 13.0, - "5": 13.0, - "6": 13.0, - "7": 13.0, - "8": 13.0, - "12": 13.0, - "16": 13.0, - "24": 13.0, - "48": 13.0 - }, - - "currentByTipCount": { - "1": 0.2, - "2": 0.25, - "3": 0.3, - "4": 0.35, - "5": 0.4, - "6": 0.45, - "7": 0.5, - "8": 0.55, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5 + } + } + } + }, + "SingleA12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5 + } + } + } + }, + "SingleH12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5 + } + } + } + }, + "Column1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5 + } + } + } + }, + "Column12": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5 + } + } + } + }, + "RowA": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + } + }, + "RowH": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.55, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + } + } } }, "camAction": { - "speed": 5.5, - "distance": 10.0, "prep_move_distance": 8.25, "prep_move_speed": 10.0, "connectTiprackDistanceMM": 7.0, - "currentByTipCount": { - "96": 1.5 + "configurationsByNozzleMap": { + "Full": { + "default": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t1000": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } + }, + "t200": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + } + } + }, + "t50": { + "speed": 5.5, + "distance": 10.0, + "current": 1.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 3471d7b9c8f..acd8a0f0797 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 @@ -3,18 +3,32 @@ "displayName": "P10 Single-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 5d9190cd85f..c76c2d9f960 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 @@ -3,18 +3,32 @@ "displayName": "P10 Single-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 3d88e354b13..c05ffed3e00 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 @@ -3,18 +3,32 @@ "displayName": "P10 Single-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 3d88e354b13..c05ffed3e00 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 @@ -3,18 +3,32 @@ "displayName": "P10 Single-Channel GEN1", "model": "p10", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 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 8aba92f689d..9e2b50ac1fd 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 @@ -3,18 +3,32 @@ "displayName": "P1000 Single-Channel GEN1", "model": "p1000", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 15.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 15.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.95, + "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, + "opentrons/geb_96_tiprack_1000ul/1": 11.2, + "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.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 d19e92fb573..24fdde39708 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 @@ -3,18 +3,32 @@ "displayName": "P1000 Single-Channel GEN1", "model": "p1000", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 15.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 15.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.95, + "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, + "opentrons/geb_96_tiprack_1000ul/1": 11.2, + "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.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 d19e92fb573..24fdde39708 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 @@ -3,18 +3,32 @@ "displayName": "P1000 Single-Channel GEN1", "model": "p1000", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 15.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 15.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.95, + "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, + "opentrons/geb_96_tiprack_1000ul/1": 11.2, + "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.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 191ba9a0830..4ef67c2495a 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 @@ -3,18 +3,32 @@ "displayName": "P1000 Single-Channel GEN1", "model": "p1000", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 15.0 - }, - "currentByTipCount": { - "1": 0.15 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 15.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 7.95, + "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, + "opentrons/geb_96_tiprack_1000ul/1": 11.2, + "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.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 59faa2e3a4f..4fbf18e4dd8 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 @@ -3,18 +3,31 @@ "displayName": "P1000 Single-Channel GEN2", "model": "p1000", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 17.0 - }, - "currentByTipCount": { - "1": 0.17 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 17.0, + "current": 0.17, + "tipOverlaps": { + "v0": { + "default": 9.7, + "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, + "opentrons/geb_96_tiprack_1000ul/1": 9.5 + } + } + } + } } } }, 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 e9ac4ffda3d..100324e7556 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 @@ -3,18 +3,31 @@ "displayName": "P1000 Single-Channel GEN2", "model": "p1000", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 17.0 - }, - "currentByTipCount": { - "1": 0.17 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 17.0, + "current": 0.17, + "tipOverlaps": { + "v0": { + "default": 9.7, + "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, + "opentrons/geb_96_tiprack_1000ul/1": 9.5 + } + } + } + } } } }, 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 e9ac4ffda3d..100324e7556 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 @@ -3,18 +3,31 @@ "displayName": "P1000 Single-Channel GEN2", "model": "p1000", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 17.0 - }, - "currentByTipCount": { - "1": 0.17 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 17.0, + "current": 0.17, + "tipOverlaps": { + "v0": { + "default": 9.7, + "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, + "opentrons/geb_96_tiprack_1000ul/1": 9.5 + } + } + } + } } } }, 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 c84add80ed8..6877ce9e12e 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 @@ -3,18 +3,34 @@ "displayName": "Flex 1-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 5.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.15 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 5.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 c84add80ed8..6877ce9e12e 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 @@ -3,18 +3,34 @@ "displayName": "Flex 1-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 5.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.15 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 5.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 327d01afec9..50d5a0193e5 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 @@ -3,18 +3,34 @@ "displayName": "Flex 1-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.2 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 327d01afec9..50d5a0193e5 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 @@ -3,18 +3,34 @@ "displayName": "Flex 1-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.2 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_6.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_6.json index 327d01afec9..50d5a0193e5 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_6.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_6.json @@ -3,18 +3,34 @@ "displayName": "Flex 1-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.2 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_7.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_7.json index 327d01afec9..b1d202e897f 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_7.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_7.json @@ -3,18 +3,34 @@ "displayName": "Flex 1-Channel 1000 μL", "model": "p1000", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.2 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 9.65, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.76, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 9.65, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 9.76, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 + } + } + } + } } } }, 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 5b848afe0f5..46473f554ec 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 @@ -3,18 +3,34 @@ "displayName": "P20 Single-Channel GEN2", "model": "p20", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 14.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 14.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + } } } }, 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 58f82399948..8763b5ddb67 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 @@ -3,18 +3,34 @@ "displayName": "P20 Single-Channel GEN2", "model": "p20", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 14.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 14.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + } } } }, 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 58f82399948..8763b5ddb67 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 @@ -3,18 +3,34 @@ "displayName": "P20 Single-Channel GEN2", "model": "p20", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 14.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 14.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } + } + } } } }, 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 4952f0b706f..9594b29f0dc 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 @@ -3,18 +3,31 @@ "displayName": "P300 Single-Channel GEN1", "model": "p300", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 84fd3b53724..548f3a7cda3 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 @@ -3,18 +3,31 @@ "displayName": "P300 Single-Channel GEN1", "model": "p300", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 5e5b2c85cc7..c35b608330e 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 @@ -3,18 +3,31 @@ "displayName": "P300 Single-Channel GEN1", "model": "p300", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 5e5b2c85cc7..c35b608330e 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 @@ -3,18 +3,31 @@ "displayName": "P300 Single-Channel GEN1", "model": "p300", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } + } + } } } }, 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 5c042350b12..8c1ebd11a3b 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 @@ -3,18 +3,30 @@ "displayName": "P300 Single-Channel GEN2", "model": "p300", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 17.0 - }, - "currentByTipCount": { - "1": 0.125 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 17.0, + "current": 0.125, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + } } } }, 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 b0d4cea5f02..4cc21702514 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 @@ -3,18 +3,30 @@ "displayName": "P300 Single-Channel GEN2", "model": "p300", "displayCategory": "GEN2", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 10.0 - }, "presses": 1, "increment": 0.0, - "distanceByTipCount": { - "1": 17.0 - }, - "currentByTipCount": { - "1": 0.125 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 17.0, + "current": 0.125, + "tipOverlaps": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } + } + } } } }, 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 31e26001f3c..1d58019d609 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 @@ -3,18 +3,31 @@ "displayName": "P50 Single-Channel GEN1", "model": "p50", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + } } } }, 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 e1f2446ca35..a5e72e2513f 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 @@ -3,18 +3,31 @@ "displayName": "P50 Single-Channel GEN1", "model": "p50", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + } } } }, 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 155caa41adf..0a1bab0a3c7 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 @@ -3,18 +3,31 @@ "displayName": "P50 Single-Channel GEN1", "model": "p50", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + } } } }, 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 155caa41adf..0a1bab0a3c7 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,18 +3,31 @@ "displayName": "P50 Single-Channel GEN1", "model": "p50", "displayCategory": "GEN1", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { - "speedByTipCount": { - "1": 30.0 - }, "presses": 3, "increment": 1.0, - "distanceByTipCount": { - "1": 10.0 - }, - "currentByTipCount": { - "1": 0.1 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 30.0, + "distance": 10.0, + "current": 0.1, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } + } + } } } }, 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 1c9d02e7e0f..a2912a2a628 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 @@ -3,18 +3,30 @@ "displayName": "Flex 1-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 5.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.15 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 5.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 1641adea42d..a2912a2a628 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 @@ -3,18 +3,30 @@ "displayName": "Flex 1-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 5 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.15 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 5.0, + "distance": 13.0, + "current": 0.15, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 1f29cbf71f1..c31466cdf07 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 @@ -3,18 +3,30 @@ "displayName": "Flex 1-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.2 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, 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 1f29cbf71f1..c31466cdf07 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 @@ -3,18 +3,30 @@ "displayName": "Flex 1-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.2 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_6.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_6.json index 1f29cbf71f1..c31466cdf07 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_6.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_6.json @@ -3,18 +3,30 @@ "displayName": "Flex 1-Channel 50 μL", "model": "p50", "displayCategory": "FLEX", + "validNozzleMaps": { + "maps": { + "SingleA1": ["A1"] + } + }, "pickUpTipConfigurations": { "pressFit": { "presses": 1, - "speedByTipCount": { - "1": 10.0 - }, "increment": 0.0, - "distanceByTipCount": { - "1": 13.0 - }, - "currentByTipCount": { - "1": 0.2 + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "speed": 10.0, + "distance": 13.0, + "current": 0.2, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } + } + } } } }, diff --git a/shared-data/pipette/schemas/2/pipettePropertiesSchema.json b/shared-data/pipette/schemas/2/pipettePropertiesSchema.json index d7b0a55a86f..f6e5fe02220 100644 --- a/shared-data/pipette/schemas/2/pipettePropertiesSchema.json +++ b/shared-data/pipette/schemas/2/pipettePropertiesSchema.json @@ -45,22 +45,36 @@ "type": "number", "enum": [1, 2, 3, 4, 5, 6, 7, 8, 12, 96, 384] }, - "distanceByTipCount": { + "configurationsByNozzleMap": { "type": "object", - "patternProperties": { - "\\d+": { "$ref": "#/definitions/distanceRange" } - } - }, - "speedByTipCount": { - "type": "object", - "patternProperties": { - "\\d+": { "$ref": "#/definitions/speedRange" } - } - }, - "currentByTipCount": { - "type": "object", - "patternProperties": { - "\\d+": { "$ref": "#/definitions/currentRange" } + "description": "Pipette configurations keyed by validated sets of nozzle layouts. Maps must be ordered from smallest to largest regarding nozzle count.", + "items": { + "type": "object", + "description": "Tip types by which each set of configration values are differentiated.", + "required": ["default"], + "items": { + "speed": { "$ref": "#/definitions/speedRange" }, + "distance": { "$ref": "#/definitions/distanceRange" }, + "current": { "$ref": "#/definitions/currentRange" }, + "tipOverlaps": { + "type": "object", + "description": "Set of versioned tip overlap values with version 0 acting as the default", + "required": ["v0"], + "patternProperties": { + "^v\\d+$": { + "type": "object", + "description": "Map of tip overlap values with defaults", + "required": ["default"], + "$comment": "Other keys in here should be labware URIs", + "properties": { + "default": { "type": "number" } + }, + "additionalProperties": { "type": "number" } + } + }, + "additionalProperties": false + } + } } } }, @@ -179,6 +193,18 @@ "run": { "$ref": "#/definitions/currentRange" } } }, + "validNozzleMaps": { + "maps": { + "description": "The Opentrons validated map configurations for this pipette.", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "pickUpTipConfigurations": { "description": "Object containing configurations for picking up tips common to all partial configurations", "anyOf": [ @@ -188,23 +214,13 @@ "properties": { "pressFit": { "type": "object", - "required": [ - "presses", - "speedByTipCount", - "increment", - "distanceByTipCount", - "currentByTipCount" - ], + "required": ["presses", "increment", "configurationsByNozzleMap"], "additionalProperties": false, "properties": { "presses": { "$ref": "#/definitions/positiveNumber" }, - "speedByTipCount": { "$ref": "#/definitions/speedByTipCount" }, "increment": { "$ref": "#/definitions/positiveNumber" }, - "distanceByTipCount": { - "$ref": "#/definitions/distanceByTipCount" - }, - "currentByTipCount": { - "$ref": "#/definitions/currentByTipCount" + "configurationsByNozzleMap": { + "$ref": "#/definitions/configurationsByNozzleMap" } } } @@ -219,9 +235,7 @@ "required": [ "prep_move_distance", "prep_move_speed", - "speed", - "distance", - "currentByTipCount" + "configurationsByNozzleMap" ], "additionalProperties": false, "properties": { @@ -229,10 +243,8 @@ "$ref": "#/definitions/positiveNumber" }, "prep_move_speed": { "$ref": "#/definitions/positiveNumber" }, - "speed": { "$ref": "#/definitions/positiveNumber" }, - "distance": { "$ref": "#/definitions/positiveNumber" }, - "currentByTipCount": { - "$ref": "#/definitions/currentByTipCount" + "configurationsByNozzleMap": { + "$ref": "#/definitions/configurationsByNozzleMap" }, "connectTiprackDistanceMM": { "$ref": "#/definitions/positiveNumber" diff --git a/shared-data/python/opentrons_shared_data/errors/codes.py b/shared-data/python/opentrons_shared_data/errors/codes.py index e386cba455e..59a6a6e3697 100644 --- a/shared-data/python/opentrons_shared_data/errors/codes.py +++ b/shared-data/python/opentrons_shared_data/errors/codes.py @@ -89,6 +89,7 @@ class ErrorCodes(Enum): INVALID_PROTOCOL_DATA = _code_from_dict_entry("4006") API_MISCONFIGURATION = _code_from_dict_entry("4007") INVALID_STORED_DATA = _code_from_dict_entry("4008") + MISSING_CONFIGURATION_DATA = _code_from_dict_entry("4009") @classmethod @lru_cache(25) diff --git a/shared-data/python/opentrons_shared_data/errors/exceptions.py b/shared-data/python/opentrons_shared_data/errors/exceptions.py index 499fcf3ac2d..144bb963285 100644 --- a/shared-data/python/opentrons_shared_data/errors/exceptions.py +++ b/shared-data/python/opentrons_shared_data/errors/exceptions.py @@ -989,3 +989,21 @@ def __init__( ) -> None: """Build an InvalidStoredData.""" super().__init__(ErrorCodes.INVALID_STORED_DATA, message, detail, wrapping) + + +class MissingConfigurationData(GeneralError): + """An error indicating that provided configuration data is missing or invalid. + + This will usually be because a pipette configuration does not match the ones provided by the pipette definition. + """ + + def __init__( + self, + message: Optional[str] = None, + detail: Optional[Dict[str, str]] = None, + wrapping: Optional[Sequence[EnumeratedError]] = None, + ) -> None: + """Build an MissingConfigurationData.""" + super().__init__( + ErrorCodes.MISSING_CONFIGURATION_DATA, message, detail, wrapping + ) diff --git a/shared-data/python/opentrons_shared_data/pipette/load_data.py b/shared-data/python/opentrons_shared_data/pipette/load_data.py index 4dc6b200574..7e0a13de3b7 100644 --- a/shared-data/python/opentrons_shared_data/pipette/load_data.py +++ b/shared-data/python/opentrons_shared_data/pipette/load_data.py @@ -10,6 +10,7 @@ from .pipette_definition import ( PipetteConfigurations, PipetteLiquidPropertiesDefinition, + ValidNozzleMaps, ) from .model_constants import MOUNT_CONFIG_LOOKUP_TABLE, _MAP_KEY_TO_V2 from .types import ( @@ -259,3 +260,18 @@ def load_definition( "mount_configurations": mount_configs, } ) + + +def load_valid_nozzle_maps( + model: PipetteModelType, + channels: PipetteChannelType, + version: PipetteVersionType, +) -> ValidNozzleMaps: + if ( + version.major not in PipetteModelMajorVersion + or version.minor not in PipetteModelMinorVersion + ): + raise KeyError("Pipette version not found.") + + physical_dict = _physical(channels, model, version) + return ValidNozzleMaps.parse_obj(physical_dict["validNozzleMaps"]) 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 1b4199635d5..7d34e0e5f6a 100644 --- a/shared-data/python/opentrons_shared_data/pipette/model_constants.py +++ b/shared-data/python/opentrons_shared_data/pipette/model_constants.py @@ -63,22 +63,28 @@ "pickUpCurrent": [ "pickUpTipConfigurations", "pressFit", - "currentByTipCount", - "##EACHTIP##", + "configurationsByNozzleMap", + "##EACHNOZZLEMAP##", + "##EACHTIPTYPE##", + "current", ], "pickUpDistance": [ "pickUpTipConfigurations", "pressFit", - "distanceByTipCount", - "##EACHTIP##", + "configurationsByNozzleMap", + "##EACHNOZZLEMAP##", + "##EACHTIPTYPE##", + "distance", ], "pickUpIncrement": ["pickUpTipConfigurations", "pressFit", "increment"], "pickUpPresses": ["pickUpTipConfigurations", "pressFit", "presses"], "pickUpSpeed": [ "pickUpTipConfigurations", "pressFit", - "speedByTipCount", - "##EACHTIP##", + "configurationsByNozzleMap", + "##EACHNOZZLEMAP##", + "##EACHTIPTYPE##", + "speed", ], "plungerCurrent": ["plungerMotorConfigurations", "run"], "dropTipCurrent": ["dropTipConfigurations", "plungerEject", "current"], 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 0653181e996..53882dd8f11 100644 --- a/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py +++ b/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py @@ -52,18 +52,17 @@ def _do_edit_non_quirk( thiskey = LiquidClasses[thiskey] if len(keypath) > 1: restkeys = keypath[1:] - if thiskey == "##EACHTIP##": + if thiskey == "##EACHNOZZLEMAP##": + for key in existing.keys(): + _do_edit_non_quirk(new_value, existing[key], restkeys) + elif thiskey == "##EACHTIPTYPE##": for key in existing.keys(): _do_edit_non_quirk(new_value, existing[key], restkeys) else: _do_edit_non_quirk(new_value, existing[thiskey], restkeys) else: # This was the last key - if thiskey == "##EACHTIP##": - for key in existing.keys(): - existing[key] = new_value.value - else: - existing[thiskey] = new_value.value + existing[thiskey] = new_value.value new_names = _MAP_KEY_TO_V2[mutable_config_key] _do_edit_non_quirk(new_mutable_value, base_dict, new_names) @@ -155,10 +154,12 @@ def _list_all_mutable_configs( return default_configurations -def _get_default_value_for(config: Dict[str, Any], keypath: List[str]) -> Any: +def _get_default_value_for( # noqa: C901 + config: Dict[str, Any], keypath: List[str] +) -> Any: def _do_get_default_value_for( - remaining_config: Dict[Any, Any], keypath: List[str] - ) -> Any: + remaining_config: Dict[Any, Any], keypath: List[Any] + ) -> None: first: Any = keypath[0] if first in [lc.name for lc in LiquidClasses]: first = LiquidClasses[first] @@ -168,6 +169,13 @@ def _do_get_default_value_for( tip_list = list(remaining_config.keys()) tip_list.sort(key=lambda o: o.value if isinstance(o, Enum) else o) return _do_get_default_value_for(remaining_config[tip_list[-1]], rest) + elif first == "##EACHNOZZLEMAP##": + map_list = list(remaining_config.keys()) + return _do_get_default_value_for(remaining_config[map_list[-1]], rest) + elif first == "##EACHTIPTYPE##": + for key in remaining_config.keys(): + if key == "default": + return _do_get_default_value_for(remaining_config[key], rest) else: return _do_get_default_value_for(remaining_config[first], rest) else: @@ -175,12 +183,7 @@ def _do_get_default_value_for( tip_list = list(remaining_config.keys()) tip_list.sort(key=lambda o: o.value if isinstance(o, Enum) else o) return remaining_config[tip_list[-1]] - elif first == "currentByTipCount": - # return the value for the most tips at a time - cbt = remaining_config[first] - return cbt[next(reversed(sorted(cbt.keys())))] - else: - return remaining_config[first] + return remaining_config[first] return _do_get_default_value_for(config, keypath) 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 a7b43663884..95aa35f8b4a 100644 --- a/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py +++ b/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py @@ -159,6 +159,33 @@ class PlungerHomingConfigurations(BaseModel): ) +class ValidNozzleMaps(BaseModel): + maps: Dict[str, List[str]] = Field( + ..., + description="Dictionary of predetermined nozzle maps for partial tip configurations.", + ) + + +class PressAndCamConfigurationValues(BaseModel): + speed: float = Field( + ..., + description="The speed to move the Z axis for each force pickup of a given tip configuration for a given tip type.", + ) + distance: float = Field( + ..., + description="The starting distance to begin a pick up tip from, based on tip configuration and tip type.", + ) + current: float = Field( + ..., + description="The current used by a given tip configuration by tip type.", + ) + versioned_tip_overlap_dictionary: Dict[str, Dict[str, float]] = Field( + ..., + description="Versioned default tip overlap dictionaries associated with this tip type by configuration.", + alias="tipOverlaps", + ) + + class PressFitPickUpTipConfiguration(BaseModel): presses: int = Field( ..., @@ -168,41 +195,33 @@ class PressFitPickUpTipConfiguration(BaseModel): ..., description="The increment to move the pipette down on each force tip pickup press", ) - distance_by_tip_count: Dict[int, float] = Field( - ..., - description="The starting distance to begin a pick up tip from, based on number of tips being picked up", - alias="distanceByTipCount", - ) - speed_by_tip_count: Dict[int, float] = Field( - ..., - description="The speed to move the Z axis for each force pickup, based on number of tips being picked up", - alias="speedByTipCount", - ) - current_by_tip_count: Dict[int, float] = Field( + configuration_by_nozzle_map: Dict[ + str, Dict[str, PressAndCamConfigurationValues] + ] = Field( ..., - description="A current dictionary look-up by partial tip configuration.", - alias="currentByTipCount", + description="The speed, distance, current and tip overlap configurations for a given pipette configuration. Double dictionary is keyed by Valid Nozzle Map Key and Tip Type.", + alias="configurationsByNozzleMap", ) class CamActionPickUpTipConfiguration(BaseModel): - distance: float = Field(..., description="How far to move the cams once engaged") - speed: float = Field(..., description="How fast to move the cams when engaged") prep_move_distance: float = Field( ..., description="How far to move the cams to engage the rack" ) prep_move_speed: float = Field( ..., description="How fast to move the cams when moving to the rack" ) - current_by_tip_count: Dict[int, float] = Field( - ..., - description="A current dictionary look-up by partial tip configuration.", - alias="currentByTipCount", - ) connect_tiprack_distance_mm: float = Field( description="The distance to move the head down to connect with the tiprack before clamping.", alias="connectTiprackDistanceMM", ) + configuration_by_nozzle_map: Dict[ + str, Dict[str, PressAndCamConfigurationValues] + ] = Field( + ..., + description="The speed, distance, current and overlap configurations for a given partial tip configuration by tip type.", + alias="configurationsByNozzleMap", + ) class PlungerEjectDropTipConfiguration(BaseModel): 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 e9d0122ac17..594e7738aea 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 @@ -65,11 +65,7 @@ def _build_pickup_tip_data( ) return PickUpTipConfigurations( pressFit=PressFitPickUpTipConfiguration( - speedByTipCount={}, - presses=presses, - increment=increment, - distanceByTipCount={}, - currentByTipCount={}, + presses=presses, increment=increment, configurationsByNozzleMap={} ) ) diff --git a/shared-data/python/tests/pipette/test_mutable_configurations.py b/shared-data/python/tests/pipette/test_mutable_configurations.py index ff5de00c3c1..db851a15042 100644 --- a/shared-data/python/tests/pipette/test_mutable_configurations.py +++ b/shared-data/python/tests/pipette/test_mutable_configurations.py @@ -81,9 +81,14 @@ def test_load_old_overrides_regression( override_configuration_path, "P20SV222021040709", ) - assert configs.pick_up_tip_configurations.press_fit.current_by_tip_count == { - 1: 0.15 - } + assert ( + configs.pick_up_tip_configurations.press_fit.configuration_by_nozzle_map[ + list( + configs.pick_up_tip_configurations.press_fit.configuration_by_nozzle_map.keys() + )[0] + ]["default"].current + == 0.15 + ) def test_list_mutable_configs_unknown_pipette_id( @@ -269,9 +274,16 @@ def test_load_with_overrides( if serial_number == TEST_SERIAL_NUMBER: dict_loaded_configs = loaded_base_configurations.dict(by_alias=True) - dict_loaded_configs["pickUpTipConfigurations"]["pressFit"][ - "speedByTipCount" - ] = {1: 5.0, 2: 5.0, 3: 5.0, 4: 5.0, 5: 5.0, 6: 5.0, 7: 5.0, 8: 5.0} + for map_key in dict_loaded_configs["pickUpTipConfigurations"]["pressFit"][ + "configurationsByNozzleMap" + ]: + for tip_key in dict_loaded_configs["pickUpTipConfigurations"]["pressFit"][ + "configurationsByNozzleMap" + ][map_key]: + dict_loaded_configs["pickUpTipConfigurations"]["pressFit"][ + "configurationsByNozzleMap" + ][map_key][tip_key]["speed"] = 5.0 + updated_configurations_dict = updated_configurations.dict(by_alias=True) assert set(dict_loaded_configs.pop("quirks")) == set( updated_configurations_dict.pop("quirks") diff --git a/shared-data/python/tests/pipette/test_validate_schema.py b/shared-data/python/tests/pipette/test_validate_schema.py index a7f6c6d0e06..3a851003c36 100644 --- a/shared-data/python/tests/pipette/test_validate_schema.py +++ b/shared-data/python/tests/pipette/test_validate_schema.py @@ -2,7 +2,10 @@ from opentrons_shared_data import get_shared_data_root from opentrons_shared_data.pipette.pipette_definition import PipetteConfigurations -from opentrons_shared_data.pipette.load_data import load_definition +from opentrons_shared_data.pipette.load_data import ( + load_definition, + load_valid_nozzle_maps, +) from opentrons_shared_data.pipette.pipette_load_name_conversions import ( convert_pipette_model, ) @@ -37,8 +40,49 @@ def test_check_all_models_are_valid() -> None: assert isinstance(loaded_model, PipetteConfigurations) -def test_pick_up_configs_tip_count_keys() -> None: - """Verify that speed, distance & current of pickUpTipConfigurations have same tip count keys.""" +def test_pick_up_configs_configuration_by_nozzle_map_keys() -> None: + """Verify that for every nozzle map the pickUpTipConfigurations have a valid configuration set.""" + paths_to_validate = ( + get_shared_data_root() / "pipette" / "definitions" / "2" / "general" + ) + _channel_model_str = { + "single_channel": "single", + "ninety_six_channel": "96", + "eight_channel": "multi", + } + assert os.listdir(paths_to_validate), "You have a path wrong" + for channel_dir in os.listdir(paths_to_validate): + for model_dir in os.listdir(paths_to_validate / channel_dir): + for version_file in os.listdir(paths_to_validate / channel_dir / model_dir): + version_list = version_file.split(".json")[0].split("_") + built_model: PipetteModel = PipetteModel( + f"{model_dir}_{_channel_model_str[channel_dir]}_v{version_list[0]}.{version_list[1]}" + ) + + model_version = convert_pipette_model(built_model) + loaded_model = load_definition( + model_version.pipette_type, + model_version.pipette_channels, + model_version.pipette_version, + ) + valid_nozzle_maps = load_valid_nozzle_maps( + model_version.pipette_type, + model_version.pipette_channels, + model_version.pipette_version, + ) + + pipette_maps = list( + loaded_model.pick_up_tip_configurations.press_fit.configuration_by_nozzle_map.keys() + ) + if loaded_model.pick_up_tip_configurations.cam_action is not None: + pipette_maps += list( + loaded_model.pick_up_tip_configurations.cam_action.configuration_by_nozzle_map.keys() + ) + assert pipette_maps == list(valid_nozzle_maps.maps.keys()) + + +def test_pick_up_configs_configuration_ordered_from_smallest_to_largest() -> None: + """Verify that ValidNozzleMaps and PickUpTipConfigurations are ordered from smallest nozzle configuration to largest, ensuring mutable config compliancy.""" paths_to_validate = ( get_shared_data_root() / "pipette" / "definitions" / "2" / "general" ) @@ -62,9 +106,24 @@ def test_pick_up_configs_tip_count_keys() -> None: model_version.pipette_channels, model_version.pipette_version, ) - pick_up_tip_configs = loaded_model.pick_up_tip_configurations.press_fit - assert ( - pick_up_tip_configs.distance_by_tip_count.keys() - == pick_up_tip_configs.speed_by_tip_count.keys() - == pick_up_tip_configs.current_by_tip_count.keys() + valid_nozzle_maps = load_valid_nozzle_maps( + model_version.pipette_type, + model_version.pipette_channels, + model_version.pipette_version, + ) + + map_keys = list(valid_nozzle_maps.maps.keys()) + for key in map_keys: + for i in range(map_keys.index(key)): + assert len(valid_nozzle_maps.maps[map_keys[i]]) <= len( + valid_nozzle_maps.maps[key] + ) + + pipette_maps = list( + loaded_model.pick_up_tip_configurations.press_fit.configuration_by_nozzle_map.keys() ) + for key in pipette_maps: + for i in range(pipette_maps.index(key)): + assert len(valid_nozzle_maps.maps[pipette_maps[i]]) <= len( + valid_nozzle_maps.maps[key] + ) diff --git a/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap b/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap index 57b519dba68..1c1d9d85f27 100644 --- a/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap +++ b/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap @@ -10455,60 +10455,395 @@ exports[`snapshot tests > makeContext 1`] = ` "pathTo3D": "pipette/definitions/2/geometry/ninety_six_channel/p1000/placeholder.gltf", "pickUpTipConfigurations": { "camAction": { - "connectTiprackDistanceMM": 7, - "currentByTipCount": { - "96": 1.5, + "configurationsByNozzleMap": { + "Full": { + "default": { + "current": 1.5, + "distance": 10, + "speed": 5.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + "t1000": { + "current": 1.5, + "distance": 10, + "speed": 5.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + }, + }, + }, + "t200": { + "current": 1.5, + "distance": 10, + "speed": 5.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + }, + }, + }, + "t50": { + "current": 1.5, + "distance": 10, + "speed": 5.5, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + }, }, - "distance": 10, + "connectTiprackDistanceMM": 7, "prep_move_distance": 9, "prep_move_speed": 10, - "speed": 5.5, }, "pressFit": { - "currentByTipCount": { - "1": 0.2, - "12": 0.19, - "16": 0.25, - "2": 0.25, - "24": 0.38, - "3": 0.3, - "4": 0.35, - "48": 0.75, - "5": 0.4, - "6": 0.45, - "7": 0.5, - "8": 0.55, - }, - "distanceByTipCount": { - "1": 13, - "12": 13, - "16": 13, - "2": 13, - "24": 13, - "3": 13, - "4": 13, - "48": 13, - "5": 13, - "6": 13, - "7": 13, - "8": 13, + "configurationsByNozzleMap": { + "Column1": { + "default": { + "current": 0.55, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + "t1000": { + "current": 0.55, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + }, + }, + }, + "t200": { + "current": 0.55, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + }, + }, + }, + "t50": { + "current": 0.55, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + }, + "Column12": { + "default": { + "current": 0.55, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + "t1000": { + "current": 0.55, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + }, + }, + }, + "t200": { + "current": 0.55, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + }, + }, + }, + "t50": { + "current": 0.55, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + }, + "SingleA1": { + "default": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + "t1000": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + }, + }, + }, + "t200": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + }, + }, + }, + "t50": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + }, + "SingleA12": { + "default": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + "t1000": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + }, + }, + }, + "t200": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + }, + }, + }, + "t50": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + }, + "SingleH1": { + "default": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + "t1000": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + }, + }, + }, + "t200": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + }, + }, + }, + "t50": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + }, + "SingleH12": { + "default": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + "t1000": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + }, + }, + }, + "t200": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + }, + }, + }, + "t50": { + "current": 0.2, + "distance": 13, + "speed": 10, + "tipOverlaps": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, + }, + }, }, "increment": 0, "presses": 1, - "speedByTipCount": { - "1": 10, - "12": 10, - "16": 10, - "2": 10, - "24": 10, - "3": 10, - "4": 10, - "48": 10, - "5": 10, - "6": 10, - "7": 10, - "8": 10, - }, }, }, "pipetteBoundingBoxOffsets": { @@ -10543,6 +10878,140 @@ exports[`snapshot tests > makeContext 1`] = ` "shaftDiameter": 9, "shaftULperMM": 63.617, "tipPresenceCheckDistanceMM": 8, + "validNozzleMaps": { + "maps": { + "Column1": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "Column12": [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + ], + "Full": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12", + "B1", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "B10", + "B11", + "B12", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "C10", + "C11", + "C12", + "D1", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "D10", + "D11", + "D12", + "E1", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "E10", + "E11", + "E12", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "G1", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "G10", + "G11", + "G12", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9", + "H10", + "H11", + "H12", + ], + "SingleA1": [ + "A1", + ], + "SingleA12": [ + "A12", + ], + "SingleH1": [ + "H1", + ], + "SingleH12": [ + "H12", + ], + }, + }, }, "tiprackDefURI": [ "fixture/fixture_flex_96_tiprack_1000ul/1", @@ -11946,38 +12415,154 @@ exports[`snapshot tests > makeContext 1`] = ` "pathTo3D": "pipette/definitions/2/geometry/eight_channel/p10/placeholder.gltf", "pickUpTipConfigurations": { "pressFit": { - "currentByTipCount": { - "1": 0.1, - "2": 0.1, - "3": 0.15, - "4": 0.2, - "5": 0.25, - "6": 0.3, - "7": 0.35, - "8": 0.4, - }, - "distanceByTipCount": { - "1": 10, - "2": 10, - "3": 10, - "4": 10, - "5": 10, - "6": 10, - "7": 10, - "8": 10, + "configurationsByNozzleMap": { + "Full": { + "default": { + "current": 0.4, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, + "H1toB1": { + "default": { + "current": 0.35, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, + "H1toC1": { + "default": { + "current": 0.3, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, + "H1toD1": { + "default": { + "current": 0.25, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, + "H1toE1": { + "default": { + "current": 0.2, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, + "H1toF1": { + "default": { + "current": 0.15, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, + "H1toG1": { + "default": { + "current": 0.1, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, + "SingleA1": { + "default": { + "current": 0.1, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, + "SingleH1": { + "default": { + "current": 0.1, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, }, "increment": 1, "presses": 3, - "speedByTipCount": { - "1": 30, - "2": 30, - "3": 30, - "4": 30, - "5": 30, - "6": 30, - "7": 30, - "8": 30, - }, }, }, "pipetteBoundingBoxOffsets": { @@ -12013,6 +12598,65 @@ exports[`snapshot tests > makeContext 1`] = ` ], "shaftDiameter": 1, "shaftULperMM": 0.785, + "validNozzleMaps": { + "maps": { + "Full": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "H1toB1": [ + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "H1toC1": [ + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "H1toD1": [ + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "H1toE1": [ + "E1", + "F1", + "G1", + "H1", + ], + "H1toF1": [ + "F1", + "G1", + "H1", + ], + "H1toG1": [ + "G1", + "H1", + ], + "SingleA1": [ + "A1", + ], + "SingleH1": [ + "H1", + ], + }, + }, }, "tiprackDefURI": [ "fixture/fixture_tiprack_10_ul/1", @@ -13322,17 +13966,26 @@ exports[`snapshot tests > makeContext 1`] = ` "pathTo3D": "pipette/definitions/2/geometry/single_channel/p10/placeholder.gltf", "pickUpTipConfigurations": { "pressFit": { - "currentByTipCount": { - "1": 0.1, - }, - "distanceByTipCount": { - "1": 10, + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "current": 0.1, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, + }, + }, }, "increment": 1, "presses": 3, - "speedByTipCount": { - "1": 30, - }, }, }, "pipetteBoundingBoxOffsets": { @@ -13368,6 +14021,13 @@ exports[`snapshot tests > makeContext 1`] = ` ], "shaftDiameter": 1, "shaftULperMM": 0.785, + "validNozzleMaps": { + "maps": { + "SingleA1": [ + "A1", + ], + }, + }, }, "tiprackDefURI": [ "fixture/fixture_tiprack_10_ul/1", @@ -14768,38 +15428,145 @@ exports[`snapshot tests > makeContext 1`] = ` "pathTo3D": "pipette/definitions/2/geometry/eight_channel/p300/placeholder.gltf", "pickUpTipConfigurations": { "pressFit": { - "currentByTipCount": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6, - }, - "distanceByTipCount": { - "1": 10, - "2": 10, - "3": 10, - "4": 10, - "5": 10, - "6": 10, - "7": 10, - "8": 10, + "configurationsByNozzleMap": { + "Full": { + "default": { + "current": 0.6, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, + "H1toB1": { + "default": { + "current": 0.53, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, + "H1toC1": { + "default": { + "current": 0.45, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, + "H1toD1": { + "default": { + "current": 0.38, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, + "H1toE1": { + "default": { + "current": 0.3, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, + "H1toF1": { + "default": { + "current": 0.23, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, + "H1toG1": { + "default": { + "current": 0.15, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, + "SingleA1": { + "default": { + "current": 0.1, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, + "SingleH1": { + "default": { + "current": 0.1, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, }, "increment": 1, "presses": 3, - "speedByTipCount": { - "1": 30, - "2": 30, - "3": 30, - "4": 30, - "5": 30, - "6": 30, - "7": 30, - "8": 30, - }, }, }, "pipetteBoundingBoxOffsets": { @@ -14835,6 +15602,65 @@ exports[`snapshot tests > makeContext 1`] = ` ], "shaftDiameter": 5, "shaftULperMM": 19.635, + "validNozzleMaps": { + "maps": { + "Full": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "H1toB1": [ + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "H1toC1": [ + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "H1toD1": [ + "D1", + "E1", + "F1", + "G1", + "H1", + ], + "H1toE1": [ + "E1", + "F1", + "G1", + "H1", + ], + "H1toF1": [ + "F1", + "G1", + "H1", + ], + "H1toG1": [ + "G1", + "H1", + ], + "SingleA1": [ + "A1", + ], + "SingleH1": [ + "H1", + ], + }, + }, }, "tiprackDefURI": [ "fixture/fixture_tiprack_300_ul/1", @@ -16244,17 +17070,25 @@ exports[`snapshot tests > makeContext 1`] = ` "pathTo3D": "pipette/definitions/2/geometry/single_channel/p300/placeholder.gltf", "pickUpTipConfigurations": { "pressFit": { - "currentByTipCount": { - "1": 0.1, - }, - "distanceByTipCount": { - "1": 10, + "configurationsByNozzleMap": { + "SingleA1": { + "default": { + "current": 0.1, + "distance": 10, + "speed": 30, + "tipOverlaps": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, + }, + }, }, "increment": 1, "presses": 3, - "speedByTipCount": { - "1": 30, - }, }, }, "pipetteBoundingBoxOffsets": { @@ -16290,6 +17124,13 @@ exports[`snapshot tests > makeContext 1`] = ` ], "shaftDiameter": 5, "shaftULperMM": 19.635, + "validNozzleMaps": { + "maps": { + "SingleA1": [ + "A1", + ], + }, + }, }, "tiprackDefURI": [ "fixture/fixture_tiprack_300_ul/1",