refactor(eps): deactivate black for eps.py to keep signal component formatted in single line.
All checks were successful
CI for csaxs_bec / test (pull_request) Successful in 1m29s
CI for csaxs_bec / test (push) Successful in 1m31s

This commit is contained in:
2026-02-11 21:17:30 +01:00
parent 0e009d419c
commit ebbcc6aa15

View File

@@ -1,5 +1,9 @@
"""EPS module for cSAXS beamline: defines the EPS device with its components and methods."""
# fmt: off
# Disable Black formatting for this file to preserve an easier readable structure for the component definitions.
# pylint: disable=line-too-long
from __future__ import annotations
import time
@@ -30,553 +34,96 @@ class EPSSubDevices(Device):
class EPSAlarms(EPSSubDevices):
"""EPS alarms at the cSAXS beamline."""
eps_alarm_cnt = Cpt(
EpicsSignalRO,
read_pv="X12SA-EPS-PLC:AlarmCnt_EPS",
add_prefix=("",),
name="eps_alarm_cnt",
kind=Kind.omitted,
doc="X12SA EPS Alarm count",
auto_monitor=True,
labels={"alarm"},
)
mis_alarm_cnt = Cpt(
EpicsSignalRO,
read_pv="ARS00-MIS-PLC-01:AlarmCnt_Frontends",
add_prefix=("",),
name="mis_alarm_cnt",
kind=Kind.omitted,
doc="FrontEnd MIS Alarm count",
auto_monitor=True,
labels={"alarm"},
)
eps_alarm_cnt = Cpt(EpicsSignalRO, read_pv="X12SA-EPS-PLC:AlarmCnt_EPS", add_prefix=("",), name="eps_alarm_cnt", kind=Kind.omitted, doc="X12SA EPS Alarm count", auto_monitor=True, labels={"alarm"})
mis_alarm_cnt = Cpt(EpicsSignalRO, read_pv="ARS00-MIS-PLC-01:AlarmCnt_Frontends", add_prefix=("",), name="mis_alarm_cnt", kind=Kind.omitted, doc="FrontEnd MIS Alarm count", auto_monitor=True, labels={"alarm"})
class ValvesFrontend(EPSSubDevices):
"""Valves frontend at the cSAXS beamline."""
################
### Frontend ###
################
fe_vvpg_0000 = Cpt(
EpicsSignalRO,
read_pv="X12SA-FE-VVPG-0000:PLC_OPEN",
add_prefix=("",),
name="fevvpg0000",
kind=Kind.omitted,
doc="FE-VVPG-0000",
auto_monitor=True,
labels={"valve"},
)
fe_vvpg_1010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-FE-VVPG-1010:PLC_OPEN",
add_prefix=("",),
name="fevvpg1010",
kind=Kind.omitted,
doc="FE-VVPG-1010",
auto_monitor=True,
labels={"valve"},
)
fe_vvfv_2010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-FE-VVFV-2010:PLC_OPEN",
add_prefix=("",),
name="fevvfv2010",
kind=Kind.omitted,
doc="FE-VVFV-2010",
auto_monitor=True,
labels={"valve"},
)
fe_vvpg_2010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-FE-VVPG-2010:PLC_OPEN",
add_prefix=("",),
name="fevvpg2010",
kind=Kind.omitted,
doc="FE-VVPG-2010",
auto_monitor=True,
labels={"valve"},
)
################
### Optics ###
################
fe_vvpg_0000 = Cpt(EpicsSignalRO, read_pv="X12SA-FE-VVPG-0000:PLC_OPEN", add_prefix=("",), name="fevvpg0000", kind=Kind.omitted, doc="FE-VVPG-0000", auto_monitor=True, labels={"valve"})
fe_vvpg_1010 = Cpt(EpicsSignalRO, read_pv="X12SA-FE-VVPG-1010:PLC_OPEN", add_prefix=("",), name="fevvpg1010", kind=Kind.omitted, doc="FE-VVPG-1010", auto_monitor=True, labels={"valve"})
fe_vvfv_2010 = Cpt(EpicsSignalRO, read_pv="X12SA-FE-VVFV-2010:PLC_OPEN", add_prefix=("",), name="fevvfv2010", kind=Kind.omitted, doc="FE-VVFV-2010", auto_monitor=True, labels={"valve"})
fe_vvpg_2010 = Cpt(EpicsSignalRO, read_pv="X12SA-FE-VVPG-2010:PLC_OPEN", add_prefix=("",), name="fevvpg2010", kind=Kind.omitted, doc="FE-VVPG-2010", auto_monitor=True, labels={"valve"})
class ValvesOptics(EPSSubDevices):
"""Valves at the optics hutch."""
op_vvpg_1010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-VVPG-1010:PLC_OPEN",
add_prefix=("",),
name="opvvpg1010",
kind=Kind.omitted,
doc="OP-VVPG-1010",
auto_monitor=True,
labels={"valve"},
)
op_vvpg_2010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-VVPG-2010:PLC_OPEN",
add_prefix=("",),
name="opvvpg2010",
kind=Kind.omitted,
doc="OP-VVPG-2010",
auto_monitor=True,
labels={"valve"},
)
op_vvpg_3010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-VVPG-3010:PLC_OPEN",
add_prefix=("",),
name="opvvpg3010",
kind=Kind.omitted,
doc="OP-VVPG-3010",
auto_monitor=True,
labels={"valve"},
)
op_vvpg_3020 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-VVPG-3020:PLC_OPEN",
add_prefix=("",),
name="opvvpg3020",
kind=Kind.omitted,
doc="OP-VVPG-3020",
auto_monitor=True,
labels={"valve"},
)
op_vvpg_4010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-VVPG-4010:PLC_OPEN",
add_prefix=("",),
name="opvvpg4010",
kind=Kind.omitted,
doc="OP-VVPG-4010",
auto_monitor=True,
labels={"valve"},
)
op_vvpg_5010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-VVPG-5010:PLC_OPEN",
add_prefix=("",),
name="opvvpg5010",
kind=Kind.omitted,
doc="OP-VVPG-5010",
auto_monitor=True,
labels={"valve"},
)
op_vvpg_6010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-VVPG-6010:PLC_OPEN",
add_prefix=("",),
name="opvvpg6010",
kind=Kind.omitted,
doc="OP-VVPG-6010",
auto_monitor=True,
labels={"valve"},
)
op_vvpg_7010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-VVPG-7010:PLC_OPEN",
add_prefix=("",),
name="opvvpg7010",
kind=Kind.omitted,
doc="OP-VVPG-7010",
auto_monitor=True,
labels={"valve"},
)
##################
### Endstation ###
##################
op_vvpg_1010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-VVPG-1010:PLC_OPEN", add_prefix=("",), name="opvvpg1010", kind=Kind.omitted, doc="OP-VVPG-1010", auto_monitor=True, labels={"valve"})
op_vvpg_2010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-VVPG-2010:PLC_OPEN", add_prefix=("",), name="opvvpg2010", kind=Kind.omitted, doc="OP-VVPG-2010", auto_monitor=True, labels={"valve"})
op_vvpg_3010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-VVPG-3010:PLC_OPEN", add_prefix=("",), name="opvvpg3010", kind=Kind.omitted, doc="OP-VVPG-3010", auto_monitor=True, labels={"valve"})
op_vvpg_3020 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-VVPG-3020:PLC_OPEN", add_prefix=("",), name="opvvpg3020", kind=Kind.omitted, doc="OP-VVPG-3020", auto_monitor=True, labels={"valve"})
op_vvpg_4010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-VVPG-4010:PLC_OPEN", add_prefix=("",), name="opvvpg4010", kind=Kind.omitted, doc="OP-VVPG-4010", auto_monitor=True, labels={"valve"})
op_vvpg_5010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-VVPG-5010:PLC_OPEN", add_prefix=("",), name="opvvpg5010", kind=Kind.omitted, doc="OP-VVPG-5010", auto_monitor=True, labels={"valve"})
op_vvpg_6010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-VVPG-6010:PLC_OPEN", add_prefix=("",), name="opvvpg6010", kind=Kind.omitted, doc="OP-VVPG-6010", auto_monitor=True, labels={"valve"})
op_vvpg_7010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-VVPG-7010:PLC_OPEN", add_prefix=("",), name="opvvpg7010", kind=Kind.omitted, doc="OP-VVPG-7010", auto_monitor=True, labels={"valve"})
class ValvesEndstation(EPSSubDevices):
"""Endstation valves at the cSAXS beamline."""
es_vvpg_1010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-ES-VVPG-1010:PLC_OPEN",
add_prefix=("",),
name="esvvpg1010",
kind=Kind.omitted,
doc="ES-VVPG-1010",
auto_monitor=True,
labels={"valve"},
)
es_vvpg_1010 = Cpt(EpicsSignalRO, read_pv="X12SA-ES-VVPG-1010:PLC_OPEN", add_prefix=("",), name="esvvpg1010", kind=Kind.omitted, doc="ES-VVPG-1010", auto_monitor=True, labels={"valve"})
class ShuttersFrontend(EPSSubDevices):
"""Shutters frontend."""
fe_psh1 = Cpt(
EpicsSignalRO,
read_pv="X12SA-FE-PSH1-EMLS-0010:OPEN",
add_prefix=("",),
name="fepsh1",
kind=Kind.omitted,
doc="FE-PSH1-EMLS-0010",
auto_monitor=True,
labels={"shutter"},
)
fe_sto1 = Cpt(
EpicsSignalRO,
read_pv="X12SA-FE-STO1-EMLS-0010:OPEN",
add_prefix=("",),
name="festo1",
kind=Kind.omitted,
doc="FE-STO1-EMLS-0010",
auto_monitor=True,
labels={"shutter"},
)
fe_psh1 = Cpt(EpicsSignalRO, read_pv="X12SA-FE-PSH1-EMLS-0010:OPEN", add_prefix=("",), name="fepsh1", kind=Kind.omitted, doc="FE-PSH1-EMLS-0010", auto_monitor=True, labels={"shutter"})
fe_sto1 = Cpt(EpicsSignalRO, read_pv="X12SA-FE-STO1-EMLS-0010:OPEN", add_prefix=("",), name="festo1", kind=Kind.omitted, doc="FE-STO1-EMLS-0010", auto_monitor=True, labels={"shutter"})
class ShuttersEndstation(EPSSubDevices):
"""Shutters at the endstation."""
es_psh17010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-PSH1-EMLS-7010:OPEN",
add_prefix=("",),
name="espsh17010",
kind=Kind.omitted,
doc="OP-PSH1-EMLS-7010",
auto_monitor=True,
labels={"shutter"},
)
es_psh17010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-PSH1-EMLS-7010:OPEN", add_prefix=("",), name="espsh17010", kind=Kind.omitted, doc="OP-PSH1-EMLS-7010", auto_monitor=True, labels={"shutter"})
class DMMMonochromator(EPSSubDevices):
"""DMM monochromator signals at the cSAXS beamline."""
dmm_temp_surface_1 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-ETTC-3010:TEMP",
add_prefix=("",),
name="dmm_temp_surface_1",
kind=Kind.omitted,
doc="DMM Temp Surface 1",
auto_monitor=True,
labels={"temp"},
)
dmm_temp_surface_2 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-ETTC-3020:TEMP",
add_prefix=("",),
name="dmm_temp_surface_2",
kind=Kind.omitted,
doc="DMM Temp Surface 2",
auto_monitor=True,
labels={"temp"},
)
dmm_temp_shield_1_disaster = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-ETTC-3030:TEMP",
add_prefix=("",),
name="dmm_temp_shield_1_disaster",
kind=Kind.omitted,
doc="DMM Temp Shield 1 (disaster)",
auto_monitor=True,
labels={"temp"},
)
dmm_temp_shield_2_disaster = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-ETTC-3040:TEMP",
add_prefix=("",),
name="dmm_temp_shield_2_disaster",
kind=Kind.omitted,
doc="DMM Temp Shield 2 (disaster)",
auto_monitor=True,
labels={"temp"},
)
dmm_temp_surface_1 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-ETTC-3010:TEMP", add_prefix=("",), name="dmm_temp_surface_1", kind=Kind.omitted, doc="DMM Temp Surface 1", auto_monitor=True, labels={"temp"})
dmm_temp_surface_2 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-ETTC-3020:TEMP", add_prefix=("",), name="dmm_temp_surface_2", kind=Kind.omitted, doc="DMM Temp Surface 2", auto_monitor=True, labels={"temp"})
dmm_temp_shield_1_disaster = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-ETTC-3030:TEMP", add_prefix=("",), name="dmm_temp_shield_1_disaster", kind=Kind.omitted, doc="DMM Temp Shield 1 (disaster)", auto_monitor=True, labels={"temp"})
dmm_temp_shield_2_disaster = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-ETTC-3040:TEMP", add_prefix=("",), name="dmm_temp_shield_2_disaster", kind=Kind.omitted, doc="DMM Temp Shield 2 (disaster)", auto_monitor=True, labels={"temp"})
dmm_translation_thru = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-EMLS-3010:THRU",
add_prefix=("",),
name="dmm_translation_thru",
kind=Kind.omitted,
doc="DMM Translation ThruPos",
auto_monitor=True,
labels={"switch"},
)
dmm_translation_in = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-EMLS-3020:IN",
add_prefix=("",),
name="dmm_translation_in",
kind=Kind.omitted,
doc="DMM Translation InPos",
auto_monitor=True,
labels={"switch"},
)
dmm_bragg_thru = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-EMLS-3030:THRU",
add_prefix=("",),
name="dmm_bragg_thru",
kind=Kind.omitted,
doc="DMM Bragg ThruPos",
auto_monitor=True,
labels={"switch"},
)
dmm_bragg_in = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-EMLS-3040:IN",
add_prefix=("",),
name="dmm_bragg_in",
kind=Kind.omitted,
doc="DMM Bragg InPos",
auto_monitor=True,
labels={"switch"},
)
dmm_translation_thru = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-EMLS-3010:THRU", add_prefix=("",), name="dmm_translation_thru", kind=Kind.omitted, doc="DMM Translation ThruPos", auto_monitor=True, labels={"switch"})
dmm_translation_in = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-EMLS-3020:IN", add_prefix=("",), name="dmm_translation_in", kind=Kind.omitted, doc="DMM Translation InPos", auto_monitor=True, labels={"switch"})
dmm_bragg_thru = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-EMLS-3030:THRU", add_prefix=("",), name="dmm_bragg_thru", kind=Kind.omitted, doc="DMM Bragg ThruPos", auto_monitor=True, labels={"switch"})
dmm_bragg_in = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-EMLS-3040:IN", add_prefix=("",), name="dmm_bragg_in", kind=Kind.omitted, doc="DMM Bragg InPos", auto_monitor=True, labels={"switch"})
dmm_heater_fault_xtal_1 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-EMSW-3050:SWITCH",
add_prefix=("",),
name="dmm_heater_fault_xtal_1",
kind=Kind.omitted,
doc="DMM Heater Fault XTAL 1",
auto_monitor=True,
labels={"fault"},
)
dmm_heater_fault_xtal_2 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-EMSW-3060:SWITCH",
add_prefix=("",),
name="dmm_heater_fault_xtal_2",
kind=Kind.omitted,
doc="DMM Heater Fault XTAL 2",
auto_monitor=True,
labels={"fault"},
)
dmm_heater_fault_support_1 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM-EMSW-3070:SWITCH",
add_prefix=("",),
name="dmm_heater_fault_support_1",
kind=Kind.omitted,
doc="DMM Heater Fault Support 1",
auto_monitor=True,
labels={"fault"},
)
dmm_heater_fault_xtal_1 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-EMSW-3050:SWITCH", add_prefix=("",), name="dmm_heater_fault_xtal_1", kind=Kind.omitted, doc="DMM Heater Fault XTAL 1", auto_monitor=True, labels={"fault"})
dmm_heater_fault_xtal_2 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-EMSW-3060:SWITCH", add_prefix=("",), name="dmm_heater_fault_xtal_2", kind=Kind.omitted, doc="DMM Heater Fault XTAL 2", auto_monitor=True, labels={"fault"})
dmm_heater_fault_support_1 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM-EMSW-3070:SWITCH", add_prefix=("",), name="dmm_heater_fault_support_1", kind=Kind.omitted, doc="DMM Heater Fault Support 1", auto_monitor=True, labels={"fault"})
dmm_energy = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM1:ENERGY-GET",
add_prefix=("",),
name="dmm_energy",
kind=Kind.omitted,
doc="DMM Energy",
auto_monitor=True,
labels={"energy"},
)
dmm_position = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM1:POSITION",
add_prefix=("",),
name="dmm_position",
kind=Kind.omitted,
doc="DMM Position",
auto_monitor=True,
labels={"string"},
)
dmm_stripe = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-DMM1:STRIPE",
add_prefix=("",),
name="dmm_stripe",
kind=Kind.omitted,
doc="DMM Stripe",
auto_monitor=True,
labels={"string"},
)
dmm_energy = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM1:ENERGY-GET", add_prefix=("",), name="dmm_energy", kind=Kind.omitted, doc="DMM Energy", auto_monitor=True, labels={"energy"})
dmm_position = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM1:POSITION", add_prefix=("",), name="dmm_position", kind=Kind.omitted, doc="DMM Position", auto_monitor=True, labels={"string"})
dmm_stripe = Cpt(EpicsSignalRO, read_pv="X12SA-OP-DMM1:STRIPE", add_prefix=("",), name="dmm_stripe", kind=Kind.omitted, doc="DMM Stripe", auto_monitor=True, labels={"string"})
class CCMMonochromator(EPSSubDevices):
"""CCM monochromator signals at the cSAXS beamline."""
ccm_temp_crystal = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CCM-ETTC-4010:TEMP",
add_prefix=("",),
name="ccm_temp_crystal",
kind=Kind.omitted,
doc="CCM Temp Crystal",
auto_monitor=True,
labels={"temp"},
)
ccm_temp_shield_disaster = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CCM-ETTC-4020:TEMP",
add_prefix=("",),
name="ccm_temp_shield_disaster",
kind=Kind.omitted,
doc="CCM Temp Shield (disaster)",
auto_monitor=True,
labels={"temp"},
)
ccm_temp_crystal = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CCM-ETTC-4010:TEMP", add_prefix=("",), name="ccm_temp_crystal", kind=Kind.omitted, doc="CCM Temp Crystal", auto_monitor=True, labels={"temp"})
ccm_temp_shield_disaster = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CCM-ETTC-4020:TEMP", add_prefix=("",), name="ccm_temp_shield_disaster", kind=Kind.omitted, doc="CCM Temp Shield (disaster)", auto_monitor=True, labels={"temp"})
ccm_heater_fault_1 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CCM-EMSW-4010:SWITCH",
add_prefix=("",),
name="ccm_heater_fault_1",
kind=Kind.omitted,
doc="CCM Heater Fault 1",
auto_monitor=True,
labels={"fault"},
)
ccm_heater_fault_2 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CCM-EMSW-4020:SWITCH",
add_prefix=("",),
name="ccm_heater_fault_2",
kind=Kind.omitted,
doc="CCM Heater Fault 2",
auto_monitor=True,
labels={"fault"},
)
ccm_heater_fault_3 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CCM-EMSW-4030:SWITCH",
add_prefix=("",),
name="ccm_heater_fault_3",
kind=Kind.omitted,
doc="CCM Heater Fault 3",
auto_monitor=True,
labels={"fault"},
)
ccm_heater_fault_1 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CCM-EMSW-4010:SWITCH", add_prefix=("",), name="ccm_heater_fault_1", kind=Kind.omitted, doc="CCM Heater Fault 1", auto_monitor=True, labels={"fault"})
ccm_heater_fault_2 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CCM-EMSW-4020:SWITCH", add_prefix=("",), name="ccm_heater_fault_2", kind=Kind.omitted, doc="CCM Heater Fault 2", auto_monitor=True, labels={"fault"})
ccm_heater_fault_3 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CCM-EMSW-4030:SWITCH", add_prefix=("",), name="ccm_heater_fault_3", kind=Kind.omitted, doc="CCM Heater Fault 3", auto_monitor=True, labels={"fault"})
ccm_energy = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CCM1:ENERGY-GET",
add_prefix=("",),
name="ccm_energy",
kind=Kind.omitted,
doc="CCM Energy",
auto_monitor=True,
labels={"energy"},
)
ccm_position = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CCM1:POSITION",
add_prefix=("",),
name="ccm_position",
kind=Kind.omitted,
doc="CCM Position",
auto_monitor=True,
labels={"string"},
)
ccm_energy = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CCM1:ENERGY-GET", add_prefix=("",), name="ccm_energy", kind=Kind.omitted, doc="CCM Energy", auto_monitor=True, labels={"energy"})
ccm_position = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CCM1:POSITION", add_prefix=("",), name="ccm_position", kind=Kind.omitted, doc="CCM Position", auto_monitor=True, labels={"string"})
class CoolingWater(EPSSubDevices):
"""Cooling water signals at the cSAXS beamline."""
op_sl1_efsw_2010_flow = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-SL1-EFSW-2010:FLOW",
add_prefix=("",),
name="op_sl1_efsw_2010_flow",
kind=Kind.omitted,
doc="OP-SL1-EFSW-2010",
auto_monitor=True,
labels={"flow"},
)
op_sl2_efsw_2010_flow = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-SL2-EFSW-2010:FLOW",
add_prefix=("",),
name="op_sl2_efsw_2010_flow",
kind=Kind.omitted,
doc="OP-SL2-EFSW-2010",
auto_monitor=True,
labels={"flow"},
)
op_eb1_efsw_5010_flow = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-EB1-EFSW-5010:FLOW",
add_prefix=("",),
name="op_eb1_efsw_5010_flow",
kind=Kind.omitted,
doc="OP-EB1-EFSW-5010",
auto_monitor=True,
labels={"flow"},
)
op_eb1_efsw_5020_flow = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-EB1-EFSW-5020:FLOW",
add_prefix=("",),
name="op_eb1_efsw_5020_flow",
kind=Kind.omitted,
doc="OP-EB1-EFSW-5020",
auto_monitor=True,
labels={"flow"},
)
op_sl3_efsw_5010_flow = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-SL3-EFSW-5010:FLOW",
add_prefix=("",),
name="op_sl3_efsw_5010_flow",
kind=Kind.omitted,
doc="OP-SL3-EFSW-5010",
auto_monitor=True,
labels={"flow"},
)
op_kb_efsw_6010_flow = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-KB-EFSW-6010:FLOW",
add_prefix=("",),
name="op_kb_efsw_6010_flow",
kind=Kind.omitted,
doc="OP-KB-EFSW-6010",
auto_monitor=True,
labels={"flow"},
)
op_psh1_efsw_7010_flow = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-PSH1-EFSW-7010:FLOW",
add_prefix=("",),
name="op_psh1_efsw_7010_flow",
kind=Kind.omitted,
doc="OP-PSH1-EFSW-7010",
auto_monitor=True,
labels={"flow"},
)
es_eb2_efsw_1010_flow = Cpt(
EpicsSignalRO,
read_pv="X12SA-ES-EB2-EFSW-1010:FLOW",
add_prefix=("",),
name="es_eb2_efsw_1010_flow",
kind=Kind.omitted,
doc="ES-EB2-EFSW-1010",
auto_monitor=True,
labels={"flow"},
)
op_sl1_efsw_2010_flow = Cpt(EpicsSignalRO, read_pv="X12SA-OP-SL1-EFSW-2010:FLOW", add_prefix=("",), name="op_sl1_efsw_2010_flow", kind=Kind.omitted, doc="OP-SL1-EFSW-2010", auto_monitor=True, labels={"flow"})
op_sl2_efsw_2010_flow = Cpt(EpicsSignalRO, read_pv="X12SA-OP-SL2-EFSW-2010:FLOW", add_prefix=("",), name="op_sl2_efsw_2010_flow", kind=Kind.omitted, doc="OP-SL2-EFSW-2010", auto_monitor=True, labels={"flow"})
op_eb1_efsw_5010_flow = Cpt(EpicsSignalRO, read_pv="X12SA-OP-EB1-EFSW-5010:FLOW", add_prefix=("",), name="op_eb1_efsw_5010_flow", kind=Kind.omitted, doc="OP-EB1-EFSW-5010", auto_monitor=True, labels={"flow"})
op_eb1_efsw_5020_flow = Cpt(EpicsSignalRO, read_pv="X12SA-OP-EB1-EFSW-5020:FLOW", add_prefix=("",), name="op_eb1_efsw_5020_flow", kind=Kind.omitted, doc="OP-EB1-EFSW-5020", auto_monitor=True, labels={"flow"})
op_sl3_efsw_5010_flow = Cpt(EpicsSignalRO, read_pv="X12SA-OP-SL3-EFSW-5010:FLOW", add_prefix=("",), name="op_sl3_efsw_5010_flow", kind=Kind.omitted, doc="OP-SL3-EFSW-5010", auto_monitor=True, labels={"flow"})
op_kb_efsw_6010_flow = Cpt(EpicsSignalRO, read_pv="X12SA-OP-KB-EFSW-6010:FLOW", add_prefix=("",), name="op_kb_efsw_6010_flow", kind=Kind.omitted, doc="OP-KB-EFSW-6010", auto_monitor=True, labels={"flow"})
op_psh1_efsw_7010_flow = Cpt(EpicsSignalRO, read_pv="X12SA-OP-PSH1-EFSW-7010:FLOW", add_prefix=("",), name="op_psh1_efsw_7010_flow", kind=Kind.omitted, doc="OP-PSH1-EFSW-7010", auto_monitor=True, labels={"flow"})
es_eb2_efsw_1010_flow = Cpt(EpicsSignalRO, read_pv="X12SA-ES-EB2-EFSW-1010:FLOW", add_prefix=("",), name="es_eb2_efsw_1010_flow", kind=Kind.omitted, doc="ES-EB2-EFSW-1010", auto_monitor=True, labels={"flow"})
op_cs_ecvw_0010 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CS-ECVW-0010:PLC_OPEN",
add_prefix=("",),
name="op_cs_ecvw_0010",
kind=Kind.omitted,
doc="OP-CS-ECVW-0010",
auto_monitor=True,
labels={"valve"},
)
op_cs_ecvw_0020 = Cpt(
EpicsSignalRO,
read_pv="X12SA-OP-CS-ECVW-0020:PLC_OPEN",
add_prefix=("",),
name="op_cs_ecvw_0020",
kind=Kind.omitted,
doc="OP-CS-ECVW-0020",
auto_monitor=True,
labels={"valve"},
)
op_cs_ecvw_0010 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CS-ECVW-0010:PLC_OPEN", add_prefix=("",), name="op_cs_ecvw_0010", kind=Kind.omitted, doc="OP-CS-ECVW-0010", auto_monitor=True, labels={"valve"})
op_cs_ecvw_0020 = Cpt(EpicsSignalRO, read_pv="X12SA-OP-CS-ECVW-0020:PLC_OPEN", add_prefix=("",), name="op_cs_ecvw_0020", kind=Kind.omitted, doc="OP-CS-ECVW-0020", auto_monitor=True, labels={"valve"})
class EPS(PSIDeviceBase):
@@ -592,26 +139,8 @@ class EPS(PSIDeviceBase):
cooling_water = Cpt(CoolingWater, name="cooling_water", doc="Cooling Water")
# Acknowledgment signals for PLC communication (if needed for future use)
ackerr = Cpt(
EpicsSignal,
read_pv="X12SA-EPS-PLC:ACKERR-REQUEST",
add_prefix=("",),
name="ackerr",
kind=Kind.omitted,
doc="ACKERR request - OP-CS-ECVW-0020",
auto_monitor=True,
labels={"request"},
)
request = Cpt(
EpicsSignal,
read_pv="X12SA-OP-CS-ECVW:PLC_REQUEST",
add_prefix=("",),
name="op_cs_ecvw_request",
kind=Kind.omitted,
doc="PLC request - OP-CS-ECVW-PLC_REQUEST",
auto_monitor=True,
labels={"request"},
)
ackerr = Cpt(EpicsSignal, read_pv="X12SA-EPS-PLC:ACKERR-REQUEST", add_prefix=("",), name="ackerr", kind=Kind.omitted, doc="ACKERR request - OP-CS-ECVW-0020", auto_monitor=True, labels={"request"})
request = Cpt(EpicsSignal, read_pv="X12SA-OP-CS-ECVW:PLC_REQUEST", add_prefix=("",), name="op_cs_ecvw_request", kind=Kind.omitted, doc="PLC request - OP-CS-ECVW-PLC_REQUEST", auto_monitor=True, labels={"request"})
def _notify(self, msg: str, show_as_client_msg: bool = True):
"""Utility method to print a message, and optionally send it to the client UI if it should be shown also as a client message."""
@@ -657,11 +186,7 @@ class EPS(PSIDeviceBase):
valves = [self.cooling_water.op_cs_ecvw_0010, self.cooling_water.op_cs_ecvw_0020]
# Flow channels list extracted from CHANNELS
flow_items = [
walk.item
for walk in self.cooling_water.walk_signals()
if "flow" in walk.item._ophyd_labels_
]
flow_items = [walk.item for walk in self.cooling_water.walk_signals() if "flow" in walk.item._ophyd_labels_]
# --- Step 1: EPS alarm reset ---
alarm_value = self.safe_get(eps_alarm_sig, 0)
@@ -701,16 +226,8 @@ class EPS(PSIDeviceBase):
def snapshot():
# Valve snapshot
v_states = [self.safe_get(v, None) for v in valves]
v1 = f"{valves[0].attr_name[-4:]}=" + (
"OPEN "
if v_states[0] is True or v_states[0] == 1
else "CLOSED" if v_states[0] is False or v_states[0] == 0 else "N/A "
)
v2 = f"{valves[1].attr_name[-4:]}=" + (
"OPEN "
if v_states[1] is True or v_states[1] == 1
else "CLOSED" if v_states[1] is False or v_states[1] == 0 else "N/A "
)
v1 = f"{valves[0].attr_name[-4:]}=" + ("OPEN " if v_states[0] is True or v_states[0] == 1 else "CLOSED" if v_states[0] is False or v_states[0] == 0 else "N/A ")
v2 = f"{valves[1].attr_name[-4:]}=" + ("OPEN " if v_states[1] is True or v_states[1] == 1 else "CLOSED" if v_states[1] is False or v_states[1] == 0 else "N/A ")
# 2 valves with a single space between => width ~ 21
valve_str = f"{v1} {v2}"
@@ -718,9 +235,7 @@ class EPS(PSIDeviceBase):
flow_states = []
for fsig in flow_items:
fval = self.safe_get(fsig, None)
flow_states.append(
True if fval in (1, True) else False if fval in (0, False) else None
)
flow_states.append(True if fval in (1, True) else False if fval in (0, False) else None)
ok = sum(1 for f in flow_states if f is True)
fail = sum(1 for f in flow_states if f is False)
@@ -751,9 +266,7 @@ class EPS(PSIDeviceBase):
if both_open:
if stable_until is None:
stable_until = now + STABILITY
print(
f"[WaterCooling] Both valves OPEN → starting {STABILITY}s stability window…"
)
print(f"[WaterCooling] Both valves OPEN → starting {STABILITY}s stability window…")
else:
if now >= stable_until:
print("→ SUCCESS: Valves remained OPEN during stability window.")
@@ -775,10 +288,7 @@ class EPS(PSIDeviceBase):
# ---- New: enum maps for numeric -> string rendering ----
POSITION_ENUM = {0: "out of beam", 1: "in beam"}
STRIPE_ENUM = {0: "Stripe 1 W/B4C", 1: "Stripe 2 NiV/B4C"}
POSITION_ATTRS = {
self.dmm_monochromator.dmm_position.attr_name,
self.ccm_monochromator.ccm_position.attr_name,
}
POSITION_ATTRS = {self.dmm_monochromator.dmm_position.attr_name, self.ccm_monochromator.ccm_position.attr_name}
STRIPE_ATTRS = {self.dmm_monochromator.dmm_stripe.attr_name}
def is_bool_like(v):
@@ -831,9 +341,7 @@ class EPS(PSIDeviceBase):
return f"{green+'OK'+white if not value else red+'FAULT'+white}"
# ------------------- VALVE/SHUTTER -----------------
if (
"valve" in signal._ophyd_labels_ or "shutter" in signal._ophyd_labels_
) and is_bool_like(value):
if ("valve" in signal._ophyd_labels_ or "shutter" in signal._ophyd_labels_) and is_bool_like(value):
return f"{green+'OPEN'+white if value else red+'CLOSED'+white}"
# ------------------- FLOW (OK/FAIL) ----------------
@@ -873,48 +381,46 @@ class EPS(PSIDeviceBase):
return is_bool_like(v) and not bool(v)
if closed(v1) and closed(v2):
print(
f"\n{cyan}Hint:{white} Both water cooling valves are CLOSED.\n"
f"You can open them using: {bold}dev.x12saEPS.water_cooling_op(){white}"
)
print(f"\n{cyan}Hint:{white} Both water cooling valves are CLOSED.\n" f"You can open them using: {bold}dev.x12saEPS.water_cooling_op(){white}")
# ----------------------------------------------------------
# Consistency report
# ----------------------------------------------------------
# def consistency_report(self, *, verbose=True):
# missing = []
# dupes = []
# seen = {}
# fmt: on
# ----------------------------------------------------------
# Consistency report
# ----------------------------------------------------------
# def consistency_report(self, *, verbose=True):
# missing = []
# dupes = []
# seen = {}
# for sub_device in self.walk_components():
# section = sub_device.name
# for walk in sub_device.walk_components():
# cpt: Cpt = walk.ancestors[-1]
# it: EpicsSignalRO = walk.item
# if not hasattr(self, it["attr"]):
# missing.append((section, it["attr"], it["label"], it["pv"]))
# for sub_device in self.walk_components():
# section = sub_device.name
# for walk in sub_device.walk_components():
# cpt: Cpt = walk.ancestors[-1]
# it: EpicsSignalRO = walk.item
# if not hasattr(self, it["attr"]):
# missing.append((section, it["attr"], it["label"], it["pv"]))
# pv = it["pv"]
# if pv in seen:
# dupes.append((pv, seen[pv], (section, it["attr"], it["label"])))
# else:
# seen[pv] = (section, it["attr"], it["label"])
# pv = it["pv"]
# if pv in seen:
# dupes.append((pv, seen[pv], (section, it["attr"], it["label"])))
# else:
# seen[pv] = (section, it["attr"], it["label"])
# if verbose:
# print("=== Consistency Report ===")
# if verbose:
# print("=== Consistency Report ===")
# if missing:
# print("\nMissing attributes:")
# for sec, a, lbl, pv in missing:
# print(f" - [{sec}] {a} {lbl} pv={pv}")
# else:
# print("\nNo missing attributes.")
# if missing:
# print("\nMissing attributes:")
# for sec, a, lbl, pv in missing:
# print(f" - [{sec}] {a} {lbl} pv={pv}")
# else:
# print("\nNo missing attributes.")
# if dupes:
# print("\nDuplicate PVs:")
# for pv, f1, f2 in dupes:
# print(f" {pv} → {f1} AND {f2}")
# else:
# print("\nNo duplicate PVs.")
# if dupes:
# print("\nDuplicate PVs:")
# for pv, f1, f2 in dupes:
# print(f" {pv} → {f1} AND {f2}")
# else:
# print("\nNo duplicate PVs.")
# return {"missing_attrs": missing, "duplicate_pvs": dupes}
# return {"missing_attrs": missing, "duplicate_pvs": dupes}