From d8383d3b73eb1a8bb04a772b1d14b7deda00f304 Mon Sep 17 00:00:00 2001 From: x01da Date: Thu, 18 Sep 2025 14:01:05 +0200 Subject: [PATCH] add string representation of signals. add Pips class/device --- .../ionization_chambers/ionization_chamber.py | 123 ++++++++++++++++-- 1 file changed, 115 insertions(+), 8 deletions(-) diff --git a/debye_bec/devices/ionization_chambers/ionization_chamber.py b/debye_bec/devices/ionization_chambers/ionization_chamber.py index 52a6a78..25b81d8 100644 --- a/debye_bec/devices/ionization_chambers/ionization_chamber.py +++ b/debye_bec/devices/ionization_chambers/ionization_chamber.py @@ -33,22 +33,24 @@ class EpicsSignalSplit(EpicsSignal): class GasMixSetupControl(Device): """GasMixSetup Control for Inonization Chamber 0""" - gas1_req = Cpt(EpicsSignalWithRBV, suffix="Gas1Req", kind="config", doc="Gas 1 requirement") + gas1_req = Cpt(EpicsSignalWithRBV, suffix="Gas1Req", kind="omitted", doc="Gas 1 requirement") conc1_req = Cpt( - EpicsSignalWithRBV, suffix="Conc1Req", kind="config", doc="Concentration 1 requirement" + EpicsSignalWithRBV, suffix="Conc1Req", kind="omitted", doc="Concentration 1 requirement" ) - gas2_req = Cpt(EpicsSignalWithRBV, suffix="Gas2Req", kind="config", doc="Gas 2 requirement") + gas2_req = Cpt(EpicsSignalWithRBV, suffix="Gas2Req", kind="omitted", doc="Gas 2 requirement") conc2_req = Cpt( - EpicsSignalWithRBV, suffix="Conc2Req", kind="config", doc="Concentration 2 requirement" + EpicsSignalWithRBV, suffix="Conc2Req", kind="omitted", doc="Concentration 2 requirement" ) press_req = Cpt( - EpicsSignalWithRBV, suffix="PressReq", kind="config", doc="Pressure requirement" + EpicsSignalWithRBV, suffix="PressReq", kind="omitted", doc="Pressure requirement" ) fill = Cpt(EpicsSignal, suffix="Fill", kind="config", doc="Fill the chamber") status = Cpt(EpicsSignalRO, suffix="Status", kind="config", doc="Status") gas1 = Cpt(EpicsSignalRO, suffix="Gas1", kind="config", doc="Gas 1") + gas1_string = Cpt(EpicsSignalRO, suffix="Gas1", kind="config", doc="Gas 1", string=True) conc1 = Cpt(EpicsSignalRO, suffix="Conc1", kind="config", doc="Concentration 1") gas2 = Cpt(EpicsSignalRO, suffix="Gas2", kind="config", doc="Gas 2") + gas2_string = Cpt(EpicsSignalRO, suffix="Gas2", kind="config", doc="Gas 2", string=True) conc2 = Cpt(EpicsSignalRO, suffix="Conc2", kind="config", doc="Concentration 2") press = Cpt(EpicsSignalRO, suffix="PressTransm", kind="config", doc="Current Pressure") @@ -84,10 +86,25 @@ class IonizationChamber0(PSIDeviceBase): (f"ES:AMP5004:cFilter{num}_ENUM"), {"kind": "config", "doc": f"Filter of ch{num} -> IC{num-1}"}, ), + "cOnOff_string": ( + EpicsSignal, + (f"ES:AMP5004.cOnOff{num}"), + {"kind": "config", "doc": f"Enable ch{num} -> IC{num-1}", "string": True}, + ), + "cGain_ENUM_string": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cGain{num}_ENUM"), + {"kind": "config", "doc": f"Gain of ch{num} -> IC{num-1}", "string": True}, + ), + "cFilter_ENUM_string": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cFilter{num}_ENUM"), + {"kind": "config", "doc": f"Filter of ch{num} -> IC{num-1}", "string": True}, + ), } amp = Dcpt(amp_signals) gmes = Cpt(GasMixSetupControl, suffix=f"ES-GMES:IC{num-1}") - gmes_status = Cpt(EpicsSignalRO, suffix="ES-GMES:StatusMsg0", kind="config", doc="Status") + gmes_status_msg = Cpt(EpicsSignalRO, suffix="ES-GMES:StatusMsg0", kind="config", doc="Status") hv = Cpt(HighVoltageSuppliesControl, suffix=f"ES1-IC{num-1}:") hv_en_signals = { "ext_ena": ( @@ -275,10 +292,25 @@ class IonizationChamber1(IonizationChamber0): (f"ES:AMP5004:cFilter{num}_ENUM"), {"kind": "config", "doc": f"Filter of ch{num} -> IC{num-1}"}, ), + "cOnOff_string": ( + EpicsSignal, + (f"ES:AMP5004.cOnOff{num}"), + {"kind": "config", "doc": f"Enable ch{num} -> IC{num-1}", "string": True}, + ), + "cGain_ENUM_string": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cGain{num}_ENUM"), + {"kind": "config", "doc": f"Gain of ch{num} -> IC{num-1}", "string": True}, + ), + "cFilter_ENUM_string": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cFilter{num}_ENUM"), + {"kind": "config", "doc": f"Filter of ch{num} -> IC{num-1}", "string": True}, + ), } amp = Dcpt(amp_signals) gmes = Cpt(GasMixSetupControl, suffix=f"ES-GMES:IC{num-1}") - gmes_status = Cpt(EpicsSignalRO, suffix="ES-GMES:StatusMsg0", kind="config", doc="Status") + gmes_status_msg = Cpt(EpicsSignalRO, suffix="ES-GMES:StatusMsg0", kind="config", doc="Status") hv = Cpt(HighVoltageSuppliesControl, suffix=f"ES2-IC{num-1}:") hv_en_signals = { "ext_ena": ( @@ -311,10 +343,25 @@ class IonizationChamber2(IonizationChamber0): (f"ES:AMP5004:cFilter{num}_ENUM"), {"kind": "config", "doc": f"Filter of ch{num} -> IC{num-1}"}, ), + "cOnOff_string": ( + EpicsSignal, + (f"ES:AMP5004.cOnOff{num}"), + {"kind": "config", "doc": f"Enable ch{num} -> IC{num-1}", "string": True}, + ), + "cGain_ENUM_string": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cGain{num}_ENUM"), + {"kind": "config", "doc": f"Gain of ch{num} -> IC{num-1}", "string": True}, + ), + "cFilter_ENUM_string": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cFilter{num}_ENUM"), + {"kind": "config", "doc": f"Filter of ch{num} -> IC{num-1}", "string": True}, + ), } amp = Dcpt(amp_signals) gmes = Cpt(GasMixSetupControl, suffix=f"ES-GMES:IC{num-1}") - gmes_status = Cpt(EpicsSignalRO, suffix="ES-GMES:StatusMsg0", kind="config", doc="Status") + gmes_status_msg = Cpt(EpicsSignalRO, suffix="ES-GMES:StatusMsg0", kind="config", doc="Status") hv = Cpt(HighVoltageSuppliesControl, suffix=f"ES2-IC{num-1}:") hv_en_signals = { "ext_ena": ( @@ -325,3 +372,63 @@ class IonizationChamber2(IonizationChamber0): "ena": (EpicsSignal, "ES2-IC12:HV-Ena", {"kind": "config", "doc": "Enable signal of HV"}), } hv_en = Dcpt(hv_en_signals) + +class Pips(IonizationChamber0): + """Pips, prefix should be 'X01DA-'.""" + + USER_ACCESS = ["set_gain", "set_filter"] + + num = 4 + amp_signals = { + "cOnOff": ( + EpicsSignal, + (f"ES:AMP5004.cOnOff{num}"), + {"kind": "config", "doc": f"Enable ch{num} -> IC{num-1}"}, + ), + "cGain_ENUM": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cGain{num}_ENUM"), + {"kind": "config", "doc": f"Gain of ch{num} -> IC{num-1}"}, + ), + "cFilter_ENUM": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cFilter{num}_ENUM"), + {"kind": "config", "doc": f"Filter of ch{num} -> IC{num-1}"}, + ), + "cOnOff_string": ( + EpicsSignal, + (f"ES:AMP5004.cOnOff{num}"), + {"kind": "config", "doc": f"Enable ch{num} -> IC{num-1}", "string": True}, + ), + "cGain_ENUM_string": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cGain{num}_ENUM"), + {"kind": "config", "doc": f"Gain of ch{num} -> IC{num-1}", "string": True}, + ), + "cFilter_ENUM_string": ( + EpicsSignalWithRBV, + (f"ES:AMP5004:cFilter{num}_ENUM"), + {"kind": "config", "doc": f"Filter of ch{num} -> IC{num-1}", "string": True}, + ), + } + amp = Dcpt(amp_signals) + gmes = None + gmes_status_msg = None + hv = None + hv_en_signals = None + hv_en = None + + @typechecked + def set_hv(self, *_) -> None: + """Not available for the PIPS""" + return None + + @typechecked + def set_grid(self, *_) -> None: + """Not available for the PIPS""" + return None + + @typechecked + def fill(self, *_) -> None: + """Not available for the PIPS""" + return None