Tested machine update
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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.]
|
||||
|
||||
18
model.py
18
model.py
@@ -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
14
runOpticsTools.sh
Executable 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
|
||||
|
||||
|
||||
15
sandbox.py
15
sandbox.py
@@ -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()
|
||||
|
||||
@@ -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"))
|
||||
|
||||
|
||||
@@ -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..."))
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user