Tested machine update

This commit is contained in:
2025-05-28 12:08:45 +02:00
committed by Sven
parent ead833a380
commit 897bf75127
9 changed files with 137 additions and 26 deletions

View File

@@ -48,6 +48,7 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
# events handling
self.actionOpen_2.triggered.connect(self.loadSettings)
self.actionSave.triggered.connect(self.saveSettings)
self.UIUpdateFromMachine.clicked.connect(self.fullUpdate)
def closeEvent(self, event):
self.plot.close()
@@ -80,6 +81,16 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
with open(fileName, 'r', encoding='utf-8') as f:
settings = json.load(f)
self.model.loadSettings(settings)
self.status('Reference loaded')
def fullUpdate(self):
machine = self.machine.getMachineStatus()
self.model.updateFromMachine(machine)
self.sandbox.updateSandbox()
self.status('Machine Settings')
def status(self,msg=''):
self.UIStatus.setText(msg)
# --------------------------------
# Main routine

View File

@@ -1,12 +1,11 @@
1) Energy update in model from Sandbox or machine
2) Full update from machine
3) export to machine for magnet settings
4) export elegant lattice
5) support of other reference files -> fill up the selection list
6) matching
7) when writing magnets do snapshot?
8) Elegant support?
10) Prepare several settings files
11) About and website support
12) install cpymax on machine network

View File

@@ -58,7 +58,6 @@ class Machine:
magnets[key[0:15]]=values[key]
if 'MBND' in key and 'K0L-SET' in key:
if 'SINBC' in key or 'SINLH' in key or 'S10BC' in key or 'SATMA' in key or 'SATUN' in key:
print(key,values[key])
magnets[key[0:15]] = values[key]*180./np.pi
if 'UMOD' in key:
und[key[0:12]]=[values[key],0.]

View File

@@ -61,6 +61,24 @@ class Model:
return variable
def updateFromMachine(self,machine):
pol = ['LH', 'LV+', 'LV-', 'C+', 'C-', 'ZL']
mag = machine['Magnet']
for key in mag:
keyom=key.replace('-','.')
self.updateElement(keyom,[mag[key]]) # needs to be a list
und = machine['Undulator']
for key in und:
keyom=key.replace('-','.')
self.updateElement(keyom,[und[key][0],pol[int(und[key][1])]])
rf = machine['RF']
for key in rf:
keyom=key.replace('-','.')
self.updateElement(keyom,rf[key])
energy = machine['Energy']
for key in energy:
self.updateEnergy(energy[key])
def updateEnergy(self,E0):
if isinstance(E0,list):
E0=E0[0]

14
runOpticsTools.sh Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
BASEDIR=$(dirname $0)
echo "Script location: ${BASEDIR}"
# runs in the sfbd conda environment SLIC
source /sf/bd/packages/conda/etc/profile.d/conda.sh
conda activate slic
export PYTHONPATH=/sf/bd/packages/slic:/sf/bd/packages/sfbd:/sf/bd/packages/bstrd:/sf/bd/packages/pyrealta:/sf/bd/packages/onlinemodel:$PYTHONPATH
cd $BASEDIR
python OpticsTools.py
# needs command line arguments
#-debug 1 -offline 0

View File

@@ -28,10 +28,17 @@ class Sandbox:
elif self.parent.sender() is self.parent.Mach2ModUnd:
self.updateModel(self.parent.UndSB, 3, False)
self.updateModel(self.parent.RFSB, 3, False)
energy= float(str(self.parent.SBE0Machine.text()))
print('Updating from Maching:',energy)
self.parent.model.updateEnergy(energy)
elif self.parent.sender() is self.parent.SB2ModUnd:
self.updateModel(self.parent.UndSB, 1, False)
self.updateModel(self.parent.RFSB, 1, False)
energy = float(str(self.parent.SBE0Model.text()))
print('Updating from Model:',energy)
self.parent.model.updateEnergy(energy)
self.updateSandbox()
self.parent.status('Sandbox mode')
def updateModel(self,sb,col,single):
for i in range(sb.rowCount()):
@@ -42,11 +49,9 @@ class Sandbox:
if single:
val = [val]
else:
val = [val,str(sb.item(i+1,col).text())]
val = [val,str(sb.item(i,col+1).text())]
self.parent.model.updateElement(field.replace('-','.'),val)
self.updateSandbox()
def updateSandbox(self):
machine = self.parent.machine.getMachineStatus()
model = self.parent.model.getSettings()

View File

@@ -2,15 +2,12 @@
# Form implementation generated from reading ui file 'ui/OpticsPlotGui.ui'
#
# Created by: PyQt5 UI code generator 5.15.10
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_OpticsPlotGUI(object):
def setupUi(self, OpticsPlotGUI):
OpticsPlotGUI.setObjectName("OpticsPlotGUI")
@@ -314,7 +311,7 @@ class Ui_OpticsPlotGUI(object):
self.retranslateUi(OpticsPlotGUI)
self.TabMaster.setCurrentIndex(0)
self.actionQuit.triggered.connect(OpticsPlotGUI.close) # type: ignore
self.actionQuit.triggered.connect(OpticsPlotGUI.close)
QtCore.QMetaObject.connectSlotsByName(OpticsPlotGUI)
def retranslateUi(self, OpticsPlotGUI):
@@ -404,3 +401,4 @@ class Ui_OpticsPlotGUI(object):
self.actionLoad_Reference.setText(_translate("OpticsPlotGUI", "Load Reference..."))
self.actionSave_Reference.setText(_translate("OpticsPlotGUI", "Save Reference"))
self.actionNew_Reference.setText(_translate("OpticsPlotGUI", "New Reference"))

View File

@@ -2,15 +2,12 @@
# Form implementation generated from reading ui file 'ui/OpticsToolsGui.ui'
#
# Created by: PyQt5 UI code generator 5.15.10
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_OpticsGUI(object):
def setupUi(self, OpticsGUI):
OpticsGUI.setObjectName("OpticsGUI")
@@ -31,6 +28,11 @@ class Ui_OpticsGUI(object):
self.horizontalLayout = QtWidgets.QHBoxLayout(self.tab_3)
self.horizontalLayout.setObjectName("horizontalLayout")
self.widget_2 = QtWidgets.QWidget(self.tab_3)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.widget_2.sizePolicy().hasHeightForWidth())
self.widget_2.setSizePolicy(sizePolicy)
self.widget_2.setObjectName("widget_2")
self.verticalLayout = QtWidgets.QVBoxLayout(self.widget_2)
self.verticalLayout.setObjectName("verticalLayout")
@@ -245,6 +247,26 @@ class Ui_OpticsGUI(object):
self.verticalLayout.addLayout(self.gridLayout_3)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem)
self.UIUpdateFromMachine = QtWidgets.QPushButton(self.widget_2)
self.UIUpdateFromMachine.setObjectName("UIUpdateFromMachine")
self.verticalLayout.addWidget(self.UIUpdateFromMachine)
self.label_13 = QtWidgets.QLabel(self.widget_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_13.sizePolicy().hasHeightForWidth())
self.label_13.setSizePolicy(sizePolicy)
self.label_13.setObjectName("label_13")
self.verticalLayout.addWidget(self.label_13)
self.UIStatus = QtWidgets.QLineEdit(self.widget_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.UIStatus.sizePolicy().hasHeightForWidth())
self.UIStatus.setSizePolicy(sizePolicy)
self.UIStatus.setMinimumSize(QtCore.QSize(150, 0))
self.UIStatus.setObjectName("UIStatus")
self.verticalLayout.addWidget(self.UIStatus)
self.horizontalLayout.addWidget(self.widget_2)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem1)
@@ -449,7 +471,7 @@ class Ui_OpticsGUI(object):
self.verticalLayout_4.addWidget(self.TabMaster)
OpticsGUI.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(OpticsGUI)
self.menubar.setGeometry(QtCore.QRect(0, 0, 813, 22))
self.menubar.setGeometry(QtCore.QRect(0, 0, 813, 20))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
@@ -575,8 +597,8 @@ class Ui_OpticsGUI(object):
self.menubar.addAction(self.menuHelp.menuAction())
self.retranslateUi(OpticsGUI)
self.TabMaster.setCurrentIndex(2)
self.actionQuit.triggered.connect(OpticsGUI.close) # type: ignore
self.TabMaster.setCurrentIndex(0)
self.actionQuit.triggered.connect(OpticsGUI.close)
QtCore.QMetaObject.connectSlotsByName(OpticsGUI)
def retranslateUi(self, OpticsGUI):
@@ -609,6 +631,8 @@ class Ui_OpticsGUI(object):
self.UIEtapy.setText(_translate("OpticsGUI", "30"))
self.UIY.setText(_translate("OpticsGUI", "30"))
self.UIPY.setText(_translate("OpticsGUI", "30"))
self.UIUpdateFromMachine.setText(_translate("OpticsGUI", "Update Model from Machine"))
self.label_13.setText(_translate("OpticsGUI", "Status"))
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab_3), _translate("OpticsGUI", "Track"))
self.groupBox_8.setTitle(_translate("OpticsGUI", "Magnets (Angle/ k1L / k2L)"))
self.label_23.setText(_translate("OpticsGUI", "Start"))
@@ -699,3 +723,4 @@ class Ui_OpticsGUI(object):
self.actionSave_Reference.setText(_translate("OpticsGUI", "Save Reference"))
self.actionNew_Reference.setText(_translate("OpticsGUI", "New Reference"))
self.actionSave.setText(_translate("OpticsGUI", "Save Settings..."))

View File

@@ -24,7 +24,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>2</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
@@ -33,6 +33,12 @@
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QWidget" name="widget_2" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="UITrack">
@@ -394,6 +400,42 @@
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="UIUpdateFromMachine">
<property name="text">
<string>Update Model from Machine</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_13">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Status</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UIStatus">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@@ -757,7 +799,7 @@
<x>0</x>
<y>0</y>
<width>813</width>
<height>22</height>
<height>20</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">