diff --git a/superxas_bec/devices/falcon_direct.py b/superxas_bec/devices/falcon_direct.py index ad5c5a1..3e9450a 100644 --- a/superxas_bec/devices/falcon_direct.py +++ b/superxas_bec/devices/falcon_direct.py @@ -5,10 +5,10 @@ from typing import TYPE_CHECKING import numpy as np from bec_lib.devicemanager import ScanInfo -from bec_server.device_server.devices.devicemanager import DeviceManagerDS -from bec_lib.logger import bec_logger from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_lib.messages import DeviceMessage +from bec_server.device_server.devices.devicemanager import DeviceManagerDS from ophyd import Component as Cpt from ophyd import Device from ophyd import DynamicDeviceComponent as DDC @@ -41,32 +41,12 @@ class DXPControl(Device): elapsed_real_time = Cpt(EpicsSignalRO, "ElapsedRealTime", kind=Kind.omitted, auto_monitor=True) -class ROI(Device): - - # 'name' is not an allowed attribute - label = Cpt(EpicsSignal, "NM", lazy=True) - count = Cpt(EpicsSignalRO, "", lazy=True) - net_count = Cpt(EpicsSignalRO, "N", lazy=True) - - -def add_rois(range_, **kwargs): - defn = OrderedDict() - - for roi in range_: - if not (0 <= roi < 32): - raise ValueError("roi must be in the set [0,31]") - - attr = "roi{}".format(roi) - defn[attr] = (ROI, ".R{}".format(roi), kwargs) - - return defn - - class MCAControl(Device): """MCA Control Device for Falcon detector""" spectrum = Cpt(EpicsSignalRO, ".VAL", kind=Kind.omitted, auto_monitor=True) - rois = DDC(add_rois(range(0, 1), kind="omitted"), kind="omitted") + roi_count = Cpt(EpicsSignalRO, ".R0", kind=Kind.omitted, auto_monitor=True) + roi_label = Cpt(EpicsSignal, ".R0NM", kind=Kind.omitted, auto_monitor=True) elapsed_real_time = Cpt(EpicsSignalRO, ".ERTM", kind=Kind.omitted, auto_monitor=True) @@ -152,7 +132,9 @@ class FalconControlDirect(Device): class FalconSuperXASDirect(PSIDeviceBase, FalconControlDirect): """Falcon implementierung at SuperXAS. prefix: 'X10DA-SITORO:'""" - preview = Cpt(Signal, name="preview", kind=Kind.omitted, doc="Preview signal for Falcon detector") + preview = Cpt( + Signal, name="preview", kind=Kind.omitted, doc="Preview signal for Falcon detector" + ) icr = Cpt( AsyncSignal, name="icr", ndim=0, max_size=int(1e6), doc="Async input count rate signal" ) @@ -181,7 +163,14 @@ class FalconSuperXASDirect(PSIDeviceBase, FalconControlDirect): # Beamline Specific Implementations # ######################################## - def __init__(self, name: str, prefix: str = "", scan_info: ScanInfo | None = None, device_manager:DeviceManagerDS|None = None, **kwargs): + def __init__( + self, + name: str, + prefix: str = "", + scan_info: ScanInfo | None = None, + device_manager: DeviceManagerDS | None = None, + **kwargs, + ): """ Initialize Falcon device. @@ -191,7 +180,9 @@ class FalconSuperXASDirect(PSIDeviceBase, FalconControlDirect): scan_info (ScanInfo): Information about the scan **kwargs: Additional keyword arguments """ - super().__init__(name=name, prefix=prefix, scan_info=scan_info, device_manager=device_manager,**kwargs) + super().__init__( + name=name, prefix=prefix, scan_info=scan_info, device_manager=device_manager, **kwargs + ) self.dm = device_manager self._pv_timeout = 1 self._async_read_data = [ @@ -216,7 +207,7 @@ class FalconSuperXASDirect(PSIDeviceBase, FalconControlDirect): """ # self.mca1.spectrum.subscribe(self._update_preview, run=False) -#TODO add again once PreviewSIgnal works with GUI + # TODO add again once PreviewSIgnal works with GUI # def _update_preview(self, old_value, value, **kwargs) -> None: # """Update the preview signal with the latest spectrum data.""" # logger.info(f"Received new spectrum data: {value}") @@ -297,13 +288,11 @@ class FalconSuperXASDirect(PSIDeviceBase, FalconControlDirect): self._send_preview_async() logger.info(f"Data sent for {self.name} at {time.time()- time_started}") - def _send_preview_async(self)->None: + def _send_preview_async(self) -> None: metadata = self.scan_info.msg.metadata - metadata.update({"async_update": {"type" : "add", "max_shape" : None}}) - data = {self.preview.name : {"value" : self.mca1.spectrum.get(), "timestamp" : time.time()}} - msg = DeviceMessage( - signals=data, metadata=metadata - ) + metadata.update({"async_update": {"type": "add", "max_shape": None}}) + data = {self.preview.name: {"value": self.mca1.spectrum.get(), "timestamp": time.time()}} + msg = DeviceMessage(signals=data, metadata=metadata) self.dm.connector.xadd( MessageEndpoints.device_async_readback( scan_id=self.scan_info.msg.scan_id, device=self.name