Source code for mxcubecore.HardwareObjects.ESRF.TangoKeithleyPhotonFlux

import time

# from PyTango.gevent import DeviceProxy
from PyTango import DeviceProxy

from mxcubecore.BaseHardwareObjects import HardwareObject
from mxcubecore.TaskUtils import task


[docs]class TangoKeithleyPhotonFlux(HardwareObject): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
[docs] def init(self): self.get_object_by_role("controller") self.shutter = self.get_deviceby_role("shutter") self.aperture = self.get_object_by_role("aperture") self.factor = self.get_property("current_photons_factor") self.shutter.connect("shutterStateChanged", self.shutterStateChanged) self.tg_device = DeviceProxy(self.get_property("tango_device")) self.counts_reading_task = self._read_counts_task(wait=False)
@task def _read_counts_task(self): old_counts = None while True: counts = self._get_counts() if counts != old_counts: old_counts = counts self.countsUpdated(counts) time.sleep(1) def _get_counts(self): self.tg_device.MeasureSingle() counts = abs(self.tg_device.ReadData) * 1e6 if self.aperture: try: aperture_coef = self.aperture.getApertureCoef() except Exception: aperture_coef = 1 else: aperture_coef = 1 counts *= aperture_coef return counts def connect_notify(self, signal): if signal == "valueChanged": self.emitValueChanged() def shutterStateChanged(self, _): self.countsUpdated(self._get_counts()) def updateFlux(self, _): self.countsUpdated(self._get_counts(), ignore_shutter_state=True) def countsUpdated(self, counts, ignore_shutter_state=False): if not ignore_shutter_state and self.shutter.getShutterState() != "opened": self.emitValueChanged(0) return flux = counts * self.factor self.emitValueChanged("%1.3g" % flux) def get_value(self): return self.current_flux def emitValueChanged(self, flux=None): self.current_flux = flux if flux is None: self.emit("valueChanged", ("?",)) else: self.emit("valueChanged", (self.current_flux,))