예제 #1
0
    def initialize(self):
        """Initialise the camera.

        Open the connection, connect properties and populate settings
        dict.

        """
        try:
            self.handle = SDK3.Open(self._index)
        except Exception as e:
            raise microscope.InitialiseError("Problem opening camera.") from e
        if self.handle == None:
            raise microscope.InitialiseError("No camera opened.")
        for name, var in sorted(self.__dict__.items()):
            if isinstance(var, ATProperty):
                sdk_name = SDK_NAMES[name]
                if not SDK3.IsImplemented(self.handle, sdk_name):
                    delattr(self, name)
                    continue
                var.connect(self.handle, sdk_name)

                if type(var) is ATCommand:
                    continue

                is_readonly_func = var.is_readonly
                if type(var) is ATEnum:
                    set_func = var.set_index
                    get_func = var.get_index
                    vals_func = var.get_available_values
                else:
                    set_func = var.set_value
                    get_func = var.get_value
                    if type(var) is ATString:
                        vals_func = var.max_length
                    elif type(var) in (ATFloat, ATInt):
                        vals_func = lambda v=var: (v.min(), v.max())
                    else:
                        vals_func = None

                if name in INVALIDATES_BUFFERS:
                    set_func = self.invalidate_buffers(set_func)

                self.add_setting(
                    name.lstrip("_"),
                    PROPERTY_TYPES[type(var)],
                    get_func,
                    set_func,
                    vals_func,
                    is_readonly_func,
                )
        # Default setup.
        self.set_cooling(True)
        if not self._camera_model.getValue().startswith("SIMCAM"):
            self._trigger_mode.set_string("Software")
            self._cycle_mode.set_string("Continuous")
        else:
            _logger.warn("No hardware found - using SIMCAM")

        def callback(*args):
            data = self._fetch_data(timeout=500)
            timestamp = time.time()
            if data is not None:
                self._put(data, timestamp)
                return 0
            else:
                return -1

        self._exposure_callback = SDK3.CALLBACKTYPE(callback)
예제 #2
0
 def isImplemented(self):
     return SDK3.IsImplemented(self.handle, self.propertyName).value