fix; add other abstract methods, except: stage/unstage/_finished and _publish_file_location

This commit is contained in:
appel_c 2023-11-13 09:31:55 +01:00
parent 13180b56da
commit 9c398e6ac6

View File

@ -15,20 +15,41 @@ MIN_READOUT = None
# Custom exceptions specific to detectors # Custom exceptions specific to detectors
class CustomDetectorError(Exception): class CustomDetectorError(Exception):
"""Class for custom detector errors. """
Class for custom detector errors
Specifying different types of errors can be helpful and used Specifying different types of errors can be helpful and used
for error handling, e.g. scan repetitions. for error handling, e.g. scan repetitions.
An suggestion/example would be to have 3 class types for errors An suggestion/example would be to have 3 class types for errors
EigerError, EigerTimeoutError(EigerError), EigerInitError(EigerError) - EigerError : base error class for the detector (e.g. Eiger here)
- EigerTimeoutError(EigerError) : timeout error, inherits from EigerError
- EigerInitError(EigerError) : initialization error, inherits from EigerError
""" """
pass pass
class TriggerSource(enum.IntEnum):
"""
Class for trigger signals
Here we would map trigger options from EPICS, example implementation:
AUTO = 0
TRIGGER = 1
GATING = 2
BURST_TRIGGER = 3
To set the trigger source to gating, call TriggerSource.Gating
"""
pass
class SLSDetectorBase(ABC, Device): class SLSDetectorBase(ABC, Device):
"""Abstract base class for SLS detectors""" """
Abstract base class for SLS detectors
"""
def __init____init__( def __init____init__(
self, self,
@ -58,7 +79,6 @@ class SLSDetectorBase(ABC, Device):
f"No device manager for device: {name}, and not started sim_mode: {sim_mode}. Add DeviceManager to initialization or init with sim_mode=True" f"No device manager for device: {name}, and not started sim_mode: {sim_mode}. Add DeviceManager to initialization or init with sim_mode=True"
) )
self.sim_mode = sim_mode self.sim_mode = sim_mode
# TODO check if threadlock is needed for unstage
self._stopped = False self._stopped = False
self.name = name self.name = name
self.service_cfg = None self.service_cfg = None
@ -81,19 +101,120 @@ class SLSDetectorBase(ABC, Device):
self._init() self._init()
def _update_service_cfg(self) -> None: def _update_service_cfg(self) -> None:
"""Update service configuration from BEC SERVICE CONFIG""" """
Update service configuration from BEC SERVICE CONFIG
"""
self.service_cfg = SERVICE_CONFIG.config["service_config"]["file_writer"] self.service_cfg = SERVICE_CONFIG.config["service_config"]["file_writer"]
def _update_scaninfo(self) -> None: def _update_scaninfo(self) -> None:
"""Update scaninfo from BecScaninfoMixing""" """
Update scaninfo from BecScaninfoMixing
"""
self.scaninfo = BecScaninfoMixin(self.device_manager, self.sim_mode) self.scaninfo = BecScaninfoMixin(self.device_manager, self.sim_mode)
self.scaninfo.load_scan_metadata() self.scaninfo.load_scan_metadata()
def _update_filewriter(self) -> None: def _update_filewriter(self) -> None:
"""Update filewriter with service config""" """
Update filewriter with service config
"""
self.filewriter = FileWriterMixin(self.service_cfg) self.filewriter = FileWriterMixin(self.service_cfg)
@abstractmethod @abstractmethod
def _init(self): def _init(self) -> None:
"""Initialize detector, filewriter and set default parameters""" """
Initialize detector & filewriter
Can also be used to init default parameters
Internal Calls:
- _init_detector : Init detector
- _init_filewriter : Init file_writer
"""
self._init_detector()
self._init_filewriter()
pass pass
@abstractmethod
def _init_detector(self):
"""
Init parameters for the detector
"""
pass
@abstractmethod
def _init_filewriter(self):
"""
Init parameters for filewriter
"""
pass
@abstractmethod
def _set_trigger(self, trigger_source) -> None:
"""
Set trigger source for the detector
Args:
trigger_source (enum.IntEnum): trigger source
"""
pass
@abstractmethod
def _prep_file_writer(self) -> None:
"""
Prepare file writer for scan
"""
pass
@abstractmethod
def _stop_file_writer(self) -> None:
"""
Close file writer
"""
pass
@abstractmethod
def _prep_det(self) -> None:
"""
Prepare detector for scans
"""
pass
@abstractmethod
def _stop_det(self) -> None:
"""
Stop the detector and wait for the proper status message
"""
pass
@abstractmethod
def _arm_acquisition(self) -> None:
"""Arm detector for acquisition"""
pass
@abstractmethod
def trigger(self) -> None:
"""
Trigger the detector, called from BEC
Internal Calls:
- _on_trigger : call trigger action
"""
self._on_trigger()
pass
@abstractmethod
def _on_trigger(self) -> None:
"""
Specify action that should be taken upon trigger signal
"""
pass
@abstractmethod
def stop(self, *, success=False) -> None:
"""
Stop the scan, with camera and file writer
"""
pass