Source code for ophyd_async.epics.adpilatus._pilatus

from enum import Enum

from bluesky.protocols import Hints

from ophyd_async.core import PathProvider, StandardDetector
from ophyd_async.epics import adcore

from ._pilatus_controller import PilatusController
from ._pilatus_io import PilatusDriverIO


#: Cite: https://media.dectris.com/User_Manual-PILATUS2-V1_4.pdf
#: The required minimum time difference between ExpPeriod and ExpTime
#: (readout time) is 2.28 ms
#: We provide an option to override for newer Pilatus models
[docs] class PilatusReadoutTime(float, Enum): """Pilatus readout time per model in ms""" # Cite: https://media.dectris.com/User_Manual-PILATUS2-V1_4.pdf pilatus2 = 2.28e-3 # Cite: https://media.dectris.com/user-manual-pilatus3-2020.pdf pilatus3 = 0.95e-3
[docs] class PilatusDetector(StandardDetector): """A Pilatus StandardDetector writing HDF files""" _controller: PilatusController _writer: adcore.ADHDFWriter def __init__( self, prefix: str, path_provider: PathProvider, readout_time: PilatusReadoutTime = PilatusReadoutTime.pilatus3, drv_suffix: str = "cam1:", hdf_suffix: str = "HDF1:", name: str = "", ): self.drv = PilatusDriverIO(prefix + drv_suffix) self.hdf = adcore.NDFileHDFIO(prefix + hdf_suffix) super().__init__( PilatusController(self.drv, readout_time=readout_time.value), adcore.ADHDFWriter( self.hdf, path_provider, lambda: self.name, adcore.ADBaseDatasetDescriber(self.drv), ), config_sigs=(self.drv.acquire_time,), name=name, ) @property def hints(self) -> Hints: return self._writer.hints