Skip to content

Commit f37ad5d

Browse files
committed
configuring for volume simulates
1 parent 3d6db75 commit f37ad5d

File tree

1 file changed

+14
-6
lines changed
  • hardware-testing/hardware_testing/gravimetric

1 file changed

+14
-6
lines changed

hardware-testing/hardware_testing/gravimetric/execute.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,9 @@ def _run_trial(
311311
lc_name = SupportedLiquid.from_string(trial.cfg.liquid).name_with_dilution(
312312
trial.cfg.dilution
313313
)
314-
liquid_class_root = trial.ctx.define_liquid_class(lc_name.lower().replace("-", "_"))
314+
liquid_class_root = trial.ctx.define_liquid_class(
315+
lc_name.lower().replace("-", "_")
316+
)
315317
pip_load_name = (
316318
f"flex_{trial.pipette.channels}channel_{int(trial.pipette.max_volume)}"
317319
)
@@ -402,19 +404,22 @@ def _record_measurement_and_store(m_type: MeasurementType) -> MeasurementData:
402404
# so for now we are still using the custom liquid-height code here, and
403405
# tell the API's liquid-class to move the correct submerge depth (relative to well-bottom)
404406
def _calculate_meniscus_relative_offsets(is_aspirate: bool) -> None:
407+
_attr_name = "aspirate" if is_aspirate else "dispense"
408+
_asp_or_disp = getattr(liquid_class, _attr_name)
409+
_retract_mm = max(
410+
0.0, _asp_or_disp.submerge.offset.z, _asp_or_disp.retract.offset.z
411+
)
405412
approach, submerge, retract = _get_approach_submerge_retract_heights(
406413
trial.well,
407414
trial.liquid_tracker,
408-
submerge_mm=-1.5, # FIXME: use variable
409-
retract_mm=3.0, # FIXME: use variable
415+
submerge_mm=-1.5, # NOTE: this will continue to be set here in script until LLD is available
416+
retract_mm=_retract_mm, # FIXME: use value from liquid-class definition
410417
mix=None,
411418
aspirate=trial.volume if is_aspirate else None,
412419
dispense=trial.volume if not is_aspirate else None,
413420
blank=trial.blank,
414421
channel_count=trial.channel_count,
415422
)
416-
_attr_name = "aspirate" if is_aspirate else "dispense"
417-
_asp_or_disp = getattr(liquid_class, _attr_name)
418423
# NOTE: setting all position references to BOTTOM
419424
_asp_or_disp.submerge.position_reference = PositionReference.WELL_BOTTOM
420425
_asp_or_disp.position_reference = PositionReference.WELL_BOTTOM
@@ -445,16 +450,19 @@ def _calculate_meniscus_relative_offsets(is_aspirate: bool) -> None:
445450
else:
446451
# FIXME: this should happen inside the `transfer_liquid` command
447452
# so delete this `configure` call once that is added
453+
# NOTE: required to remove air-gap before calling configure-for-volume
454+
trial.pipette.dispense(trial.pipette.current_volume, push_out=0)
455+
trial.pipette.prepare_to_aspirate()
448456
if trial.mode == "default":
449457
trial.pipette.configure_for_volume(volume=trial.pipette.max_volume)
450458
elif trial.mode == "lowVolumeDefault":
451459
assert trial.pipette.max_volume == 50
452460
trial.pipette.configure_for_volume(volume=trial.pipette.min_volume)
453461
else:
454462
trial.pipette.configure_for_volume(volume=trial.volume)
463+
_calculate_meniscus_relative_offsets(is_aspirate=True)
455464
# FIXME: This assumes whatever is in the pipette from last trial is air (not liquid),
456465
# and so this would break any sort of multi-dispense testing
457-
_calculate_meniscus_relative_offsets(is_aspirate=True)
458466
assumed_air_gap = trial.pipette.current_volume
459467
tip_contents = trial.pipette._core.aspirate_liquid_class(
460468
volume=trial.volume,

0 commit comments

Comments
 (0)