diff --git a/OpticsTools.py b/OpticsTools.py
index 960a26d..5e03be5 100644
--- a/OpticsTools.py
+++ b/OpticsTools.py
@@ -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
diff --git a/issues.txt b/issues.txt
index afcf4cc..33c71d9 100644
--- a/issues.txt
+++ b/issues.txt
@@ -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
+
diff --git a/machine.py b/machine.py
index 8156d1b..49b596f 100644
--- a/machine.py
+++ b/machine.py
@@ -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.]
diff --git a/model.py b/model.py
index f60376a..e8ac1e9 100644
--- a/model.py
+++ b/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]
diff --git a/runOpticsTools.sh b/runOpticsTools.sh
new file mode 100755
index 0000000..5f8f837
--- /dev/null
+++ b/runOpticsTools.sh
@@ -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
+
+
diff --git a/sandbox.py b/sandbox.py
index 0b326f4..646bf6e 100644
--- a/sandbox.py
+++ b/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()
diff --git a/ui/OpticsPlotGui.py b/ui/OpticsPlotGui.py
index fca8863..8ea4011 100644
--- a/ui/OpticsPlotGui.py
+++ b/ui/OpticsPlotGui.py
@@ -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"))
+
diff --git a/ui/OpticsToolsGui.py b/ui/OpticsToolsGui.py
index 7b74c03..f3ab30a 100644
--- a/ui/OpticsToolsGui.py
+++ b/ui/OpticsToolsGui.py
@@ -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..."))
+
diff --git a/ui/OpticsToolsGui.ui b/ui/OpticsToolsGui.ui
index 7d5eedd..56dfe6e 100644
--- a/ui/OpticsToolsGui.ui
+++ b/ui/OpticsToolsGui.ui
@@ -24,7 +24,7 @@
- 2
+ 0
@@ -33,6 +33,12 @@
-
+
+
+ 0
+ 0
+
+
-
@@ -394,6 +400,42 @@
+ -
+
+
+ Update Model from Machine
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Status
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 150
+ 0
+
+
+
+
@@ -757,7 +799,7 @@
0
0
813
- 22
+ 20