added separate skin tab and status label in Savings Overview

This commit is contained in:
2025-04-18 16:30:16 +02:00
parent 63cc3f68e3
commit 7eea1ff094
7 changed files with 358 additions and 67 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.6.0
cd /proscan/bd/applications/hush/hla/1.7.0
# For use if script is sourced rather than executed
appNameDefault="hush.sh"
+2 -2
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.5.0
cd /proscan/bd/applications/hush/hla/1.7.0
# For use if script is sourced rather than executed
appNameDefault="hush_g1.sh"
@@ -62,7 +62,7 @@ echo "PYTHON_VERSION $PYTHON_VERSION"
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.21.0/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.21.0/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.13.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}
+2 -2
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.5.0
cd /proscan/bd/applications/hush/hla/1.7.0
# For use if script is sourced rather than executed
appNameDefault="hush_g2.sh"
@@ -63,7 +63,7 @@ echo "PYTHON_VERSION $PYTHON_VERSION"
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.21.0/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.21.0/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.13.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}
+2 -2
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.5.0
cd /proscan/bd/applications/hush/hla/1.7.0
# For use if script is sourced rather than executed
appNameDefault="hush_g3.sh"
@@ -63,7 +63,7 @@ echo "PYTHON_VERSION $PYTHON_VERSION"
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.21.0/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.21.0/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.13.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}
+2 -2
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.5.0
cd /proscan/bd/applications/hush/hla/1.7.0
# For use if script is sourced rather than executed
appNameDefault="hush_o2.sh"
@@ -68,7 +68,7 @@ export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.21.0/lib/${_EPICS_HOST_AR
if [ "${EXTRA_PYTHON_PATH_FLAG}" -gt "0" ] ; then
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.10.0/common/python${PYTHON_VERSION_DIR}
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.13.0/common/python${PYTHON_VERSION_DIR}
fi
echo $PYTHONPATH
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.5.0
cd /proscan/bd/applications/hush/hla/1.7.0
# For use if script is sourced rather than executed
appNameDefault="hush_pif.sh"
+348 -57
View File
@@ -52,6 +52,19 @@ class AppGui(QWidget):
self.statusbar = self.parent.statusbar
self.gui_frame = self.parent.gui_frame
self.gui_header = self.parent.gui_header
self.assigned_master = self.gui_header.assigned_master
self.simple_standby = None
self.simple_awake = None
self.simple_status = None
self.simple_groupbox = None
self.groupbox_awake_sss = self.settings.data['statusStyleSheet']['awake-qgroupbox']
self.groupbox_standby_sss = self.settings.data['statusStyleSheet']['standby-qgroupbox']
self.label_awake_sss = self.settings.data['statusStyleSheet']['awake-qlabel']
self.label_standby_sss = self.settings.data['statusStyleSheet']['standby-qlabel']
self.awake_text = self.settings.data['statusStyleSheet']['awake-text']
self.standby_text = self.settings.data['statusStyleSheet']['standby-text']
self.font_gui = self.parent.gui_frame.font_gui
self.input_parameters = self.parent.input_parameters
self.input_labels = self.parent.input_labels
@@ -67,15 +80,16 @@ class AppGui(QWidget):
self.gui_frame.measurement_tab_wgt.setFixedHeight(200)
# 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.timer_blink = QTimer()
self.timer_blink.setSingleShot(True)
self.timer_blink.count = 0
self.sec_state_list = ["PG1-HUSH:STATE", "PSH-HUSH:STATE",
"PG2-HUSH:STATE", "PO2-HUSH:STATE",
"PPIF-HUSH:STATE", "PG3-HUSH:STATE"]
@@ -83,12 +97,14 @@ class AppGui(QWidget):
self.sector_list_all = self.settings.data["headerMagnetSector"]
# Overwrite default
self.gui_frame.central_tab_widget.tabBar().setTabText(0, "Control")
#self.gui_frame.central_tab_widget.tabBar().setTabText(1, "IOC")
if "Controlroom" in self.assigned_master:
shift_type = CAQMenu(self, pv_name="PRO-HUSH:SHIFT-TYPE")
self.gui_frame.operator_parameters_group.layout().insertWidget(
0, QLabel(" Shift Type:"))
@@ -102,6 +118,7 @@ class AppGui(QWidget):
self.gui_frame.results_wgt.setLayout(self.gui_frame.results_layout)
self.gui_frame.results_layout.addWidget(
self.reset_ioc_sm(), 0, 0, 1, 1)
sec_prefix_list = [
@@ -157,7 +174,9 @@ class AppGui(QWidget):
print(self.sector_designated_magnet_values_dict, flush=True)
print("====================================================================")
print("self.assigned_master is ", self.assigned_master)
pv_list = []
for key in self.sector_disruptor_dict:
if key in self.settings.data["headerMagnetSector"]:
@@ -171,28 +190,31 @@ class AppGui(QWidget):
if self.pv_mastership_status in self.settings.data[sector]:
self.sector_list.append(sector)
print(self.sector_list, flush=True)
print(self.sector_list, flush=True)
#Keep SH
self.simple_sector_list = self.settings.data["headerMagnetSector"][
1:] if "Controlroom" in self.assigned_master else self.sector_list
self.pv_name_in_sector_list = [None] * len(self.sector_list)
for i, sector in enumerate(self.sector_list):
print(i, sector, flush=True)
self.pv_name_in_sector_list[i] = self.settings.data[sector][self.pv_mastership_status]
self.pv_name_in_sector_list[i] = self.pv_name_in_sector_list[i].encode('utf-8')
self.pv_name_in_sector_list[i] = self.pv_name_in_sector_list[i].decode('ascii')
self.pv_name_in_sector_list[i] = self.settings.data[sector][
self.pv_mastership_status]
self.pv_name_in_sector_list[i] = self.pv_name_in_sector_list[
i].encode('utf-8')
self.pv_name_in_sector_list[i] = self.pv_name_in_sector_list[
i].decode('ascii')
hush_list = ["PRO-HUSH:LASTPWR", "PRO-HUSH:TOTPWR",
"PRO:LASTSAVE", "PPO-HUSH:TOTSAVE"]
open_list = hush_list + self.sec_state_list + pv_list + self.pv_name_in_sector_list
open_list = (hush_list + self.sec_state_list + pv_list +
self.pv_name_in_sector_list)
self.cafe.openPrepare()
self.cafe.open(open_list)
self.cafe.openNowAndWait(1.5)
self.submastership_dict = {
"G1": "UNDEF", "G2": "UNDEF", "O2": "UNDEF", "PIF": "UNDEF",
"G3": "UNDEF"}
@@ -210,11 +232,35 @@ class AppGui(QWidget):
self.gui_frame.measurement_layout.addWidget(
self.magnet_tab_wgt, 0, 2, 3, 2, alignment=Qt.AlignTop)
_row = self.gui_frame.measurement_layout.rowCount()
self.gui_frame.measurement_layout.addWidget(
self.group_submaster_status(), _row, 2, 2, 2,
Qt.AlignTop|Qt.AlignHCenter)
_row = self.gui_frame.measurement_layout.rowCount()
_column = self.gui_frame.measurement_layout.columnCount()-2
#Controlroom
if "Dummy" not in self.assigned_master:
self.groupbox_simple_mode = self.group_simple_mode()
qgridlo = QGridLayout()
qgridlo.setContentsMargins(5, 30, 5, 10)
qgridlo.addWidget(self.groupbox_simple_mode, 0, 0, 1, 1, Qt.AlignCenter)
qgridlo.addWidget(self.group_submaster_status(), 1, 0, 1, 1, Qt.AlignCenter)
qgridlo.setAlignment(Qt.AlignTop | Qt.AlignHCenter)
qgridlo.setVerticalSpacing(40)
qwgt = QWidget()
qwgt.setLayout(qgridlo)
qwgt.setFixedWidth(1400)
qwgt.setFixedHeight(800)
self.gui_frame.central_tab_widget.insertTab(
0, qwgt, "Skin")
# self.gui_frame.measurement_layout.addWidget(
# self.groupbox_simple_mode, _row, _column, 1, 1,
# Qt.AlignTop|Qt.AlignHCenter)
# _column += 1
else:
self.gui_frame.measurement_layout.addWidget(
self.group_submaster_status(), _row, _column, 2, 2,
Qt.AlignTop|Qt.AlignHCenter)
self.sh_idx = self.magnet_tab_wgt.count() - 1
for i in range(0, self.magnet_tab_wgt.count()):
@@ -224,7 +270,8 @@ class AppGui(QWidget):
break
self.magnet_tab_wgt.setCurrentIndex(self.sh_idx)
self.gui_frame.central_tab_widget.setCurrentIndex(0)
status_wgt = self.group_sector_status()
status_wgt.setFixedHeight(340)
@@ -233,7 +280,7 @@ class AppGui(QWidget):
#self.gui_frame.measurement_layout.addWidget(qf, 2, 0, 1, 1)
self.gui_frame.measurement_layout.addWidget(
status_wgt, 1, 0, 4, 1, alignment=Qt.AlignTop) # | Qt.AlignHCenter)
status_wgt, 1, 0, 4, 1, alignment=Qt.AlignTop)
#qf = QFrame()
#qf.setFixedHeight(1)
@@ -256,7 +303,8 @@ class AppGui(QWidget):
if "Controlroom" in self.assigned_master:
self.gui_header.beam_current_wgt_dict[
"MASTER"].trigger_monitor_str.connect(self.receive_master_update)
"MASTER"].trigger_monitor_str.connect(
self.receive_master_update)
pvd = self.cafe.getPVCache(
self.settings.data["MASTER"]["status"], dt="str")
try:
@@ -277,7 +325,7 @@ class AppGui(QWidget):
break
'''
for key in self.sector_disruptor_dict:
if key in self.settings.data["headerMagnetSector"]:
@@ -351,6 +399,9 @@ class AppGui(QWidget):
pvd.value[0], pvd.status, pvd.alarmSeverity)
print("gw emit done")
def enable_disable_beamline(self, sect, sector_line, value):
def is_submaster(local_sector, local_sector_line):
@@ -383,8 +434,14 @@ class AppGui(QWidget):
return
self.sector_disruptor_dict[sect] = value
for sector in reversed(sector_line):
print('sector_line', sector_line)
print('simple_sector_line', self.simple_sector_list)
for sector in reversed(sector_line):
idx1 = sector_line.index(sector)
idx = self.simple_sector_list.index(sector)
print("sector and indices", sector, idx, idx1)
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, flush=True)
@@ -396,11 +453,16 @@ class AppGui(QWidget):
sector].standby_value_button.isEnabled():
self.table_sol_dict[
sector].standby_value_button.setEnabled(False)
if self.simple_standby:
self.simple_standby[idx].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)
if self.simple_awake:
self.simple_awake[idx].setEnabled(False)
else:
#print("Geschlossen? sector/value/ismaster", sector, value,
# self.gui_header.mastership, flush=True)
@@ -409,11 +471,14 @@ class AppGui(QWidget):
sector].standby_value_button.isEnabled():
self.table_sol_dict[
sector].standby_value_button.setEnabled(True)
if self.simple_standby:
self.simple_standby[idx].setEnabled(True)
if not self.table_sol_dict[
sector].restore_value_button.isEnabled():
self.table_sol_dict[
sector].restore_value_button.setEnabled(True)
if self.simple_awake:
self.simple_awake[idx].setEnabled(True)
'''
# For future reference
@Slot(str, int, int)
@@ -609,8 +674,7 @@ class AppGui(QWidget):
##Non-embedded defs
def group_submaster_status(self):
@Slot(str, int, int)
def receive_submaster_update(value, status, alarm_severity):
@@ -624,30 +688,34 @@ class AppGui(QWidget):
if "G1" in sender.sector:
pvd = self.cafe.getPVCache(
self.settings.data["G1"]["status"], dt="str")
self.receive_g1_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
self.receive_g1_update(pvd.value[0], pvd.alarmStatus,
pvd.alarmSeverity)
elif "G2" in sender.sector:
pvd = self.cafe.getPVCache(
self.settings.data["G2"]["status"], dt="str")
self.receive_g2_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
self.receive_g2_update(pvd.value[0], pvd.alarmStatus,
pvd.alarmSeverity)
elif "O2" in sender.sector:
pvd = self.cafe.getPVCache(
self.settings.data["O2"]["status"], dt="str")
self.receive_o2_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
self.receive_o2_update(pvd.value[0], pvd.alarmStatus,
pvd.alarmSeverity)
elif "PIF" in sender.sector:
pvd = self.cafe.getPVCache(
self.settings.data["PIF"]["status"], dt="str")
self.receive_pif_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
self.receive_pif_update(pvd.value[0], pvd.alarmStatus,
pvd.alarmSeverity)
elif "G3" in sender.sector:
pvd = self.cafe.getPVCache(
self.settings.data["G3"]["status"], dt="str")
self.receive_g3_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
self.receive_g3_update(pvd.value[0], pvd.alarmStatus,
pvd.alarmSeverity)
qgrid = QGridLayout()
qgb = QGroupBox("Mastership Status")
@@ -700,7 +768,7 @@ class AppGui(QWidget):
#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].setFixedWidth(126)
self.submaster_wgt[i].setText("")
qw_layout = QHBoxLayout()
qw_layout.addWidget(self.submaster_wgt[i])
@@ -721,7 +789,7 @@ class AppGui(QWidget):
qgb.setContentsMargins(9, 9, 9, 9)
qgb.setObjectName("OUTER")
qgb.setLayout(qgrid)
qgb.setFixedWidth((150 * no_beamlines) + 20)
qgb.setFixedWidth((150 * no_beamlines) + 30)
return qgb
def group_sector_status(self):
@@ -755,7 +823,13 @@ class AppGui(QWidget):
f.setPixelSize(13)
qsa.setFont(f)
qsa.setAlignment(Qt.AlignCenter)
qstat = QLabel("Status \n ")
f = qstat.font()
f.setPixelSize(13)
qstat.setFont(f)
qstat.setAlignment(Qt.AlignCenter)
qti = QLabel("Time in \nSaving Mode")
f = qti.font()
f.setPixelSize(13)
@@ -770,16 +844,23 @@ class AppGui(QWidget):
qgrid.addWidget(qlp, 0, 2, 1, 1)
qgrid.addWidget(qsa, 0, 3, 1, 1)
qgrid.addWidget(qstat, 0, 4, 1, 1)
qgrid.addWidget(qti, 0, 5, 1, 1)
qgrid.addWidget(qtotsav, 0, 6, 1, 1)
self.status_dict = {}
for i, sector in enumerate(self.settings.data["header"][idx:idx_last]):
a, b, c, d, e, f = self.sector_status(sector)
self.status_dict[sector] = QLabel('')
qgrid.addWidget(a, i + 1, 0, 1, 1)
qgrid.addWidget(b, i + 1, 1, 1, 1)
qgrid.addWidget(c, i + 1, 2, 1, 1)
qgrid.addWidget(d, i + 1, 3, 1, 1)
qgrid.addWidget(self.status_dict[sector], i + 1, 4, 1, 1)
qgrid.addWidget(e, i + 1, 5, 1, 1)
qgrid.addWidget(f, i + 1, 6, 1, 1)
@@ -937,7 +1018,9 @@ class AppGui(QWidget):
target = self.sender()
sector = target.sector
table = self.table_sol_dict[sector]
idx = self.sector_list.index(sector)
self.magnet_tab_wgt.setCurrentIndex(idx)
def is_update_enabled():
'''Check if update buttons are enabled
if NOT, then do not allow inital values values to be updated"
@@ -963,7 +1046,7 @@ class AppGui(QWidget):
table.init_value_button.click()
time.sleep(0.05)
self.table_pwr_dict[sector].init_value_button.setEnabled(True)
table.init_value_button.setEnabled(False)
self.table_pwr_dict[sector].init_value_button.click()
time.sleep(0.05)
@@ -991,12 +1074,18 @@ class AppGui(QWidget):
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
table.init_value_button.setEnabled(False)
self.timer_blink.singleShot(
250, lambda: self.blink_target_beamline(sector, standby=True))
def on_sector_restore(self):
target = self.sender()
sector = target.sector
table = self.table_sol_dict[sector]
idx = self.sector_list.index(sector)
self.magnet_tab_wgt.setCurrentIndex(idx)
if not self.input_parameters["simulation"]:
status, status_list, pv_list = table.restore_init_values()
@@ -1004,6 +1093,12 @@ class AppGui(QWidget):
self.check_status_list(
_pymodule, "setScalarList", pv_list, status_list, _line())
self.timer_blink.singleShot(
250, lambda: self.blink_target_beamline(sector, standby=False))
#self.timer_blink.count = 0
#self.timer_blink.start()
# Seqeuncer ONLY determines when to go into STANDBY mode
# and NOT the HLA
#pv = 'P' + target.sector + "-HUSH:STATE"
@@ -1020,8 +1115,39 @@ class AppGui(QWidget):
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
def is_sector_standby(self, sector, pv_name=None, value=None):
idx = self.simple_sector_list.index(sector)
text_color = self.settings.data[sector]["color"]
text_color_str = f'color: {text_color};'
def paint_awake():
sss = ('QGroupBox {background-color:#ffe87c; font-weight: bold; ' +
text_color_str + '}')
self.simple_groupbox[idx].setStyleSheet(sss)
self.simple_status[idx].setStyleSheet(
'QLabel{color:black; font-weight: bold;}')
self.simple_groupbox[idx].setStyleSheet(sss) #self.groupbox_awake_sss)
self.simple_status[idx].setText('Status: AWAKE')
self.status_dict[sector].setStyleSheet(self.label_awake_sss)
self.status_dict[sector].setText(self.awake_text) #self.settings.data['statusStyleSheet']['awake-text'])
def paint_asleep():
sss = ('QGroupBox {background-color:#546bab; font-weight: bold; ' +
text_color_str + '}')
self.simple_groupbox[idx].setStyleSheet(sss)
self.simple_status[idx].setStyleSheet(
'QLabel{color:white; font-weight: bold;}')
self.simple_groupbox[idx].setStyleSheet(sss) #self.groupbox_standby_sss)
self.simple_status[idx].setText('Status: STANDBY')
self.status_dict[sector].setStyleSheet(self.label_standby_sss)
self.status_dict[sector].setText(self.standby_text) #self.settings.data['statusStyleSheet']['standby-text'])
if value and pv_name:
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]:
@@ -1034,17 +1160,30 @@ class AppGui(QWidget):
with self.lock:
if not is_standby:
if not self.table_sol_dict[sector].init_value_button.isEnabled():
self.table_sol_dict[sector].init_value_button.setEnabled(True)
if not self.table_sol_dict[
sector].init_value_button.isEnabled():
self.table_sol_dict[
sector].init_value_button.setEnabled(True)
if not self.table_pwr_dict[sector].init_value_button.isEnabled():
self.table_pwr_dict[sector].init_value_button.setEnabled(True)
if not self.table_pwr_dict[
sector].init_value_button.isEnabled():
self.table_pwr_dict[
sector].init_value_button.setEnabled(True)
if self.simple_awake:
paint_awake()
else:
if self.table_sol_dict[sector].init_value_button.isEnabled():
self.table_sol_dict[sector].init_value_button.setEnabled(False)
self.table_sol_dict[sector].init_value_button.setEnabled(
False)
if self.table_pwr_dict[sector].init_value_button.isEnabled():
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
self.table_pwr_dict[sector].init_value_button.setEnabled(
False)
if self.simple_standby:
paint_asleep()
return is_standby
@Slot(float, int, int)
@@ -1055,9 +1194,11 @@ class AppGui(QWidget):
sender = self.sender()
sector = sender.sector
pv_name = sender.pv_name
#print("local_cb", sender.pv_name, value, status, alarm_severity, flush=True)
#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))
self.timer.singleShot(0, lambda: self.is_sector_standby(
sector, pv_name, value))
#print("designated_magnet_cb end for sector", sector, flush=True)
@@ -1135,10 +1276,12 @@ class AppGui(QWidget):
if standby_column:
table_sol.standby_value_button.sector = sector
table_sol.standby_value_button.clicked.disconnect()
table_sol.standby_value_button.clicked.connect(self.on_sector_standby)
table_sol.standby_value_button.clicked.connect(
self.on_sector_standby)
table_sol.restore_value_button.sector = sector
table_sol.restore_value_button.clicked.disconnect()
table_sol.restore_value_button.clicked.connect(self.on_sector_restore)
table_sol.restore_value_button.clicked.connect(
self.on_sector_restore)
self.table_sol_dict[sector] = table_sol
@@ -1600,3 +1743,151 @@ class AppGui(QWidget):
return qw
def group_simple_mode(self):
self.simple_status = [None] * len(self.simple_sector_list)
self.simple_standby = [None] * len(self.simple_sector_list)
self.simple_awake = [None] * len(self.simple_sector_list)
self.simple_groupbox = [None] * len(self.simple_sector_list)
qgrido = QGridLayout()
qwo = QGroupBox('Skin View')
hlength = 3
irow = 0
icolumn = 0
for i, sector in enumerate(self.simple_sector_list):
self.simple_status[i] = QLabel(' Status: ')
pv = 'P' + sector + '-HUSH:TOTPWR'
print('pv=', pv, flush=True)
power = CAQLabel(self, pv, show_units=True, notify_freq_hz=1)
self.simple_standby[i] = QPushButton(' Standby ')
self.simple_standby[i].sector = sector
self.simple_standby[i].setObjectName('Controller')
self.simple_standby[i].setProperty('actOnBeam', True)
self.simple_standby[i].setToolTip(
('Restore devices to their standby values'))
self.simple_standby[i].clicked.connect(self.on_sector_standby)
self.simple_awake[i] = QPushButton(' Awake ')
self.simple_awake[i].sector = sector
self.simple_awake[i].setObjectName('Controller')
self.simple_awake[i].setProperty('actOnBeam', True)
self.simple_awake[i].setToolTip(
('Restore devices to their pre-standby values'))
self.simple_awake[i].clicked.connect(self.on_sector_restore)
qgrid = QGridLayout()
qgrid.addWidget(self.simple_status[i], 0, 0, 1, 1, Qt.AlignCenter)
qgrid.addWidget(power, 0, 1, 1, 1, Qt.AlignLeft)
qgrid.addWidget(self.simple_standby[i], 1, 0, 1, 1, Qt.AlignCenter)
qgrid.addWidget(self.simple_awake[i], 1, 1, 1, 1, Qt.AlignCenter)
qgrid.setContentsMargins(5, 20, 5, 0)
self.simple_groupbox[i] = QGroupBox(sector)
self.simple_groupbox[i].setContentsMargins(5, 0, 5, 0)
self.simple_groupbox[i].setAlignment(Qt.AlignCenter)
self.simple_groupbox[i].setObjectName("OUTER")
text_color = self.settings.data[sector]["color"]
text_color_str = f'color: {text_color}; '
sss = ("QGroupBox {" + text_color_str + "font-weight: bold;}")
self.simple_groupbox[i].setStyleSheet(sss)
self.simple_groupbox[i].setLayout(qgrid)
self.simple_groupbox[i].setFixedWidth(270) #280
self.simple_groupbox[i].setFixedHeight(140) #140
irow = 0 if i < (hlength) else 1
icolumn = i%hlength # if i < (hlength) else int(i - hlength)
qgrido.addWidget(self.simple_groupbox[i], irow, icolumn, 1, 1,
Qt.AlignCenter)
message = "Request Mastership to "
message += "go to Experiment Mode" if \
"Controlroom" not in self.assigned_master else "ramp magnets"
ql = QLabel(message)
ql.setStyleSheet('QLabel {color:black;}')
ql.setAlignment(Qt.AlignHCenter|Qt.AlignBottom)
cspan = qgrido.columnCount()
qgrido.addWidget(ql, irow+1, 0, 2, cspan,
Qt.AlignHCenter|Qt.AlignBottom)
qgrido.setContentsMargins(5, 15, 5, 15)
qgrido.setAlignment(Qt.AlignCenter)
qgrido.setVerticalSpacing(20)
qgrido.setHorizontalSpacing(25)
qwo.setContentsMargins(5, 15, 5, 10)
qwo.setAlignment(Qt.AlignCenter)
qwo.setObjectName("OUTER")
qwo.setLayout(qgrido)
wlength = len(self.simple_sector_list) if irow == 0 else int(hlength)
qwo.setFixedWidth(310 * wlength)
qwo.setFixedHeight(240 * (irow+1) - 80*irow)
return qwo
def blink_target_beamline(self, sector, standby=False):
idx = self.simple_sector_list.index(sector)
text_color = self.settings.data[sector]["color"]
text_color_str = f'color: {text_color};'
#Deactivate
standby_enabled = self.simple_standby[idx].isEnabled()
awake_enabled = self.simple_awake[idx].isEnabled()
self.simple_standby[idx].setEnabled(False)
self.simple_awake[idx].setEnabled(False)
is_standby = self.is_sector_standby(sector, None, None)
ready = False
if (standby and not is_standby) or (not standby and is_standby):
endpt = 0 if standby else 1
ramping = 'Ramping down \u21D3' if standby else 'Ramping up \u21D1'
self.simple_status[idx].setText(ramping)
end = 14 #must be even no
for i in range(0, end):
if i%2 == endpt:
sss = ('QGroupBox {background-color:#ffe87c; font-weight: bold; ' +
text_color_str + '}')
else:
sss = ('QGroupBox {background-color:#546bab;; font-weight: bold; ' +
text_color_str + '}')
self.simple_groupbox[idx].setStyleSheet(sss)
#self.simple_status[idx].setText('Status: AWAKE')
#self.simple_status[idx].setStyleSheet(
# 'QLabel{color:black; font-weight: bold;}')
self.simple_status[idx].setText(ramping)
QApplication.processEvents()
time.sleep(0.5)
is_standby = self.is_sector_standby(sector, None, None)
if standby and is_standby:
ready = True
break;
elif not standby and not is_standby:
ready = True
break;
#Activate
#if not ready:
self.simple_standby[idx].setEnabled(standby_enabled)
self.simple_awake[idx].setEnabled(awake_enabled)
pv = self.settings.data[sector]['device'][0] + "-SOL:2.PROC"
stat = self.cafe.set(pv, 1)
self.check_status(_pymodule, "set", pv, stat, _line())
QApplication.processEvents()