wip fix direct implementation at the beamline
This commit is contained in:
@@ -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
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user