Ejemplo n.º 1
0
 def set_motor_position(self, motor_name, new_position, timeout=None):
     """Sets motor value. Direct tine.set cmd is used"""
     for motor in self.motors_list:
         if motor["motorName"] == motor_name:
             if motor["velocity"] is not None:
                 tine.set(
                     self.server_address + "/" + motor["motorAddr"],
                     "Velocity",
                     motor["velocity"],
                 )
             motor["status"] = motor["statusModes"]["Move"]
             tine.set(
                 self.server_address + "/" + motor["motorAddr"],
                 motor["setCmd"],
                 new_position,
             )
             logging.getLogger("HWR").debug(
                 "EMBLMotorsGroup: send %s : %.4f"
                 % (motor["motorAddr"], new_position)
             )
             time.sleep(0.2)
             self.wait_motor_ready(motor_name, timeout=10)
             time.sleep(1)
             logging.getLogger("HWR").debug(
                 "EMBLMotorsGroup: motor %s ready" % motor["motorAddr"]
             )
             break
Ejemplo n.º 2
0
    def set_motor_group_focus_mode(self, focus_mode):
        """Sets a focus mode for the motors group"""
        for motor in self.motors_list:
            if (motor["setCmd"] is not None
                    and focus_mode in motor["focusingModes"].keys()):
                if motor["velocity"] is not None:
                    tine.set(
                        self.server_address + "/" + motor["motorAddr"],
                        "Velocity",
                        motor["velocity"],
                    )
        time.sleep(0.5)

        for motor in self.motors_list:
            if (motor["setCmd"] is not None
                    and focus_mode in motor["focusingModes"].keys()):

                motor["status"] = motor["statusModes"]["Move"]
                tine.set(
                    self.server_address + "/" + motor["motorAddr"],
                    motor["setCmd"],
                    motor["focusingModes"][str(focus_mode)],
                )
                logging.getLogger("HWR").debug(
                    "EMBLMotorsGroup: send %s : %.4f" %
                    (motor["motorAddr"],
                     motor["focusingModes"][str(focus_mode)]))
                if motor["motorName"] in ("In", "Out", "Top", "But"):
                    self.wait_motor_ready(motor["motorName"], timeout=10)
                    time.sleep(1.1)
                    logging.getLogger("HWR").debug(
                        "EMBLMotorsGroup: motor %s ready" % motor["motorAddr"])
Ejemplo n.º 3
0
 def stop_motor(self, motor_name):
     """Stops motor movement"""
     for motor in self.motors_list:
         if motor["motorName"] == motor_name:
             if motor["setCmd"] is not None:
                 tine.set(
                     self.server_address + self.group_address + "/" + motor_name,
                     motor["stopCmd"],
                 )
             break
Ejemplo n.º 4
0
    def __call__(self, *args, **kwargs):
        """executes Tine cmd

        Raises:
            strerror: [description]
            ex: [description]
        """

        self.emit("commandBeginWaitReply", (str(self.name()), ))
        if len(args) == 0:
            command_argument = []
        else:
            command_argument = args[0]
        try:
            ret = tine.set(self.tine_name, self.command_name, command_argument,
                           self.timeout)
            self.emit("commandReplyArrived", (ret, str(self.name())))
        except IOError as strerror:
            logging.getLogger("user_level_log").exception("TINE: %s" %
                                                          strerror)
            self.emit("commandFailed", (strerror))
            raise strerror
        except Exception as ex:
            logging.getLogger("user_level_log").exception("TINE: error: %s" %
                                                          str(ex))
            self.emit("commandFailed", (str(ex)))
            raise ex
Ejemplo n.º 5
0
 def set_value(self, new_value):
     listData = newValue
     try:
         ret = tine.set(self.tine_name, self.attribute_name, listData,
                        self.timeout)
     except IOError as strerror:
         logging.getLogger("HWR").error("%s" % strerror)
Ejemplo n.º 6
0
 def set_motor_focus_mode(self, motor_name, focus_mode):
     """Sets a focus mode for an individual motor"""
     for motor in self.motors_list:
         if motor["motorName"] == motor_name:
             if (motor["setCmd"] is not None
                     and focus_mode in motor["focusingModes"].keys()):
                 if motor["velocity"] is not None:
                     tine.set(
                         self.server_address + "/" + motor["motorAddr"],
                         "Velocity",
                         motor["velocity"],
                     )
                 tine.set(
                     self.server_address + "/" + motor["motorAddr"],
                     motor["setCmd"],
                     motor["focusingModes"][focus_mode],
                 )
                 time.sleep(1)
             break
 def set_motor_focus_mode(self, motor_name, focus_mode):
     """Sets a focus mode for an individual motor"""
     for motor in self.motors_list:
         if motor["motorName"] == motor_name:
             if (
                 motor["setCmd"] is not None
                 and focus_mode in motor["focusingModes"].keys()
             ):
                 if motor["velocity"] is not None:
                     tine.set(
                         self.server_address + "/" + motor["motorAddr"],
                         "Velocity",
                         motor["velocity"],
                     )
                 tine.set(
                     self.server_address + "/" + motor["motorAddr"],
                     motor["setCmd"],
                     motor["focusingModes"][focus_mode],
                 )
                 time.sleep(1)
             break
    def set_motor_group_focus_mode(self, focus_mode):
        """Sets a focus mode for the motors group"""
        for motor in self.motors_list:
            if (
                motor["setCmd"] is not None
                and focus_mode in motor["focusingModes"].keys()
            ):
                if motor["velocity"] is not None:
                    tine.set(
                        self.server_address + "/" + motor["motorAddr"],
                        "Velocity",
                        motor["velocity"],
                    )
        time.sleep(0.5)

        for motor in self.motors_list:
            if (
                motor["setCmd"] is not None
                and focus_mode in motor["focusingModes"].keys()
            ):

                motor["status"] = motor["statusModes"]["Move"]
                tine.set(
                    self.server_address + "/" + motor["motorAddr"],
                    motor["setCmd"],
                    motor["focusingModes"][str(focus_mode)],
                )
                logging.getLogger("HWR").debug(
                    "EMBLMotorsGroup: send %s : %.4f"
                    % (motor["motorAddr"], motor["focusingModes"][str(focus_mode)])
                )
                if motor["motorName"] in ("In", "Out", "Top", "But"):
                    self.wait_motor_ready(motor["motorName"], timeout=10)
                    time.sleep(1.1)
                    logging.getLogger("HWR").debug(
                        "EMBLMotorsGroup: motor %s ready" % motor["motorAddr"]
                    )
Ejemplo n.º 9
0
 def __call__(self, *args, **kwargs):
     self.emit("commandBeginWaitReply", (str(self.name()),))
     if len(args) == 0:
         commandArgument = []
     else:
         commandArgument = args[0]
     try:
         ret = tine.set(
             self.tineName, self.commandName, commandArgument, self.timeout
         )
         self.emit("commandReplyArrived", (ret, str(self.name())))
     except IOError as strerror:
         logging.getLogger("user_level_log").exception("TINE: %s" % strerror)
         self.emit("commandFailed", (strerror))
         raise strerror
     except Exception as ex:
         logging.getLogger("user_level_log").exception("TINE: error: %s" % str(ex))
         self.emit("commandFailed", (str(ex)))
         raise ex
Ejemplo n.º 10
0
 def __call__(self, *args, **kwargs):
     self.emit('commandBeginWaitReply', (str(self.name()), ))
     if (len(args) == 0):
         commandArgument = []
     else:
         commandArgument = args[0]
     try:
         ret = tine.set(self.tineName, self.commandName, commandArgument,
                        self.timeout)
         self.emit('commandReplyArrived', (ret, str(self.name())))
     except IOError as strerror:
         logging.getLogger("user_level_log").exception("TINE: %s" %
                                                       strerror)
         self.emit('commandFailed', (strerror))
         raise strerror
     except Exception as ex:
         logging.getLogger("user_level_log").exception("TINE: error: %s" %
                                                       str(ex))
         self.emit('commandFailed', (str(ex)))
         raise ex
Ejemplo n.º 11
0
    def move_beam_to_center(self):
        """Calls pitch scan and 3 times detects beam shape and
           moves horizontal and vertical motors.
        """
        gui_log = logging.getLogger("GUI")
        gui_msg = ""
        step = 10
        finished = False

        try:
            if HWR.beamline.session.beamline_name == "P13":
                # Beam centering procedure for P13 ---------------------------------

                log_msg = "Executing pitch scan"
                gui_log.info("Beam centering: %s" % log_msg)
                self.emit("progressStep", step, log_msg)

                if HWR.beamline.energy.get_value() <= 8.75:
                    self.cmd_set_qbmp_range(0)
                else:
                    self.cmd_set_qbmp_range(1)

                gevent.sleep(0.2)
                self.cmd_start_pitch_scan(1)
                gevent.sleep(3)

                with gevent.Timeout(
                        20, Exception("Timeout waiting for pitch scan ready")):
                    while self.chan_pitch_scan_status.get_value() == 1:
                        gevent.sleep(0.1)
                gevent.sleep(3)
                self.cmd_set_vmax_pitch(1)
                """
                qbpm_arr = self.chan_qbpm_ar.get_value()
                if max(qbpm_arr) < 10:
                    gui_log.error("Beam alignment failed! Pitch scan failed.")
                    self.emit("progressStop", ())
                    return
                """

                step += 1
                log_msg = "Detecting beam position and centering the beam"
                gui_log.info("Beam centering: %s" % log_msg)
                self.emit("progressStep", step, log_msg)

                for i in range(3):
                    with gevent.Timeout(10, False):
                        beam_pos_displacement = [None, None]
                        while None in beam_pos_displacement:
                            beam_pos_displacement = HWR.beamline.sample_view.get_beam_displacement(
                                reference="beam")
                            gevent.sleep(0.1)
                    if None in beam_pos_displacement:
                        log_msg = (
                            "Beam alignment failed! Unable to detect beam position."
                        )
                        gui_log.error(log_msg)
                        self.emit("progressStop", ())
                        return

                    delta_hor = beam_pos_displacement[0] * self.scale_hor
                    delta_ver = beam_pos_displacement[1] * self.scale_ver

                    if delta_hor > 0.03:
                        delta_hor = 0.03
                    if delta_hor < -0.03:
                        delta_hor = -0.03
                    if delta_ver > 0.03:
                        delta_ver = 0.03
                    if delta_ver < -0.03:
                        delta_ver = -0.03

                    log_msg = ("Beam centering: Applying %.4f mm horizontal " %
                               delta_hor +
                               "and %.4f mm vertical correction" % delta_ver)
                    gui_log.info(log_msg)

                    if abs(delta_hor) > 0.0001:
                        log_msg = (
                            "Beam centering: Moving horizontal by %.4f" %
                            delta_hor)
                        gui_log.info(log_msg)
                        self.horizontal_motor_hwobj.set_value_relative(
                            delta_hor)
                        sleep(5)
                    if abs(delta_ver) > 0.0001:
                        log_msg = "Beam centering: Moving vertical by %.4f" % delta_ver
                        gui_log.info(log_msg)
                        self.vertical_motor_hwobj.set_value_relative(delta_ver)
                        sleep(5)

            else:
                # Beam centering procedure for P14 -----------------------------------
                # If energy < 10: set all lenses in ----------------------------
                active_mode, beam_size = self.get_focus_mode()
                log_msg = "Applying Perp and Roll2nd correction"
                gui_log.info("Beam centering: %s" % log_msg)
                self.emit("progressStep", step, log_msg)
                delta_ver = 1.0

                for i in range(5):
                    if abs(delta_ver) > 0.100:
                        self.cmd_set_pitch_position(0)
                        self.cmd_set_pitch(1)
                        gevent.sleep(0.1)

                        if HWR.beamline.energy.get_value() < 10:
                            crl_value = self.crl_hwobj.get_crl_value()
                            self.crl_hwobj.set_crl_value([1, 1, 1, 1, 1, 1],
                                                         timeout=30)

                        self.cmd_start_pitch_scan(1)

                        # GB : keep lenses in the beam during the scan
                        # if self.bl_hwobj._get_energy() < 10:
                        #   self.crl_hwobj.set_crl_value(crl_value, timeout=30)

                        gevent.sleep(2.0)

                        with gevent.Timeout(
                                10,
                                RuntimeError(
                                    "Timeout waiting for pitch scan ready")):
                            while self.chan_pitch_scan_status.get_value() != 0:
                                gevent.sleep(0.1)
                        self.cmd_set_vmax_pitch(1)

                        # GB : return original lenses only after scan finished
                        if HWR.beamline.energy.get_value() < 10:
                            self.crl_hwobj.set_crl_value(crl_value, timeout=30)
                        sleep(2)

                    with gevent.Timeout(10, False):
                        beam_pos_displacement = [None, None]
                        while None in beam_pos_displacement:
                            beam_pos_displacement = HWR.beamline.sample_view.get_beam_displacement(
                                reference="screen")
                            gevent.sleep(0.1)
                    if None in beam_pos_displacement:
                        # log.debug("No beam detected")
                        return
                    if active_mode in ("Collimated", "Imaging"):
                        delta_hor = (beam_pos_displacement[0] *
                                     self.scale_hor *
                                     HWR.beamline.energy.get_value() / 12.70)
                        delta_ver = beam_pos_displacement[1] * self.scale_ver
                    else:
                        delta_hor = beam_pos_displacement[
                            0] * self.scale_double_hor
                        delta_ver = (beam_pos_displacement[1] *
                                     self.scale_double_ver * 0.5)

                    log_msg = (
                        "Measured beam displacement: Horizontal " +
                        "%.4f mm, Vertical %.4f mm" % beam_pos_displacement)
                    gui_log.info(log_msg)

                    # if abs(delta_ver) > 0.050 :
                    #    delta_ver *= 0.5

                    log_msg = (
                        "Applying %.4f mm horizontal " % delta_hor +
                        "and %.4f mm vertical motor correction" % delta_ver)
                    gui_log.info(log_msg)

                    if active_mode in ("Collimated", "Imaging"):
                        if abs(delta_hor) > 0.0001:
                            log_msg = "Moving horizontal by %.4f" % delta_hor
                            gui_log.info(log_msg)
                            self.horizontal_motor_hwobj.set_value_relative(
                                delta_hor, timeout=5)
                            sleep(4)
                        if abs(delta_ver) > 0.100:
                            log_msg = "Moving vertical motor by %.4f" % delta_ver
                            gui_log.info(log_msg)
                            # self.vertical_motor_hwobj.set_value_relative(delta_ver, timeout=5)
                            tine.set(
                                "/p14/P14MonoMotor/Perp",
                                "IncrementMove.START",
                                delta_ver * 0.5,
                            )
                            sleep(6)
                        else:
                            log_msg = "Moving vertical piezo by %.4f" % delta_ver
                            gui_log.info(log_msg)
                            self.vertical_motor_hwobj.set_value_relative(
                                -1.0 * delta_ver, timeout=5)
                            sleep(2)

                    elif active_mode == "Double":
                        if abs(delta_hor) > 0.0001:
                            log_msg = "Moving horizontal by %.4f" % delta_hor
                            gui_log.info(log_msg)
                            self.horizontal_double_mode_motor_hwobj.set_value_relative(
                                delta_hor, timeout=5)
                            sleep(2)
                        if abs(delta_ver) > 0.001:
                            log_msg = "Moving vertical by %.4f" % delta_ver
                            gui_log.info(log_msg)
                            self.vertical_double_mode_motor_hwobj.set_value_relative(
                                delta_ver, timeout=5)
                            sleep(2)
            finished = True
        except Exception:
            gui_log.error("Beam centering failed")
            finished = False
        finally:
            return finished
Ejemplo n.º 12
0
    def pre_execute(self, data_model):
        self._failed = False
        """
        if self.beam_focusing_hwobj.get_focus_mode() != "imaging":
            self._error_msg = "Beamline is not in Imaging mode"
            self.emit("collectFailed", self._error_msg)
            logging.getLogger("GUI").error("Imaging: Error during acquisition (%s)" % self._error_msg)
            self.ready_event.set()
            self._collecting = False
            self._failed = True
            return
        """

        self.emit("progressInit", ("Image acquisition", 100, False))
        self._collect_frame = 0
        self.printed_warnings = []
        self.printed_errors = []
        self.ff_ssim = None
        self.config_dict = {}

        path_template = data_model.acquisitions[0].path_template
        acq_params = data_model.acquisitions[0].acquisition_parameters
        im_params = data_model.xray_imaging_parameters

        self._number_of_images = acq_params.num_images

        if im_params.detector_distance is not None:
            logging.getLogger("GUI").warning(
                "Imaging: Setting detector distance to %d mm" %
                int(im_params.detector_distance))

            delta = (im_params.detector_distance -
                     self.reference_distance) * self.reference_angle
            for motor in self.beam_focusing_hwobj.get_focus_motors():
                if motor["motorName"] == "P14DetHor1":
                    target = motor["focusingModes"]["Imaging"] + delta
                    tine.set("/P14/P14DetTrans/P14detHor1", "Move.START",
                             target)
                elif motor["motorName"] == "P14DetHor2":
                    target = motor["focusingModes"]["Imaging"] + delta
                    tine.set("/P14/P14DetTrans/P14detHor2", "Move.START",
                             target)
            #TODO add later wait
            time.sleep(3)
            HWR.beamline.detector.distance.set_value(
                im_params.detector_distance, timeout=30)
            logging.getLogger("GUI").info("Imaging: Detector distance set")

        self.cmd_collect_detector("pco")
        self.cmd_collect_directory(str(path_template.directory))
        self.cmd_collect_template(str(path_template.get_image_file_name()))
        self.cmd_collect_scan_type("xrimg")

        self.cmd_collect_exposure_time(acq_params.exp_time)
        self.cmd_collect_num_images(acq_params.num_images)
        self.cmd_collect_start_angle(acq_params.osc_start)
        self.cmd_collect_range(acq_params.osc_range)
        self.cmd_collect_in_queue(acq_params.in_queue != False)
        shutter_name = HWR.beamline.detector.get_shutter_name()
        self.cmd_collect_shutter(shutter_name)

        self.cmd_collect_ff_num_images(im_params.ff_num_images)
        self.cmd_collect_ff_offset([
            im_params.sample_offset_a,
            im_params.sample_offset_b,
            im_params.sample_offset_c,
        ])
        self.cmd_collect_ff_pre(im_params.ff_pre)
        self.cmd_collect_ff_post(im_params.ff_post)

        if acq_params.osc_range == 0:
            self.cmd_camera_trigger(False)
        else:
            self.cmd_camera_trigger(True)
        self.cmd_camera_live_view(im_params.ff_apply)
        self.cmd_camera_write_data(im_params.camera_write_data)
        self.cmd_camera_ff_ssim(im_params.ff_ssim_enabled)

        self.set_osc_start(acq_params.osc_start)

        self.current_dc_parameters = qmo.to_collect_dict(
            data_model, HWR.beamline.session, qmo.Sample())[0]
        self.current_dc_parameters["status"] = "Running"
        self.current_dc_parameters["comments"] = ""

        self.motor_positions = HWR.beamline.diffractometer.get_positions()
        self.take_crystal_snapshots()

        self.store_data_collection_in_lims()
Ejemplo n.º 13
0
    def pre_execute(self, data_model):
        """
        Pre execute method
        :param data_model:
        :return:
        """
        self._failed = False

        """
        if self.beam_focusing_hwobj.get_focus_mode() != "imaging":
            self._error_msg = "Beamline is not in Imaging mode"
            self.emit("collectFailed", self._error_msg)
            logging.getLogger("GUI").error("Imaging: Error during acquisition (%s)" % self._error_msg)
            self.ready_event.set()
            self._collecting = False
            self._failed = True
            return
        """

        self.emit("progressInit", ("Image acquisition", 100, False))
        self._collect_frame = 0
        self.printed_warnings = []
        self.printed_errors = []
        self.ff_ssim = None
        self.config_dict = {}

        path_template = data_model.acquisitions[0].path_template
        acq_params = data_model.acquisitions[0].acquisition_parameters
        im_params = data_model.xray_imaging_parameters

        self._number_of_images = acq_params.num_images

        if im_params.detector_distance:
            delta = im_params.detector_distance - self.detector_hwobj.get_distance()
            if abs(delta) > 0.0001:
                tine.set(
                    "/P14/P14DetTrans/ComHorTrans",
                    "IncrementMove.START",
                    -0.003482 * delta,
                )
                self.detector_hwobj.set_distance(
                    im_params.detector_distance, wait=True, timeout=30
                )

        self.cmd_collect_detector("pco")
        self.cmd_collect_directory(str(path_template.directory))
        self.cmd_collect_template(str(path_template.get_image_file_name()))
        self.cmd_collect_scan_type("xrimg")

        self.cmd_collect_exposure_time(acq_params.exp_time)
        self.cmd_collect_num_images(acq_params.num_images)
        self.cmd_collect_start_angle(acq_params.osc_start)
        self.cmd_collect_range(acq_params.osc_range)
        self.cmd_collect_in_queue(acq_params.in_queue != False)
        shutter_name = self.detector_hwobj.get_shutter_name()
        self.cmd_collect_shutter(shutter_name)

        self.cmd_collect_ff_num_images(im_params.ff_num_images)
        self.cmd_collect_ff_offset(
            [
                im_params.sample_offset_a,
                im_params.sample_offset_b,
                im_params.sample_offset_c,
            ]
        )
        self.cmd_collect_ff_pre(im_params.ff_pre)
        self.cmd_collect_ff_post(im_params.ff_post)

        if acq_params.osc_range == 0:
            self.cmd_camera_trigger(False)
        else:
            self.cmd_camera_trigger(True)
        self.cmd_camera_live_view(im_params.ff_apply)
        self.cmd_camera_write_data(im_params.camera_write_data)
        self.cmd_camera_ff_ssim(im_params.ff_ssim_enabled)

        self.set_osc_start(acq_params.osc_start)

        self.current_dc_parameters = qmo.to_collect_dict(
            data_model, self.session_hwobj, qmo.Sample()
        )[0]
        self.current_dc_parameters["status"] = "Running"
        self.current_dc_parameters["comments"] = ""

        self.store_data_collection_in_lims()
Ejemplo n.º 14
0
 def setValue(self, newValue):
     listData = newValue
     try:
         ret = tine.set(self.tineName, self.attributeName, listData, self.timeout)
     except IOError as strerror:
         logging.getLogger("HWR").error("%s" % strerror)
Ejemplo n.º 15
0
    time.sleep(1)
    global COLSTATUS
    global COLERROR
    while COLSTATUS != "ready":
        if COLSTATUS == "error":
            COLERROR = True
            return
        time.sleep(0.1)
    COLERROR = False


n = 85

wait_col_ready()

tine.set("/p14/collection/mx-standard", "ff-pre", True)

tine.set("/p14/collection/mx-standard", "directory",
         "/mnt/beegfs/P14/2020/p3l-gleb1/20201129/RAW_DATA/imaging")

tine.set("/p14/collection/mx-standard", "start-angle", 2.21)
tine.set("/p14/collection/mx-standard", "range", 0.1)
tine.set("/p14/collection/mx-standard", "exposure-time", 0.01)

tine.set("/P14/pco-camera/pco-camera", "write-data", True)

#for y in [ -5.25, -5.0, -4.75, -4.5, -4.25, -4.0, -3.75  ]:
# ^ this is full range of motor position in vertical direction
for y in [-4.0, -3.75]:
    tine.set("P14/MD3/MD3_0", "AlignmentYPosition", y)
    wait_md_ready()