mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2025-06-24 03:38:00 +02:00
refactor: eiger, add trigger function
This commit is contained in:
@ -23,12 +23,14 @@ logger = bec_logger.logger
|
||||
|
||||
|
||||
class EigerError(Exception):
|
||||
'''Base class for exceptions in this module.'''
|
||||
"""Base class for exceptions in this module."""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class EigerTimeoutError(Exception):
|
||||
'''Raised when the Eiger does not respond in time during unstage.'''
|
||||
"""Raised when the Eiger does not respond in time during unstage."""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
@ -37,6 +39,7 @@ class SlsDetectorCam(Device):
|
||||
|
||||
Base class to map EPICS PVs to ophyd signals.
|
||||
"""
|
||||
|
||||
threshold_energy = ADCpt(EpicsSignalWithRBV, "ThresholdEnergy")
|
||||
beam_energy = ADCpt(EpicsSignalWithRBV, "BeamEnergy")
|
||||
bit_depth = ADCpt(EpicsSignalWithRBV, "BitDepth")
|
||||
@ -50,6 +53,7 @@ class SlsDetectorCam(Device):
|
||||
|
||||
class TriggerSource(int, enum.Enum):
|
||||
"""Trigger signals for Eiger9M detector"""
|
||||
|
||||
AUTO = 0
|
||||
TRIGGER = 1
|
||||
GATING = 2
|
||||
@ -58,6 +62,7 @@ class TriggerSource(int, enum.Enum):
|
||||
|
||||
class DetectorState(int, enum.Enum):
|
||||
"""Detector states for Eiger9M detector"""
|
||||
|
||||
IDLE = 0
|
||||
ERROR = 1
|
||||
WAITING = 2
|
||||
@ -155,8 +160,7 @@ class Eiger9mCsaxs(DetectorBase):
|
||||
|
||||
# TODO function for abstract class?
|
||||
def _init(self) -> None:
|
||||
"""Initialize detector, filewriter and set default parameters
|
||||
"""
|
||||
"""Initialize detector, filewriter and set default parameters"""
|
||||
self._default_parameter()
|
||||
self._init_detector()
|
||||
self._init_filewriter()
|
||||
@ -316,6 +320,7 @@ class Eiger9mCsaxs(DetectorBase):
|
||||
self.cam.num_images.put(int(self.scaninfo.num_points * self.scaninfo.frames_per_trigger))
|
||||
self.cam.num_frames.put(1)
|
||||
|
||||
# TODO function for abstract class? + call it for each scan??
|
||||
def _set_trigger(self, trigger_source: TriggerSource) -> None:
|
||||
"""Set trigger source for the detector.
|
||||
Check the TriggerSource enum for possible values
|
||||
@ -339,8 +344,7 @@ class Eiger9mCsaxs(DetectorBase):
|
||||
)
|
||||
|
||||
def arm_acquisition(self) -> None:
|
||||
"""Arm detector for acquisition
|
||||
"""
|
||||
"""Arm detector for acquisition"""
|
||||
self.cam.acquire.put(1)
|
||||
logger.info("Waiting for Eiger9m to be armed")
|
||||
# TODO add here timeout?
|
||||
@ -353,7 +357,12 @@ class Eiger9mCsaxs(DetectorBase):
|
||||
time.sleep(0.005)
|
||||
logger.info("Eiger9m is armed")
|
||||
|
||||
#TODO needed? if yes why only for the eiger9m?
|
||||
# TODO is this correct? -> for hardware triggering, nothing should happen upon trigger signal
|
||||
# Comment this otherwise!
|
||||
def trigger(self) -> DeviceStatus:
|
||||
return super().trigger()
|
||||
|
||||
# TODO threadlocked needed? if yes why only for the eiger9m?
|
||||
@threadlocked
|
||||
def unstage(self) -> List[object]:
|
||||
"""unstage the detector and file writer"""
|
||||
|
Reference in New Issue
Block a user