diff --git a/MatchingConfig/Reference.json b/MatchingConfig/Reference.json
index 0582746..fd2adb1 100644
--- a/MatchingConfig/Reference.json
+++ b/MatchingConfig/Reference.json
@@ -605,7 +605,10 @@
{
"Script": "Scripts/switchyard.madx"
}
- ]
+ ],
+ "User": {
+ "LEAKDISP": 0.0
+ }
},
"Athos Diagnostics": {
"Variable": [
diff --git a/Scripts/switchyard.madx b/Scripts/switchyard.madx
index 734f99f..51e4dcd 100644
--- a/Scripts/switchyard.madx
+++ b/Scripts/switchyard.madx
@@ -41,7 +41,7 @@ CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, X<10;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
-!satsy01.mqua280.k1 = satsy01.mqua280.k1*1.3;
+satsy01.mqua280.k1 = satsy01.mqua280.k1*(1+leakdisp);
!------------------------------------------
! close vertical dispersion
diff --git a/generateMatchSettings.py b/generateMatchSettings.py
index bb3563b..bc7e381 100644
--- a/generateMatchSettings.py
+++ b/generateMatchSettings.py
@@ -12,9 +12,10 @@ def MatchReference(loc,twiss,limit=None): # limit 1 -> smaller than, 2 -> large
return match
-def MatchParameter(var0,tar0):
- return {'Variable':var0,'Target':tar0}
-
+def MatchParameter(var0,tar0,user0=None):
+ if user0 is None:
+ return {'Variable':var0,'Target':tar0}
+ return {'Variable':var0,'Target':tar0,'User':user0}
path ="MatchingConfig/"
label='Reference'
@@ -138,7 +139,9 @@ var=['SATSY01-MQUA020','SATSY01-MQUA040','SATSY01-MQUA070','SATSY01-MQUA090','SA
'SATSY01-MQUA300','SATSY02-MQUA010','SATSY02-MQUA110','SATSY02-MQUA120','SATSY02-MQUA230','SATSY03-MQUA010','SATSY03-MQUA040','SATSY03-MQUA070',
'SATSY03-MQUA100','SATSY03-MQUA130','SATCL01-MQUA120','SATCL01-MQUA130','SATCL01-MQUA180','SATCL01-MQUA190']
tar=[{'Script':'Scripts/switchyard.madx'}]
-parameter['Switchyard']=MatchParameter(var, tar)
+uservar = {'LEAKDISP':0.0}
+parameter['Switchyard']=MatchParameter(var, tar,uservar)
+
var=['SATDI01-MQUA025','SATDI01-MQUA080','SATDI01-MQUA220','SATDI01-MQUA230']
tar = [reference['HERO']]
diff --git a/issues.txt b/issues.txt
index 34e7196..57b7034 100644
--- a/issues.txt
+++ b/issues.txt
@@ -1,4 +1,4 @@
-
+1) if plotting window is closed, reopen it
2) make matching targets editable
4) export elegant lattice
5) support of other reference files -> fill up the selection list
diff --git a/model.py b/model.py
index 7695a94..0d8ea22 100644
--- a/model.py
+++ b/model.py
@@ -41,6 +41,10 @@ class Model:
def getVariableInfo(self,varlist):
variable = {}
for var in varlist:
+ if isinstance(var,dict):
+ for key in var.keys():
+ variable[key] = {'Val':var[key],'Max':None}
+ continue
ele = self.om.getElement(var.replace('-','.'))
if ele is None:
variable[var]={'Val':0,'Max':None}
@@ -251,8 +255,8 @@ class Model:
return
if 'Script' in target.keys():
- res,twiss,err = self.madx.callScript(script = target['Script'],sequence=sequence, start=start, end=end,init=itwiss,var=var)
-
+ print(var)
+ res,twiss,err = self.madx.callScript(script = target['Script'],sequence=sequence, start=start, end=end,init=itwiss,var=var,preset=True)
self.updateModelFromMatching(res)
self.parent.reference.updateMatchPoint(ID, err)
if self.matchplot:
diff --git a/reference.py b/reference.py
index 5268fe3..43d86ea 100644
--- a/reference.py
+++ b/reference.py
@@ -1,6 +1,8 @@
import json
import copy
from PyQt5 import QtCore, QtGui, QtWidgets
+from numpy.ma.core import floor_divide
+
#from fontTools.misc.cython import returns
CBeige = QtGui.QColor(250, 240, 200)
@@ -18,6 +20,7 @@ class ReferenceManager:
self.reference={}
self.save={}
self.label=None
+ self.matchfile=''
self.twisswidget={'betax':self.parent.UIBetax,'betay':self.parent.UIBetay,
'alphax':self.parent.UIAlphax,'alphay':self.parent.UIAlphay,
@@ -62,6 +65,7 @@ class ReferenceManager:
def loadReference(self, filename):
with open(filename) as f:
self.settings = json.load(f)
+ self.matchfile=filename
self.order={ele['MatchID']:i for i,ele in enumerate(self.settings['Order'])}
self.reference=self.settings['Reference'] # this are fixed points in the lattice
self.label=self.settings['Label']
@@ -77,6 +81,24 @@ class ReferenceManager:
self.save[ID]={'betax':twiss.betx[0],'betay':twiss.bety[0],'alphax':twiss.alfx[0],'alphay':twiss.alfy[0]}
print('saving twissvalue for',ID,':',self.save[ID])
+ def updateUserVariables(self):
+ ID = str(self.parent.UIMatchLabel.text())
+ print(self.settings['Parameter'][ID])
+
+ return
+ # ncol = table.columnCount()
+ # nrow = table.rowCount()
+ # content={}
+ # for irow in range(nrow):
+ # tag = str(table.item(irow,0).text())
+ # content[tag]={}
+ # for icol in range(1,ncol):
+ # fld = str(table.item(irow,icol).text())
+ # content[tag][icol]=fld
+ # return content
+
+
+
def getMatchingPoint(self):
idx = self.parent.UIMatchOrder.currentRow()
if idx < 0:
@@ -112,6 +134,9 @@ class ReferenceManager:
varlist = self.parameter[ID]['Variable']
variable = self.parent.model.getVariableInfo(varlist)
+ if 'User' in self.parameter[ID]:
+ for key in self.parameter[ID]['User'].keys():
+ variable[key]={'Val':self.parameter[ID]['User'][key],'Max':None}
cond = {}
targets = self.parameter[ID]['Target']
diff --git a/ui/OpticsToolsGui.py b/ui/OpticsToolsGui.py
index 3ad13bd..0a84184 100644
--- a/ui/OpticsToolsGui.py
+++ b/ui/OpticsToolsGui.py
@@ -416,9 +416,11 @@ class Ui_OpticsGUI(object):
self.label_17.setObjectName("label_17")
self.gridLayout_5.addWidget(self.label_17, 1, 0, 1, 1)
self.UIMatchSequence = QtWidgets.QLineEdit(self.tab_2)
+ self.UIMatchSequence.setReadOnly(True)
self.UIMatchSequence.setObjectName("UIMatchSequence")
self.gridLayout_5.addWidget(self.UIMatchSequence, 3, 1, 1, 1)
self.UIMatchLabel = QtWidgets.QLineEdit(self.tab_2)
+ self.UIMatchLabel.setReadOnly(True)
self.UIMatchLabel.setObjectName("UIMatchLabel")
self.gridLayout_5.addWidget(self.UIMatchLabel, 0, 1, 1, 1)
self.label_11 = QtWidgets.QLabel(self.tab_2)
@@ -428,12 +430,14 @@ class Ui_OpticsGUI(object):
self.label_16.setObjectName("label_16")
self.gridLayout_5.addWidget(self.label_16, 0, 0, 1, 1)
self.UIMatchStart = QtWidgets.QLineEdit(self.tab_2)
+ self.UIMatchStart.setReadOnly(True)
self.UIMatchStart.setObjectName("UIMatchStart")
self.gridLayout_5.addWidget(self.UIMatchStart, 1, 1, 1, 1)
self.label_12 = QtWidgets.QLabel(self.tab_2)
self.label_12.setObjectName("label_12")
self.gridLayout_5.addWidget(self.label_12, 2, 0, 1, 1)
self.UIMatchEnd = QtWidgets.QLineEdit(self.tab_2)
+ self.UIMatchEnd.setReadOnly(True)
self.UIMatchEnd.setObjectName("UIMatchEnd")
self.gridLayout_5.addWidget(self.UIMatchEnd, 2, 1, 1, 1)
self.verticalLayout_7.addLayout(self.gridLayout_5)
@@ -481,6 +485,8 @@ class Ui_OpticsGUI(object):
self.menuFile.setObjectName("menuFile")
self.menuHelp = QtWidgets.QMenu(self.menubar)
self.menuHelp.setObjectName("menuHelp")
+ self.menuMatching = QtWidgets.QMenu(self.menubar)
+ self.menuMatching.setObjectName("menuMatching")
OpticsGUI.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(OpticsGUI)
self.statusbar.setObjectName("statusbar")
@@ -503,7 +509,6 @@ class Ui_OpticsGUI(object):
self.actionMatch.setObjectName("actionMatch")
self.actionQuit = QtWidgets.QAction(OpticsGUI)
self.actionQuit.setEnabled(True)
- self.actionQuit.setShortcut("")
self.actionQuit.setObjectName("actionQuit")
self.actionExport_Lattice = QtWidgets.QAction(OpticsGUI)
self.actionExport_Lattice.setEnabled(True)
@@ -591,17 +596,37 @@ class Ui_OpticsGUI(object):
self.actionNew_Reference.setObjectName("actionNew_Reference")
self.actionSave = QtWidgets.QAction(OpticsGUI)
self.actionSave.setObjectName("actionSave")
+ self.actionExport_Elegant_Lattice = QtWidgets.QAction(OpticsGUI)
+ self.actionExport_Elegant_Lattice.setObjectName("actionExport_Elegant_Lattice")
+ self.actionOpen_Matching_Script = QtWidgets.QAction(OpticsGUI)
+ self.actionOpen_Matching_Script.setObjectName("actionOpen_Matching_Script")
+ self.actionReloadMatch = QtWidgets.QAction(OpticsGUI)
+ self.actionReloadMatch.setObjectName("actionReloadMatch")
+ self.actionOpenMatch = QtWidgets.QAction(OpticsGUI)
+ self.actionOpenMatch.setObjectName("actionOpenMatch")
+ self.actionOpenMatchEditor = QtWidgets.QAction(OpticsGUI)
+ self.actionOpenMatchEditor.setObjectName("actionOpenMatchEditor")
+ self.actionOpenScriptEditor = QtWidgets.QAction(OpticsGUI)
+ self.actionOpenScriptEditor.setObjectName("actionOpenScriptEditor")
self.menuFile.addAction(self.actionOpen_2)
self.menuFile.addAction(self.actionSave)
self.menuFile.addSeparator()
+ self.menuFile.addAction(self.actionExport_Elegant_Lattice)
+ self.menuFile.addSeparator()
self.menuFile.addAction(self.actionQuit)
+ self.menuFile.addSeparator()
self.menuHelp.addAction(self.actionAbout)
self.menuHelp.addAction(self.actionHelp)
+ self.menuMatching.addAction(self.actionOpenMatch)
+ self.menuMatching.addAction(self.actionReloadMatch)
+ self.menuMatching.addAction(self.actionOpenMatchEditor)
+ self.menuMatching.addAction(self.actionOpenScriptEditor)
self.menubar.addAction(self.menuFile.menuAction())
+ self.menubar.addAction(self.menuMatching.menuAction())
self.menubar.addAction(self.menuHelp.menuAction())
self.retranslateUi(OpticsGUI)
- self.TabMaster.setCurrentIndex(2)
+ self.TabMaster.setCurrentIndex(0)
self.actionQuit.triggered.connect(OpticsGUI.close) # type: ignore
QtCore.QMetaObject.connectSlotsByName(OpticsGUI)
@@ -651,7 +676,7 @@ class Ui_OpticsGUI(object):
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab_8), _translate("OpticsGUI", "Sandbox"))
self.UIMatchSelected.setText(_translate("OpticsGUI", "Match Selected"))
self.label_14.setText(_translate("OpticsGUI", "Label"))
- self.label_15.setText(_translate("OpticsGUI", "Matching Point Order (Closest Ref. Point)"))
+ self.label_15.setText(_translate("OpticsGUI", "Matching Order (Closest Reference Point)"))
self.UIMatchRandom.setText(_translate("OpticsGUI", "Random Initialization"))
self.label_21.setText(_translate("OpticsGUI", "Matching Point"))
self.label_17.setText(_translate("OpticsGUI", "Start"))
@@ -673,6 +698,7 @@ class Ui_OpticsGUI(object):
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab_2), _translate("OpticsGUI", "Matching"))
self.menuFile.setTitle(_translate("OpticsGUI", "File"))
self.menuHelp.setTitle(_translate("OpticsGUI", "Help"))
+ self.menuMatching.setTitle(_translate("OpticsGUI", "Matching"))
self.actionOpen_2.setText(_translate("OpticsGUI", "Open Settings..."))
self.actionOpen_2.setShortcut(_translate("OpticsGUI", "Ctrl+O"))
self.actionOpen.setText(_translate("OpticsGUI", "Open Model..."))
@@ -688,6 +714,7 @@ class Ui_OpticsGUI(object):
self.actionMatch.setText(_translate("OpticsGUI", "Match"))
self.actionMatch.setShortcut(_translate("OpticsGUI", "Ctrl+M"))
self.actionQuit.setText(_translate("OpticsGUI", "Quit"))
+ self.actionQuit.setShortcut(_translate("OpticsGUI", "Ctrl+Q"))
self.actionExport_Lattice.setText(_translate("OpticsGUI", "Export Lattice..."))
self.actionExport_Magnet_Settings.setText(_translate("OpticsGUI", "Export Magnet Settings..."))
self.actionAbout.setText(_translate("OpticsGUI", "About..."))
@@ -727,3 +754,9 @@ 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..."))
+ self.actionExport_Elegant_Lattice.setText(_translate("OpticsGUI", "Export Elegant Lattice..."))
+ self.actionOpen_Matching_Script.setText(_translate("OpticsGUI", "Open Matching Script..."))
+ self.actionReloadMatch.setText(_translate("OpticsGUI", "Reload Current Matching File"))
+ self.actionOpenMatch.setText(_translate("OpticsGUI", "Open New Matching File..."))
+ self.actionOpenMatchEditor.setText(_translate("OpticsGUI", "Open Current Matching File in Editor"))
+ self.actionOpenScriptEditor.setText(_translate("OpticsGUI", "Open Script in Editor"))
diff --git a/ui/OpticsToolsGui.ui b/ui/OpticsToolsGui.ui
index a3d6ea1..3e84aeb 100644
--- a/ui/OpticsToolsGui.ui
+++ b/ui/OpticsToolsGui.ui
@@ -24,7 +24,7 @@
- 2
+ 0
@@ -636,7 +636,7 @@
-
- Matching Point Order (Closest Ref. Point)
+ Matching Order (Closest Reference Point)
@@ -691,10 +691,18 @@
-
-
+
+
+ true
+
+
-
-
+
+
+ true
+
+
-
@@ -711,7 +719,11 @@
-
-
+
+
+ true
+
+
-
@@ -721,7 +733,11 @@
-
-
+
+
+ true
+
+
@@ -815,7 +831,10 @@
+
+
+
+
+
@@ -894,7 +923,7 @@
Quit
-
+ Ctrl+Q
@@ -1140,6 +1169,36 @@
Save Settings...
+
+
+ Export Elegant Lattice...
+
+
+
+
+ Open Matching Script...
+
+
+
+
+ Reload Current Matching File
+
+
+
+
+ Open New Matching File...
+
+
+
+
+ Open Current Matching File in Editor
+
+
+
+
+ Open Script in Editor
+
+