callbacks for designated magnets added to enable/disable update button

This commit is contained in:
2024-03-07 13:11:30 +01:00
parent 4d6784fece
commit bee564a5bd
2 changed files with 311 additions and 163 deletions

View File

@@ -58,7 +58,7 @@ _EPICS_HOST_ARCH=${RHREL}-x86_64
#C_EXT version
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
export PYTHONPATH=.:/afs/psi.ch/project/cafe/gitlab/CAFE/cycafe/python3.10-sls2/lib/RHEL8-x86_64:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
if [ "${EXTRA_PYTHON_PATH_FLAG}" -gt "0" ] ; then
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.10.0/common/python${PYTHON_VERSION_DIR}

View File

@@ -4,6 +4,7 @@ import decimal
import getpass
import os
import random
import threading
import time
from datetime import timedelta
@@ -64,6 +65,10 @@ class AppGui(QWidget):
# self.gui_frame.operator_wgt.setFixedHeight(240)
# self.gui_frame.expert_wgt.setFixedHeight(240)
self.lock = threading.Lock()
self.timer = QTimer()
self.timer.setSingleShot(True)
self.assigned_master = self.gui_header.assigned_master
self.sec_state_list = ["PG1-HUSH:STATE", "PSH-HUSH:STATE",
@@ -128,17 +133,28 @@ class AppGui(QWidget):
self.cafe.open(self.sec_state_list)
self.cafe.openNowAndWait(0.1)
local_sector_list = ["G1", "SH", "G2", "O2", "PIF", "G3"]
# Overload from guiheader.py
self.sector_disruptor_dict = {}
self.sector_disruptor_dict["G1"] = "Geschlossen"
self.sector_disruptor_dict["SH"] = "Geschlossen"
self.sector_disruptor_dict["G2"] = "Geschlossen"
self.sector_disruptor_dict["O2"] = "Geschlossen"
self.sector_disruptor_dict["PIF"] = "Geschlossen"
self.sector_disruptor_dict["G3"] = "Geschlossen"
self.sector_designated_magnet_standby_dict = {}
self.sector_designated_magnet_values_dict = {}
for sector in local_sector_list:
self.sector_disruptor_dict[sector] = "Geschlossen"
self.sector_designated_magnet_standby_dict[sector] = {}
self.sector_designated_magnet_values_dict[sector] = {}
for sector in self.sector_designated_magnet_standby_dict:
self.sector_designated_magnet_standby_dict[
sector] = self.get_standby_dict(sector)
self.sector_designated_magnet_values_dict[
sector] = self.get_standby_dict(sector)
print(self.sector_designated_magnet_values_dict, flush=True)
print("====================================================================")
self.submastership_dict = {
"G1": "UNDEF", "G2": "UNDEF", "O2": "UNDEF", "PIF": "UNDEF", "G3": "UNDEF"}
"G1": "UNDEF", "G2": "UNDEF", "O2": "UNDEF", "PIF": "UNDEF",
"G3": "UNDEF"}
for key in self.submastership_dict:
pvname = self.settings.data[key]["mastershipStatus"]
@@ -208,21 +224,31 @@ class AppGui(QWidget):
self.gui_frame.simulation_checkbox.stateChanged.connect(
self.simulation_update)
'''
for state in self.sec_state_list:
for sector in self.settings.data["headerMagnetSector"]:
if sector in state:
self.cafe.monitor(state, self.receive_sec_state)
break
'''
pv_list = []
for key in self.sector_disruptor_dict:
if key in self.settings.data["headerMagnetSector"]:
pv_list.append(self.settings.data[key]["status"])
self.cafe.openPrepare()
self.cafe.open(pv_list)
self.cafe.openNowAndWait(2.0)
for key in self.sector_disruptor_dict:
if key in self.settings.data["headerMagnetSector"]:
print(key, flush=True)
pvd = self.cafe.getPVCache(
self.settings.data[key]["status"], dt="str")
pvd.show()
print(flush=True)
if "G1" in key:
self.gui_header.beam_current_wgt_dict[
key].trigger_monitor_str.connect(self.receive_g1_update)
@@ -241,9 +267,7 @@ class AppGui(QWidget):
elif "G3" in key:
self.gui_header.beam_current_wgt_dict[
key].trigger_monitor_str.connect(self.receive_g3_update)
'''
if "G1" in key:
self.receive_g1_update(
@@ -265,28 +289,30 @@ class AppGui(QWidget):
pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
'''
def enable_disable_beamline(self, sect, sector_line, value):
def is_submaster(local_sector, local_sector_line):
print("===========", local_sector, local_sector_line)
print("===========", local_sector, local_sector_line, flush=True)
if local_sector in self.submastership_dict and \
"Controlroom" not in self.assigned_master:
print(local_sector,
self.submastership_dict[local_sector].upper(),
flush=True)
if "PIF" in local_sector and ("G3" in local_sector_line or "G3" in self.assigned_master):
if "PIF" in local_sector and (
"G3" in local_sector_line or \
"Gantry 3" in self.assigned_master):
print("HERE", flush=True)
print(self.submastership_dict, flush=True)
print("bool", bool(
"MASTERSHIP" in self.submastership_dict[
"G3"].upper()), flush=True)
"G3"].upper()), flush=True)
return bool(
"MASTERSHIP" in self.submastership_dict[
"G3"].upper())
else:
print("HERE//", flush=True )
print("HERE//", flush=True)
print(local_sector, local_sector_line, self.assigned_master, flush=True)
print("HERE//", flush=True)
return bool(
"MASTERSHIP" in self.submastership_dict[
local_sector].upper())
@@ -304,54 +330,85 @@ class AppGui(QWidget):
for sector in reversed(sector_line):
if "Geschlossen" not in self.sector_disruptor_dict[
sector] or not is_submaster(sector, sector_line): #not self.gui_header.is_master():
print("sector/value", sector, value)
print("isMaster", self.gui_header.is_master())
print("master", self.gui_header.mastership)
print("assigned master", self.assigned_master)
if self.table_sol_dict[
sector].standby_value_button.isEnabled():
self.table_sol_dict[
sector].standby_value_button.setEnabled(False)
if not self.gui_header.is_master():
print("sector/value", sector, value, flush=True)
print("isMaster", self.gui_header.is_master(), flush=True)
print("master", self.gui_header.mastership, flush=True)
print("assigned master", self.assigned_master, flush=True)
with self.lock:
if self.table_sol_dict[
sector].restore_value_button.isEnabled():
sector].standby_value_button.isEnabled():
self.table_sol_dict[
sector].restore_value_button.setEnabled(False)
sector].standby_value_button.setEnabled(False)
if not self.gui_header.is_master():
if self.table_sol_dict[
sector].restore_value_button.isEnabled():
self.table_sol_dict[
sector].restore_value_button.setEnabled(False)
else:
print("Geschlossen? sector/value/ismaster", sector, value,
self.gui_header.mastership)
if not self.table_sol_dict[
self.gui_header.mastership, flush=True)
with self.lock:
if not self.table_sol_dict[
sector].standby_value_button.isEnabled():
self.table_sol_dict[
sector].standby_value_button.setEnabled(True)
if not self.table_sol_dict[
self.table_sol_dict[
sector].standby_value_button.setEnabled(True)
if not self.table_sol_dict[
sector].restore_value_button.isEnabled():
self.table_sol_dict[
sector].restore_value_button.setEnabled(True)
self.table_sol_dict[
sector].restore_value_button.setEnabled(True)
'''
# For future reference
@Slot(str, int, int)
def receive_sector_update(self, value, status, alarm_severity):
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
sector = self.sender().sector
self.enable_disable_beamline(sector, self.gui_header.sector_line[sector], value)
'''
@Slot(str, int, int)
def receive_sh_update(self, value, status, alarm_severity):
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
self.enable_disable_beamline("SH", self.gui_header.sh_line, value)
@Slot(str, int, int)
def receive_g1_update(self, value, status, alarm_severity):
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
self.enable_disable_beamline("G1", self.gui_header.g1_line, value)
@Slot(str, int, int)
def receive_g3_update(self, value, status, alarm_severity):
#print("receive_g3_update", self.sender(), flush=True)
#print(dir(self.sender()))
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
self.enable_disable_beamline("G3", self.gui_header.g3_line[self.idx:], value)
@Slot(str, int, int)
def receive_o2_update(self, value, status, alarm_severity):
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
self.enable_disable_beamline("O2", self.gui_header.o2_line[self.idx:], value)
@Slot(str, int, int)
def receive_g2_update(self, value, status, alarm_severity):
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
self.enable_disable_beamline("G2", self.gui_header.g2_line[self.idx:], value)
@Slot(str, int, int)
def receive_pif_update(self, value, status, alarm_severity):
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
self.enable_disable_beamline(
"PIF", self.gui_header.pif_line[self.idx:], value)
@Slot(str, int, int)
def receive_b1b2_update(self, value, status, alarm_severity):
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
#Enable Only on shutdown and if there is no current in the machine
comet_I = self.cafe.getCache("MMAC3:STR:2")
if comet_I is None:
@@ -383,6 +440,9 @@ class AppGui(QWidget):
@Slot(str, int, int)
def receive_master_update(self, value, status, alarm_severity):
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
idx = self.sh_idx
for key, wgt_val in self.gui_header.master_to_wgt.items():
#master = self.gui_header.beam_current_wgt_group[wgt_val]
@@ -408,45 +468,15 @@ class AppGui(QWidget):
#print("SIMULATION IS TRUE??", self.input_parameters["simulation"])
@Slot(int, str, object)
def receive_sec_state(self, handle, pv, pvdata):
if pvdata.status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
pvsplit = pv.split("-")
sec = pvsplit[0][1:]
def already_in_standby():
devices = self.settings.data[sec]["iocDevice"]
pv_list = []
standby_value_list = []
for magnet in devices:
pv_magnet = magnet + ":SOL:2"
pv_list.append(pv_magnet)
# get standby values
idx = self.settings.data[sec]["device"].index(magnet)
standby_value = self.settings.data[sec]["standby"][idx]
standby_value_list.append(standby_value)
QApplication.processEvents()
value_list, status, status_list = self.cafe.getScalarList(
pv_list, cacheFlag=True)
if status != self.cyca.ICAFE_NORMAL:
self.check_status_list(_pymodule, "getScalarListCache",
pv_list, status_list, _line())
# check standby values
in_standby = True
for value, standby in zip(value_list, standby_value_list):
if abs(value) < abs(standby) * 0.8 or abs(value) > abs(
standby) * 1.2:
in_standby = False
break
return in_standby
if pvdata.value[0] == "ON" and not already_in_standby():
if pvdata.value[0] == "ON" and not self.already_in_standby(sec):
self.table_sol_dict[sec].init_value_button.setEnabled(True)
self.table_pwr_dict[sec].init_value_button.setEnabled(True)
@@ -455,7 +485,69 @@ class AppGui(QWidget):
self.table_sol_dict[sec].init_value_button.setEnabled(False)
self.table_pwr_dict[sec].init_value_button.setEnabled(False)
def get_standby_index_list(self, sec):
devices = self.settings.data[sec]["iocDevice"]
standby_index_list = []
for magnet in devices:
pv_magnet = magnet + ":SOL:2"
# get standby values
idx = self.settings.data[sec]["device"].index(magnet)
standby_index_list.append(idx)
return standby_index_list
def get_standby_list(self, sec):
devices = self.settings.data[sec]["iocDevice"]
pv_standby_list = []
for magnet in devices:
pv_magnet = magnet + ":SOL:2"
pv_standby_list.append(pv_magnet)
return pv_standby_list
def get_standby_dict(self, sec):
devices = self.settings.data[sec]["iocDevice"]
pv_standby_dict = {}
for magnet in devices:
pv_magnet = magnet + ":SOL:2"
# get standby values
idx = self.settings.data[sec]["device"].index(magnet)
standby_value = self.settings.data[sec]["standby"][idx]
pv_standby_dict[pv_magnet] = standby_value
return pv_standby_dict
def already_in_standby(self, sec):
devices = self.settings.data[sec]["iocDevice"]
pv_list = []
standby_value_list = []
for magnet in devices:
pv_magnet = magnet + ":SOL:2"
pv_list.append(pv_magnet)
# get standby values
idx = self.settings.data[sec]["device"].index(magnet)
standby_value = self.settings.data[sec]["standby"][idx]
standby_value_list.append(standby_value)
QApplication.processEvents()
value_list, status, status_list = self.cafe.getScalarList(
pv_list, cacheFlag=True)
if status != self.cyca.ICAFE_NORMAL:
self.check_status_list(_pymodule, "getScalarListCache",
pv_list, status_list, _line())
# check standby values
in_standby = True
for value, standby in zip(value_list, standby_value_list):
#if abs(value) < abs(standby) * 0.8 or abs(value) > abs(
# standby) * 1.2:
if abs(value) > abs(standby) * 1.2:
in_standby = False
break
return in_standby
##Non-embedded defs
@@ -503,7 +595,26 @@ class AppGui(QWidget):
qgrid = QGridLayout()
qgb = QGroupBox("Mastership Status")
no_beamlines = 0
sector_list = self.settings.data["headerMagnetSector"]
sector_list_all = self.settings.data["headerMagnetSector"]
sector_list = []
#Take out B1B2 and SH
for sector in sector_list_all:
if "mastershipStatus" in self.settings.data[sector]:
sector_list.append(sector)
print(sector_list, flush=True)
self.submaster_wgt = [None] * len(sector_list)
pv_name = [None] * len(sector_list)
for i, sector in enumerate(sector_list):
print(i, sector, flush=True)
pv_name[i] = self.settings.data[sector][pv_id]
pv_name[i] = pv_name[i].encode('utf-8')
pv_name[i] = pv_name[i].decode('ascii')
self.cafe.openPrepare()
self.cafe.open(pv_name)
self.cafe.openNowAndWait(2.0)
for i, sector in enumerate(sector_list):
if "mastershipStatus" in self.settings.data[sector]:
no_beamlines += 1
@@ -516,33 +627,40 @@ class AppGui(QWidget):
" font-weight: bold;}")
qgb_inner.setStyleSheet(sss)
pv_name = self.settings.data[sector][pv_id]
pv_name = pv_name.encode('utf-8')
pv_name = pv_name.decode('ascii')
qw = CAQLabel(self, pv_name=str(pv_name))
qw.sector = sector
qw.sector_list = sector_list
qw.trigger_monitor_str.connect(receive_submaster_update)
#pv_name = self.settings.data[sector][pv_id]
#pv_name = pv_name.encode('utf-8')
#pv_name = pv_name.decode('ascii')
self.submaster_wgt[i] = CAQLabel(self, pv_name=str(pv_name[i]))
self.submaster_wgt[i].sector = sector
self.submaster_wgt[i].sector_list = sector_list
self.submaster_wgt[i].trigger_monitor_str.connect(receive_submaster_update)
pvd = self.cafe.getPVCache(
self.settings.data[sector][pv_id], dt='str')
time.sleep(0.2)
qw.trigger_monitor_str.emit(pvd.value[0], pvd.status,
pvd.alarmSeverity)
print("emit value ========================================>", sector, pvd.value[0])
qw.setFixedWidth(120)
qw.setText("")
#time.sleep(0.1)
#QApplication.processEvents()
#time.sleep(0.1)
#QApplication.processEvents()
#time.sleep(0.1)
#pvd = self.cafe.getPVCache(pv_name, dt='str')
#self.submaster_wgt[i].trigger_monitor_str.emit(pvd.value[0], pvd.status,
# pvd.alarmSeverity)
#print("emit value ========================================>", sector, pvd.value[0])
self.submaster_wgt[i].setFixedWidth(120)
self.submaster_wgt[i].setText("")
qw_layout = QHBoxLayout()
qw_layout.addWidget(qw)
qw_layout.addWidget(self.submaster_wgt[i])
qgb_inner.setLayout(qw_layout)
qgrid.addWidget(qgb_inner, 0, i, 1, 1,
Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter))
QApplication.processEvents()
time.sleep(0.1)
for wgt in self.submaster_wgt:
print("wgt.pv_name", wgt.pv_name, flush=True)
pvd = self.cafe.getPVCache(wgt.pv_name, dt='str')
wgt.trigger_monitor_str.emit(pvd.value[0], pvd.status, pvd.alarmSeverity)
print("emit value ========================================>", wgt.sector, pvd.value[0])
qgb.setContentsMargins(9, 9, 9, 9)
qgb.setObjectName("OUTER")
qgb.setLayout(qgrid)
@@ -618,20 +736,6 @@ class AppGui(QWidget):
qtotsav.setFont(f)
qtotsav.setAlignment(Qt.AlignCenter)
'''
layout3.addWidget(qlp)
layout4.addWidget(qsa)
layout5.addWidget(qti)
layout6.addWidget(qtotsav)
qgrid.addWidget(container3, 0, 2, 1, 1)
qgrid.addWidget(container4, 0, 3, 1, 1)
qgrid.addWidget(container5, 0, 5, 1, 1)
qgrid.addWidget(container6, 0, 6, 1, 1)
#q=QFrame()
#q.setFixedWidth(12)
#qgrid.addWidget(q, 0, 7, 1, 1)
'''
qgrid.addWidget(qlp, 0, 2, 1, 1)
qgrid.addWidget(qsa, 0, 3, 1, 1)
qgrid.addWidget(qti, 0, 5, 1, 1)
@@ -639,56 +743,7 @@ class AppGui(QWidget):
for i, sector in enumerate(self.settings.data["header"][idx:idx_last]):
a, b, c, d, e, f = self.sector_status(sector)
'''
container = QWidget()
layout = QHBoxLayout(container)
layout.setContentsMargins(2, 0, 0, 0)
container.setStyleSheet("background-color: lightblue;")
layout.addWidget(a)
a.setContentsMargins(2, 0, 0, 0)
container2 = QWidget()
container3 = QWidget()
container4 = QWidget()
container5 = QWidget()
container6 = QWidget()
layout2 = QHBoxLayout(container2)
layout2.setContentsMargins(0, 0, 0, 0)
container2.setStyleSheet("background-color: lightblue;")
layout2.addWidget(b)
b.setContentsMargins(0, 0, 0, 0)
layout3 = QHBoxLayout(container3)
layout3.setContentsMargins(0, 0, 0, 0)
container3.setStyleSheet("background-color: lightblue;")
layout3.addWidget(c)
c.setContentsMargins(0, 0, 0, 0)
layout4 = QHBoxLayout(container4)
layout4.setContentsMargins(0, 0, 0, 0)
container4.setStyleSheet("background-color: lightblue;")
layout4.addWidget(d)
d.setContentsMargins(0, 0, 0, 0)
layout5 = QHBoxLayout(container5)
layout5.setContentsMargins(0, 0, 0, 0)
container5.setStyleSheet("background-color: lightblue;")
layout5.addWidget(e)
e.setContentsMargins(0, 0, 0, 0)
layout6 = QHBoxLayout(container6)
layout6.setContentsMargins(0, 0, 0, 0)
container6.setStyleSheet("background-color: lightblue;")
layout6.addWidget(f)
f.setContentsMargins(0, 0, 0, 0)
layout2.setAlignment(Qt.AlignLeft)
layout3.setAlignment(Qt.AlignLeft)
layout4.setAlignment(Qt.AlignLeft)
layout5.setAlignment(Qt.AlignLeft)
layout6.setAlignment(Qt.AlignLeft)
qgrid.addWidget(container, i+1, 0, 1, 1)
qgrid.addWidget(container2, i+1, 1, 1, 1)
qgrid.addWidget(container3, i+1, 2, 1, 1)
qgrid.addWidget(container4, i+1, 3, 1, 1)
qgrid.addWidget(container5, i+1, 5, 1, 1)
qgrid.addWidget(container6, i+1, 6, 1, 1)
'''
qgrid.addWidget(a, i + 1, 0, 1, 1)
qgrid.addWidget(b, i + 1, 1, 1, 1)
qgrid.addWidget(c, i + 1, 2, 1, 1)
@@ -901,6 +956,9 @@ class AppGui(QWidget):
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
table.init_value_button.setEnabled(False)
def on_sector_restore(self):
target = self.sender()
sector = target.sector
@@ -928,6 +986,55 @@ class AppGui(QWidget):
stat = self.cafe.set(pv_last_pwr, sum_pwr)
self.check_status(_pymodule, "set", pv_last_pwr, stat, _line())
def is_sector_standby(self, sector, pv_name, value):
self.sector_designated_magnet_values_dict[sector][pv_name] = value
print(self.sector_designated_magnet_values_dict[sector], flush=True)
is_standby = True
for pv in self.sector_designated_magnet_values_dict[sector]:
val_now = self.sector_designated_magnet_values_dict[sector][pv]
val_standby = self.sector_designated_magnet_standby_dict[sector][pv]
if abs(val_now) > (1.2 * abs(val_standby)):
is_standby = False
break;
print(sector, " is in standby:", is_standby, flush=True)
with self.lock:
if not is_standby:
print(sector, " is in standby==>:", is_standby, flush=True)
if not self.table_sol_dict[sector].init_value_button.isEnabled():
#print(sector, " isEnabled is False make True==>:", is_standby, flush=True)
self.table_sol_dict[sector].init_value_button.setEnabled(True)
print(sector, " Test pwr in standby==>:", is_standby, flush=True)
if not self.table_pwr_dict[sector].init_value_button.isEnabled():
#print(sector, " pwr isEnabled is False make True==>:", is_standby, flush=True)
self.table_pwr_dict[sector].init_value_button.setEnabled(True)
print(sector, " is in standby======>:", is_standby, flush=True)
else:
print(sector, " is in standby==>:", is_standby, flush=True)
if self.table_sol_dict[sector].init_value_button.isEnabled():
print(sector, " isEnabled is True make Flase==>:", is_standby, flush=True)
self.table_sol_dict[sector].init_value_button.setEnabled(False)
if self.table_pwr_dict[sector].init_value_button.isEnabled():
print(sector, " pwr isEnabled is False make True==>:", is_standby, flush=True)
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
print(sector, " is sector standby end:", is_standby, flush=True)
@Slot(float, int, int)
def designated_magnet_cb(self, value, status, alarm_severity):
print("designated_magnet_cb", status, flush=True)
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
sender = self.sender()
sector = sender.sector
pv_name = sender.pv_name
print("local_cb", sender.pv_name, value, status, alarm_severity, flush=True)
#self.sector_designated_magnet_values_dict[sector][pv_name] = value
self.timer.singleShot(0, lambda: self.is_sector_standby(sector, pv_name, value))
print("designated_magnet_cb end for sector", sector, flush=True)
def ca_table_sector_widget(self, sector: str = ""):
device_list = self.settings.data[sector]["device"]
attribute_list = self.settings.data[sector]["attribute"]
@@ -945,12 +1052,19 @@ class AppGui(QWidget):
for dev in device_list:
pv_dict[att_key].append(dev + ":" + att_pv)
self.cafe.openPrepare()
for key in pv_dict:
self.cafe.open(pv_dict[key])
self.cafe.openNowAndWait(2.0)
time.sleep(0.05)
try:
delay = self.input_parameters["delayRamp"]
except KeyError:
except KeyError as ex:
print("KeyError", str(ex))
delay = 0.09
pass
init_column = True
standby_column = True
if "B1B2" in sector:
@@ -962,7 +1076,16 @@ class AppGui(QWidget):
self, pv_list=pv_dict["SOL:2"], show_units=True, notify_freq_hz=1,
notify_unison=True, scale_factor=1, show_timestamp=False,
init_column=False)
table_sol.sector = sector
else:
pvlist = self.get_standby_list(sector)
for pv in pvlist:
value = self.cafe.getCache(pv)
if value is not None:
self.sector_designated_magnet_values_dict[sector][ pv] = value
table_sol = CAQTableWidget(
self, pv_list=pv_dict["SOL:2"], show_units=True, notify_freq_hz=0,
@@ -971,6 +1094,10 @@ class AppGui(QWidget):
standby_column=standby_column, standby_values=standby_values,
set_delay=delay)
table_sol.sector = sector
if init_column:
table_sol.restore_value_button.setToolTip(
("Restore devices to their pre-standby values"))
@@ -1101,7 +1228,28 @@ class AppGui(QWidget):
table_pwr.set_init_values(pwr_values)
except KeyError:
pass
if "B1B2" not in sector:
gateway_indices = self.get_standby_index_list(sector)
for idx in gateway_indices:
table_sol.pv_gateway[idx].sector = sector
table_sol.pv_gateway[idx].trigger_monitor_float.connect(
self.designated_magnet_cb)
time.sleep(0.55)
for idx in gateway_indices:
pv_name_gw = table_sol.pv_gateway[idx].pv_name
pvd = self.cafe.getPVCache(pv_name_gw, dt='float')
pvd.show()
print("pv_name_gw", pv_name_gw, flush=True)
table_sol.pv_gateway[idx].trigger_monitor_float.emit(
pvd.value[0], pvd.status, pvd.alarmSeverity)
print("gw emit done")
def on_sol_update():
table_sol.init_value_button.setEnabled(False)
table_pwr.init_value_button.click()