wip fix direct implementation at the beamline

This commit is contained in:
gac-x10da
2025-09-11 17:11:47 +02:00
committed by appel_c
parent 695874bc41
commit beb02444db
3 changed files with 86 additions and 10 deletions
@@ -146,12 +146,12 @@ cm_yaw:
softwareTrigger: false
falcon:
description: Falcon Sitoro detector
deviceClass: superxas_bec.devices.falcon.FalconSuperXAS
deviceClass: superxas_bec.devices.falcon_direct.FalconSuperXASDirect
deviceConfig:
prefix: 'X10DA-SITORO:'
enabled: true
onFailure: raise
readoutPriority: monitored
readoutPriority: async
softwareTrigger: false
filter_fe:
description: Front End Filter
@@ -0,0 +1,54 @@
falcon:
description: Falcon Sitoro detector
deviceClass: superxas_bec.devices.falcon_direct.FalconSuperXASDirect
deviceConfig:
prefix: 'X10DA-SITORO:'
enabled: true
onFailure: raise
readoutPriority: async
softwareTrigger: false
manip_new_trx:
description: Old Sample Manipulator X-Translation
deviceClass: ophyd.EpicsMotor
deviceConfig:
prefix: X10DA-ES1-MAN:TRX
enabled: true
onFailure: retry
readoutPriority: baseline
softwareTrigger: false
manip_new_try:
description: Old Sample Manipulator Y-Translation
deviceClass: ophyd.EpicsMotor
deviceConfig:
prefix: X10DA-ES1-MAN:TRY
enabled: true
onFailure: retry
readoutPriority: baseline
softwareTrigger: false
manip_new_trz:
description: Old Sample Manipulator Z - Along beam
deviceClass: ophyd.EpicsMotor
deviceConfig:
prefix: X10DA-ES1-MAN:TRZ
enabled: true
onFailure: retry
readoutPriority: baseline
softwareTrigger: false
mono_energy:
description: Mono Energy
deviceClass: ophyd.EpicsMotor
deviceConfig:
prefix: X10DA-MO12-QEXAFS:E_TEST
enabled: true
onFailure: retry
readoutPriority: baseline
softwareTrigger: false
trigger:
description: Trigger Card
deviceClass: superxas_bec.devices.trigger.Trigger
deviceConfig:
prefix: 'X10DA-ES1:'
enabled: true
onFailure: raise
readoutPriority: baseline
softwareTrigger: true
+30 -8
View File
@@ -5,7 +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.messages import DeviceMessage
from ophyd import Component as Cpt
from ophyd import Device
from ophyd import DynamicDeviceComponent as DDC
@@ -149,7 +152,7 @@ class FalconControlDirect(Device):
class FalconSuperXASDirect(PSIDeviceBase, FalconControlDirect):
"""Falcon implementierung at SuperXAS. prefix: 'X10DA-SITORO:'"""
preview = Cpt(PreviewSignal, name="preview", ndim=1, 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"
)
@@ -178,7 +181,7 @@ class FalconSuperXASDirect(PSIDeviceBase, FalconControlDirect):
# Beamline Specific Implementations #
########################################
def __init__(self, name: str, prefix: str = "", scan_info: ScanInfo | None = None, **kwargs):
def __init__(self, name: str, prefix: str = "", scan_info: ScanInfo | None = None, device_manager:DeviceManagerDS|None = None, **kwargs):
"""
Initialize Falcon device.
@@ -188,7 +191,8 @@ 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, **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 = [
"dxp_input_count_rate",
@@ -210,12 +214,13 @@ class FalconSuperXASDirect(PSIDeviceBase, FalconControlDirect):
Called after the device is connected and its signals are connected.
Default values for signals should be set here.
"""
self.mca1.spectrum.subscribe(self._update_preview, run=False)
# self.mca1.spectrum.subscribe(self._update_preview, run=False)
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}")
self.preview.put(value)
#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}")
# self.preview.put(value)
def on_stage(self) -> DeviceStatus | StatusBase | None:
"""
@@ -289,4 +294,21 @@ 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:
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
)
self.dm.connector.xadd(
MessageEndpoints.device_async_readback(
scan_id=self.scan_info.msg.scan_id, device=self.name
),
msg_dict={"data": msg},
max_size=10000,
expire=900,
)