|
48 | 48 | from opentrons.protocol_api._liquid import LiquidClass
|
49 | 49 |
|
50 | 50 | _DISPENSE_VOLUME_VALIDATION_ADDED_IN = APIVersion(2, 17)
|
| 51 | +_RESIN_TIP_DEFAULT_VOLUME = 400 |
| 52 | +_RESIN_TIP_DEFAULT_FLOW_RATE = 10.0 |
51 | 53 |
|
52 | 54 |
|
53 | 55 | class InstrumentCore(AbstractInstrument[WellCore]):
|
@@ -678,6 +680,113 @@ def move_to(
|
678 | 680 | location=location, mount=self.get_mount()
|
679 | 681 | )
|
680 | 682 |
|
| 683 | + def resin_tip_seal( |
| 684 | + self, location: Location, well_core: WellCore, in_place: Optional[bool] = False |
| 685 | + ) -> None: |
| 686 | + labware_id = well_core.labware_id |
| 687 | + well_name = well_core.get_name() |
| 688 | + well_location = ( |
| 689 | + self._engine_client.state.geometry.get_relative_pick_up_tip_well_location( |
| 690 | + labware_id=labware_id, |
| 691 | + well_name=well_name, |
| 692 | + absolute_point=location.point, |
| 693 | + ) |
| 694 | + ) |
| 695 | + |
| 696 | + self._engine_client.execute_command( |
| 697 | + cmd.EvotipSealPipetteParams( |
| 698 | + pipetteId=self._pipette_id, |
| 699 | + labwareId=labware_id, |
| 700 | + wellName=well_name, |
| 701 | + wellLocation=well_location, |
| 702 | + ) |
| 703 | + ) |
| 704 | + |
| 705 | + def resin_tip_unseal(self, location: Location, well_core: WellCore) -> None: |
| 706 | + well_name = well_core.get_name() |
| 707 | + labware_id = well_core.labware_id |
| 708 | + |
| 709 | + if location is not None: |
| 710 | + relative_well_location = ( |
| 711 | + self._engine_client.state.geometry.get_relative_well_location( |
| 712 | + labware_id=labware_id, |
| 713 | + well_name=well_name, |
| 714 | + absolute_point=location.point, |
| 715 | + ) |
| 716 | + ) |
| 717 | + |
| 718 | + well_location = DropTipWellLocation( |
| 719 | + origin=DropTipWellOrigin(relative_well_location.origin.value), |
| 720 | + offset=relative_well_location.offset, |
| 721 | + ) |
| 722 | + else: |
| 723 | + well_location = DropTipWellLocation() |
| 724 | + |
| 725 | + pipette_movement_conflict.check_safe_for_pipette_movement( |
| 726 | + engine_state=self._engine_client.state, |
| 727 | + pipette_id=self._pipette_id, |
| 728 | + labware_id=labware_id, |
| 729 | + well_name=well_name, |
| 730 | + well_location=well_location, |
| 731 | + ) |
| 732 | + self._engine_client.execute_command( |
| 733 | + cmd.EvotipUnsealPipetteParams( |
| 734 | + pipetteId=self._pipette_id, |
| 735 | + labwareId=labware_id, |
| 736 | + wellName=well_name, |
| 737 | + wellLocation=well_location, |
| 738 | + ) |
| 739 | + ) |
| 740 | + |
| 741 | + self._protocol_core.set_last_location(location=location, mount=self.get_mount()) |
| 742 | + |
| 743 | + def resin_tip_dispense( |
| 744 | + self, |
| 745 | + location: Location, |
| 746 | + well_core: WellCore, |
| 747 | + volume: Optional[float] = None, |
| 748 | + flow_rate: Optional[float] = None, |
| 749 | + ) -> None: |
| 750 | + """ |
| 751 | + Args: |
| 752 | + volume: The volume of liquid to dispense, in microliters. Defaults to 400uL. |
| 753 | + location: The exact location to dispense to. |
| 754 | + well_core: The well to dispense to, if applicable. |
| 755 | + flow_rate: The flow rate in µL/s to dispense at. Defaults to 10.0uL/S. |
| 756 | + """ |
| 757 | + if isinstance(location, (TrashBin, WasteChute)): |
| 758 | + raise ValueError("Trash Bin and Waste Chute have no Wells.") |
| 759 | + well_name = well_core.get_name() |
| 760 | + labware_id = well_core.labware_id |
| 761 | + if volume is None: |
| 762 | + volume = _RESIN_TIP_DEFAULT_VOLUME |
| 763 | + if flow_rate is None: |
| 764 | + flow_rate = _RESIN_TIP_DEFAULT_FLOW_RATE |
| 765 | + |
| 766 | + well_location = self._engine_client.state.geometry.get_relative_liquid_handling_well_location( |
| 767 | + labware_id=labware_id, |
| 768 | + well_name=well_name, |
| 769 | + absolute_point=location.point, |
| 770 | + is_meniscus=None, |
| 771 | + ) |
| 772 | + pipette_movement_conflict.check_safe_for_pipette_movement( |
| 773 | + engine_state=self._engine_client.state, |
| 774 | + pipette_id=self._pipette_id, |
| 775 | + labware_id=labware_id, |
| 776 | + well_name=well_name, |
| 777 | + well_location=well_location, |
| 778 | + ) |
| 779 | + self._engine_client.execute_command( |
| 780 | + cmd.EvotipDispenseParams( |
| 781 | + pipetteId=self._pipette_id, |
| 782 | + labwareId=labware_id, |
| 783 | + wellName=well_name, |
| 784 | + wellLocation=well_location, |
| 785 | + volume=volume, |
| 786 | + flowRate=flow_rate, |
| 787 | + ) |
| 788 | + ) |
| 789 | + |
681 | 790 | def get_mount(self) -> Mount:
|
682 | 791 | """Get the mount the pipette is attached to."""
|
683 | 792 | return self._engine_client.state.pipettes.get(
|
|
0 commit comments