def __init__(self, *args): BaseComponents.BlissWidget.__init__(self, *args) # Framwork-2 properties self.addProperty("beamline_setup", "string", "/beamline-setup") self.addProperty("queue_model", "string", "/queue-model") #Data atributes self.shape_history = None self.tree_brick = None #self.ispyb_logged_in = False - ESRF default behaviour is to disabled the box until logged in self.ispyb_logged_in = True self.diffractometer_hwobj = None self.beamline_setup = None self.queue_model_hwobj = None self.session_hwobj = None #Signals self.defineSignal("getView", ()) self.defineSignal("getTreeBrick", ()) #Slots self.defineSlot("logged_in", ()) self.defineSlot("set_session", ()) self.defineSlot("selection_changed", ()) self.defineSlot("new_centred_position", ()) self.defineSlot("change_pixel_calibration", ()) self.defineSlot("change_beam_position", ()) self.defineSlot("user_group_saved", ()) # Layout self.task_tool_box_widget = TaskToolBoxWidget(self) qt.QVBoxLayout(self) self.layout().addWidget(self.task_tool_box_widget) self.setEnabled(self.ispyb_logged_in)
def __init__(self, *args): BaseComponents.BlissWidget.__init__(self, *args) # Framwork-2 properties self.addProperty("beamline_setup", "string", "/beamline-setup") self.addProperty("queue_model", "string", "/queue-model") #Data atributes self.shape_history = None self.tree_brick = None #self.ispyb_logged_in = False - ESRF default behaviour is to disabled the box until logged in self.ispyb_logged_in = True self.diffractometer_hwobj = None self.beamline_setup = None self.queue_model_hwobj = None self.session_hwobj = None #Signals self.defineSignal("getView", ()) self.defineSignal("getTreeBrick",()) #Slots self.defineSlot("logged_in", ()) self.defineSlot("set_session", ()) self.defineSlot("selection_changed",()) self.defineSlot("new_centred_position", ()) self.defineSlot("change_pixel_calibration", ()) self.defineSlot("change_beam_position", ()) self.defineSlot("user_group_saved", ()) # Layout self.task_tool_box_widget = TaskToolBoxWidget(self) qt.QVBoxLayout(self) self.layout().addWidget(self.task_tool_box_widget) self.setEnabled(self.ispyb_logged_in)
class TaskToolBoxBrickPX2(BaseComponents.BlissWidget): def __init__(self, *args): BaseComponents.BlissWidget.__init__(self, *args) # Framwork-2 properties self.addProperty("beamline_setup", "string", "/beamline-setup") self.addProperty("queue_model", "string", "/queue-model") # Data atributes self.shape_history = None self.tree_brick = None # self.ispyb_logged_in = False - ESRF default behaviour is to disabled the # box until logged in self.ispyb_logged_in = True self.diffractometer_hwobj = None self.beamline_setup = None self.queue_model_hwobj = None self.session_hwobj = None # Signals self.defineSignal("getView", ()) self.defineSignal("getTreeBrick", ()) # Slots self.defineSlot("logged_in", ()) self.defineSlot("set_session", ()) self.defineSlot("selection_changed", ()) self.defineSlot("new_centred_position", ()) self.defineSlot("change_pixel_calibration", ()) self.defineSlot("change_beam_position", ()) self.defineSlot("user_group_saved", ()) # Layout self.task_tool_box_widget = TaskToolBoxWidget(self) qt.QVBoxLayout(self) self.layout().addWidget(self.task_tool_box_widget) self.setEnabled(self.ispyb_logged_in) def run(self): """ Overriding BaseComponents.BlissWidget (Framework-2 object) run method. """ # Get a reference to the TreeBrick. logging.info( "running TaskToolBrick . Shape history is: %s" % str(self.shape_history) ) tree_brick = {} self.emit(qt.PYSIGNAL("getTreeBrick"), (tree_brick,)) self.tree_brick = tree_brick.get("tree_brick", None) self.task_tool_box_widget.set_tree_brick(self.tree_brick) # Get a reference to the QUB view and setup # helper classes for handling centred positions. d = {} self.emit(qt.PYSIGNAL("getView"), (d,)) self.task_tool_box_widget.grid_scan_page._grid_widget.connectToView(d) self.task_tool_box_widget.grid_scan_page._grid_widget._setColor( qt.QWidget.green ) self.task_tool_box_widget.grid_scan_page._grid_widget._shape_history = ( self.shape_history ) logging.info("running TaskToolBrick . Got a view: %s" % str(d)) if self.shape_history is not None: self.shape_history.set_drawing(d.get("drawing", None)) self.shape_history.get_drawing_event_handler().selection_cb = ( self.shape_selected ) self.shape_history.get_drawing_event_handler().deletion_cb = ( self.shape_deleted ) try: self.shape_history.get_drawing_event_handler().move_to_centred_position_cb = ( self.diffractometer_hwobj.moveToCentredPosition ) except AttributeError: logging.error( "Could not get diffractometer_hwobj, check your configuration" ) traceback.print_exc() self.session_hwobj = self.beamline_setup_hwobj.session_hwobj if self.session_hwobj.session_id: self.setEnabled(True) def user_group_saved(self, new_user_group): self.session_hwobj.set_user_group(str(new_user_group)) self.task_tool_box_widget.update_data_path_model() path = self.session_hwobj.get_base_image_directory() + "/" + str(new_user_group) msg = "Image path is: %s" % path logging.getLogger("user_level_log").info(msg) def set_session( self, session_id, t_prop_code=None, prop_number=None, prop_id=None, start_date=None, prop_code=None, is_inhouse=None, ): """ Connected to the slot set_session and is called after a request to get the current session from LIMS (ISPyB) is made. The signal is normally emitted by the brick that handles LIMS login, ie ProposalBrick. The session_id is '' if no session could be retrieved. """ if session_id is "": self.logged_in(True) def logged_in(self, logged_in): """ Handels the signal logged_in from the brick the handles LIMS (ISPyB) login, ie ProposalBrick. The signal is emitted when a user was succesfully logged in. """ self.ispyb_logged_in = logged_in if self.session_hwobj is not None: self.session_hwobj.set_user_group("") self.setEnabled(logged_in) self.task_tool_box_widget.ispyb_logged_in(logged_in) def propertyChanged(self, property_name, old_value, new_value): """ Overriding BaseComponents.BlissWidget (propertyChanged object) run method. """ if property_name == "beamline_setup": logging.info("TaskToolBoxBrick / setting property beamline_setup") self.beamline_setup_hwobj = self.getHardwareObject(new_value) if self.beamline_setup_hwobj: self.diffractometer_hwobj = ( self.beamline_setup_hwobj.diffractometer_hwobj ) if self.diffractometer_hwobj: self.diffractometer_hwobj.connect( "minidiffStateChanged", self.diffractometer_changed ) self.shape_history = self.beamline_setup_hwobj.shape_history_hwobj logging.info( "TaskToolBoxBrick / got a shape history here %s " % str(self.shape_history) ) if self.queue_model_hwobj: self.beamline_setup_hwobj.queue_model_hwobj = self.queue_model_hwobj self.task_tool_box_widget.set_beamline_setup( self.beamline_setup_hwobj ) else: logging.getLogger("user_level_log").error( "Could not load beamline setup " + "check configuration !." ) elif property_name == "queue_model": self.queue_model_hwobj = self.getHardwareObject(new_value) if self.beamline_setup_hwobj: self.beamline_setup_hwobj.queue_model_hwobj = self.queue_model_hwobj self.task_tool_box_widget.set_beamline_setup(self.beamline_setup_hwobj) def change_pixel_calibration(self, sizex, sizey): self.task_tool_box_widget.grid_scan_page._grid_widget.ChangePixelCalibration( sizex, sizey ) def change_beam_position(self, x, y): self.task_tool_box_widget.grid_scan_page._grid_widget.ChangeBeamPosition(x, y) def selection_changed(self, items): """ Connected to the signal "selection_changed" of the TreeBrick. Called when the selection in the tree changes. """ self.task_tool_box_widget.selection_changed(items) def shape_selected(self, selected_positions): """ Callback for the DrawingEvent object called when a shape is selected. """ self.task_tool_box_widget.helical_page.centred_position_selection( selected_positions ) self.task_tool_box_widget.discrete_page.centred_position_selection( selected_positions ) self.task_tool_box_widget.char_page.centred_position_selection( selected_positions ) def shape_deleted(self, shape): """ Callback for the DrawingEvent object called when a shape is deleted. """ self.task_tool_box_widget.helical_page.shape_deleted(shape) def new_centred_position(self, state, centring_status): """ Adds a new centred position, connected to the brick which handles centring (HutchMenuBrick). """ p_dict = {} if "motors" in centring_status and "extraMotors" in centring_status: p_dict = dict(centring_status["motors"], **centring_status["extraMotors"]) elif "motors" in centring_status: p_dict = dict(centring_status["motors"]) if p_dict: cpos = queue_model_objects.CentredPosition(p_dict) # self.position_history.add_centred_position(state, cpos) try: screen_pos = self.diffractometer_hwobj.motor_positions_to_screen( cpos.as_dict() ) point = shape_history.Point( self.shape_history.get_drawing(), cpos, screen_pos ) # qub_point = self.shape_history.draw_position(screen_pos) if point: # self.shape_history.add_point(cpos, qub_point) self.shape_history.add_shape(point) except BaseException: logging.getLogger("HWR").exception( "Could not get screen positons for %s" % cpos ) traceback.print_exc() def diffractometer_changed(self, *args): """ Handles diffractometer change events, connected to the signal minidiffStateChanged of the diffractometer hardware object. """ if self.diffractometer_hwobj.isReady(): for shape in self.shape_history.get_shapes(): new_positions = [] for cpos in shape.get_centred_positions(): new_x, new_y = self.diffractometer_hwobj.motor_positions_to_screen( cpos.as_dict() ) new_positions.append((new_x, new_y)) shape.move(new_positions) for shape in self.shape_history.get_shapes(): shape.show() else: for shape in self.shape_history.get_shapes(): shape.hide()
class TaskToolBoxBrickPX2(BaseComponents.BlissWidget): def __init__(self, *args): BaseComponents.BlissWidget.__init__(self, *args) # Framwork-2 properties self.addProperty("beamline_setup", "string", "/beamline-setup") self.addProperty("queue_model", "string", "/queue-model") # Data atributes self.shape_history = None self.tree_brick = None # self.ispyb_logged_in = False - ESRF default behaviour is to disabled the # box until logged in self.ispyb_logged_in = True self.diffractometer_hwobj = None self.beamline_setup = None self.queue_model_hwobj = None self.session_hwobj = None # Signals self.defineSignal("getView", ()) self.defineSignal("getTreeBrick", ()) # Slots self.defineSlot("logged_in", ()) self.defineSlot("set_session", ()) self.defineSlot("selection_changed", ()) self.defineSlot("new_centred_position", ()) self.defineSlot("change_pixel_calibration", ()) self.defineSlot("change_beam_position", ()) self.defineSlot("user_group_saved", ()) # Layout self.task_tool_box_widget = TaskToolBoxWidget(self) qt.QVBoxLayout(self) self.layout().addWidget(self.task_tool_box_widget) self.setEnabled(self.ispyb_logged_in) def run(self): """ Overriding BaseComponents.BlissWidget (Framework-2 object) run method. """ # Get a reference to the TreeBrick. logging.info("running TaskToolBrick . Shape history is: %s" % str(self.shape_history)) tree_brick = {} self.emit(qt.PYSIGNAL("getTreeBrick"), (tree_brick, )) self.tree_brick = tree_brick.get("tree_brick", None) self.task_tool_box_widget.set_tree_brick(self.tree_brick) # Get a reference to the QUB view and setup # helper classes for handling centred positions. d = {} self.emit(qt.PYSIGNAL("getView"), (d, )) self.task_tool_box_widget.grid_scan_page._grid_widget.connectToView(d) self.task_tool_box_widget.grid_scan_page._grid_widget._setColor( qt.QWidget.green) self.task_tool_box_widget.grid_scan_page._grid_widget._shape_history = ( self.shape_history) logging.info("running TaskToolBrick . Got a view: %s" % str(d)) if self.shape_history is not None: self.shape_history.set_drawing(d.get("drawing", None)) self.shape_history.get_drawing_event_handler().selection_cb = ( self.shape_selected) self.shape_history.get_drawing_event_handler().deletion_cb = ( self.shape_deleted) try: self.shape_history.get_drawing_event_handler( ).move_to_centred_position_cb = ( self.diffractometer_hwobj.moveToCentredPosition) except AttributeError: logging.error( "Could not get diffractometer_hwobj, check your configuration") traceback.print_exc() self.session_hwobj = self.beamline_setup_hwobj.session_hwobj if self.session_hwobj.session_id: self.setEnabled(True) def user_group_saved(self, new_user_group): self.session_hwobj.set_user_group(str(new_user_group)) self.task_tool_box_widget.update_data_path_model() path = self.session_hwobj.get_base_image_directory() + "/" + str( new_user_group) msg = "Image path is: %s" % path logging.getLogger("user_level_log").info(msg) def set_session( self, session_id, t_prop_code=None, prop_number=None, prop_id=None, start_date=None, prop_code=None, is_inhouse=None, ): """ Connected to the slot set_session and is called after a request to get the current session from LIMS (ISPyB) is made. The signal is normally emitted by the brick that handles LIMS login, ie ProposalBrick. The session_id is '' if no session could be retrieved. """ if session_id is "": self.logged_in(True) def logged_in(self, logged_in): """ Handels the signal logged_in from the brick the handles LIMS (ISPyB) login, ie ProposalBrick. The signal is emitted when a user was succesfully logged in. """ self.ispyb_logged_in = logged_in if self.session_hwobj is not None: self.session_hwobj.set_user_group("") self.setEnabled(logged_in) self.task_tool_box_widget.ispyb_logged_in(logged_in) def propertyChanged(self, property_name, old_value, new_value): """ Overriding BaseComponents.BlissWidget (propertyChanged object) run method. """ if property_name == "beamline_setup": logging.info("TaskToolBoxBrick / setting property beamline_setup") self.beamline_setup_hwobj = self.getHardwareObject(new_value) if self.beamline_setup_hwobj: self.diffractometer_hwobj = ( self.beamline_setup_hwobj.diffractometer_hwobj) if self.diffractometer_hwobj: self.diffractometer_hwobj.connect( "minidiffStateChanged", self.diffractometer_changed) self.shape_history = self.beamline_setup_hwobj.shape_history_hwobj logging.info( "TaskToolBoxBrick / got a shape history here %s " % str(self.shape_history)) if self.queue_model_hwobj: self.beamline_setup_hwobj.queue_model_hwobj = self.queue_model_hwobj self.task_tool_box_widget.set_beamline_setup( self.beamline_setup_hwobj) else: logging.getLogger( "user_level_log").error("Could not load beamline setup " + "check configuration !.") elif property_name == "queue_model": self.queue_model_hwobj = self.getHardwareObject(new_value) if self.beamline_setup_hwobj: self.beamline_setup_hwobj.queue_model_hwobj = self.queue_model_hwobj self.task_tool_box_widget.set_beamline_setup( self.beamline_setup_hwobj) def change_pixel_calibration(self, sizex, sizey): self.task_tool_box_widget.grid_scan_page._grid_widget.ChangePixelCalibration( sizex, sizey) def change_beam_position(self, x, y): self.task_tool_box_widget.grid_scan_page._grid_widget.ChangeBeamPosition( x, y) def selection_changed(self, items): """ Connected to the signal "selection_changed" of the TreeBrick. Called when the selection in the tree changes. """ self.task_tool_box_widget.selection_changed(items) def shape_selected(self, selected_positions): """ Callback for the DrawingEvent object called when a shape is selected. """ self.task_tool_box_widget.helical_page.centred_position_selection( selected_positions) self.task_tool_box_widget.discrete_page.centred_position_selection( selected_positions) self.task_tool_box_widget.char_page.centred_position_selection( selected_positions) def shape_deleted(self, shape): """ Callback for the DrawingEvent object called when a shape is deleted. """ self.task_tool_box_widget.helical_page.shape_deleted(shape) def new_centred_position(self, state, centring_status): """ Adds a new centred position, connected to the brick which handles centring (HutchMenuBrick). """ p_dict = {} if "motors" in centring_status and "extraMotors" in centring_status: p_dict = dict(centring_status["motors"], **centring_status["extraMotors"]) elif "motors" in centring_status: p_dict = dict(centring_status["motors"]) if p_dict: cpos = queue_model_objects.CentredPosition(p_dict) # self.position_history.add_centred_position(state, cpos) try: screen_pos = self.diffractometer_hwobj.motor_positions_to_screen( cpos.as_dict()) point = shape_history.Point(self.shape_history.get_drawing(), cpos, screen_pos) # qub_point = self.shape_history.draw_position(screen_pos) if point: # self.shape_history.add_point(cpos, qub_point) self.shape_history.add_shape(point) except BaseException: logging.getLogger("HWR").exception( "Could not get screen positons for %s" % cpos) traceback.print_exc() def diffractometer_changed(self, *args): """ Handles diffractometer change events, connected to the signal minidiffStateChanged of the diffractometer hardware object. """ if self.diffractometer_hwobj.isReady(): for shape in self.shape_history.get_shapes(): new_positions = [] for cpos in shape.get_centred_positions(): new_x, new_y = self.diffractometer_hwobj.motor_positions_to_screen( cpos.as_dict()) new_positions.append((new_x, new_y)) shape.move(new_positions) for shape in self.shape_history.get_shapes(): shape.show() else: for shape in self.shape_history.get_shapes(): shape.hide()