|
61 | 61 | from opentrons.protocol_api._liquid_properties import TransferProperties |
62 | 62 |
|
63 | 63 | _DISPENSE_VOLUME_VALIDATION_ADDED_IN = APIVersion(2, 17) |
| 64 | +_RESIN_TIP_DEFAULT_VOLUME = 400 |
| 65 | +_RESIN_TIP_DEFAULT_FLOW_RATE = 10.0 |
64 | 66 |
|
65 | 67 |
|
66 | 68 | class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]): |
@@ -710,6 +712,113 @@ def move_to( |
710 | 712 | location=location, mount=self.get_mount() |
711 | 713 | ) |
712 | 714 |
|
| 715 | + def resin_tip_seal( |
| 716 | + self, location: Location, well_core: WellCore, in_place: Optional[bool] = False |
| 717 | + ) -> None: |
| 718 | + labware_id = well_core.labware_id |
| 719 | + well_name = well_core.get_name() |
| 720 | + well_location = ( |
| 721 | + self._engine_client.state.geometry.get_relative_pick_up_tip_well_location( |
| 722 | + labware_id=labware_id, |
| 723 | + well_name=well_name, |
| 724 | + absolute_point=location.point, |
| 725 | + ) |
| 726 | + ) |
| 727 | + |
| 728 | + self._engine_client.execute_command( |
| 729 | + cmd.EvotipSealPipetteParams( |
| 730 | + pipetteId=self._pipette_id, |
| 731 | + labwareId=labware_id, |
| 732 | + wellName=well_name, |
| 733 | + wellLocation=well_location, |
| 734 | + ) |
| 735 | + ) |
| 736 | + |
| 737 | + def resin_tip_unseal(self, location: Location, well_core: WellCore) -> None: |
| 738 | + well_name = well_core.get_name() |
| 739 | + labware_id = well_core.labware_id |
| 740 | + |
| 741 | + if location is not None: |
| 742 | + relative_well_location = ( |
| 743 | + self._engine_client.state.geometry.get_relative_well_location( |
| 744 | + labware_id=labware_id, |
| 745 | + well_name=well_name, |
| 746 | + absolute_point=location.point, |
| 747 | + ) |
| 748 | + ) |
| 749 | + |
| 750 | + well_location = DropTipWellLocation( |
| 751 | + origin=DropTipWellOrigin(relative_well_location.origin.value), |
| 752 | + offset=relative_well_location.offset, |
| 753 | + ) |
| 754 | + else: |
| 755 | + well_location = DropTipWellLocation() |
| 756 | + |
| 757 | + pipette_movement_conflict.check_safe_for_pipette_movement( |
| 758 | + engine_state=self._engine_client.state, |
| 759 | + pipette_id=self._pipette_id, |
| 760 | + labware_id=labware_id, |
| 761 | + well_name=well_name, |
| 762 | + well_location=well_location, |
| 763 | + ) |
| 764 | + self._engine_client.execute_command( |
| 765 | + cmd.EvotipUnsealPipetteParams( |
| 766 | + pipetteId=self._pipette_id, |
| 767 | + labwareId=labware_id, |
| 768 | + wellName=well_name, |
| 769 | + wellLocation=well_location, |
| 770 | + ) |
| 771 | + ) |
| 772 | + |
| 773 | + self._protocol_core.set_last_location(location=location, mount=self.get_mount()) |
| 774 | + |
| 775 | + def resin_tip_dispense( |
| 776 | + self, |
| 777 | + location: Location, |
| 778 | + well_core: WellCore, |
| 779 | + volume: Optional[float] = None, |
| 780 | + flow_rate: Optional[float] = None, |
| 781 | + ) -> None: |
| 782 | + """ |
| 783 | + Args: |
| 784 | + volume: The volume of liquid to dispense, in microliters. Defaults to 400uL. |
| 785 | + location: The exact location to dispense to. |
| 786 | + well_core: The well to dispense to, if applicable. |
| 787 | + flow_rate: The flow rate in µL/s to dispense at. Defaults to 10.0uL/S. |
| 788 | + """ |
| 789 | + if isinstance(location, (TrashBin, WasteChute)): |
| 790 | + raise ValueError("Trash Bin and Waste Chute have no Wells.") |
| 791 | + well_name = well_core.get_name() |
| 792 | + labware_id = well_core.labware_id |
| 793 | + if volume is None: |
| 794 | + volume = _RESIN_TIP_DEFAULT_VOLUME |
| 795 | + if flow_rate is None: |
| 796 | + flow_rate = _RESIN_TIP_DEFAULT_FLOW_RATE |
| 797 | + |
| 798 | + well_location = self._engine_client.state.geometry.get_relative_liquid_handling_well_location( |
| 799 | + labware_id=labware_id, |
| 800 | + well_name=well_name, |
| 801 | + absolute_point=location.point, |
| 802 | + is_meniscus=None, |
| 803 | + ) |
| 804 | + pipette_movement_conflict.check_safe_for_pipette_movement( |
| 805 | + engine_state=self._engine_client.state, |
| 806 | + pipette_id=self._pipette_id, |
| 807 | + labware_id=labware_id, |
| 808 | + well_name=well_name, |
| 809 | + well_location=well_location, |
| 810 | + ) |
| 811 | + self._engine_client.execute_command( |
| 812 | + cmd.EvotipDispenseParams( |
| 813 | + pipetteId=self._pipette_id, |
| 814 | + labwareId=labware_id, |
| 815 | + wellName=well_name, |
| 816 | + wellLocation=well_location, |
| 817 | + volume=volume, |
| 818 | + flowRate=flow_rate, |
| 819 | + ) |
| 820 | + ) |
| 821 | + |
713 | 822 | def get_mount(self) -> Mount: |
714 | 823 | """Get the mount the pipette is attached to.""" |
715 | 824 | return self._engine_client.state.pipettes.get( |
|
0 commit comments