From 7a9c7b02f5534116effa0aae82a5336e403eba18 Mon Sep 17 00:00:00 2001 From: chrin Date: Thu, 8 Feb 2024 14:11:50 +0100 Subject: [PATCH] header widget shows beam path --- comet.py | 2 +- hush.py | 2 + src/gui.py | 131 +++++++++++++++++++++++++++++++---------------------- 3 files changed, 81 insertions(+), 54 deletions(-) diff --git a/comet.py b/comet.py index 00d6dcb..9e144d1 100644 --- a/comet.py +++ b/comet.py @@ -9,7 +9,7 @@ cafe.monitor("MMAC3:STR:2") pvd = cafe.getPVCache("MMAC3:STR:2") pvd.show() -for i in range(0,100000): +for i in range(0,1000000): pvd = cafe.getPVCache("MMAC3:STR:2") if pvd.value[0] < 0.003: pvd.show() diff --git a/hush.py b/hush.py index 0f100a6..1410fdf 100644 --- a/hush.py +++ b/hush.py @@ -58,6 +58,8 @@ class StartMain(BaseWindow): self.title = _title self.gui = AppGui(self) + #print(self.input_parameters) + def prepare_elog_message(self): diff --git a/src/gui.py b/src/gui.py index 02b671a..fcad09b 100644 --- a/src/gui.py +++ b/src/gui.py @@ -60,10 +60,11 @@ class AppGui(QWidget): self.input_labels = self.parent.input_labels self.expert_parameters = self.parent.expert_parameters self.gui_frame.expert_parameters_group.setFixedWidth(260) + self.gui_frame.expert_parameters_group.setFixedHeight(120) self.gui_frame.operator_parameters_group.setFixedWidth(260) - #self.gui_frame.operator_parameters_group.setFixedHeight(260) - self.gui_frame.measurement_tab_wgt.setMinimumWidth(440) - self.gui_frame.measurement_tab_wgt.setFixedHeight(280) + self.gui_frame.operator_parameters_group.setFixedHeight(100) + self.gui_frame.measurement_tab_wgt.setFixedWidth(440) + self.gui_frame.measurement_tab_wgt.setFixedHeight(200) #self.gui_frame.operator_wgt.setFixedHeight(240) #self.gui_frame.expert_wgt.setFixedHeight(240) @@ -74,18 +75,10 @@ class AppGui(QWidget): #Overwrite default self.gui_frame.central_tab_widget.tabBar().setTabText(0, "Control") self.gui_frame.central_tab_widget.tabBar().setTabText(1, "IOC") - #self.gui_frame.results_wgt is the IOC tab widget - #wgt = self.gui_frame.results_wgt.layout().widget() + + #wgt = self.gui_frame.central_tab_widget.widget(1) + #lay = self.gui_frame.central_tab_widget.widget(1).layout() - #self.gui_frame.results_wgt.layout().removeWidget(wgt) - #wgt.deleteLater() - #wgt = None - #self.gui_frame.central_tab_widget.widget(1).setLayout(self.reset_ioc_sm()) - wgt = self.gui_frame.central_tab_widget.widget(1) - #print(dir(wgt)) - - lay = self.gui_frame.central_tab_widget.widget(1).layout() - #print(dir(lay)) ''' def deleteItemsOfLayout(layout): @@ -113,21 +106,17 @@ class AppGui(QWidget): self.gui_frame.results_wgt.setFixedWidth(1200) self.gui_frame.results_wgt.setFixedHeight(400) - #wgt2 = self.gui_frame.results_tab_wgt.layout().widget() - #self.gui_frame.central_tab_widget.widget(1).layout().replaceWidget(wgt2, self.reset_ioc_sm()) - + 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 = [sub[0: sub.index("-")] for sub in self.sec_state_list] + sec_prefix_list = [ + sub[0: sub.index("-")] for sub in self.sec_state_list] - self.gui_frame.results_layout.addWidget(self.reset_ioc_saving(sec_prefix_list), 0, 1, 1, 1) + self.gui_frame.results_layout.addWidget( + self.reset_ioc_saving(sec_prefix_list), 0, 1, 1, 1) self.gui_frame.results_layout.setContentsMargins(40, 40, 40, 40) - - #self.gui_frame.results_wgt.insertWidget(0, self.reset_ioc_sm()) - #self.gui_frame.results_wgt.setLayout(self.reset_ioc_sm().layout()) - self.expert_labels = self.parent.expert_labels self.settings = self.parent.settings @@ -139,7 +128,6 @@ class AppGui(QWidget): #self.I_min = 0.002 HIPA - self.cafe.openPrepare() self.cafe.open(['PRO-HUSH:LASTPWR','PRO-HUSH:TOTPWR', 'PRO:LASTSAVE', 'PPO-HUSH:TOTSAVE']) @@ -147,11 +135,14 @@ class AppGui(QWidget): self.cafe.openNowAndWait(0.1) - wgt = self.group_sector_qtabwidget() + self.magnet_tab_wgt = self.group_sector_qtabwidget() self.gui_frame.measurement_layout.addWidget( - wgt, 0, 1, 6, 3, alignment=Qt.AlignTop) + self.magnet_tab_wgt, 0, 1, 6, 3, alignment=Qt.AlignTop) + self.magnet_tab_wgt.setCurrentIndex(1) + status_wgt = self.group_sector_status() + status_wgt.setFixedHeight(340) self.gui_frame.measurement_layout.addWidget( status_wgt, 2, 0, 2, 1, alignment=Qt.AlignTop) # | Qt.AlignHCenter) @@ -175,7 +166,7 @@ class AppGui(QWidget): g2_line = ["SH", "G2"] g1_line = ["SH", "G1"] sh_line = ["SH"] - + try: pv_master = self.settings.data["MASTER"]["status"] self.mastership = self.cafe.getCache(pv_master) @@ -191,31 +182,38 @@ class AppGui(QWidget): # "Gantry 3": "G3", "OPTIS2": "O2"} def receive_master_update(value, status, alarm_severity): - print("value", value, flush=True) + self.mastership = value for key, wgt_val in self.gui_header.master_to_wgt.items(): master = self.gui_header.beam_current_wgt_group[wgt_val] - #print(key, wgt_val, "present object name", master.objectName(), flush=True) - #print(value) if value in key: master.setObjectName("ARAMIS") master.style().polish(master) self.gui_header.target_beamline = wgt_val self.gui_header.timer.start(750) self.gui_header.timer_count = 0 - - #print("NEW object name", master.objectName(), flush=True) else: if "BEAMLINE" not in master.objectName(): master.setObjectName("BEAMLINE") master.style().polish(master) - #print("NEW object name", master.objectName(), flush=True) - + self.gui_header.beam_current_wgt_dict[ wgt_val].trigger_monitor_str.emit( self.sectorI_dict[wgt_val], 1, 0) - + + def enable_disable_beamline(sect, sector_line, value): + + + def reset_check_mini_post_sh(): + #Redo "G2" in case first two elements + #are grayed by other beamlines + if "ON" in (self.sectorI_dict["G2"], + self.sectorI_dict["O2"], + self.sectorI_dict["PIF"]): + #self.sectorI_dict["G3"]): + self.gui_header.toSHOverlap("ON") + self.sectorI_dict[sect] = value #print("sect/value", sect, value) for sector in sector_line: @@ -226,7 +224,6 @@ class AppGui(QWidget): sector].standby_value_button.isEnabled(): self.table_sol_dict[ sector].standby_value_button.setEnabled(False) - print("DISABLE", sector) if not is_master(): if self.table_sol_dict[ sector].restore_value_button.isEnabled(): @@ -244,7 +241,28 @@ class AppGui(QWidget): self.table_sol_dict[ sector].restore_value_button.setEnabled(True) + _action = "OFF" if "Geschlossen" in self.sectorI_dict[ + sector] else "ON" + if sector == "SH": + self.gui_header.toSH(_action) + elif sector == "G1": + self.gui_header.toG1(_action) + elif sector == "G2": + self.gui_header.toG2(_action) + reset_check_mini_post_sh() + elif sector == "O2": + self.gui_header.toO2(_action) + reset_check_mini_post_sh() + elif sector == "G3": + self.gui_header.toG3(_action) + elif sector == "PIF": + self.gui_header.toPIF(_action) + reset_check_mini_post_sh() + + reset_check_mini_post_sh() + + def receive_sh_update(value, status, alarm_severity): enable_disable_beamline('SH', sh_line, value) def receive_g1_update(value, status, alarm_severity): @@ -288,6 +306,19 @@ class AppGui(QWidget): receive_g1_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity) pvd=self.cafe.getPVCache(self.settings.data["MASTER"]["status"], dt='str') receive_master_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity) + + @Slot() + def simulation_update(state): + if bool(state): + _color = self.gui_header.sim_color + else: + _color = self.gui_header.op_color + print("SIM STATE CHANGED", state, _color, flush=True) + self.gui_header.pf_off_color = _color + self.gui_header.color_pframe(_color) + print("SIM STATE CHANGED//", state, _color, flush=True) + + self.gui_frame.simulation_checkbox.stateChanged.connect(simulation_update) def receive_sec_state(handle, pv, pvdata): pvsplit = pv.split("-") @@ -377,7 +408,8 @@ class AppGui(QWidget): qtot.setFont(fnt) qgrid.addWidget(qtot, _row+1, 0, 1, 1) qgrid.addWidget( - CAQLineEdit(self, pv_name="PRO-HUSH:LASTPWR", show_units=True), + CAQLineEdit(self, pv_name="PRO-HUSH:LASTPWR", + show_units=True), _row+1, 1, 1, 1) qgrid.addWidget( CAQLineEdit(self, pv_name="PRO-HUSH:TOTPWR", show_units=True), @@ -462,7 +494,7 @@ class AppGui(QWidget): xstart = QDateTime(xdate) qpinit = CAQLineEdit(self, pv_name=pv_pwr_last, show_units=False) - qpnow = CAQLineEdit(self, pv_name=pv_pwr_tot, show_units=False) + qpnow = CAQLineEdit(self, pv_name=pv_pwr_tot, show_units=False, notify_freq_hz=1) qpsave = CAQLineEdit(self, pv_name=pv_pwr_saved, show_units=False) qptotsave = CAQLineEdit(self, pv_name=pv_pwr_totsave, show_units=False) @@ -474,8 +506,6 @@ class AppGui(QWidget): #Time to allow cb_outtime to fire time.sleep(0.2) - - qptime.setFixedWidth(104) #qtdis = QBasicTimer() @@ -507,7 +537,8 @@ class AppGui(QWidget): for sector in self.settings.data["header"][idx:idx_last]: sector_wgt_dict[sector] = self.ca_table_sector_widget(sector=sector) - + QApplication.processEvents() + sector_tab_widget = QTabWidget() sector_tab_widget.setFont(self.font_gui) sector_tab_widget.setStyleSheet("QTabBar {font-size: 12pt;}") @@ -517,11 +548,7 @@ class AppGui(QWidget): sector_tab_widget.addTab(sector_wgt_dict[sector], sector) color = self.settings.data[sector]["color"] sector_tab_widget.tabBar().setTabTextColor(i, QColor(color)) - - #sector_tab_widget.addTab(sector_wgt_dict["INJ2"], "RF") - #color = self.settings.data["INJ2"]["color"] - #sector_tab_widget.tabBar().setTabTextColor( - # len(self.settings.data["header"][idx:]), QColor(color)) + return sector_tab_widget @@ -609,8 +636,6 @@ class AppGui(QWidget): QApplication.processEvents(QEventLoop.AllEvents, 1.0) - - if not self.input_parameters['simulation']: status, status_list, pv_list = _table.set_standby_values() @@ -669,8 +694,8 @@ class AppGui(QWidget): _delay = 0.09 pass - print(pv_dict['SOL:2'], flush=True) - print(_standby_values, flush=True) + #print(pv_dict['SOL:2'], flush=True) + #print(_standby_values, flush=True) table_sol = CAQTableWidget( self, pv_list=pv_dict['SOL:2'], show_units=True, notify_freq_hz=0, notify_unison=False, scale_factor=1, show_timestamp=False, @@ -694,14 +719,14 @@ class AppGui(QWidget): self.table_sol_dict[sector] = table_sol table_ist = CAQTableWidget( - self, pv_list=pv_dict['IST:2'], show_units=True, notify_freq_hz=2, + self, pv_list=pv_dict['IST:2'], show_units=True, notify_freq_hz=1, notify_unison=True, scale_factor=1, show_timestamp=False, init_column=False, pv_list_show=[False]) table_pwr = CAQTableWidget( - self, pv_list=pv_dict['PWR'], show_units=False, notify_freq_hz=0, + self, pv_list=pv_dict['PWR'], show_units=False, notify_freq_hz=1, suffix = "kW", - notify_unison=False, scale_factor=0.001, show_timestamp=False, + notify_unison=True, scale_factor=0.001, show_timestamp=False, init_column=True, init_list=pv_dict['PWR'], pv_list_show=[False]) table_pwr.init_value_button.setToolTip(