From 5ae32d58d32bed4a45a46d8393a844b1c0557edd Mon Sep 17 00:00:00 2001 From: x01da Date: Tue, 18 Aug 2026 07:49:47 +0200 Subject: [PATCH] Changing all signals to AcsSignals --- .../devices/mo1_bragg/mo1_bragg_angle.py | 14 +- .../devices/mo1_bragg/mo1_bragg_devices.py | 427 +++++++++++------- .../devices/mo1_bragg/mo1_bragg_enums.py | 14 + 3 files changed, 293 insertions(+), 162 deletions(-) diff --git a/debye_bec/devices/mo1_bragg/mo1_bragg_angle.py b/debye_bec/devices/mo1_bragg/mo1_bragg_angle.py index 46a095a..5e81bf7 100644 --- a/debye_bec/devices/mo1_bragg/mo1_bragg_angle.py +++ b/debye_bec/devices/mo1_bragg/mo1_bragg_angle.py @@ -3,16 +3,22 @@ from ophyd import Component as Cpt from ophyd import EpicsSignalRO, EpicsSignalWithRBV +from debye_bec.devices.mo1_bragg.acs import AcsSignal, AcsSignalRO from debye_bec.devices.mo1_bragg.mo1_bragg_devices import Mo1BraggPositioner class Mo1BraggAngle(Mo1BraggPositioner): """Positioner implementation with readback angle of the MO1 Bragg positioner.""" - readback = Cpt(EpicsSignalRO, suffix="feedback_pos_angle_RBV", kind="normal", auto_monitor=True) - setpoint = Cpt(EpicsSignalWithRBV, suffix="set_abs_pos_angle", kind="normal", auto_monitor=True) - low_lim = Cpt(EpicsSignalRO, suffix="lo_lim_pos_angle_RBV", kind="config", auto_monitor=True) - high_lim = Cpt(EpicsSignalRO, suffix="hi_lim_pos_angle_RBV", kind="config", auto_monitor=True) + # readback = Cpt(EpicsSignalRO, suffix="feedback_pos_angle_RBV", kind="normal", auto_monitor=True) + # setpoint = Cpt(EpicsSignalWithRBV, suffix="set_abs_pos_angle", kind="normal", auto_monitor=True) + # low_lim = Cpt(EpicsSignalRO, suffix="lo_lim_pos_angle_RBV", kind="config", auto_monitor=True) + # high_lim = Cpt(EpicsSignalRO, suffix="hi_lim_pos_angle_RBV", kind="config", auto_monitor=True) + + readback = Cpt(AcsSignalRO, tag=51503, prec=6, kind="omitted") + setpoint = Cpt(AcsSignal, tag=51501, prec=6, kind="omitted") + low_lim = Cpt(AcsSignalRO, tag=51505, prec=1, kind="omitted") + high_lim = Cpt(AcsSignalRO, tag=51504, prec=1, kind="omitted") @property def egu(self) -> str: diff --git a/debye_bec/devices/mo1_bragg/mo1_bragg_devices.py b/debye_bec/devices/mo1_bragg/mo1_bragg_devices.py index de68ee5..487aa32 100644 --- a/debye_bec/devices/mo1_bragg/mo1_bragg_devices.py +++ b/debye_bec/devices/mo1_bragg/mo1_bragg_devices.py @@ -24,7 +24,17 @@ from ophyd_devices.utils.socket import SocketIO # from debye_bec.devices.mo1_bragg.acs_controller import ACSSignal from debye_bec.devices.mo1_bragg.acs import ACSController, AcsSignal, AcsSignalRO -from debye_bec.devices.mo1_bragg.mo1_bragg_enums import MoveType, Xtal +from debye_bec.devices.mo1_bragg.mo1_bragg_enums import ( + MoveType, + ScanControlLoadMessage, + ScanControlMode, + ScanControlScanStatus, + TriggerControlMode, + TriggerControlSource, + TriggerEnable, + TriggerSelectReference, + Xtal, +) # Initialise logger logger = bec_logger.logger @@ -60,87 +70,112 @@ class MoveTypeSignal(Signal): class Mo1BraggStatus(Device): """Mo1 Bragg PVs for status monitoring""" - error_status = Cpt(EpicsSignalRO, suffix="error_status_RBV", kind="config", auto_monitor=True) - brake_enabled = Cpt(EpicsSignalRO, suffix="brake_enabled_RBV", kind="config", auto_monitor=True) - mot_commutated = Cpt( - EpicsSignalRO, suffix="mot_commutated_RBV", kind="config", auto_monitor=True - ) - axis_enabled = Cpt(EpicsSignalRO, suffix="axis_enabled_RBV", kind="config", auto_monitor=True) - enc_initialized = Cpt( - EpicsSignalRO, suffix="enc_initialized_RBV", kind="config", auto_monitor=True - ) - # kind="omitted": the heartbeat ticks continuously, and any auto-monitored - # config-kind signal update makes the device server re-read the full device - # configuration (incl. the ACS socket signals) on every tick - heartbeat = Cpt(EpicsSignalRO, suffix="heartbeat_RBV", kind="omitted", auto_monitor=True) + # error_status = Cpt(EpicsSignalRO, suffix="error_status_RBV", kind="config", auto_monitor=True) + # brake_enabled = Cpt(EpicsSignalRO, suffix="brake_enabled_RBV", kind="config", auto_monitor=True) + # mot_commutated = Cpt( + # EpicsSignalRO, suffix="mot_commutated_RBV", kind="config", auto_monitor=True + # ) + # axis_enabled = Cpt(EpicsSignalRO, suffix="axis_enabled_RBV", kind="config", auto_monitor=True) + # enc_initialized = Cpt( + # EpicsSignalRO, suffix="enc_initialized_RBV", kind="config", auto_monitor=True + # ) + # # kind="omitted": the heartbeat ticks continuously, and any auto-monitored + # # config-kind signal update makes the device server re-read the full device + # # configuration (incl. the ACS socket signals) on every tick + # heartbeat = Cpt(EpicsSignalRO, suffix="heartbeat_RBV", kind="omitted", auto_monitor=True) + + error_status = Cpt(AcsSignalRO, tag=10000, prec=0, kind="config") + brake_enabled = Cpt(AcsSignalRO, tag=10001, prec=0, kind="omitted") + mot_commutated = Cpt(AcsSignalRO, tag=10002, prec=0, kind="omitted") + axis_enabled = Cpt(AcsSignalRO, tag=10003, prec=0, kind="omitted") + enc_initialized = Cpt(AcsSignalRO, tag=10004, prec=0, kind="omitted") + heartbeat = Cpt(AcsSignalRO, tag=10005, prec=0, kind="omitted") class Mo1BraggEncoder(Device): """Mo1 Bragg PVs to communicate with the encoder""" - enc_reinit = Cpt(EpicsSignal, suffix="enc_reinit", kind="config") - enc_reinit_done = Cpt(EpicsSignalRO, suffix="enc_reinit_done_RBV", kind="config") + # enc_reinit = Cpt(EpicsSignal, suffix="enc_reinit", kind="config") + # enc_reinit_done = Cpt(EpicsSignalRO, suffix="enc_reinit_done_RBV", kind="config") + + enc_reinit = Cpt(AcsSignal, tag=11000, prec=0, kind="omitted") + enc_reinit_done = Cpt(AcsSignalRO, tag=11001, prec=0, kind="config") class Mo1BraggCrystal(Device): """Mo1 Bragg PVs to set the crystal parameters""" - bragg_off_si111 = Cpt(EpicsSignalWithRBV, suffix="bragg_off_si111", kind="config") - bragg_off_si311 = Cpt(EpicsSignalWithRBV, suffix="bragg_off_si311", kind="config") - phi_off_si111 = Cpt(EpicsSignalWithRBV, suffix="phi_off_si111", kind="config") - phi_off_si311 = Cpt(EpicsSignalWithRBV, suffix="phi_off_si311", kind="config") - azm_off_si111 = Cpt(EpicsSignalWithRBV, suffix="azm_off_si111", kind="config") - azm_off_si311 = Cpt(EpicsSignalWithRBV, suffix="azm_off_si311", kind="config") - miscut_si111 = Cpt(EpicsSignalWithRBV, suffix="miscut_si111", kind="config") - miscut_si311 = Cpt(EpicsSignalWithRBV, suffix="miscut_si311", kind="config") - xtal_enum = Cpt(EpicsSignalWithRBV, suffix="xtal_ENUM", kind="config") - d_spacing_si111 = Cpt(EpicsSignalWithRBV, suffix="d_spacing_si111", kind="config") - d_spacing_si311 = Cpt(EpicsSignalWithRBV, suffix="d_spacing_si311", kind="config") - set_offset = Cpt(EpicsSignal, suffix="set_offset", kind="config", put_complete=True) - current_d_spacing = Cpt( - EpicsSignalRO, suffix="current_d_spacing_RBV", kind="normal", auto_monitor=True - ) - current_bragg_off = Cpt( - EpicsSignalRO, suffix="current_bragg_off_RBV", kind="normal", auto_monitor=True - ) - current_phi_off = Cpt( - EpicsSignalRO, suffix="current_phi_off_RBV", kind="normal", auto_monitor=True - ) - current_azm_off = Cpt( - EpicsSignalRO, suffix="current_azm_off_RBV", kind="normal", auto_monitor=True - ) - current_miscut = Cpt( - EpicsSignalRO, suffix="current_miscut_RBV", kind="normal", auto_monitor=True - ) - current_xtal = Cpt( - EpicsSignalRO, suffix="current_xtal_ENUM_RBV", kind="normal", auto_monitor=True - ) - current_xtal_string = Cpt( - EpicsSignalRO, suffix="current_xtal_ENUM_RBV", kind="normal", auto_monitor=True, string=True - ) - - # current_xtal_string = Cpt( - # AcsSignalRO, tag=10501, prec=0, enum=Xtal, kind="normal", auto_monitor=True + # bragg_off_si111 = Cpt(EpicsSignalWithRBV, suffix="bragg_off_si111", kind="config") + # bragg_off_si311 = Cpt(EpicsSignalWithRBV, suffix="bragg_off_si311", kind="config") + # phi_off_si111 = Cpt(EpicsSignalWithRBV, suffix="phi_off_si111", kind="config") + # phi_off_si311 = Cpt(EpicsSignalWithRBV, suffix="phi_off_si311", kind="config") + # azm_off_si111 = Cpt(EpicsSignalWithRBV, suffix="azm_off_si111", kind="config") + # azm_off_si311 = Cpt(EpicsSignalWithRBV, suffix="azm_off_si311", kind="config") + # miscut_si111 = Cpt(EpicsSignalWithRBV, suffix="miscut_si111", kind="config") + # miscut_si311 = Cpt(EpicsSignalWithRBV, suffix="miscut_si311", kind="config") + # xtal_enum = Cpt(EpicsSignalWithRBV, suffix="xtal_ENUM", kind="config") + # d_spacing_si111 = Cpt(EpicsSignalWithRBV, suffix="d_spacing_si111", kind="config") + # d_spacing_si311 = Cpt(EpicsSignalWithRBV, suffix="d_spacing_si311", kind="config") + # set_offset = Cpt(EpicsSignal, suffix="set_offset", kind="config", put_complete=True) + # current_d_spacing = Cpt( + # EpicsSignalRO, suffix="current_d_spacing_RBV", kind="normal", auto_monitor=True # ) + # current_bragg_off = Cpt( + # EpicsSignalRO, suffix="current_bragg_off_RBV", kind="normal", auto_monitor=True + # ) + # current_phi_off = Cpt( + # EpicsSignalRO, suffix="current_phi_off_RBV", kind="normal", auto_monitor=True + # ) + # current_azm_off = Cpt( + # EpicsSignalRO, suffix="current_azm_off_RBV", kind="normal", auto_monitor=True + # ) + # current_miscut = Cpt( + # EpicsSignalRO, suffix="current_miscut_RBV", kind="normal", auto_monitor=True + # ) + # current_xtal = Cpt( + # EpicsSignalRO, suffix="current_xtal_ENUM_RBV", kind="normal", auto_monitor=True + # ) + # current_xtal_string = Cpt( + # EpicsSignalRO, suffix="current_xtal_ENUM_RBV", kind="normal", auto_monitor=True, string=True + # ) + + bragg_off_si111 = Cpt(AcsSignal, tag=50500, prec=12, kind="config") + bragg_off_si311 = Cpt(AcsSignal, tag=50501, prec=12, kind="config") + phi_off_si111 = Cpt(AcsSignal, tag=50507, prec=12, kind="config") + phi_off_si311 = Cpt(AcsSignal, tag=50508, prec=12, kind="config") + azm_off_si111 = Cpt(AcsSignal, tag=50510, prec=12, kind="config") + azm_off_si311 = Cpt(AcsSignal, tag=50511, prec=12, kind="config") + miscut_si111 = Cpt(AcsSignal, tag=50513, prec=12, kind="config") + miscut_si311 = Cpt(AcsSignal, tag=50514, prec=12, kind="config") + d_spacing_si111 = Cpt(AcsSignal, tag=50000, prec=12, kind="config") + d_spacing_si311 = Cpt(AcsSignal, tag=50001, prec=12, kind="config") + + current_d_spacing = Cpt(AcsSignalRO, tag=50503, prec=12, kind="config") + current_bragg_off = Cpt(AcsSignalRO, tag=50504, prec=12, kind="config") + current_phi_off = Cpt(AcsSignalRO, tag=50509, prec=12, kind="config") + current_azm_off = Cpt(AcsSignalRO, tag=50512, prec=12, kind="config") + current_miscut = Cpt(AcsSignalRO, tag=50515, prec=12, kind="config") + current_xtal = Cpt(AcsSignalRO, tag=10501, prec=0, kind="config") + current_xtal_string = Cpt(AcsSignalRO, tag=10501, prec=0, enum=Xtal, kind="normal") class Mo1BraggScanSettings(Device): """Mo1 Bragg PVs to set the scan setttings""" # TRIG settings - trig_select_ref_enum = Cpt(EpicsSignalWithRBV, suffix="trig_select_ref_ENUM", kind="config") + # trig_select_ref_enum = Cpt(EpicsSignalWithRBV, suffix="trig_select_ref_ENUM", kind="config") - trig_ena_hi_enum = Cpt(EpicsSignalWithRBV, suffix="trig_ena_hi_ENUM", kind="config") - trig_time_hi = Cpt(EpicsSignalWithRBV, suffix="trig_time_hi", kind="config") - trig_every_n_hi = Cpt(EpicsSignalWithRBV, suffix="trig_every_n_hi", kind="config") + # trig_ena_hi_enum = Cpt(EpicsSignalWithRBV, suffix="trig_ena_hi_ENUM", kind="config") + # trig_time_hi = Cpt(EpicsSignalWithRBV, suffix="trig_time_hi", kind="config") + # trig_every_n_hi = Cpt(EpicsSignalWithRBV, suffix="trig_every_n_hi", kind="config") - trig_ena_lo_enum = Cpt(EpicsSignalWithRBV, suffix="trig_ena_lo_ENUM", kind="config") - trig_time_lo = Cpt(EpicsSignalWithRBV, suffix="trig_time_lo", kind="config") - trig_every_n_lo = Cpt(EpicsSignalWithRBV, suffix="trig_every_n_lo", kind="config") + # trig_ena_lo_enum = Cpt(EpicsSignalWithRBV, suffix="trig_ena_lo_ENUM", kind="config") + # trig_time_lo = Cpt(EpicsSignalWithRBV, suffix="trig_time_lo", kind="config") + # trig_every_n_lo = Cpt(EpicsSignalWithRBV, suffix="trig_every_n_lo", kind="config") - # XAS simple scan settings - s_scan_angle_hi = Cpt(EpicsSignalWithRBV, suffix="s_scan_angle_hi", kind="config") - s_scan_angle_lo = Cpt(EpicsSignalWithRBV, suffix="s_scan_angle_lo", kind="config") + # # XAS simple scan settings + # s_scan_angle_hi = Cpt(EpicsSignalWithRBV, suffix="s_scan_angle_hi", kind="config") + # s_scan_angle_lo = Cpt(EpicsSignalWithRBV, suffix="s_scan_angle_lo", kind="config") # s_scan_energy_lo = Cpt( # EpicsSignalWithRBV, suffix="s_scan_energy_lo", kind="config", auto_monitor=True # ) @@ -151,110 +186,179 @@ class Mo1BraggScanSettings(Device): # EpicsSignalWithRBV, suffix="s_scan_scantime", kind="config", auto_monitor=True # ) + # XAS advanced scan settings + # a_scan_pos = Cpt(EpicsSignalWithRBV, suffix="a_scan_pos", kind="config", auto_monitor=False) + # a_scan_vel = Cpt(EpicsSignalWithRBV, suffix="a_scan_vel", kind="config", auto_monitor=False) + # a_scan_time = Cpt(EpicsSignalWithRBV, suffix="a_scan_time", kind="config", auto_monitor=False) + # kind="omitted": these live on the ACS controller and are written by the scan at # stage time, which also records them in scan_info — so nothing is lost by keeping # them out of read_configuration(), and no passive device-server read path ever # touches the socket. cache_ttl still guards explicit reads; put() drops the cache. - s_scan_energy_lo = Cpt( - AcsSignal, tag=53003, prec=6, kind="omitted", auto_monitor=False, cache_ttl=30.0 - ) - s_scan_energy_hi = Cpt( - AcsSignal, tag=53004, prec=6, kind="omitted", auto_monitor=False, cache_ttl=30.0 - ) - s_scan_scantime = Cpt( - AcsSignal, tag=53002, prec=3, kind="omitted", auto_monitor=False, cache_ttl=30.0 + + trig_select_ref_enum = Cpt( + AcsSignal, tag=12504, prec=0, enum=TriggerSelectReference, kind="config" ) - # XAS advanced scan settings - a_scan_pos = Cpt(EpicsSignalWithRBV, suffix="a_scan_pos", kind="config", auto_monitor=False) - a_scan_vel = Cpt(EpicsSignalWithRBV, suffix="a_scan_vel", kind="config", auto_monitor=False) - a_scan_time = Cpt(EpicsSignalWithRBV, suffix="a_scan_time", kind="config", auto_monitor=False) + trig_ena_hi_enum = Cpt(AcsSignal, tag=12501, prec=0, enum=TriggerEnable, kind="config") + trig_time_hi = Cpt(AcsSignal, tag=52501, prec=3, kind="config") + trig_every_n_hi = Cpt(AcsSignal, tag=12503, prec=0, kind="config") - # a_scan_pos = Cpt(AcsSignal, tag=53500, prec=6, num_el=41, kind="omitted") - # a_scan_vel = Cpt(AcsSignal, tag=53501, prec=6, num_el=41, kind="omitted") - # a_scan_time = Cpt(AcsSignal, tag=53502, prec=6, num_el=41, kind="omitted") + trig_ena_lo_enum = Cpt(AcsSignal, tag=12500, prec=0, enum=TriggerEnable, kind="config") + trig_time_lo = Cpt(AcsSignal, tag=52500, prec=3, kind="config") + trig_every_n_lo = Cpt(AcsSignal, tag=12502, prec=0, kind="config") + + s_scan_angle_hi = Cpt(AcsSignal, tag=53001, prec=6, kind="omitted") + s_scan_angle_lo = Cpt(AcsSignal, tag=53000, prec=6, kind="omitted") + + s_scan_energy_lo = Cpt(AcsSignal, tag=53003, prec=6, kind="config") + s_scan_energy_hi = Cpt(AcsSignal, tag=53004, prec=6, kind="config") + s_scan_scantime = Cpt(AcsSignal, tag=53002, prec=3, kind="config") + + a_scan_pos = Cpt(AcsSignal, tag=53500, prec=6, num_el=41, kind="config") + a_scan_vel = Cpt(AcsSignal, tag=53501, prec=6, num_el=41, kind="config") + a_scan_time = Cpt(AcsSignal, tag=53502, prec=6, num_el=41, kind="config") class Mo1TriggerSettings(Device): """Mo1 Trigger settings""" - settle_time = Cpt(EpicsSignalWithRBV, suffix="settle_time", kind="config") - max_dev = Cpt(EpicsSignalWithRBV, suffix="max_dev", kind="config") + # settle_time = Cpt(EpicsSignalWithRBV, suffix="settle_time", kind="config") + # max_dev = Cpt(EpicsSignalWithRBV, suffix="max_dev", kind="config") - xrd_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_src_ENUM", kind="config") - xrd_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_mode_ENUM", kind="config") - xrd_trig_len = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_len", kind="config") - xrd_trig_period = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_period", kind="config") - xrd_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="xrd_n_of_trig", kind="config") - xrd_trig_req = Cpt(EpicsSignal, suffix="xrd_trig_req", kind="config") + # xrd_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_src_ENUM", kind="config") + # xrd_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_mode_ENUM", kind="config") + # xrd_trig_len = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_len", kind="config") + # xrd_trig_period = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_period", kind="config") + # xrd_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="xrd_n_of_trig", kind="config") + # xrd_trig_req = Cpt(EpicsSignal, suffix="xrd_trig_req", kind="config") - falcon_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_src_ENUM", kind="config") - falcon_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_mode_ENUM", kind="config") - falcon_trig_len = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_len", kind="config") - falcon_trig_period = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_period", kind="config") - falcon_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="falcon_n_of_trig", kind="config") - falcon_trig_req = Cpt(EpicsSignal, suffix="falcon_trig_req", kind="config") + # falcon_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_src_ENUM", kind="config") + # falcon_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_mode_ENUM", kind="config") + # falcon_trig_len = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_len", kind="config") + # falcon_trig_period = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_period", kind="config") + # falcon_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="falcon_n_of_trig", kind="config") + # falcon_trig_req = Cpt(EpicsSignal, suffix="falcon_trig_req", kind="config") - univ1_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_src_ENUM", kind="config") - univ1_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_mode_ENUM", kind="config") - univ1_trig_len = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_len", kind="config") - univ1_trig_period = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_period", kind="config") - univ1_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="univ1_n_of_trig", kind="config") - univ1_trig_req = Cpt(EpicsSignal, suffix="univ1_trig_req", kind="config") + # univ1_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_src_ENUM", kind="config") + # univ1_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_mode_ENUM", kind="config") + # univ1_trig_len = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_len", kind="config") + # univ1_trig_period = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_period", kind="config") + # univ1_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="univ1_n_of_trig", kind="config") + # univ1_trig_req = Cpt(EpicsSignal, suffix="univ1_trig_req", kind="config") - univ2_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_src_ENUM", kind="config") - univ2_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_mode_ENUM", kind="config") - univ2_trig_len = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_len", kind="config") - univ2_trig_period = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_period", kind="config") - univ2_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="univ2_n_of_trig", kind="config") - univ2_trig_req = Cpt(EpicsSignal, suffix="univ2_trig_req", kind="config") + # univ2_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_src_ENUM", kind="config") + # univ2_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_mode_ENUM", kind="config") + # univ2_trig_len = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_len", kind="config") + # univ2_trig_period = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_period", kind="config") + # univ2_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="univ2_n_of_trig", kind="config") + # univ2_trig_req = Cpt(EpicsSignal, suffix="univ2_trig_req", kind="config") + + settle_time = Cpt(AcsSignal, tag=55000, prec=3, kind="config") + max_dev = Cpt(AcsSignal, tag=55001, prec=6, kind="config") + + xrd_trig_src_enum = Cpt(AcsSignal, tag=14501, prec=0, enum=TriggerControlSource, kind="config") + xrd_trig_mode_enum = Cpt(AcsSignal, tag=14502, prec=0, enum=TriggerControlMode, kind="config") + xrd_trig_len = Cpt(AcsSignal, tag=54500, prec=3, kind="config") + xrd_trig_period = Cpt(AcsSignal, tag=54504, prec=3, kind="config") + xrd_n_of_trig = Cpt(AcsSignal, tag=14512, prec=0, kind="config") + xrd_trig_req = Cpt(AcsSignal, tag=14500, prec=0, kind="config") + + falcon_trig_src_enum = Cpt( + AcsSignal, tag=14504, prec=0, enum=TriggerControlSource, kind="config" + ) + falcon_trig_mode_enum = Cpt( + AcsSignal, tag=14505, prec=0, enum=TriggerControlMode, kind="config" + ) + falcon_trig_len = Cpt(AcsSignal, tag=54501, prec=3, kind="config") + falcon_trig_period = Cpt(AcsSignal, tag=54505, prec=3, kind="config") + falcon_n_of_trig = Cpt(AcsSignal, tag=14513, prec=0, kind="config") + falcon_trig_req = Cpt(AcsSignal, tag=14503, prec=0, kind="config") + + univ1_trig_src_enum = Cpt( + AcsSignal, tag=14507, prec=0, enum=TriggerControlSource, kind="config" + ) + univ1_trig_mode_enum = Cpt(AcsSignal, tag=14508, prec=0, enum=TriggerControlMode, kind="config") + univ1_trig_len = Cpt(AcsSignal, tag=54502, prec=3, kind="config") + univ1_trig_period = Cpt(AcsSignal, tag=54506, prec=3, kind="config") + univ1_n_of_trig = Cpt(AcsSignal, tag=14514, prec=0, kind="config") + univ1_trig_req = Cpt(AcsSignal, tag=14506, prec=0, kind="config") + + univ2_trig_src_enum = Cpt( + AcsSignal, tag=14510, prec=0, enum=TriggerControlSource, kind="config" + ) + univ2_trig_mode_enum = Cpt(AcsSignal, tag=14511, prec=0, enum=TriggerControlMode, kind="config") + univ2_trig_len = Cpt(AcsSignal, tag=54503, prec=3, kind="config") + univ2_trig_period = Cpt(AcsSignal, tag=54507, prec=3, kind="config") + univ2_n_of_trig = Cpt(AcsSignal, tag=14515, prec=0, kind="config") + univ2_trig_req = Cpt(AcsSignal, tag=14509, prec=0, kind="config") class Mo1BraggCalculator(Device): """Mo1 Bragg PVs to convert angle to energy or vice-versa.""" - calc_reset = Cpt(EpicsSignalWithRBV, suffix="calc_reset", kind="config", put_complete=True) - calc_done = Cpt(EpicsSignalRO, suffix="calc_done_RBV", kind="config") - calc_energy = Cpt(EpicsSignalWithRBV, suffix="calc_energy", kind="config") - calc_angle = Cpt(EpicsSignalWithRBV, suffix="calc_angle", kind="config") + # calc_reset = Cpt(EpicsSignalWithRBV, suffix="calc_reset", kind="config", put_complete=True) + # calc_done = Cpt(EpicsSignalRO, suffix="calc_done_RBV", kind="config") + # calc_energy = Cpt(EpicsSignalWithRBV, suffix="calc_energy", kind="config") + # calc_angle = Cpt(EpicsSignalWithRBV, suffix="calc_angle", kind="config") + + calc_reset = Cpt(AcsSignal, tag=14000, prec=0, kind="omitted") + calc_done = Cpt(AcsSignalRO, tag=14001, prec=0, kind="omitted") + calc_energy = Cpt(AcsSignal, tag=54000, prec=0, kind="omitted") + calc_angle = Cpt(AcsSignal, tag=54001, prec=0, kind="omitted") class Mo1BraggScanControl(Device): """Mo1 Bragg PVs to control the scan after setting the parameters.""" - scan_mode_enum = Cpt(EpicsSignalWithRBV, suffix="scan_mode_ENUM", kind="config") - scan_duration = Cpt( - EpicsSignalWithRBV, suffix="scan_duration", kind="config", auto_monitor=True - ) - scan_load = Cpt(EpicsSignal, suffix="scan_load", kind="config", put_complete=True) - # The live scan-status PVs below are kind="omitted": they change during every scan - # (some, like the progress/time counters, every second), and each update of an - # auto-monitored config-kind signal makes the device server re-read and republish - # the full device configuration. They are still fully usable via get()/subscribe() - # (CompareStatus/TransitionStatus waits, progress forwarding), which ignore kind. - scan_msg = Cpt(EpicsSignalRO, suffix="scan_msg_ENUM_RBV", kind="omitted", auto_monitor=True) - scan_start_infinite = Cpt( - EpicsSignal, suffix="scan_start_infinite", kind="config", put_complete=True - ) - scan_start_timer = Cpt(EpicsSignal, suffix="scan_start_timer", kind="config", put_complete=True) - scan_stop = Cpt(EpicsSignal, suffix="scan_stop", kind="config", put_complete=True) - scan_status = Cpt( - EpicsSignalRO, suffix="scan_status_ENUM_RBV", kind="omitted", auto_monitor=True - ) - scan_time_left = Cpt( - EpicsSignalRO, suffix="scan_time_left_RBV", kind="omitted", auto_monitor=True - ) - scan_done = Cpt(EpicsSignalRO, suffix="scan_done_RBV", kind="omitted", auto_monitor=True) - scan_val_reset = Cpt(EpicsSignal, suffix="scan_val_reset", kind="config", put_complete=True) - scan_progress = Cpt( - EpicsSignalRO, suffix="scan_progress_RBV", kind="omitted", auto_monitor=True - ) - scan_spectra_done = Cpt( - EpicsSignalRO, suffix="scan_n_osc_RBV", kind="omitted", auto_monitor=True - ) - scan_spectra_left = Cpt( - EpicsSignalRO, suffix="scan_n_osc_left_RBV", kind="omitted", auto_monitor=True - ) + # scan_mode_enum = Cpt(EpicsSignalWithRBV, suffix="scan_mode_ENUM", kind="config") + # scan_duration = Cpt( + # EpicsSignalWithRBV, suffix="scan_duration", kind="config", auto_monitor=True + # ) + # scan_load = Cpt(EpicsSignal, suffix="scan_load", kind="config", put_complete=True) + # # The live scan-status PVs below are kind="omitted": they change during every scan + # # (some, like the progress/time counters, every second), and each update of an + # # auto-monitored config-kind signal makes the device server re-read and republish + # # the full device configuration. They are still fully usable via get()/subscribe() + # # (CompareStatus/TransitionStatus waits, progress forwarding), which ignore kind. + # scan_msg = Cpt(EpicsSignalRO, suffix="scan_msg_ENUM_RBV", kind="omitted", auto_monitor=True) + # scan_start_infinite = Cpt( + # EpicsSignal, suffix="scan_start_infinite", kind="config", put_complete=True + # ) + # scan_start_timer = Cpt(EpicsSignal, suffix="scan_start_timer", kind="config", put_complete=True) + # scan_stop = Cpt(EpicsSignal, suffix="scan_stop", kind="config", put_complete=True) + # scan_status = Cpt( + # EpicsSignalRO, suffix="scan_status_ENUM_RBV", kind="omitted", auto_monitor=True + # ) + # scan_time_left = Cpt( + # EpicsSignalRO, suffix="scan_time_left_RBV", kind="omitted", auto_monitor=True + # ) + # scan_done = Cpt(EpicsSignalRO, suffix="scan_done_RBV", kind="omitted", auto_monitor=True) + # scan_val_reset = Cpt(EpicsSignal, suffix="scan_val_reset", kind="config", put_complete=True) + # scan_progress = Cpt( + # EpicsSignalRO, suffix="scan_progress_RBV", kind="omitted", auto_monitor=True + # ) + # scan_spectra_done = Cpt( + # EpicsSignalRO, suffix="scan_n_osc_RBV", kind="omitted", auto_monitor=True + # ) + # scan_spectra_left = Cpt( + # EpicsSignalRO, suffix="scan_n_osc_left_RBV", kind="omitted", auto_monitor=True + # ) + + scan_mode_enum = Cpt(AcsSignal, tag=12000, prec=0, enum=ScanControlMode, kind="config") + scan_duration = Cpt(AcsSignal, tag=52000, prec=1, kind="config") + scan_load = Cpt(AcsSignal, tag=12001, prec=0, kind="omitted") + scan_msg = Cpt(AcsSignalRO, tag=12007, prec=0, enum=ScanControlLoadMessage, kind="config") + scan_start_infinite = Cpt(AcsSignal, tag=12003, prec=0, kind="omitted") + scan_start_timer = Cpt(AcsSignal, tag=12006, prec=0, kind="omitted") + scan_stop = Cpt(AcsSignal, tag=12004, prec=0, kind="omitted") + scan_status = Cpt(AcsSignalRO, tag=12002, prec=0, enum=ScanControlScanStatus, kind="config") + scan_time_left = Cpt(AcsSignalRO, tag=52001, prec=1, kind="omitted") + scan_done = Cpt(AcsSignalRO, tag=12005, prec=0, kind="omitted") + scan_val_reset = Cpt(AcsSignal, tag=52000, prec=0, kind="omitted") + scan_progress = Cpt(AcsSignalRO, tag=12011, prec=1, max_poll=0.5, kind="omitted") + scan_spectra_done = Cpt(AcsSignalRO, tag=12009, prec=0, kind="omitted") + scan_spectra_left = Cpt(AcsSignalRO, tag=12010, prec=0, kind="omitted") class Mo1BraggPositioner(Device, PositionerBase): @@ -279,29 +383,36 @@ class Mo1BraggPositioner(Device, PositionerBase): ############# Energy PVs ############# - readback = Cpt( - EpicsSignalRO, suffix="feedback_pos_energy_RBV", kind="hinted", auto_monitor=True - ) - setpoint = Cpt( - EpicsSignalWithRBV, suffix="set_abs_pos_energy", kind="normal", auto_monitor=True - ) - motor_is_moving = Cpt( - EpicsSignalRO, suffix="move_abs_done_RBV", kind="normal", auto_monitor=True - ) - low_lim = Cpt(EpicsSignalRO, suffix="lo_lim_pos_energy_RBV", kind="config", auto_monitor=True) - high_lim = Cpt(EpicsSignalRO, suffix="hi_lim_pos_energy_RBV", kind="config", auto_monitor=True) - velocity = Cpt(EpicsSignalWithRBV, suffix="move_velocity", kind="config", auto_monitor=True) + # readback = Cpt( + # EpicsSignalRO, suffix="feedback_pos_energy_RBV", kind="hinted", auto_monitor=True + # ) + # setpoint = Cpt( + # EpicsSignalWithRBV, suffix="set_abs_pos_energy", kind="normal", auto_monitor=True + # ) + # motor_is_moving = Cpt( + # EpicsSignalRO, suffix="move_abs_done_RBV", kind="normal", auto_monitor=True + # ) + # low_lim = Cpt(EpicsSignalRO, suffix="lo_lim_pos_energy_RBV", kind="config", auto_monitor=True) + # high_lim = Cpt(EpicsSignalRO, suffix="hi_lim_pos_energy_RBV", kind="config", auto_monitor=True) + # velocity = Cpt(EpicsSignalWithRBV, suffix="move_velocity", kind="config", auto_monitor=True) - angle = Cpt(EpicsSignalRO, suffix="feedback_pos_angle_RBV", kind="normal", auto_monitor=True) + # angle = Cpt(EpicsSignalRO, suffix="feedback_pos_angle_RBV", kind="normal", auto_monitor=True) - # test = Cpt(AcsSignal, tag=53000, prec=6, kind="normal") # s_scan_angle_low - # test2 = Cpt(AcsSignalRO, tag=12007, prec=6, kind="normal") # scan_msg - # test3 = Cpt(AcsSignal, tag=53500, prec=6, num_el=41, kind="normal") # a_scan_pos + readback = Cpt(AcsSignalRO, tag=51508, prec=3, kind="hinted") + setpoint = Cpt(AcsSignal, tag=51507, prec=3, kind="normal") + motor_is_moving = Cpt(AcsSignalRO, tag=11504, prec=0, max_poll=0.5, kind="normal") + low_lim = Cpt(AcsSignalRO, tag=51510, prec=3, kind="config") + high_lim = Cpt(AcsSignalRO, tag=51509, prec=3, kind="config") + velocity = Cpt(AcsSignal, tag=51502, prec=3, kind="config") + angle = Cpt(AcsSignalRO, tag=51503, prec=6, kind="normal") ########## Move Command PVs ########## - move_abs = Cpt(EpicsSignal, suffix="move_abs", kind="config", put_complete=True) - move_stop = Cpt(EpicsSignal, suffix="move_stop", kind="config", put_complete=True) + # move_abs = Cpt(EpicsSignal, suffix="move_abs", kind="config", put_complete=True) + # move_stop = Cpt(EpicsSignal, suffix="move_stop", kind="config", put_complete=True) + + move_abs = Cpt(AcsSignal, tag=11503, prec=0, kind="omitted") + move_stop = Cpt(AcsSignal, tag=11509, prec=0, kind="omitted") SUB_READBACK = "readback" _default_sub = SUB_READBACK diff --git a/debye_bec/devices/mo1_bragg/mo1_bragg_enums.py b/debye_bec/devices/mo1_bragg/mo1_bragg_enums.py index 44b6b47..a89d83c 100644 --- a/debye_bec/devices/mo1_bragg/mo1_bragg_enums.py +++ b/debye_bec/devices/mo1_bragg/mo1_bragg_enums.py @@ -10,6 +10,20 @@ class Xtal(int, enum.Enum): Si311 = 1 +class TriggerSelectReference(int, enum.Enum): + """Enum class for the trigger reference selectrion""" + + ANGLE = 0 + ENERGY = 1 + + +class TriggerEnable(int, enum.Enum): + """Enum class to enable/disable trigger control""" + + DISABLED = 0 + ENABLED = 1 + + class TriggerControlSource(int, enum.Enum): """Enum class for the trigger control source of the trigger generator"""