Source code for mxcubecore.HardwareObjects.FlexHCDMaintenance

"""
FLEX HCD maintenance mockup.
"""

import ast

from mxcubecore import HardwareRepository as HWR
from mxcubecore.BaseHardwareObjects import HardwareObject

TOOL_FLANGE, TOOL_UNIPUCK, TOOL_SPINE, TOOL_PLATE, TOOL_LASER, TOOL_DOUBLE_GRIPPER = (
    0,
    1,
    2,
    3,
    4,
    5,
)

TOOL_TO_STR = {
    "Flange": TOOL_FLANGE,
    "Unipuck": TOOL_UNIPUCK,
    "Rotat": TOOL_SPINE,
    "Plate": TOOL_PLATE,
    "Laser": TOOL_LASER,
    "Double": TOOL_DOUBLE_GRIPPER,
}


[docs]class FlexHCDMaintenance(HardwareObject): __TYPE__ = "FLEX_HCD" NO_OF_LIDS = 3 """ """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
[docs] def init(self): self._sc = HWR.beamline.sample_changer
def get_current_tool(self): return self._sc.get_gripper() def _do_trash(self): """ Trash sample :returns: Task id :rtype: int """ return self._sc._do_trash() def _do_abort(self): """ Abort current command :returns: None :rtype: None """ return self._sc._do_abort() def _do_home(self): """ Abort current command :returns: None :rtype: None """ self._sc._do_abort() return self._sc.home() def _do_reset(self): """ Reset sample changer :returns: None :rtype: None """ self._sc._do_reset() def _do_defreeze_gripper(self): """ :returns: None :rtype: None """ self._sc.defreeze() def _do_change_gripper(self, args): """ :returns: None :rtype: None """ self._sc.change_gripper(gripper=args) self.emit("gripperChanged") def _do_reset_sample_number(self): """ :returns: None :rtype: None """ self._sc.reset_loaded_sample() def _update_global_state(self): state_dict, cmd_state, message = self.get_global_state() self.emit("globalStateChanged", (state_dict, cmd_state, message)) def get_global_state(self): """ """ state = self._sc._read_state() running = state in ("RUNNING",) state_dict = {"running": running, "state": state} cmd_state = { "home": True, "defreeze": True, "reset_sample_number": True, "change_gripper": True, "abort": True, "trash": True, } message = "" return state_dict, cmd_state, message
[docs] def get_cmd_info(self): """return information about existing commands for this object the information is organized as a list with each element contains [ cmd_name, display_name, category ] """ """ [cmd_id, cmd_display_name, nb_args, cmd_category, description ] """ cmd_list = [ [ "Actions", [ ["home", "Home", "Actions", None], ["defreeze", "Defreeze gripper", "Actions", None], ["reset_sample_number", "Reset sample number", "Actions", None], ["abort", "Abort", "Actions", None], ["trash", "Trash sample", "Actions", None], ], ], ] exclude_command_list = ast.literal_eval( self.get_property("exclude_commands", "[]") ) new_command_list = [] for command in cmd_list[0][1]: if command[0] not in exclude_command_list: new_command_list.append(command) cmd_list[0][1] = new_command_list try: grippers = self._sc.get_available_grippers() except Exception: self.log.exception("") else: gripper_cmd_list = [] for gripper in grippers: arg = list(self._sc.gripper_types.keys())[ list(self._sc.gripper_types.values()).index(gripper) ] gripper_cmd_list.append( [ "change_gripper", gripper.title().replace("_", " "), "Gripper", arg, ] ) grippers_cmd = [ "Gripper: %s" % self._sc.get_gripper().title().replace("_", " "), gripper_cmd_list, ] cmd_list.append(grippers_cmd) return cmd_list
def send_command(self, cmd_name, args=None): if cmd_name in ["home"]: self._do_home() if cmd_name in ["defreeze"]: self._do_defreeze_gripper() if cmd_name in ["reset_sample_number"]: self._do_reset_sample_number() if cmd_name == "change_gripper": self._do_change_gripper(int(args)) if cmd_name == "trash": self._do_trash() if cmd_name == "abort": self._do_abort() return True