wip simplify direct integration

This commit is contained in:
2025-06-18 10:44:50 +02:00
parent beb02444db
commit ad7a005763

View File

@@ -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