diff --git a/api/src/opentrons/config/defaults_ot3.py b/api/src/opentrons/config/defaults_ot3.py index b09235ce35b..e2484c64b23 100644 --- a/api/src/opentrons/config/defaults_ot3.py +++ b/api/src/opentrons/config/defaults_ot3.py @@ -29,6 +29,7 @@ sensor_threshold_pascals=15, output_option=OutputOptions.sync_buffer_to_csv, aspirate_while_sensing=False, + z_overlap_between_passes_mm=0.1, data_files={InstrumentProbeType.PRIMARY: "/data/pressure_sensor_data.csv"}, ) @@ -343,6 +344,9 @@ def _build_default_liquid_probe( aspirate_while_sensing=from_conf.get( "aspirate_while_sensing", default.aspirate_while_sensing ), + z_overlap_between_passes_mm=from_conf.get( + "z_overlap_between_passes_mm", default.z_overlap_between_passes_mm + ), data_files=data_files, ) diff --git a/api/src/opentrons/config/types.py b/api/src/opentrons/config/types.py index b7306156c37..8c7ffd74d6f 100644 --- a/api/src/opentrons/config/types.py +++ b/api/src/opentrons/config/types.py @@ -137,6 +137,7 @@ class LiquidProbeSettings: sensor_threshold_pascals: float output_option: OutputOptions aspirate_while_sensing: bool + z_overlap_between_passes_mm: float data_files: Optional[Dict[InstrumentProbeType, str]] diff --git a/api/src/opentrons/hardware_control/ot3api.py b/api/src/opentrons/hardware_control/ot3api.py index a0a760a83d8..a79d4e16317 100644 --- a/api/src/opentrons/hardware_control/ot3api.py +++ b/api/src/opentrons/hardware_control/ot3api.py @@ -2707,12 +2707,12 @@ async def liquid_probe( instrument.backlash_distance + sensor_baseline_plunger_move_mm ) # height where probe action will begin - # TODO: (sigler) add this to pipette's liquid def (per tip) - z_overlap_between_passes_mm = 0.1 sensor_baseline_z_move_mm = OT3API.liquid_probe_non_responsive_z_distance( probe_settings.mount_speed ) - z_offset_per_pass = sensor_baseline_z_move_mm + z_overlap_between_passes_mm + z_offset_per_pass = ( + sensor_baseline_z_move_mm + probe_settings.z_overlap_between_passes_mm + ) # height that is considered safe to reset the plunger without disturbing liquid # this usually needs to at least 1-2mm from liquid, to avoid splashes from air diff --git a/api/tests/opentrons/config/ot3_settings.py b/api/tests/opentrons/config/ot3_settings.py index 4ef58d2ddbe..1cc1c6d08da 100644 --- a/api/tests/opentrons/config/ot3_settings.py +++ b/api/tests/opentrons/config/ot3_settings.py @@ -124,6 +124,7 @@ "sensor_threshold_pascals": 17, "output_option": OutputOptions.stream_to_csv, "aspirate_while_sensing": False, + "z_overlap_between_passes_mm": 0.1, "data_files": {"PRIMARY": "/data/pressure_sensor_data.csv"}, }, "calibration": { diff --git a/api/tests/opentrons/hardware_control/backends/test_ot3_controller.py b/api/tests/opentrons/hardware_control/backends/test_ot3_controller.py index fa57c4347ff..7d1208427c2 100644 --- a/api/tests/opentrons/hardware_control/backends/test_ot3_controller.py +++ b/api/tests/opentrons/hardware_control/backends/test_ot3_controller.py @@ -182,6 +182,7 @@ def fake_liquid_settings() -> LiquidProbeSettings: sensor_threshold_pascals=15, output_option=OutputOptions.can_bus_only, aspirate_while_sensing=False, + z_overlap_between_passes_mm=0.1, data_files={InstrumentProbeType.PRIMARY: "fake_file_name"}, ) diff --git a/api/tests/opentrons/hardware_control/test_ot3_api.py b/api/tests/opentrons/hardware_control/test_ot3_api.py index 5e79f8ed149..7d95e3c6fcd 100644 --- a/api/tests/opentrons/hardware_control/test_ot3_api.py +++ b/api/tests/opentrons/hardware_control/test_ot3_api.py @@ -122,6 +122,7 @@ def fake_liquid_settings() -> LiquidProbeSettings: sensor_threshold_pascals=15, output_option=OutputOptions.can_bus_only, aspirate_while_sensing=False, + z_overlap_between_passes_mm=0.1, data_files={InstrumentProbeType.PRIMARY: "fake_file_name"}, ) @@ -825,6 +826,7 @@ async def test_liquid_probe( sensor_threshold_pascals=15, output_option=OutputOptions.can_bus_only, aspirate_while_sensing=True, + z_overlap_between_passes_mm=0.1, data_files={InstrumentProbeType.PRIMARY: "fake_file_name"}, ) fake_max_z_dist = 10.0 @@ -905,7 +907,7 @@ async def test_liquid_probe_plunger_moves( mount_speed ) - probe_pass_overlap = 0.1 + probe_pass_overlap = config.z_overlap_between_passes_mm probe_pass_z_offset_mm = non_responsive_z_mm + probe_pass_overlap probe_safe_reset_mm = max(2.0, probe_pass_z_offset_mm) @@ -999,7 +1001,7 @@ async def test_liquid_probe_mount_moves( mount_speed ) - probe_pass_overlap = 0.1 + probe_pass_overlap = config.z_overlap_between_passes_mm probe_pass_z_offset_mm = non_responsive_z_mm + probe_pass_overlap probe_safe_reset_mm = max(2.0, probe_pass_z_offset_mm) @@ -1068,6 +1070,7 @@ async def test_multi_liquid_probe( sensor_threshold_pascals=15, output_option=OutputOptions.can_bus_only, aspirate_while_sensing=True, + z_overlap_between_passes_mm=0.1, data_files={InstrumentProbeType.PRIMARY: "fake_file_name"}, ) fake_max_z_dist = 10.0 @@ -1140,6 +1143,7 @@ async def _fake_pos_update_and_raise( sensor_threshold_pascals=15, output_option=OutputOptions.can_bus_only, aspirate_while_sensing=True, + z_overlap_between_passes_mm=0.1, data_files={InstrumentProbeType.PRIMARY: "fake_file_name"}, ) # with a mount speed of 5, pass overlap of 0.5 and a 0.2s delay on z diff --git a/hardware-testing/hardware_testing/gravimetric/config.py b/hardware-testing/hardware_testing/gravimetric/config.py index 53663fdd614..a47de9edc2d 100644 --- a/hardware-testing/hardware_testing/gravimetric/config.py +++ b/hardware-testing/hardware_testing/gravimetric/config.py @@ -172,6 +172,7 @@ def _get_liquid_probe_settings( sensor_threshold_pascals=lqid_cfg["sensor_threshold_pascals"], output_option=OutputOptions.sync_only, aspirate_while_sensing=False, + z_overlap_between_passes_mm=0.1, data_files={InstrumentProbeType.PRIMARY: "/data/testing_data/pressure.csv"}, ) diff --git a/hardware-testing/hardware_testing/liquid_sense/execute.py b/hardware-testing/hardware_testing/liquid_sense/execute.py index 15e94325a91..a4c0b2ccd98 100644 --- a/hardware-testing/hardware_testing/liquid_sense/execute.py +++ b/hardware-testing/hardware_testing/liquid_sense/execute.py @@ -447,6 +447,7 @@ def _run_trial( sensor_threshold_pascals=lqid_cfg["sensor_threshold_pascals"], output_option=OutputOptions.sync_buffer_to_csv, aspirate_while_sensing=run_args.aspirate, + z_overlap_between_passes_mm=0.1, data_files=data_files, ) diff --git a/hardware-testing/hardware_testing/production_qc/pipette_assembly_qc_ot3/__main__.py b/hardware-testing/hardware_testing/production_qc/pipette_assembly_qc_ot3/__main__.py index b6fd22b73e2..7fde031aa91 100644 --- a/hardware-testing/hardware_testing/production_qc/pipette_assembly_qc_ot3/__main__.py +++ b/hardware-testing/hardware_testing/production_qc/pipette_assembly_qc_ot3/__main__.py @@ -1380,6 +1380,7 @@ async def _test_liquid_probe( sensor_threshold_pascals=probe_cfg.sensor_threshold_pascals, output_option=OutputOptions.can_bus_only, # FIXME: remove aspirate_while_sensing=False, + z_overlap_between_passes_mm=0.1, data_files=None, ) end_z = await api.liquid_probe(