4 Commits

Author SHA1 Message Date
fcca4f08d4 proscan driven 2024-02-08 14:13:01 +01:00
ce700a0c14 check_status update and continued devl for proscan 2024-02-06 16:52:18 +01:00
ac9d3b3e22 check_status_list 2023-11-17 11:57:54 +01:00
fd212a441d line_no in utily.py to replace _line 2023-11-17 11:23:56 +01:00
5 changed files with 118 additions and 25 deletions

53
base.py
View File

@@ -565,7 +565,13 @@ class BaseWindow(QMainWindow):
from pyqtacc.sls.sendelogsls import QSendToELOG
elif self.facility == Facility.HIPA:
from pyqtacc.hipa.guiheader import GUIHeader
from pyqtacc.hipa.sendeloghipa import QSendToELOG
from pyqtacc.hipa.sendeloghipa import QSendToELOG
elif self.facility == Facility.PROSCAN:
from pyqtacc.proscan.guiheader import GUIHeader
from pyqtacc.proscan.sendelogproscan import QSendToELOG
elif self.facility == Facility.ESS:
from pyqtacc.ess.guiheader import GUIHeader
from pyqtacc.ess.sendelogess import QSendToELOG
self.gui_header = GUIHeader(self, user_mode=self.user_mode,
extended=extended)
@@ -791,10 +797,16 @@ class BaseWindow(QMainWindow):
#_qsize = exit_toolbar.iconSize()
#print("qsize", _qsize)
true_list = [self.autopost_epics, self.autopost_hdf, self.autopost_elog]
exit_toolbar.setIconSize(QSize(true_list.count(True)*30+10, 24))
#exit_toolbar.setIconSize(_qsize)
self.add_actions(exit_toolbar, (save_all_action, "Space", None, "Space",
quit_action))
if true_list.count(True) > 1:
exit_toolbar.setIconSize(QSize(true_list.count(True)*30+10, 24))
#exit_toolbar.setIconSize(_qsize)
self.add_actions(exit_toolbar, (
save_all_action, "Space", None, "Space", quit_action))
else:
self.add_actions(exit_toolbar, (quit_action,))
def combine_save_icons(self): #epics=False, hdf=False, elog=False):
@@ -1999,6 +2011,12 @@ class BaseWindow(QMainWindow):
elif facility == Facility.HIPA:
from pyqtacc.qrc_resources.facility.hipa.pyrcc5 import qrc_resources
print("FACILITY HIPA")
elif facility == Facility.PROSCAN:
from pyqtacc.qrc_resources.facility.proscan.pyrcc5 import qrc_resources
print("FACILITY PROSCAN")
elif facility == Facility.ESS:
from pyqtacc.qrc_resources.facility.ess.pyrcc5 import qrc_resources
print("FACILITY ESS")
else:
print("Unknown Facility; assuming SLS")
from pyqtacc.qrc_resources.facility.sls.pyrcc5 import qrc_resources
@@ -2139,10 +2157,21 @@ class BaseWindow(QMainWindow):
operation: str = "channel access",
pv_list: list = None, status_list: list = None,
line: int = _line()):
if None in (pv_list, status_list):
if pv_list is None:
return
check_stat = False
if status_list is None:
check_stat = True
elif None in status_list:
check_stat = True
if check_stat:
for i, (pv, stat) in enumerate(zip(pv_list, status_list)):
if stat is None:
status_list[i] = self.cafe.getStatus(pv)
brk = ("------------------------------------------------------" +
"------------------------------------------------------")
self.trigger_log_message.emit(
@@ -2151,7 +2180,7 @@ class BaseWindow(QMainWindow):
options = {}
for i, (pv, stat) in enumerate(zip(pv_list, status_list)):
if stat == self.cyca.ICAFE_NORMAL:
if stat != self.cyca.ICAFE_NORMAL:
mess = "Error in '{0}' for element [{1}], {2}.".format(
operation, i, pv)
options['statusCode'] = (
@@ -2170,14 +2199,18 @@ class BaseWindow(QMainWindow):
self.trigger_log_message.emit(
MsgSeverity.INFO.name, pymodule, line, mess, {})
return status_list
def check_status(self, pymodule: str = _pymodule,
operation: str = "channel access",
pv: str = None, stat: int = None,
line: int =_line()):
if None in (pv, status):
if not pv:
return
if stat == None:
stat = self.cafe.getStatus(pv)
if stat != self.cyca.ICAFE_NORMAL:
mess = "Error in '{0}' for {1}.".format(operation, pv)
@@ -2188,3 +2221,5 @@ class BaseWindow(QMainWindow):
options['statusInfo'] = self.cafe.getStatusInfo(stat)
self.trigger_log_message.emit(
MsgSeverity.WARN.name, pymodule, line, mess, options)
return stat

View File

@@ -19,6 +19,8 @@ class Facility(IntEnum):
SwissFEL = 1
SLS = 2
HIPA = 3
PROSCAN = 4
ESS = 5
class MsgSeverity(IntEnum):
""" For use with message logger

View File

@@ -127,13 +127,22 @@ class GUIFrame(QWidget):
self.expert_wgt = QWidget(self.measurement_tab_wgt)
self.results_wgt = QWidget()
self.results_layout = QHBoxLayout(self.results_wgt)
self.results_tab_wgt = QTabWidget(self.results_wgt)
if "GUI" in self.settings.data:
self.results_layout = QHBoxLayout(self.results_wgt)
self.results_tab_wgt = QTabWidget(self.results_wgt)
else:
self.results_layout = QGridLayout()
self.results_tab_wgt = QTabWidget()
self.results_wgt_2 = QWidget()
self.results_layout_2 = QHBoxLayout(self.results_wgt_2)
self.results_tab_wgt_2 = QTabWidget(self.results_wgt_2)
if "GUI2" in self.settings.data:
self.results_layout_2 = QHBoxLayout(self.results_wgt_2)
self.results_tab_wgt_2 = QTabWidget(self.results_wgt_2)
else:
self.results_layout_2 = QGridLayout()
self.results_tab_wgt_2 = QTabWidget()
self.slicing_group = QGroupBox("Screen: Slicing")
self.good_region_group = QGroupBox("Good Region")
@@ -403,6 +412,9 @@ class GUIFrame(QWidget):
if "GUI" in self.settings.data:
self.central_tab_widget.addTab(
self.results_wgt, self.settings.data["GUI"]["resultsTabTitle"])
elif "IOC" in self.settings.data:
self.central_tab_widget.addTab(
self.results_wgt, self.settings.data["IOC"]["resultsTabTitle"])
self.central_tab_widget.addTab(self.log_wgt, "Log")
def init_measurement_tab_wgt(self):
@@ -416,7 +428,7 @@ class GUIFrame(QWidget):
def init_results_tab_wgt(self):
""" Add canvas tabs for plots/results
"""
self.results_tab_wgt.setFont(self.font_gui)
for i, (wgt, subtitle) in enumerate(zip(self.sub_results_wgt,
@@ -1268,15 +1280,13 @@ class GUIFrame(QWidget):
print("KeyError in guiframe.py; def checkbox_simulation:", error)
text = "Simulation"
checkbox = QCheckBox(text)
checkbox.setObjectName("Simulation")
checkbox.setToolTip(
self.simulation_checkbox = QCheckBox(text)
self.simulation_checkbox.setObjectName("Simulation")
self.simulation_checkbox.setToolTip(
"Dry-run only; does not write to EPICS Process Variables")
checkbox.setFont(self.font_gui)
#checkbox.setStyleSheet(
#"QCheckBox::indicator::checked {width=85px; height: 85px;};")
checkbox.stateChanged.connect(on_change)
self.simulation_checkbox.setFont(self.font_gui)
self.simulation_checkbox.stateChanged.connect(on_change)
checked_value = Qt.Unchecked
if "simulation" in self.parent.input_parameters.keys():
@@ -1287,9 +1297,9 @@ class GUIFrame(QWidget):
"value"]:
checked_value = Qt.Checked
checkbox.setCheckState(checked_value)
self.simulation_checkbox.setCheckState(checked_value)
layout.addWidget(checkbox, row_wgt, 0)
layout.addWidget(self.simulation_checkbox, row_wgt, 0)
layout.addWidget(QFrame(), row_wgt, 1, 1, 2)
if hline == "BOTTOM":
layout.addWidget(QHLine(), row_wgt+1, 0, 1, 3)
@@ -3099,3 +3109,5 @@ class GUIFrame(QWidget):
self.table_tab_wgt.currentChanged.emit(0)
return self.table_layout #tab_wgt

32
setup_version Normal file
View File

@@ -0,0 +1,32 @@
#to be executed from top directory
#create a directory with version number given below.
mkdir -p v1.7.0
cd v1.7.0
mkdir -p apps4ops
mkdir -p caqtwidgets
mkdir -p common
ln -s apps4ops pyqtacc
cd apps4ops
mkdir -p bdbase
mkdir -p qrc_resources
mkdir -p sf
mkdir -p sls
mkdir -p hipa
cd bdbase
git clone git@gitlab.psi.ch:pyqtacc/bdbase.git .
cd ../qrc_resources
git clone git@gitlab.psi.ch:pyqtacc/qrc_resources.git .
cd ../sf
git clone git@gitlab.psi.ch:pyqtacc/sf.git .
cd ../sls
git clone git@gitlab.psi.ch:pyqtacc/sls.git .
cd ../hipa
git clone git@gitlab.psi.ch:pyqtacc/hipa.git .
cd ../../
mkdir -p common
cd common
git clone git@gitlab.psi.ch:pyqtacc/common.git .
cd ../
cd caqtwidgets
git clone git@gitlab.psi.ch:cafe/caqtwidgets.git .
cd ../../

View File

@@ -10,3 +10,15 @@ def _line():
int: Current line number.
"""
return currentframe().f_back.f_lineno
def line_no():
"""Macro to return the current line number.
The current line number within the file is used when
reporting messages to the message logging window.
Returns:
int: Current line number.
"""
return currentframe().f_back.f_lineno