diff --git a/services/postmortemlog/current/app/src/agebd_postmortemlog/service.py b/services/postmortemlog/current/app/src/agebd_postmortemlog/service.py index 5c05f25..6d05606 100644 --- a/services/postmortemlog/current/app/src/agebd_postmortemlog/service.py +++ b/services/postmortemlog/current/app/src/agebd_postmortemlog/service.py @@ -14,7 +14,7 @@ import numpy as np from epics import poll from agebd.h5 import h5save -from agebd.pv import get_pv_class +from agebd.pv import get_pv_class, get_pv_external_class from agebd.service.base import BaseService from agebd.service.pvs import BasePVs from agebd.utils import printgetversion @@ -22,6 +22,7 @@ from agebd.utils import printgetversion __version__ = printgetversion(__file__) PV = get_pv_class() +PV_EXTERNAL = get_pv_external_class() plt.switch_backend("agg") plt.rcParams.update({"font.size": 18}) @@ -41,86 +42,88 @@ class PVs(BasePVs): postdelay = PV("AGEBD-POSTMORTEMLOG:BEAM-ABORT-EVT.ODLY") # Potential Service Callback PVs - bdcinputsum = PV("AGESA-SBDC-0000:SUM_INPUT_NOT_OK.VAL", auto_monitor=True) - bdcinputsum_latched = PV("AGESA-SBDC-0000:SUM_INPUT_NOT_OK_LATCHED.VAL", auto_monitor=True) + bdcinputsum = PV_EXTERNAL("AGESA-SBDC-0000:SUM_INPUT_NOT_OK.VAL", auto_monitor=True) + bdcinputsum_latched = PV_EXTERNAL( + "AGESA-SBDC-0000:SUM_INPUT_NOT_OK_LATCHED.VAL", auto_monitor=True + ) # Minimum current condition - pctmaster = PV("ARS07-DPCT-0000:CURR.VAL") + pctmaster = PV_EXTERNAL("ARS07-DPCT-0000:CURR.VAL") # Service Input PVs (Post Mortem Information) bdc_interlocks = [ - PV("AGESA-SBDC-0000:CH{:02.0f}-INPUT_OK_LATCHED.VAL".format(i)) for i in range(21) + PV_EXTERNAL("AGESA-SBDC-0000:CH{:02.0f}-INPUT_OK_LATCHED.VAL".format(i)) for i in range(21) ] - bdc_delays = [PV("AGESA-SBDC-0000:CH{:02.0f}-DELAY.VAL".format(i)) for i in range(21)] + bdc_delays = [PV_EXTERNAL("AGESA-SBDC-0000:CH{:02.0f}-DELAY.VAL".format(i)) for i in range(21)] - pmioc_time = PV("ARS01-MKIK-0050-1:TRIG-CNT.VAL") + pmioc_time = PV_EXTERNAL("ARS01-MKIK-0050-1:TRIG-CNT.VAL") - vcs_alarmlist = PV("ARS00-VCS:PLC_AlarmList.VAL") - mis_alarmlist = PV("ARS00-MIS-PLC-01:AlarmList.VAL") - misfe_alarmlist = PV("ARS00-MIS-PLC-01:AlarmList_Frontends.VAL") + vcs_alarmlist = PV_EXTERNAL("ARS00-VCS:PLC_AlarmList.VAL") + mis_alarmlist = PV_EXTERNAL("ARS00-MIS-PLC-01:AlarmList.VAL") + misfe_alarmlist = PV_EXTERNAL("ARS00-MIS-PLC-01:AlarmList_Frontends.VAL") # Counters - counter_bdc = PV("AGESA-SBDC-0000:INT-COUNTER.VAL", auto_monitor=True) - counter_dumpkicker = PV("ARS01-MKIK-0050-1:TRIG-CNT.VAL") - counter_tmaster_beamdump = PV("AGETI-CVME-MASTER-TMA:Evt-Beam-Dump-EVRCount-I.VAL") - counter_tmaster_postmortem = PV("AGETI-CVME-MASTER-TMA:Evt-PM-Rec-EVRCount-I.VAL") + counter_bdc = PV_EXTERNAL("AGESA-SBDC-0000:INT-COUNTER.VAL", auto_monitor=True) + counter_dumpkicker = PV_EXTERNAL("ARS01-MKIK-0050-1:TRIG-CNT.VAL") + counter_tmaster_beamdump = PV_EXTERNAL("AGETI-CVME-MASTER-TMA:Evt-Beam-Dump-EVRCount-I.VAL") + counter_tmaster_postmortem = PV_EXTERNAL("AGETI-CVME-MASTER-TMA:Evt-PM-Rec-EVRCount-I.VAL") # Post Mortem Data as dict for easier access PostMortemLinks = [ ## BLMs # IOC: ABODI-DFBL - PV("ABODI-DFBL:SigPm.A"), - PV("ABODI-DFBL:SigPm.B"), - PV("ABODI-DFBL:SigPm.C"), - PV("ABODI-DFBL:SigPm.D"), + PV_EXTERNAL("ABODI-DFBL:SigPm.A"), + PV_EXTERNAL("ABODI-DFBL:SigPm.B"), + PV_EXTERNAL("ABODI-DFBL:SigPm.C"), + PV_EXTERNAL("ABODI-DFBL:SigPm.D"), # IOC: ARS01-DFBL - PV("ARS01-DFBL:SigPm.A"), - PV("ARS01-DFBL:SigPm.B"), - PV("ARS01-DFBL:SigPm.C"), - PV("ARS01-DFBL:SigPm.D"), + PV_EXTERNAL("ARS01-DFBL:SigPm.A"), + PV_EXTERNAL("ARS01-DFBL:SigPm.B"), + PV_EXTERNAL("ARS01-DFBL:SigPm.C"), + PV_EXTERNAL("ARS01-DFBL:SigPm.D"), # IOC: ARS02-DFBL - PV("ARS02-DFBL:SigPm.A"), - PV("ARS02-DFBL:SigPm.B"), - PV("ARS02-DFBL:SigPm.C"), - PV("ARS02-DFBL:SigPm.D"), + PV_EXTERNAL("ARS02-DFBL:SigPm.A"), + PV_EXTERNAL("ARS02-DFBL:SigPm.B"), + PV_EXTERNAL("ARS02-DFBL:SigPm.C"), + PV_EXTERNAL("ARS02-DFBL:SigPm.D"), # IOC: ARS06-DFBL - PV("ARS06-DFBL:SigPm.A"), - PV("ARS06-DFBL:SigPm.B"), - PV("ARS06-DFBL:SigPm.C"), - PV("ARS06-DFBL:SigPm.D"), + PV_EXTERNAL("ARS06-DFBL:SigPm.A"), + PV_EXTERNAL("ARS06-DFBL:SigPm.B"), + PV_EXTERNAL("ARS06-DFBL:SigPm.C"), + PV_EXTERNAL("ARS06-DFBL:SigPm.D"), # IOC: ARS09-DFBL - PV("ARS09-DFBL:SigPm.A"), - PV("ARS09-DFBL:SigPm.B"), - PV("ARS09-DFBL:SigPm.C"), - PV("ARS09-DFBL:SigPm.D"), + PV_EXTERNAL("ARS09-DFBL:SigPm.A"), + PV_EXTERNAL("ARS09-DFBL:SigPm.B"), + PV_EXTERNAL("ARS09-DFBL:SigPm.C"), + PV_EXTERNAL("ARS09-DFBL:SigPm.D"), ## 4 Kicker Bump - PV("ARS01-MKIK-0140:TIME-AXIS.VAL"), - PV("ARS01-MKIK-0140:CURRENT-WF.VAL"), - PV("ARS01-MKIK-0220:TIME-AXIS.VAL"), - PV("ARS01-MKIK-0220:CURRENT-WF.VAL"), - PV("ARS01-MKIK-0850:TIME-AXIS.VAL"), - PV("ARS01-MKIK-0850:CURRENT-WF.VAL"), - PV("ARS01-MKIK-0940:TIME-AXIS.VAL"), - PV("ARS01-MKIK-0940:CURRENT-WF.VAL"), + PV_EXTERNAL("ARS01-MKIK-0140:TIME-AXIS.VAL"), + PV_EXTERNAL("ARS01-MKIK-0140:CURRENT-WF.VAL"), + PV_EXTERNAL("ARS01-MKIK-0220:TIME-AXIS.VAL"), + PV_EXTERNAL("ARS01-MKIK-0220:CURRENT-WF.VAL"), + PV_EXTERNAL("ARS01-MKIK-0850:TIME-AXIS.VAL"), + PV_EXTERNAL("ARS01-MKIK-0850:CURRENT-WF.VAL"), + PV_EXTERNAL("ARS01-MKIK-0940:TIME-AXIS.VAL"), + PV_EXTERNAL("ARS01-MKIK-0940:CURRENT-WF.VAL"), ## Beam Dump Kicker - PV("ARS01-MKIK-0050-1:TIME-AXIS.VAL"), - PV("ARS01-MKIK-0050-1:CURRENT-WF.VAL"), - PV("ARS01-MKIK-0050-2:TIME-AXIS.VAL"), - PV("ARS01-MKIK-0050-2:CURRENT-WF.VAL"), - PV("ARS01-MKIK-0050-3:TIME-AXIS.VAL"), - PV("ARS01-MKIK-0050-3:CURRENT-WF.VAL"), - PV("ARS01-MKIK-0050-4:TIME-AXIS.VAL"), - PV("ARS01-MKIK-0050-4:CURRENT-WF.VAL"), + PV_EXTERNAL("ARS01-MKIK-0050-1:TIME-AXIS.VAL"), + PV_EXTERNAL("ARS01-MKIK-0050-1:CURRENT-WF.VAL"), + PV_EXTERNAL("ARS01-MKIK-0050-2:TIME-AXIS.VAL"), + PV_EXTERNAL("ARS01-MKIK-0050-2:CURRENT-WF.VAL"), + PV_EXTERNAL("ARS01-MKIK-0050-3:TIME-AXIS.VAL"), + PV_EXTERNAL("ARS01-MKIK-0050-3:CURRENT-WF.VAL"), + PV_EXTERNAL("ARS01-MKIK-0050-4:TIME-AXIS.VAL"), + PV_EXTERNAL("ARS01-MKIK-0050-4:CURRENT-WF.VAL"), ## Beam Dump Post Mortem Digitizer - PV("ARF-LPD64:X-AXIS-CH1.VAL"), - PV("ARF-LPD64:CH1-DATA.VAL"), - PV("ARF-LPD64:X-AXIS-CH2.VAL"), - PV("ARF-LPD64:CH2-DATA.VAL"), - PV("ARF-LPD64:X-AXIS-CH3.VAL"), - PV("ARF-LPD64:CH3-DATA.VAL"), - PV("ARF-LPD64:X-AXIS-CH4.VAL"), - PV("ARF-LPD64:CH4-DATA.VAL"), - PV("AGESA-SBDC-0000:BUNCH0_MAGNET_RAMP_DELAY.VAL"), + PV_EXTERNAL("ARF-LPD64:X-AXIS-CH1.VAL"), + PV_EXTERNAL("ARF-LPD64:CH1-DATA.VAL"), + PV_EXTERNAL("ARF-LPD64:X-AXIS-CH2.VAL"), + PV_EXTERNAL("ARF-LPD64:CH2-DATA.VAL"), + PV_EXTERNAL("ARF-LPD64:X-AXIS-CH3.VAL"), + PV_EXTERNAL("ARF-LPD64:CH3-DATA.VAL"), + PV_EXTERNAL("ARF-LPD64:X-AXIS-CH4.VAL"), + PV_EXTERNAL("ARF-LPD64:CH4-DATA.VAL"), + PV_EXTERNAL("AGESA-SBDC-0000:BUNCH0_MAGNET_RAMP_DELAY.VAL"), # ---------- FILLING PATTERN -------------- PV("AGEBD-POSTMORTEMLOG:BUFFER-FILLPATTERN-APD.VAL"), ] @@ -260,7 +263,7 @@ class PVs(BasePVs): for bpm in bpmnames: for q in ["X", "Y", "Q"]: bpmpvname = bpm + "PM-DATA-BEAM-" + q - PostMortemLinks.append(PV(bpmpvname)) + PostMortemLinks.append(PV_EXTERNAL(bpmpvname)) # MBFB modes # state of injection, state of pulsed magnets @@ -396,18 +399,18 @@ class PVs(BasePVs): for pvname in names_circ_buffer_ioc: pvname = "AGEBD-POSTMORTEMLOG:BUFFER-" + pvname + "-LAST.VAL" - PostMortemLinks.append(PV(pvname)) + PostMortemLinks.append(PV_EXTERNAL(pvname)) # Prepare machine for accumulation - master_trig = PV("AGETI-CVME-MASTER-TMA:SR-Inj-Status-Sel.VAL") - reset_bucket = PV("AGEBD-TIMING:ZERO-TARGET-BUCKET.VAL") - ID_gap_ena = PV("AGEOP-STATUS:LIGHT-DELIVERY.VAL") + master_trig = PV_EXTERNAL("AGETI-CVME-MASTER-TMA:SR-Inj-Status-Sel.VAL") + reset_bucket = PV_EXTERNAL("AGEBD-TIMING:ZERO-TARGET-BUCKET.VAL") + ID_gap_ena = PV_EXTERNAL("AGEOP-STATUS:LIGHT-DELIVERY.VAL") def __init__(self, service_name: str, pv_factory=PV): super().__init__(service_name, pv_factory) PV = pv_factory - self.CallbackPV = PV("AGESA-SBDC-0000:INT-COUNTER.VAL", auto_monitor=True) + self.CallbackPV = PV_EXTERNAL("AGESA-SBDC-0000:INT-COUNTER.VAL", auto_monitor=True) class vals: