[docs]classPilatusReadoutTime(float,Enum):"""Pilatus readout time per model in ms."""# Cite: https://media.dectris.com/User_Manual-PILATUS2-V1_4.pdfPILATUS2=2.28e-3# Cite: https://media.dectris.com/user-manual-pilatus3-2020.pdfPILATUS3=0.95e-3
[docs]classPilatusController(adcore.ADBaseController[PilatusDriverIO]):"""`DetectorController` for a `PilatusDriverIO`."""_supported_trigger_types={DetectorTrigger.INTERNAL:PilatusTriggerMode.INTERNAL,DetectorTrigger.CONSTANT_GATE:PilatusTriggerMode.EXT_ENABLE,DetectorTrigger.VARIABLE_GATE:PilatusTriggerMode.EXT_ENABLE,DetectorTrigger.EDGE_TRIGGER:PilatusTriggerMode.EXT_TRIGGER,}def__init__(self,driver:PilatusDriverIO,good_states:frozenset[adcore.ADState]=adcore.DEFAULT_GOOD_STATES,readout_time:float=PilatusReadoutTime.PILATUS3,)->None:super().__init__(driver,good_states=good_states)self._readout_time=readout_time
[docs]asyncdefarm(self):# Standard arm the detector and wait for the acquire PV to be Trueself._arm_status=awaitself.start_acquiring_driver_and_ensure_status()# The pilatus has an additional PV that goes True when the camserver# is actually ready. Should wait for that too or we risk dropping# a frameawaitwait_for_value(self.driver.armed,True,timeout=DEFAULT_TIMEOUT,)