Пример #1
0
    def init(self):
        super(GphlWorkflowConnection, self).init()
        if self.has_object("connection_parameters"):
            self._connection_parameters.update(
                self["connection_parameters"].get_properties()
            )
        if self.has_object("ssh_options"):
            # We are running through ssh - so we need python_address
            # If not, we stick to default, which is localhost (127.0.0.1)
            self._connection_parameters["python_address"] = socket.gethostname()

        locations = next(self.get_objects("directory_locations")).get_properties()
        paths = self.software_paths
        props = self.java_properties
        dd0 = next(self.get_objects("software_paths")).get_properties()
        for tag, val in dd0.items():
            val2 = val.format(**locations)
            if not os.path.isabs(val2):
                val2 = HWR.get_hardware_repository().find_in_repository(val)
                if val2 is None:
                    raise ValueError("File path %s not recognised" % val)
            paths[tag] = val2
        dd0 = next(self.get_objects("software_properties")).get_properties()
        for tag, val in dd0.items():
            val2 = val.format(**locations)
            if not os.path.isabs(val2):
                val2 = HWR.get_hardware_repository().find_in_repository(val)
                if val2 is None:
                    raise ValueError("File path %s not recognised" % val)
            paths[tag] = props[tag] = val2
        #
        pp0 = props["co.gphl.wf.bin"] = paths["GPHL_INSTALLATION"]
        paths["BDG_home"] = paths.get("co.gphl.wf.bdg_licence_dir") or pp0
        self.update_state(self.STATES.OFF)
Пример #2
0
    def __init__(self,
                 design_mode=False,
                 show_maximized=False,
                 no_border=False):
        """Main mxcube gui widget"""

        QtImport.QWidget.__init__(self)

        self.framework = None
        self.gui_config_file = None
        self.user_file_dir = None
        self.configuration = None
        self.user_settings = None

        self.launch_in_design_mode = design_mode
        self.hardware_repository = HWR.get_hardware_repository()
        self.show_maximized = show_maximized
        self.no_border = no_border
        self.windows = []

        self.splash_screen = SplashScreen(Icons.load_pixmap("splash"))

        set_splash_screen(self.splash_screen)
        self.splash_screen.show()

        self.time_stamp = 0
Пример #3
0
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    flux = hwr.get_hardware_object("/flux")

    print("PX1 Flux is ", flux.get_value())
Пример #4
0
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    shut = hwr.get_hardware_object("/fastshutter")

    print(("Shutter State is: ", shut.readShutterState()))
Пример #5
0
def test_hwo():
    from gui.utils.QtImport import *
    import time

    from HardwareRepository import HardwareRepository as HWR

    hwr = HWR.get_hardware_repository()
    hwr.connect()

    hwo = hwr.get_hardware_object("/singleton_objects/limavideo")

    print("Image dimensions: ", hwo.get_image_dimensions())
    print("Live Mode: ", hwo.get_video_live())

    app = QApplication([])

    win = QMainWindow()
    lab = QLabel("toto")

    print("Image dimensions: ", hwo.get_image_dimensions())
    hwo.set_video_live(True)
    hwo.set_exposure_time(0.05)
    time.sleep(1)

    qimg = hwo.get_new_image()
    px = QPixmap(qimg)

    px = px.scaled(QSize(px.width() * 0.5, px.height() * 0.5))

    lab.setPixmap(px)
    win.setCentralWidget(lab)
    win.show()
    app.exec_()
Пример #6
0
    def init(self):
        """
        Ggonio axes definitions are static
        motorHO is expected to have get_value() that returns coordinate in mm
        """
        self.motorConstraints = []
        self.gonioAxes = []
        for axis in self["gonioAxes"]:
            self.gonioAxes.append({
                "type":
                axis.type,
                "direction":
                eval(axis.direction),
                "motor_name":
                axis.motorname,
                "motor_HO":
                HWR.get_hardware_repository().get_hardware_object(
                    axis.motorHO),
            })
        """
        This version is lacking video microscope object. Therefore we model only
        static camera axes directions, but no camera axes scaling or center - which
        are dynamic. Therefore, camera coordinates are relative, in mm.
        """
        self.cameraAxes = []
        for axis in self["cameraAxes"]:
            self.cameraAxes.append({
                "axis_name": axis.axisname,
                "direction": eval(axis.direction)
            })

        self.mI = numpy.diag([1.0, 1.0, 1.0])  # identity matrix
        self.calibrate()
Пример #7
0
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    conn = hwr.get_hardware_object("/ldapconnection")
    # conn.login("20141015", "4dBM0lx3pw")

    # ok,name = conn.login("99140198", "5u4Twf70K5")
    # ok,name = conn.login("mx20100023", "tisabet")
    # ok,name = conn.login("anything", "tisabet")

    # info = conn.getinfo("legrand")
    # info = conn.getinfo("20100023")
    # conn.find_groups_for_username('houdusse')

    # grps = conn.find_groups_for_username('houdusse')
    # for grp,users in grps.items():
    # print grp, " :  " , users
    user = "******"  # '20100023'
    sess = conn.find_sessions_for_user("%s" % user)
    for onesess in sess:
        print("Session for %s" % user, onesess)

    validsess = conn.find_valid_sessions_for_user(user)
    for valid in validsess:
        print("Valid session for today", valid)
Пример #8
0
    def get_hardware_object(self, hardware_object_name, optional=False):
        splash_screen = gui.get_splash_screen()
        if splash_screen:
            splash_screen.set_message(
                "Loading hardware object defined in %s.xml" % hardware_object_name
            )

        if not hardware_object_name in self.__loaded_hardware_objects:
            if splash_screen:
                splash_screen.inc_progress_value()
            self.__loaded_hardware_objects.append(hardware_object_name)

        hwobj = HWR.get_hardware_repository().get_hardware_object(
            hardware_object_name
        )

        if hwobj is not None:
            self.connect(hwobj, "progressInit", self.progress_init)
            self.connect(hwobj, "progressStep", self.progress_step)
            self.connect(hwobj, "progressStop", self.progress_stop)
            self.connect(hwobj, "statusMessage", self.status_message_changed)
            self.connect(hwobj, "showWarning", self.show_warning)

        if hwobj is None and not optional:
            logging.getLogger("GUI").error(
                "%s: Unable to initialize hardware object defined in %s.xml"
                % (self.objectName(), hardware_object_name[1:])
            )
            self.set_background_color(Colors.LIGHT_RED)
            self.__failed_to_load_hwobj = True
            self.setDisabled(True)

        return hwobj
Пример #9
0
def test():
    import sys

    hwr = HWR.get_hardware_repository()
    hwr.connect()

    ruche = hwr.get_hardware_object("/ruche")
    filename = sys.argv[1]
    ruche.trigger_sync(filename)
Пример #10
0
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    light = hwr.get_hardware_object("/frontlight")
    print('\nLight control for "%s"\n' % light.getUserName())
    print("   Level limits are:", light.get_limits())
    print("   Current level is:", light.getLevel())
    print("   Current state is:", light.get_state())
Пример #11
0
def beamline():
    hwr_path = "%s%s%s" % (os.path.join(
        HWR_DIR, "configuration/mockup"), os.path.pathsep,
                           os.path.join(HWR_DIR, "configuration/mockup/test"))
    HWR._instance = HWR.beamline = None
    HWR.init_hardware_repository(hwr_path)
    hwr = HWR.get_hardware_repository()
    hwr.connect()
    return HWR.beamline
Пример #12
0
 def init(self):
     controller = HWR.get_hardware_repository().get_hardware_object(
         self.get_property("controller"))
     cryostat = self.get_property("cryostat")
     self.interval = self.get_property("interval") or 10
     self.ctrl = getattr(controller, cryostat)
     if self.ctrl is not None:
         # self.get_params()
         gevent.spawn(self._do_polling)
Пример #13
0
 def _init(self):
     self.stream_hash = "#"
     self.udiffVER_Ok = False
     self.badimg = 0
     self.pollInterval = 500
     self.connected = False
     self.image_name = self.get_property("image_name")
     xml_path = HWR.get_hardware_repository().server_address[0]
     self.image = os.path.join(xml_path, self.image_name)
     self.set_is_ready(True)
Пример #14
0
 def init(self):
     self.__axis = []
     for token in self:
         if token.name() == "axis":
             axis_name = token.get_property("objectName")
             if axis_name is not None:
                 axis = HWR.get_hardware_repository().get_hardware_object(
                     axis_name)
                 if axis is not None:
                     self.__axis.append(axis)
Пример #15
0
    def get_hardware_objects_info(self):
        info_dict = {}
        for ho_name in self.__loaded_hardware_objects:
            info = HWR.get_hardware_repository().get_info(ho_name)

            if len(info) > 0:
                info_dict[ho_name] = info

        if len(info_dict):
            return "Hardware Objects:\n\n%s" % pprint.pformat(info_dict)
        else:
            return ""
Пример #16
0
    def __init__(self, parent=None, widget_name=""):

        Connectable.Connectable.__init__(self)
        QtImport.QFrame.__init__(self, parent)
        self.setObjectName(widget_name)
        self.property_bag = PropertyBag.PropertyBag()

        self.__enabled_state = True
        self.__loaded_hardware_objects = []
        self.__failed_to_load_hwobj = False
        self.__use_progress_dialog = False
        self._signal_slot_filters = {}
        self._widget_events = []

        self.setWhatsThis("%s (%s)\n" % (widget_name, self.__class__.__name__))

        self.add_property("fontSize", "string", str(self.font().pointSize()))
        self.add_property(
            "frame", "boolean", False, comment="Draw a frame around the widget"
        )
        self.add_property(
            "instanceAllowAlways",
            "boolean",
            False,
            comment="Allow to control brick in all modes",
        )
        self.add_property(
            "instanceAllowConnected",
            "boolean",
            False,
            comment="Allow to control brick in slave mode",
        )
        self.add_property(
            "fixedWidth", "integer", "-1", comment="Set fixed width in pixels"
        )
        self.add_property(
            "fixedHeight", "integer", "-1", comment="Set fixed height in pixels"
        )
        self.add_property("hide", "boolean", False, comment="Hide widget")

        dispatcher.connect(
            self.__hardware_object_discarded,
            "hardwareObjectDiscarded",
            HWR.get_hardware_repository(),
        )
        self.define_slot("enable_widget", ())
        self.define_slot("disable_widget", ())

        # If PySide used then connect method was not overriden
        # This solution of redirecting methods works...

        self.connect = self.connect_hwobj
        self.disconnect = self.disconnect_hwobj
Пример #17
0
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    ap_pos = hwr.get_hardware_object("/aperture_position")
    ap_diam = hwr.get_hardware_object("/aperture_diameter")
    yag_pos = hwr.get_hardware_object("/scintillator")
    md2_phase = hwr.get_hardware_object("/md2j_phase")

    print("Aperture Position: ", ap_pos.get_state())
    print("Aperture Diameter: ", ap_diam.get_state())
    print("Yag Posiion: ", yag_pos.get_state())
    print("MD2 Phase: ", md2_phase.get_state())
Пример #18
0
    def end_init(self):
        if self.__initialized:
            return
        controller = HWR.get_hardware_repository().get_hardware_object(
            self.get_property(
                "controller"))  # self.get_object_by_role("controller")

        # this is ugly : I added it to make the centring procedure happy
        self.specName = self.actuator_name

        self.motor = getattr(controller, self.actuator_name)
        self.connect(self.motor, "position", self.positionChanged)
        self.connect(self.motor, "state", self.updateState)
        self.__initialized = True
Пример #19
0
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    sess = HWR.beamline.session

    sess.set_user_info("mx2014", "143301", "14330", "20100023")

    path = "/927bis/ccd/2015_Run2/visitor/mx2014/px2/20150120/ARCHIVE/mx2014/mx2014_2_4.snapshot.jpeg"
    ispyb_path = sess.path_to_ispyb(path)

    print(path)
    print("  will become ")
    print(ispyb_path)
Пример #20
0
    def init(self):
        try:
            self.aperture_HO = HWR.get_hardware_repository(
            ).get_hardware_object(self.get_property("aperture"))
            self.connect(self.aperture_HO, "apertureChanged",
                         self.aperture_pos_changed)
        except Exception:
            logging.getLogger("HWR").debug(
                "BeamInfo: aperture not defined correctly")
        try:
            self.slits_HO = HWR.get_hardware_repository().get_hardware_object(
                self.get_property("slits"))
            self.connect(self.slits_HO, "gapSizeChanged",
                         self.slits_gap_changed)
        except Exception:
            logging.getLogger("HWR").debug(
                "BeamInfo: slits not defined correctly")
        try:
            self.connect(
                HWR.beamline.beam.beam_definer,
                "definerPosChanged",
                self.definer_pos_changed,
            )
        except Exception:
            logging.getLogger("HWR").debug(
                "BeamInfo: beam definer not defined correctly")

        self.beam_position_hor = self.get_channel_object("beam_position_hor")
        self.beam_position_hor.connect_signal("update",
                                              self.beam_pos_hor_changed)
        self.beam_position_ver = self.get_channel_object("beam_position_ver")
        self.beam_position_ver.connect_signal("update",
                                              self.beam_pos_ver_changed)
        self.chan_beam_size_microns = self.get_channel_object(
            "beam_size_microns")
        self.chan_beam_shape_ellipse = self.get_channel_object(
            "beam_shape_ellipse")
Пример #21
0
def test():
    from HardwareRepository import HardwareRepository as HWR

    hwr = HWR.get_hardware_repository()
    hwr.connect()

    zoom = hwr.get_hardware_object("/zoom-auto-brightness")

    print(type(zoom.get_state()))

    print("     Zoom position is : ", zoom.get_value())
    print("Zoom position name is : ", zoom.get_current_position_name())
    print("               Moving : ", zoom.motorIsMoving())
    print("                State : ", zoom.get_state())
    print("            Positions : ", zoom.get_predefined_positions_list())
    def init(self):
        self.collect_obj = self.get_object_by_role("collect")
        self.start_edna_command = self.get_property("edna_command")
        self.edna_default_file = self.get_property("edna_default_file")

        fp = HWR.get_hardware_repository().find_in_repository(self.edna_default_file)

        if fp is None:
            fp = self.edna_default_file

            if not os.path.exists(fp):
                raise ValueError("File %s not found in repository" % fp)

        with open(fp, "r") as f:
            self.edna_default_input = "".join(f.readlines())
Пример #23
0
def test():
    import sys

    hwr = HWR.get_hardware_repository()
    hwr.connect()

    conn = hwr.get_hardware_object(sys.argv[1])

    print(("Machine current: ", conn.get_current()))
    print(("Life time: ", conn.getLifeTime()))
    print(("TopUp remaining: ", conn.getTopUpRemaining()))
    print(("Message: ", conn.getMessage()))

    while True:
        gevent.wait(timeout=0.1)
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    db = HWR.beamline.lims

    print("db", db)
    print("dir(db)", dir(db))
    # print 'db._SOLEILISPyBClientShipping', db._SOLEILISPyBClientShipping
    # print 'db.Shipping', db.Shipping

    proposal_code = "mx"
    proposal_number = "20100023"
    proposal_psd = "tisabet"

    info = db.get_proposal(proposal_code, proposal_number)  # proposal_number)
    print(info)

    info = db.login(proposal_number, proposal_psd)
    print(info)
Пример #25
0
def test():
    import sys
    import os

    if len(sys.argv) != 5:
        print(
            "Usage: %s triggermode (exts/ints) nb_images exp_time energy" % sys.argv[0]
        )
        sys.exit(0)
    else:
        try:
            trigmode = sys.argv[1]
            nimages = float(sys.argv[2])
            exptime = float(sys.argv[3])
            egy = float(sys.argv[4])
        except ValueError:
            print("Cannot decode parameters. Aborting")
            sys.exit(0)

    if trigmode not in ["exts", "ints"]:
        print('Bad trigger mode. It should be "exts" or "ints"')
        sys.exit(0)

    hwr = HWR.get_hardware_repository()
    hwr.connect()
    detector = HWR.beamline.detector

    config = {
        "OmegaStart": 0,
        "OmegaIncrement": 0.1,
        "BeamCenterX": None,  # length not pixel
        "BeamCenterY": None,
        "DetectorDistance": None,
        "FrameTime": exptime,
        "NbImages": nimages,
        "NbTriggers": None,
        "ImagesPerFile": None,
        "RoiMode": "4M",
        "FilenamePattern": None,
        "PhotonEnergy": egy,
        "TriggerMode": trigmode,
    }

    if detector.get_status() == "not_init":
        print("Cannot initialize hardware object")
        sys.exit(0)

    if not detector.is_idle():
        detector.stop_acquisition()
        detector.wait_idle()

    detector.prepare_acquisition(config)

    print("Waiting for configuration finished")

    while detector.is_preparing():
        gevent.wait(timeout=0.1)
        gevent.sleep(0.1)
        print(".")

    if detector.prepare_error():
        print("Prepare went wrong. Aborting")
        sys.exit(0)

    readout_time = detector.get_readout_time()
    print("EIGER configuration done")

    print("Starting acquisition (trigmode = %s)" % trigmode)
    if trigmode == "exts":
        total_time = nimages * (exptime + readout_time)
        print("Total exposure time (estimated) will be: %s", total_time)

    try:
        detector.start_acquisition()

        if trigmode == "exts":
            print("  - waiting for trigger.")
            sys.stdout.flush()
            detector.wait_acquire()
            print("  - trigger received. Acquiring")
            detector.wait_ready_or_idle()
        else:
            detector.trigger()
            detector.wait_ready_or_idle()

        detector.stop_acquisition()
        print("Acquisition done")
    except KeyboardInterrupt:
        detector.abort()
        detector.wait_idle()
Пример #26
0
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    calib = hwr.get_hardware_object("/calibration")
    print("Calibration is: ", calib.getCalibration())
Пример #27
0
def test():
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    motor = hwr.get_hardware_object("/phi")
    print(motor.get_value())
Пример #28
0
        self.centring_phi_incr = float(value)
        self.setProperty("centring_phi_increment", value)

    def getCentringSampleType(self):
        return self.centring_sample_type

    def setCentringSampleType(self, value):
        self.centring_sample_type = value
        self.setProperty("centring_sample_type", value)

    def save(self):
        self.commit_changes()


if __name__ == "__main__":
    hwr = HWR.get_hardware_repository()
    hwr.connect()

    env = hwr.get_hardware_object("/px1configuration")

    print("PX1 Configuration ")
    use_edna = env.getUseEDNA()
    print("    use_edna %s / (type: %s)" % (use_edna, type(use_edna)))
    print("    pin_length", env.getPinLength())
    print("    centring")
    print("       nb points", env.getCentringPoints())
    print("       phi incr", env.getCentringPhiIncrement())
    print("       sample type", env.getCentringSampleType())
    env.setUseEDNA("False")
    env.setPinLength("10")
    print("    use_edna %s " % env.getUseEDNA())
Пример #29
0
    def init(self):
        self.centringMethods = {
            MiniDiff.MANUAL3CLICK_MODE: self.start_manual_centring,
            MiniDiff.C3D_MODE: self.start_auto_centring,
        }

        self.cancel_centring_methods = {}

        self.current_centring_procedure = None
        self.currentCentringMethod = None

        self.centringStatus = {"valid": False}

        self.chiAngle = self.get_property("chi", 0)

        try:
            phiz_ref = self["centringReferencePosition"].get_property("phiz")
        except:
            phiz_ref = None

        try:
            phiy_ref = self["centringReferencePosition"].get_property("phiy")
        except:
            phiy_ref = None

        self.phiMotor = self.get_object_by_role("phi")
        self.phizMotor = self.get_object_by_role("phiz")
        self.phiyMotor = self.get_object_by_role("phiy")
        self.zoomMotor = self.get_object_by_role("zoom")
        self.lightMotor = self.get_object_by_role("light")
        self.focusMotor = self.get_object_by_role("focus")
        self.sampleXMotor = self.get_object_by_role("sampx")
        self.sampleYMotor = self.get_object_by_role("sampy")
        self.kappaMotor = self.get_object_by_role("kappa")
        self.kappaPhiMotor = self.get_object_by_role("kappa_phi")

        # mh 2013-11-05:why is the channel read directly? disabled for the moment
        # HWR.beamline.sample_view.camera.add_channel({ 'type': 'tango', 'name': 'jpegImage' }, "JpegImage")

        self.centringPhi = sample_centring.CentringMotor(self.phiMotor,
                                                         direction=-1)
        self.centringPhiz = sample_centring.CentringMotor(
            self.phizMotor, reference_position=phiz_ref)
        self.centringPhiy = sample_centring.CentringMotor(
            self.phiyMotor, reference_position=phiy_ref)
        self.centringSamplex = sample_centring.CentringMotor(self.sampleXMotor)
        self.centringSampley = sample_centring.CentringMotor(self.sampleYMotor)

        roles_to_add = ["aperture", "beamstop", "cryostream", "capillary"]

        for role in roles_to_add:
            self.if_role_set_attr(role)

        hwr = HWR.get_hardware_repository()
        wl_prop = self.get_property("wagolight")
        if wl_prop is not None:
            try:
                self.lightWago = hwr.get_hardware_object(wl_prop)
            except Exception:
                pass

        if self.phiMotor is not None:
            self.connect(self.phiMotor, "stateChanged",
                         self.phiMotorStateChanged)
            self.connect(self.phiMotor, "valueChanged",
                         self.emit_diffractometer_moved)
        else:
            logging.getLogger("HWR").error(
                "MiniDiff: phi motor is not defined in minidiff equipment %s",
                str(self.name()),
            )
        if self.phizMotor is not None:
            self.connect(self.phizMotor, "stateChanged",
                         self.phizMotorStateChanged)
            self.connect(self.phizMotor, "valueChanged", self.phizMotorMoved)
            self.connect(self.phizMotor, "valueChanged",
                         self.emit_diffractometer_moved)
        else:
            logging.getLogger("HWR").error(
                "MiniDiff: phiz motor is not defined in minidiff equipment %s",
                str(self.name()),
            )
        if self.phiyMotor is not None:
            self.connect(self.phiyMotor, "stateChanged",
                         self.phiyMotorStateChanged)
            self.connect(self.phiyMotor, "valueChanged", self.phiyMotorMoved)
            self.connect(self.phiyMotor, "valueChanged",
                         self.emit_diffractometer_moved)
        else:
            logging.getLogger("HWR").error(
                "MiniDiff: phiy motor is not defined in minidiff equipment %s",
                str(self.name()),
            )
        if self.zoomMotor is not None:
            self.connect(self.zoomMotor, "valueChanged",
                         self.zoomMotorPredefinedPositionChanged)

            self.connect(
                self.zoomMotor,
                "predefinedPositionChanged",
                self.zoomMotorPredefinedPositionChanged,
            )
            self.connect(self.zoomMotor, "stateChanged",
                         self.zoomMotorStateChanged)
        else:
            logging.getLogger("HWR").error(
                "MiniDiff: zoom motor is not defined in minidiff equipment %s",
                str(self.name()),
            )
        if self.sampleXMotor is not None:
            self.connect(self.sampleXMotor, "stateChanged",
                         self.sampleXMotorStateChanged)
            self.connect(self.sampleXMotor, "valueChanged",
                         self.sampleXMotorMoved)
            self.connect(self.sampleXMotor, "valueChanged",
                         self.emit_diffractometer_moved)
        else:
            logging.getLogger("HWR").error(
                "MiniDiff: sampx motor is not defined in minidiff equipment %s",
                str(self.name()),
            )
        if self.sampleYMotor is not None:
            self.connect(self.sampleYMotor, "stateChanged",
                         self.sampleYMotorStateChanged)
            self.connect(self.sampleYMotor, "valueChanged",
                         self.sampleYMotorMoved)
            self.connect(self.sampleYMotor, "valueChanged",
                         self.emit_diffractometer_moved)
        else:
            logging.getLogger("HWR").error(
                "MiniDiff: sampx motor is not defined in minidiff equipment %s",
                str(self.name()),
            )
        # if HWR.beamline.sample_view.camera is None:
        #     logging.getLogger("HWR").error(
        #         "MiniDiff: camera is not defined in minidiff equipment %s",
        #         str(self.name()),
        #     )
        # else:
        #     self.imgWidth, self.imgHeight = (
        #         HWR.beamline.sample_view.camera.get_width(),
        #         HWR.beamline.sample_view.camera.get_height(),
        #     )
        if HWR.beamline.sample_changer is None:
            logging.getLogger("HWR").warning(
                "MiniDiff: sample changer is not defined in minidiff equipment %s",
                str(self.name()),
            )
        else:
            try:
                self.connect(
                    HWR.beamline.sample_changer,
                    "sampleIsLoaded",
                    self.sampleChangerSampleIsLoaded,
                )
            except Exception:
                logging.getLogger("HWR").exception(
                    "MiniDiff: could not connect to sample changer smart magnet"
                )
        if self.lightWago is not None:
            self.connect(self.lightWago, "wagoStateChanged",
                         self.wagoLightStateChanged)
        else:
            logging.getLogger("HWR").warning(
                "MiniDiff: wago light is not defined in minidiff equipment %s",
                str(self.name()),
            )
        if self.aperture is not None:
            self.connect(self.aperture, "predefinedPositionChanged",
                         self.apertureChanged)
            self.connect(self.aperture, "positionReached",
                         self.apertureChanged)