refactor(falcon): moved logic to base class in ophyd_devices

This commit is contained in:
2025-05-12 19:16:10 +02:00
parent 61c3690376
commit b05f0a6621

View File

@@ -6,9 +6,7 @@ import numpy as np
from bec_lib.devicemanager import ScanInfo
from bec_lib.logger import bec_logger
from ophyd import Component as Cpt
from ophyd import DeviceStatus, EpicsSignalRO, Kind, Signal, StatusBase
from ophyd.device import DynamicDeviceComponent as DCpt
from ophyd.mca import add_rois
from ophyd import DeviceStatus, Kind, Signal, StatusBase
from ophyd.status import SubscriptionStatus
from ophyd_devices.devices.dxp import EpicsDXPFalcon, EpicsMCARecord, Falcon
from ophyd_devices.interfaces.base_classes.psi_device_base import PSIDeviceBase
@@ -27,6 +25,13 @@ class DeadTimeCorrectedCounts(Signal):
"""Signal to calculate dead time corrected counts"""
def __init__(self, name: str, channel: int, **kwargs):
"""
Initialize DeadTimeCorrectedCounts signal.
Args:
name (str): Name of the signal
channel (int): Channel number
"""
super().__init__(name=name, **kwargs)
self._channel = channel
self._dead_time = 1.182e-7
@@ -34,8 +39,8 @@ class DeadTimeCorrectedCounts(Signal):
# pylint: disable=arguments-differ
def get(self) -> float:
"""Get dead time corrected counts base on signals from dxp and mca of Falcon"""
dxp: EpicsDXPFalconSuperXAS = getattr(self.parent, f"dxp{self._channel}")
mca: EpicsMCARecordSuperXAS = getattr(self.parent, f"mca{self._channel}")
dxp: EpicsDXPFalcon = getattr(self.parent, f"dxp{self._channel}")
mca: EpicsMCARecord = getattr(self.parent, f"mca{self._channel}")
icr = dxp.input_count_rate.get()
ocr = dxp.output_count_rate.get()
@@ -67,59 +72,39 @@ class DeadTimeCorrectedCounts(Signal):
return cor_roi_cnts
class EpicsDXPFalconSuperXAS(EpicsDXPFalcon):
"""DXPFalcon class wrapper for SuperXAS."""
_default_read_attrs = [
"input_count_rate",
"output_count_rate",
] # add exposable signals/subdevices here
input_count_rate = Cpt(EpicsSignalRO, "InputCountRate", kind=Kind.normal, auto_monitor=True)
output_count_rate = Cpt(EpicsSignalRO, "OutputCountRate", kind=Kind.normal, auto_monitor=True)
class EpicsMCARecordSuperXAS(EpicsMCARecord):
"""MCARecord class wrapper for SuperXAS."""
_default_read_attrs = ["rois"] # add exposable signals/subdevices here
elapsed_real_time = Cpt(EpicsSignalRO, ".ERTM", kind=Kind.normal, auto_monitor=True)
rois = DCpt(add_rois(range(0, 3), kind=Kind.normal), kind=Kind.normal)
# Consider rewriting add_rois from ophyd.mca what is normal and what is config
class FalconControl(Falcon):
"""Falcon Control class at SuperXAS. prefix: 'X10DA-SITORO:'"""
_default_read_attrs = [
"mca1",
_default_read_attrs = Falcon._default_read_attrs + (
"dxp1",
# # "dxp2",
"mca1",
# # "mca2",
"dead_time_cor_cnts1",
] # add exposable signals/subdevices here
# # "dead_time_cor_cnts2",
)
_default_configuration_attrs = Falcon._default_configuration_attrs + (
"dxp1",
# "dxp2",
"mca1",
# "mca2",
"dead_time_cor_cnts1",
# "dead_time_cor_cnts2",
)
# DXP parameters
dxp1 = Cpt(EpicsDXPFalconSuperXAS, "dxp1:")
# dxp2 = Cpt(EpicsDXPFalconSuperXAS, "dxp2:")
# dxp3 = Cpt(EpicsDXPFalconSuperXAS, "dxp3:")
# dxp4 = Cpt(EpicsDXPFalconSuperXAS, "dxp4:")
# dxp5 = Cpt(EpicsDXPFalconSuperXAS, "dxp5:")
dxp1 = Cpt(EpicsDXPFalcon, "dxp1:")
# dxp2 = Cpt(EpicsDXPFalcon, "dxp2:")
# MCA record with spectrum data
mca1 = Cpt(EpicsMCARecordSuperXAS, "mca1")
mca1 = Cpt(EpicsMCARecord, "mca1")
# mca2 = Cpt(EpicsMCARecord, "mca2")
# mca3 = Cpt(EpicsMCARecord, "mca3")
# mca4 = Cpt(EpicsMCARecord, "mca4")
# mca5 = Cpt(EpicsMCARecord, "mca5")
# Norm Signal
dead_time_cor_cnts1 = Cpt(
DeadTimeCorrectedCounts, name="dead_time_cor_cnts", channel=1, kind=Kind.hinted
)
# dead_time_cor_cnts2 = Cpt(DeadTimeCorrectedCounts, name='dead_time_cor_cnts', channel=2, kind=Kind.normal)
# dead_time_cor_cnts3 = Cpt(DeadTimeCorrectedCounts, name='dead_time_cor_cnts', channel=3, kind=Kind.normal)
# dead_time_cor_cnts4 = Cpt(DeadTimeCorrectedCounts, name='dead_time_cor_cnts', channel=4, kind=Kind.normal)
# dead_time_cor_cnts5 = Cpt(DeadTimeCorrectedCounts, name='dead_time_cor_cnts', channel=5, kind=Kind.normal)
class FalconSuperXAS(PSIDeviceBase, FalconControl):