BioImager  3.9.1
A .NET microscopy imaging library. Supports various microscopes by using imported libraries & GUI automation. Supported libraries include PriorĀ® & ZeissĀ® & all devices supported by Micromanager 2.0 and python-microscope.
Loading...
Searching...
No Matches
microscope.cameras.ximea.XimeaCamera Class Reference
Inheritance diagram for microscope.cameras.ximea.XimeaCamera:
microscope.abc.Camera microscope.abc.TriggerTargetMixin microscope.abc.DataDevice microscope.abc.Device

Public Member Functions

None __init__ (self, typing.Optional[str] serial_number=None, **kwargs)
 
def abort (self)
 
None initialize (self)
 
None set_exposure_time (self, float value)
 
float get_exposure_time (self)
 
def get_cycle_time (self)
 
None soft_trigger (self)
 
microscope.TriggerMode trigger_mode (self)
 
microscope.TriggerType trigger_type (self)
 
None set_trigger (self, microscope.TriggerType ttype, microscope.TriggerMode tmode)
 
- Public Member Functions inherited from microscope.abc.Camera
None __init__ (self, **kwargs)
 
def set_readout_mode (self, description)
 
def get_transform (self)
 
def set_transform (self, transform)
 
None set_exposure_time (self, float value)
 
float get_exposure_time (self)
 
float get_cycle_time (self)
 
typing.Tuple[int, int] get_sensor_shape (self)
 
microscope.Binning get_binning (self)
 
None set_binning (self, microscope.Binning binning)
 
microscope.ROI get_roi (self)
 
None set_roi (self, microscope.ROI roi)
 
- Public Member Functions inherited from microscope.abc.TriggerTargetMixin
microscope.TriggerMode trigger_mode (self)
 
microscope.TriggerType trigger_type (self)
 
None set_trigger (self, microscope.TriggerType ttype, microscope.TriggerMode tmode)
 
None trigger (self)
 
- Public Member Functions inherited from microscope.abc.DataDevice
None __init__ (self, int buffer_length=0, **kwargs)
 
def __del__ (self)
 
None abort (self)
 
None enable (self)
 
None disable (self)
 
None set_client (self, new_client)
 
None update_settings (self, settings, bool init=False)
 
None receiveClient (self, str client_uri)
 
def grab_next_data (self, bool soft_trigger=True)
 
None receiveData (self, data, timestamp)
 
- Public Member Functions inherited from microscope.abc.Device
None __init__ (self)
 
None __del__ (self)
 
bool get_is_enabled (self)
 
None disable (self)
 
None enable (self)
 
None initialize (self)
 
None shutdown (self)
 
None add_setting (self, name, dtype, get_func, set_func, values, typing.Optional[typing.Callable[[], bool]] readonly=None)
 
def get_setting (self, str name)
 
def get_all_settings (self)
 
None set_setting (self, str name, value)
 
def describe_setting (self, str name)
 
def describe_settings (self)
 
def update_settings (self, incoming, bool init=False)
 

Additional Inherited Members

- Public Attributes inherited from microscope.abc.DataDevice
 enabled
 
- Public Attributes inherited from microscope.abc.Device
 enabled
 
- Static Public Attributes inherited from microscope.abc.Camera
list ALLOWED_TRANSFORMS = [p for p in itertools.product(*3 * [[False, True]])]
 
- Static Public Attributes inherited from microscope.abc.DataDevice
 set_setting = keep_acquiring(Device.set_setting)
 

Detailed Description

Ximea cameras

Args:
    serial_number: the serial number of the camera to connect to.
        It can be set to `None` if there is only camera on the
        system.

Definition at line 176 of file ximea.py.

Constructor & Destructor Documentation

◆ __init__()

None microscope.cameras.ximea.XimeaCamera.__init__ (   self,
typing.Optional[str]   buffer_length = None,
**  kwargs 
)
Derived.__init__ must call this at some point.

Reimplemented from microscope.abc.Camera.

Definition at line 186 of file ximea.py.

188 ) -> None:
189 super().__init__(**kwargs)
190 self._acquiring = False
191 self._handle = xiapi.Camera()
192 self._img = xiapi.Image()
193 self._serial_number = serial_number
194 self._sensor_shape = (0, 0)
195 self._roi = microscope.ROI(None, None, None, None)
196 self._binning = microscope.Binning(1, 1)
197
198 # When using the Settings system, enums are not really enums
199 # and even when using lists we get indices sent back and forth
200 # (works fine only when using EnumInt. The gymnastic here
201 # makes it work with the rest of enums which are there to make
202 # it work with TriggerTargetMixin.
203 trg_source_names = [x.name for x in TrgSourceMap]
204
205 def _trigger_source_setter(index: int) -> None:
206 trigger_mode = TrgSourceMap[trg_source_names[index]].value
207 self.set_trigger(trigger_mode, self.trigger_mode)
208
209 self.add_setting(
210 "trigger source",
211 "enum",
212 lambda: TrgSourceMap(self.trigger_type).name,
213 _trigger_source_setter,
214 trg_source_names,
215 )
216
217 self.initialize()
218

References microscope.cameras.ximea.XimeaCamera.__init__(), microscope.abc.DataDevice._acquiring, microscope.cameras.andorsdk3.AndorSDK3._acquiring(), microscope.cameras.atmcd.AndorAtmcd._acquiring(), microscope.cameras.picam.PiCamera._acquiring, microscope.cameras.pvcam.PVCamera._acquiring, microscope.cameras.ximea.XimeaCamera._acquiring, microscope.simulators.SimulatedCamera._acquiring, microscope.cameras.atmcd.AndorAtmcd._binning, microscope.cameras.ximea.XimeaCamera._binning, microscope.simulators.SimulatedCamera._binning, microscope.cameras.atmcd.AndorAtmcd._handle, microscope.cameras.ximea.XimeaCamera._handle, microscope.cameras.ximea.XimeaCamera._img, microscope.cameras.atmcd.AndorAtmcd._roi, microscope.cameras.ximea.XimeaCamera._roi, microscope.simulators.SimulatedCamera._roi, microscope.cameras.ximea.XimeaCamera._sensor_shape, microscope.cameras.andorsdk3.AndorSDK3._serial_number, microscope.cameras.ximea.XimeaCamera._serial_number, microscope.abc.Device.add_setting(), microscope.abc.Device.initialize(), microscope.cameras.andorsdk3.AndorSDK3.initialize(), microscope.cameras.atmcd.AndorAtmcd.initialize(), microscope.cameras.picam.PiCamera.initialize(), microscope.cameras.pvcam.PVCamera.initialize(), microscope.cameras.ximea.XimeaCamera.initialize(), microscope.lights.cobolt.CoboltLaser.initialize(), microscope.lights.obis.ObisLaser.initialize(), microscope.lights.sapphire.SapphireLaser.initialize(), microscope.testsuite.devices.TestFloatingDevice.initialize(), microscope._utils.OnlyTriggersOnceOnSoftwareMixin.set_trigger(), microscope._utils.OnlyTriggersBulbOnSoftwareMixin.set_trigger(), microscope.abc.TriggerTargetMixin.set_trigger(), microscope.cameras.andorsdk3.AndorSDK3.set_trigger(), microscope.cameras.atmcd.AndorAtmcd.set_trigger(), microscope.cameras.pvcam.PVCamera.set_trigger(), microscope.cameras.ximea.XimeaCamera.set_trigger(), microscope.controllers.coolled._CoolLEDChannel.set_trigger(), microscope.controllers.toptica._iChromeLaser.set_trigger(), microscope.lights.deepstar.DeepstarLaser.set_trigger(), microscope.lights.obis.ObisLaser.set_trigger(), microscope.cameras.picam.PiCamera.set_trigger(), microscope.mirror.alpao.AlpaoDeformableMirror.set_trigger(), microscope._utils.OnlyTriggersOnceOnSoftwareMixin.trigger_mode(), microscope._utils.OnlyTriggersBulbOnSoftwareMixin.trigger_mode(), microscope.abc.TriggerTargetMixin.trigger_mode(), microscope.cameras.andorsdk3.AndorSDK3.trigger_mode(), microscope.cameras.atmcd.AndorAtmcd.trigger_mode(), microscope.cameras.picam.PiCamera.trigger_mode(), microscope.cameras.pvcam.PVCamera.trigger_mode(), microscope.cameras.ximea.XimeaCamera.trigger_mode(), microscope.controllers.coolled._CoolLEDChannel.trigger_mode(), microscope.controllers.toptica._iChromeLaser.trigger_mode(), microscope.lights.deepstar.DeepstarLaser.trigger_mode(), microscope.lights.obis.ObisLaser.trigger_mode(), microscope.mirror.alpao.AlpaoDeformableMirror.trigger_mode(), microscope._utils.OnlyTriggersOnceOnSoftwareMixin.trigger_type(), microscope._utils.OnlyTriggersBulbOnSoftwareMixin.trigger_type(), microscope.abc.TriggerTargetMixin.trigger_type(), microscope.cameras.andorsdk3.AndorSDK3.trigger_type(), microscope.cameras.atmcd.AndorAtmcd.trigger_type(), microscope.cameras.picam.PiCamera.trigger_type(), microscope.cameras.pvcam.PVCamera.trigger_type(), microscope.cameras.ximea.XimeaCamera.trigger_type(), microscope.controllers.coolled._CoolLEDChannel.trigger_type(), microscope.controllers.toptica._iChromeLaser.trigger_type(), microscope.lights.deepstar.DeepstarLaser.trigger_type(), microscope.lights.obis.ObisLaser.trigger_type(), and microscope.mirror.alpao.AlpaoDeformableMirror.trigger_type().

Referenced by microscope.cameras.ximea.XimeaCamera.__init__().

Member Function Documentation

◆ abort()

def microscope.cameras.ximea.XimeaCamera.abort (   self)
Stop acquisition as soon as possible.

Reimplemented from microscope.abc.DataDevice.

Definition at line 246 of file ximea.py.

246 def abort(self):
247 _logger.info("Disabling acquisition.")
248 if self._acquiring:
249 # We set acquiring before calling stop_acquisition because
250 # the fetch loop is still running and will raise errors 45
251 # otherwise.
252 self._acquiring = False
253 try:
254 self._handle.stop_acquisition()
255 except Exception:
256 self._acquiring = True
257 raise
258

References microscope.abc.DataDevice._acquiring, microscope.cameras.andorsdk3.AndorSDK3._acquiring(), microscope.cameras.atmcd.AndorAtmcd._acquiring(), microscope.cameras.picam.PiCamera._acquiring, microscope.cameras.pvcam.PVCamera._acquiring, microscope.cameras.ximea.XimeaCamera._acquiring, microscope.simulators.SimulatedCamera._acquiring, microscope.cameras.atmcd.AndorAtmcd._handle, and microscope.cameras.ximea.XimeaCamera._handle.

Referenced by microscope.simulators.SimulatedCamera.abort(), microscope.cameras.andorsdk3.AndorSDK3.get_id(), microscope.cameras.atmcd.AndorAtmcd.get_id(), microscope.cameras.picam.PiCamera.initialize(), microscope.cameras.ximea.XimeaCamera.initialize(), microscope.cameras.andorsdk3.AndorSDK3.set_trigger(), and microscope.abc.Device.update_settings().

◆ get_cycle_time()

◆ get_exposure_time()

float microscope.cameras.ximea.XimeaCamera.get_exposure_time (   self)
Return the current exposure time in seconds.

Reimplemented from microscope.abc.Camera.

Definition at line 355 of file ximea.py.

355 def get_exposure_time(self) -> float:
356 # exposure times are in us, so multiple by 1E-6 to get seconds.
357 return self._handle.get_exposure() * 1.0e-6
358

References microscope.cameras.atmcd.AndorAtmcd._handle, and microscope.cameras.ximea.XimeaCamera._handle.

◆ initialize()

None microscope.cameras.ximea.XimeaCamera.initialize (   self)
Initialise the camera.

Open the connection, connect properties and populate settings dict.

Reimplemented from microscope.abc.Device.

Definition at line 259 of file ximea.py.

259 def initialize(self) -> None:
260 """Initialise the camera.
261
262 Open the connection, connect properties and populate settings dict.
263 """
264 n_cameras = self._handle.get_number_devices()
265
266 if self._serial_number is None:
267 if n_cameras > 1:
268 raise TypeError(
269 "more than one Ximea camera found but the"
270 " serial_number argument was not specified"
271 )
272 _logger.info(
273 "serial_number is not specified but there is only one"
274 " camera on the system"
275 )
276 self._handle.open_device()
277 else:
278 _logger.info(
279 "opening camera with serial number '%s'", self._serial_number
280 )
281 self._handle.open_device_by_SN(self._serial_number)
282
283 self._sensor_shape = (
284 self._handle.get_width_maximum()
285 + self._handle.get_offsetX_maximum(),
286 self._handle.get_height_maximum()
287 + self._handle.get_offsetY_maximum(),
288 )
289 self._roi = microscope.ROI(
290 left=0,
291 top=0,
292 width=self._sensor_shape[0],
293 height=self._sensor_shape[1],
294 )
295 self.set_roi(self._roi)
296
297 self.set_trigger(
298 microscope.TriggerType.SOFTWARE, microscope.TriggerMode.ONCE
299 )
300
301 # Add settings for the different temperature sensors.
302 for temp_param_name in [
303 "chip_temp",
304 "hous_temp",
305 "hous_back_side_temp",
306 "sensor_board_temp",
307 ]:
308 get_temp_method = getattr(self._handle, "get_" + temp_param_name)
309 # Not all cameras have temperature sensors in all
310 # locations. We can't query if the sensor is there, we
311 # can only try to read the temperature and skip that
312 # temperature sensor if we get an exception.
313 try:
314 get_temp_method()
315 except xiapi.Xi_error as err:
316 # Depending on XiAPI version, camera model, and
317 # selected sensor, we might get any of these errors as
318 # meaning that it's not available. See
319 # https://github.com/python-microscope/vendor-issues/issues/6
320 if err.status not in [
321 _XI_NOT_SUPPORTED,
322 _XI_NOT_IMPLEMENTED,
323 _XI_UNKNOWN_PARAM,
324 ]:
325 raise
326 else:
327 self.add_setting(
328 temp_param_name,
329 "float",
330 get_temp_method,
331 None,
332 values=tuple(),
333 )
334

References microscope.abc.DataDevice._acquiring, microscope.cameras.andorsdk3.AndorSDK3._acquiring(), microscope.cameras.atmcd.AndorAtmcd._acquiring(), microscope.cameras.picam.PiCamera._acquiring, microscope.cameras.pvcam.PVCamera._acquiring, microscope.cameras.ximea.XimeaCamera._acquiring, microscope.simulators.SimulatedCamera._acquiring, microscope.cameras.atmcd.AndorAtmcd._handle, microscope.cameras.ximea.XimeaCamera._handle, microscope.cameras.atmcd.AndorAtmcd._roi, microscope.cameras.ximea.XimeaCamera._roi, microscope.simulators.SimulatedCamera._roi, microscope.cameras.ximea.XimeaCamera._sensor_shape, microscope.cameras.andorsdk3.AndorSDK3._serial_number, microscope.cameras.ximea.XimeaCamera._serial_number, microscope.abc.DataDevice.abort(), microscope.cameras.andorsdk3.AndorSDK3.abort(), microscope.cameras.atmcd.AndorAtmcd.abort(), microscope.cameras.picam.PiCamera.abort(), microscope.cameras.pvcam.PVCamera.abort(), microscope.cameras.ximea.XimeaCamera.abort(), microscope.simulators.SimulatedCamera.abort(), microscope.abc.Device.add_setting(), microscope.abc.Camera.set_roi(), microscope._utils.OnlyTriggersOnceOnSoftwareMixin.set_trigger(), microscope._utils.OnlyTriggersBulbOnSoftwareMixin.set_trigger(), microscope.abc.TriggerTargetMixin.set_trigger(), microscope.cameras.andorsdk3.AndorSDK3.set_trigger(), microscope.cameras.atmcd.AndorAtmcd.set_trigger(), microscope.cameras.pvcam.PVCamera.set_trigger(), microscope.cameras.ximea.XimeaCamera.set_trigger(), microscope.controllers.coolled._CoolLEDChannel.set_trigger(), microscope.controllers.toptica._iChromeLaser.set_trigger(), microscope.lights.deepstar.DeepstarLaser.set_trigger(), microscope.lights.obis.ObisLaser.set_trigger(), microscope.cameras.picam.PiCamera.set_trigger(), and microscope.mirror.alpao.AlpaoDeformableMirror.set_trigger().

Referenced by microscope.cameras.picam.PiCamera.__init__(), microscope.cameras.ximea.XimeaCamera.__init__(), and microscope.cameras.picam.PiCamera.initialize().

◆ set_exposure_time()

None microscope.cameras.ximea.XimeaCamera.set_exposure_time (   self,
float  value 
)
Set the exposure time on the device in seconds.

Reimplemented from microscope.abc.Camera.

Definition at line 348 of file ximea.py.

348 def set_exposure_time(self, value: float) -> None:
349 # exposure times are set in us.
350 try:
351 self._handle.set_exposure_direct(int(value * 1000000))
352 except Exception as err:
353 _logger.debug("set_exposure_time exception: %s", err)
354

References microscope.cameras.atmcd.AndorAtmcd._handle, and microscope.cameras.ximea.XimeaCamera._handle.

◆ set_trigger()

None microscope.cameras.ximea.XimeaCamera.set_trigger (   self,
microscope.TriggerType  ttype,
microscope.TriggerMode   tmode 
)
Set device for a specific trigger.

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 455 of file ximea.py.

457 ) -> None:
458 if tmode is not microscope.TriggerMode.ONCE:
460 "%s not supported (only TriggerMode.ONCE)" % tmode
461 )
462
463 try:
464 trg_source = TrgSourceMap(ttype)
465 except ValueError:
467 "no support for trigger type %s" % ttype
468 )
469
470 if trg_source.name != self._handle.get_trigger_source():
471 # Changing trigger source requires stopping acquisition.
472 with _disabled_camera(self):
473 self._handle.set_trigger_source(trg_source.name)

References microscope.cameras.atmcd.AndorAtmcd._handle, and microscope.cameras.ximea.XimeaCamera._handle.

Referenced by microscope.cameras.picam.PiCamera.__init__(), microscope.cameras.ximea.XimeaCamera.__init__(), and microscope.cameras.ximea.XimeaCamera.initialize().

◆ soft_trigger()

None microscope.cameras.ximea.XimeaCamera.soft_trigger (   self)

Definition at line 365 of file ximea.py.

365 def soft_trigger(self) -> None:
366 self.trigger()
367

Referenced by microscope.cameras.picam.PiCamera.get_cycle_time().

◆ trigger_mode()

microscope.TriggerMode microscope.cameras.ximea.XimeaCamera.trigger_mode (   self)

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 434 of file ximea.py.

434 def trigger_mode(self) -> microscope.TriggerMode:
435 trg_selector = self._handle.get_trigger_selector()
436 try:
437 tmode = TrgSelectorMap[trg_selector]
438 except KeyError:
439 raise Exception(
440 "somehow set to unsupported trigger mode %s" % trg_selector
441 )
442 return tmode.value
443

Referenced by microscope.cameras.picam.PiCamera.__init__(), and microscope.cameras.ximea.XimeaCamera.__init__().

◆ trigger_type()

microscope.TriggerType microscope.cameras.ximea.XimeaCamera.trigger_type (   self)

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 445 of file ximea.py.

445 def trigger_type(self) -> microscope.TriggerType:
446 trg_source = self._handle.get_trigger_source()
447 try:
448 ttype = TrgSourceMap[trg_source]
449 except KeyError:
450 raise Exception(
451 "somehow set to unsupported trigger type %s" % trg_source
452 )
453 return ttype.value
454

Referenced by microscope.cameras.ximea.XimeaCamera.__init__(), microscope.abc.DeformableMirror.apply_pattern(), and microscope.abc.TriggerTargetMixin.trigger().


The documentation for this class was generated from the following file: