Major rework. Testing basic tracking.

This commit is contained in:
2026-01-09 16:40:19 +01:00
parent e385e9ac7b
commit ef48fe523d
9 changed files with 429 additions and 1073 deletions

View File

@@ -45,30 +45,25 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
self.machine = Machine(parent = True, office = office)
self.machine.initPVs(self.model.getElements())
self.sandbox = Sandbox(parent = self, machine = self.machine)
self.sandbox.updateSandbox()
self.reference = ReferenceManager(parent=self)
self.reference.initReferencePoints(self.match)
title = "SwissFEL Optics Tools - Lattice %s (Phase %d)" % (self.model.getLatticeVersion(),phase)
if office:
title += " - offline"
self.setWindowTitle(title)
# initialization
# self.loadSettingsdirect("Settings/ReferenceSetting.json")
self.sandbox.updateSandbox()
# self.reference = ReferenceManager(parent=self)
# self.matching = Matching(parent=self, model=self.model, reference = self.reference)
# events handling
self.UIMatchOpticsSelect.currentIndexChanged.connect(self.updateMatchingCase)
self.UIMatchSelected.clicked.connect(self.doMatch)
# self.actionOpen_2.triggered.connect(self.loadSettings)
# self.actionSave.triggered.connect(self.saveSettings)
# self.UIUpdateFromMachine.clicked.connect(self.fullUpdate)
# self.actionHelp.triggered.connect(self.openGit)
# self.actionAbout.triggered.connect(self.about)
# self.actionOpenMatch.triggered.connect(self.loadMatchingConfig)
# self.actionOpenMatchEditor.triggered.connect(self.editMatchingConfig)
# self.actionOpenScriptEditor.triggered.connect(self.editMatchingScript)
# self.actionExportElegant.triggered.connect(self.exportElegant)
self.actionOpen_2.triggered.connect(self.loadSettings)
self.actionSave.triggered.connect(self.saveSettings)
self.UIUpdateFromMachine.clicked.connect(self.fullUpdate)
self.actionHelp.triggered.connect(self.openGit)
self.actionAbout.triggered.connect(self.about)
self.actionOpenScriptEditor.triggered.connect(self.editMatchingScript)
def doMatch(self):
@@ -120,29 +115,6 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
def openGit(self):
webbrowser.open("https://gitea.psi.ch/reiche/opticstool")
def exportElegant(self):
self.elegant.writeElegantFiles('Elegant','dummy','SATBD01')
def loadMatchingConfig(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open Matching Config File",
"MatchingConfig/Reference.json",
"Json Files (*.json)", options=options)
if not fileName:
return
self.reference.loadReference(fileName)
def editMatchingConfig(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open Matching Config File",
"MatchingConfig/Reference.json",
"Json Files (*.json)", options=options)
if not fileName:
return
subprocess.Popen(["emacs", fileName])
def editMatchingScript(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
@@ -153,6 +125,7 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
return
subprocess.Popen(["emacs", fileName])
##################################################
def saveSettings(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
@@ -161,10 +134,7 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
"Json Files (*.json)", options=options)
if not fileName:
return
settings=self.model.getSettings()
with open(fileName, 'w', encoding='utf-8') as f:
json.dump(settings, f, ensure_ascii=False, indent=4)
self.saveSettingDirect(fileName)
def loadSettings(self):
@@ -183,6 +153,12 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
self.model.loadSettings(settings)
self.status('Reference loaded')
def saveSettingsdirect(self,fileName):
settings = self.model.getSettings()
with open(fileName, 'w', encoding='utf-8') as f:
json.dump(settings, f, ensure_ascii=False, indent=4)
####################################################
def fullUpdate(self):
machine = self.machine.getMachineStatus()
self.model.updateFromMachine(machine)

View File

@@ -1,9 +1,8 @@
option,-echo;
! starting condition
Twiss0: beta0, betx = 29.971, alfx = 0.003, bety = 26., alfy = -0.288; ! location:Start
Twisssep: beta0,betx = 48.26, alfx = 7.322, bety = 14.293, alfy = -3.513; ! location:sinsy02$start
TwissM1: beta0, betx = 11.2, alfx = 3.2, bety = 0.8, alfy = 0.75; ! location:sinlh02.mqua410$end
Twiss0: beta0, betx = 29.971, alfx = 0.003, bety = 26., alfy = -0.288; ! location:swissfel$start
TwissM1: beta0, betx = 11.2, alfx = 3.2, bety = 0.8, alfy = 0.75; ! location:sinlh02.mqua410$start
TwissM2: beta0, betx = 11.1557, alfx = -1.17, bety = 50, alfy = 0.; ! location:sindi02.mqua020$start
TwissM3: beta0, betx = 4.88, alfx = 0.5546, bety = 16.11, alfy = -1.81; ! location:s10bc01.mqua020$start
TwissM4: beta0, betx = 6.14, alfx = -0.83, bety = 22.86, alfy = -1.18; ! location:s10ma01.mqua020$start
Twisssep: beta0,betx = 48.26, alfx = 7.322, bety = 14.293, alfy = -3.513; ! location:s20sy02$start

View File

@@ -8,10 +8,10 @@ VARY,NAME=sinlh01.MQUA040.k1,STEP=0.0001;
VARY,NAME=sinlh01.MQUA050.k1,STEP=0.0001;
VARY,NAME=sinlh01.MQUA070.k1,STEP=0.0001;
VARY,NAME=sinlh02.MQUA010.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh02.mqua410$end, alfx = TwissM1->ALFX;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh02.mqua410$end, alfy = TwissM1->ALFY;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh02.mqua410$end, betx = TwissM1->BETX;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh02.mqua410$end, bety = TwissM1->BETY;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh02.mqua410$start, alfx = TwissM1->ALFX;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh02.mqua410$start, alfy = TwissM1->ALFY;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh02.mqua410$start, betx = TwissM1->BETX;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh02.mqua410$start, bety = TwissM1->BETY;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua130$end, X < 10;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;

View File

@@ -1,7 +1,10 @@
1) Initialize all quadrupoles at the beginning!
2) Allow for parameter inputs, e.g. phase advance
3) make initTwiss to alist of several reference points
4) match to beta0 and not individual elements
3) matching output on a log
4) Save matched values (e.g. automatically)
5) Load Reference
6) filter for curent, planned and final phase for matching scripts

View File

@@ -6,9 +6,12 @@ from onlinemodel.madx import CMadX
class MatchMaker:
def __init__(self):
self.matchlist={'Reference-SwissFEL':'Scripts/Reference-SwissFEL','SwissFEL+':'Scripts/SFPlus'}
self.referencePoints={}
def initScripts(self,target):
self.scriptdir = self.matchlist[target]
if os.path.exists(self.scriptdir+'/initTwiss.madx'):
self.parseReferencePoints()
self.scriptInjector = os.path.exists(self.scriptdir+'/matchInjector.madx')
self.scriptAramis = os.path.exists(self.scriptdir+'/matchAramis.madx')
self.scriptAthos = os.path.exists(self.scriptdir + '/matchAthos.madx')
@@ -16,6 +19,20 @@ class MatchMaker:
self.settings = os.path.exists(self.scriptdir + '/ReferenceSettings')
def parseReferencePoints(self):
file = self.scriptdir+'/initTwiss.madx'
self.referencePoints.clear()
with open(file,'r') as f:
lines = f.readlines()
for line in lines:
if 'location:' in line:
tags = line.split('location:')
location = tags[1].strip()
fields_all = tags[0].split(',')
fields = [fld.split(';')[0].strip() for fld in fields_all if "=" in fld]
self.referencePoints[location] = {twiss.split('=')[0].strip().lower():float(twiss.split('=')[1].strip()) for twiss in fields}
print('##### Reference Twiss values parsed')
def match(self, om, Injector=True, Athos = True, Aramis = False, Porthos = False):

132
model.py
View File

@@ -29,12 +29,10 @@ class Model:
# flag to enfore new lattice
self.forceLat=True
# hook up events
self.matchplot=True
self.eventHandling()
def eventHandling(self):
self.parent.UITrack.clicked.connect(self.track)
#self.parent.UIMatchSelected.clicked.connect(self.match)
def forceLatticeUpdate(self):
self.forceLat=True
@@ -45,33 +43,6 @@ class Model:
def getInitialEnergy(self):
return self.om.EnergyAt(self.energyReference)[0]
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}
else:
if 'MQUA' in var or 'MQSK' in var or 'MSEX' in var:
bg = ele.Baugruppe
Brho = self.om.EnergyAt(var.replace('-','.'))[0]/3e8
if bg in maxgradient.keys():
mgrad=maxgradient[bg]/Brho
else:
mgrad=None
if 'MSEX' in var:
variable[var]={'Val':ele.k2,'Max':mgrad}
else:
variable[var] = {'Val': ele.k1, 'Max': mgrad}
else:
variable[var]={'Val':0,'Max':None}
return variable
def updateFromMachine(self,machine):
pol = ['LH', 'LV+', 'LV-', 'C+', 'C-', 'ZL']
mag = machine['Magnet']
@@ -180,106 +151,10 @@ class Model:
self.startEnergy = settings['Energy']['energy']
self.energyReference = settings['Energy']['location']
self.startTwiss = settings['InitialCondition']
print(self.startTwiss)
self.updateEnergy(self.startEnergy)
print(settings['Energy']['energy'])
print('Energy in system',self.om.EnergyAt(self.energyReference)[0])
print('Settings loaded (Reference Energy:',self.om.EnergyAt(self.energyReference)[0],')')
self.forceLat=True
##############################33
# tracking
def match(self):
config = self.parent.reference.getMatchingPoint()
if config is False:
return
self.setBranch(config['destination'])
sequence = config['sequence']
ID = config['ID']
start=config['start']['Location']
end=config['end']
if len(end) == 7:
end=end+'$end'
if 'Twiss' in config['start']:
itwiss = {converttwiss[key.lower()]: config['start']['Twiss'][key] for key in
config['start']['Twiss'].keys()}
else:
itwiss = None
var={}
nvar=0
for key in config['variable'].keys():
nvar+=1
key0=key.replace('-','.').lower()
if 'mqua' in key0 or 'mqsk' in key0:
key0+='.k1'
elif 'msex' in key0:
key0+='.k2'
elif 'mkac' in key0 or 'mkdc' in key0:
key0+='.cory'
var[key0]=config['variable'][key]
target = config['target']
if 'Preset' in target:
self.updateModelFromMatching(target['Preset'])
self.parent.reference.updateMatchPoint(ID, 0)
return
if 'Script' in target.keys():
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:
energy = self.calcEnergyProfile(twiss)
self.parent.plot.newData(twiss, energy)
return
ncon = 0
condilist = {}
for key in target.keys():
condi={}
for ele in target[key]:
if isinstance(ele,tuple):
condi[converttwiss[ele[0].lower()]]={'Condition': ele[1],'Val':ele[2]}
ncon+=1
elif isinstance(ele,str):
print('Needs matching results from', ele)
return
condilist[key]=condi
print('Variables:',nvar)
print('Conditions:',ncon)
if nvar > ncon:
print('Adding dummy constraints from initial conditions')
if not start in condilist.keys():
condilist[start]={}
condi={}
for twkey in itwiss.keys():
if ncon < nvar:
condi[twkey]={'Condition':0,'Val':itwiss[twkey]}
ncon+=1
condilist[start]=condi
for key in condilist.keys():
print(key,condilist[key])
random = self.parent.UIMatchRandom.isChecked()
res,twiss,err=self.madx.match(sequence=sequence, start=start, end=end,
init=itwiss, var=var, const=condilist,
preset=False,random=random)
self.updateModelFromMatching(res)
if config['save'] == True:
self.parent.reference.saveTwiss(ID,twiss)
self.parent.reference.updateMatchPoint(ID,err)
if self.matchplot:
energy = self.calcEnergyProfile(twiss)
self.parent.plot.newData(twiss,energy)
def updateModelFromMatching(self,var):
for magm in var.keys():
mag0 = magm[0:15]
@@ -301,6 +176,7 @@ class Model:
ele.design_kick = val
ele.cory = val
print('Updating %s to design_kick: %8.4f' % (mag0, val))
##################
# tracking
@@ -313,8 +189,12 @@ class Model:
end = end[0:7]
refloc, twiss0 = self.parent.reference.getReference()
if 'SWISSFEL' in refloc.upper():
refloc = 'SINLH01$START'
if refloc.upper() == 'START':
refloc = start.upper()
if self.startEnergy is None:
self.startEnergy = self.om.EnergyAt(self.energyReference)[0]*1e-6
twiss0['energy'] = self.startEnergy*1e-3 # convert to GeV for madx
start, end = self.checkRange(start, end, refloc[0:7])
if start is None:

View File

@@ -11,240 +11,68 @@ CYellow = QtGui.QColor(255, 255, 0)
CRed = QtGui.QColor(255, 100, 100)
class ReferenceManager:
def __init__(self, parent):
self.parent = parent
self.settings={}
self.reference={}
self.save={}
self.label=None
self.matchfile=''
self.reference={} # list of location with twiss parameters
self.locationDict={}
self.twisswidget={'betax':self.parent.UIBetax,'betay':self.parent.UIBetay,
'alphax':self.parent.UIAlphax,'alphay':self.parent.UIAlphay,
self.twisswidget={'betx':self.parent.UIBetax,'bety':self.parent.UIBetay,
'alfx':self.parent.UIAlphax,'alfy':self.parent.UIAlphay,
'etax':self.parent.UIEtax,'etay':self.parent.UIEtay,
'etapx':self.parent.UIEtapx,'etapy':self.parent.UIEtapy,
'x':self.parent.UIX,'y':self.parent.UIY,
'px':self.parent.UIPX,'py':self.parent.UIPY}
self.loadReference('MatchingConfig/Reference.json')
self.parent.UITrackReference.currentIndexChanged.connect(self.updateReferenceWidgets)
self.parent.UIMatchOrder.itemClicked.connect(self.displayMatchingPoint)
self.parent.UIConfigMatching.clicked.connect(self.configMatching)
def configMatching(self):
label=str(self.parent.UIMatchingConfigLabel.text())
var = {}
var['SYR56'] = float(str(self.parent.UIMatchConfigSYComp.text())) * 0.01
fname = configMatching(label,var)
self.loadReference(fname)
####################################33
# handling the reference point system
def clearMatching(self):
self.save.clear()
self.updateMatchOrder()
def updateMatchOrder(self):
secs={}
self.parent.UIMatchOrder.clear()
for i,ele in enumerate(self.settings['Order']):
label = ele['MatchID']
ref = ele['Reference']
if ref is None:
color = CBeige
def initReferencePoints(self,matchmaker):
self.reference.clear()
self.locationDict.clear()
for i, key in enumerate(matchmaker.referencePoints.keys()):
if i is 0:
tag = 'Start'
else:
if ref in secs.keys():
color = secs[ref]
else:
idx = len(secs)+2
color = QtGui.QColor(220, 240-idx*5, 200+idx*4)
secs[ref]=color
if not ref is None:
label += ' ('+ref+')'
self.parent.UIMatchOrder.addItem(label)
self.parent.UIMatchOrder.item(i).setBackground(color)
if self.parent.UIMatchOrder.count() > 0:
self.parent.UIMatchOrder.setCurrentRow(0)
self.displayMatchingPoint()
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']
self.parameter=self.settings['Parameter']
self.dependence=self.settings['Dependence']
self.parent.UIMatchSequenceLabel.setText(self.label)
self.clearMatching()
tag = 'Matchpoint %d' % i
self.reference[tag]= {'Location':key,'Twiss':matchmaker.referencePoints[key]}
self.updateReferenceComboBox()
self.updateReferenceWidgets()
def swithToUserDefinedLocation(self):
n = self.parent.UITrackReference.count()
self.parent.UITrackReference.setCurrentIndex(n - 1)
def saveTwiss(self, ID, twiss):
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 getMatchingPoint(self):
idx = self.parent.UIMatchOrder.currentRow()
if idx < 0:
return None
ID = str(self.parent.UIMatchOrder.item(idx).text())
ID = ID.split('(')[0].strip()
idx = self.order[ID] # get index in the list
order = copy.deepcopy(self.settings['Order'][idx])
destination = order['Destination']
save = order['Save']
sequence = order['Sequence']
if not sequence is None:
if isinstance(sequence,str):
start = sequence+'$start'
end = sequence+'$end'
elif isinstance(sequence,list):
start = sequence[0]+'$start'
end = sequence[-1]+'$end'
twiss0 = {'Location': start, 'twiss': {}}
else:
end = order['End']
if end is None:
end = '#e'
start = order['Reference']
if start is None:
twiss0 = {'Location':'#s','twiss':{}}
else:
twiss0 = self.getReferenceByTag(order['Reference'])
if twiss0['Location'].upper() == 'START':
twiss0['Location']= '#s'
sequence='swissfel'
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']
for target in targets:
if 'Location' in target.keys():
loc = target['Location']
if not loc in cond.keys():
cond[loc]=[]
if 'Limit' in target.keys():
limit = target['Limit']
else:
limit = 0
if 'Twiss' in target.keys():
for key0 in target['Twiss'].keys():
cond[loc].append((key0,limit,target['Twiss'][key0]))
elif 'SavedID':
if target['SavedID'] in self.save.keys():
twisssaved = self.save[target['SavedID']]
for twkey in twisssaved.keys():
cond[loc].append((twkey,0,twisssaved[twkey]))
else:
cond[loc].append(target['SavedID'])
elif 'Script' in target.keys():
cond['Script']=target['Script']
elif 'Preset' in target.keys():
cond['Preset']=target['Preset']
config={'ID':ID,'start':twiss0,'end':end,
'destination':destination,'sequence':sequence,
'variable':variable,'target':cond,'save':save}
return config
def updateMatchPoint(self,ID,val):
idx = self.order[ID]
if val < 1e-6:
color = CGreen
elif val < 1:
color = CYellow
else:
color = CRed
self.parent.UIMatchOrder.item(idx).setBackground(color)
if val<1:
idx = self.parent.UIMatchOrder.currentRow()+1
if idx < self.parent.UIMatchOrder.count():
self.parent.UIMatchOrder.setCurrentRow(idx)
self.displayMatchingPoint()
def getDependence(self,ele):
eletag=ele.upper().replace('.','-')
if eletag in self.dependence.keys():
return [mag.lower().replace('-','.') for mag in self.dependence[eletag]]
else:
return None
#--------------------------------
# match info
def displayMatchingPoint(self):
config = self.getMatchingPoint()
if config is None:
def updateReferenceWidgets(self):
key = str(self.parent.UITrackReference.currentText())
if key == 'User Defined':
return
self.parent.UIMatchLabel.setText(config['ID'])
self.parent.UIMatchStart.setText(config['start']['Location'])
self.parent.UIMatchEnd.setText(config['end'])
self.parent.UIMatchSequence.setText(config['sequence'])
self.parent.UIMatchKnobs.setColumnCount(3)
self.parent.UIMatchKnobs.setRowCount(len(config['variable'].keys()))
for i , key in enumerate(config['variable'].keys()):
self.parent.UIMatchKnobs.setItem(i, 0, QtWidgets.QTableWidgetItem(key))
self.parent.UIMatchKnobs.setItem(i, 1, QtWidgets.QTableWidgetItem('%7.3f' % config['variable'][key]['Val']))
arg = config['variable'][key]['Max']
if arg is None:
self.parent.UIMatchKnobs.setItem(i, 2, QtWidgets.QTableWidgetItem(''))
if key == '': # some quick solution in the case that the referenc epoints are regenerated, generating a signal for empty table
return
twiss = self.reference[key]['Twiss']
name_orig = self.reference[key]['Location']
name = name_orig.upper().replace('.','-')
if '$' in name:
name=name.replace('$',' (')+')'
self.locationDict[name]=name_orig
self.parent.UITrackLocation.setText(name)
for key in self.twisswidget.keys():
if key in twiss.keys():
value = twiss[key]
else:
self.parent.UIMatchKnobs.setItem(i, 2, QtWidgets.QTableWidgetItem('%7.3f' % arg))
self.parent.UIMatchKnobs.resizeColumnsToContents()
self.parent.UIMatchKnobs.verticalHeader().hide()
value = 0
if 'beta' in key:
value = 30
self.twisswidget[key].setText('%7.3f' % value)
self.parent.UIMatchTargets.setColumnCount(2)
self.parent.UIMatchTargets.setRowCount(0)
if 'Script' in config['target'].keys():
self.parent.UIMatchTargets.insertRow(0)
self.parent.UIMatchTargets.setItem(0, 0, QtWidgets.QTableWidgetItem('Script'))
self.parent.UIMatchTargets.setItem(0, 1, QtWidgets.QTableWidgetItem(config['target']['Script']))
elif 'Preset' in config['target'].keys():
irow = 0
for key in config['target']['Preset'].keys():
self.parent.UIMatchTargets.insertRow(irow)
self.parent.UIMatchTargets.setItem(irow, 0, QtWidgets.QTableWidgetItem(key))
self.parent.UIMatchTargets.setItem(irow, 1, QtWidgets.QTableWidgetItem('%7.3f' % config['target']['Preset'][key]))
irow +=1
else:
irow = 0
for key in config['target'].keys():
for ele in config['target'][key]:
self.parent.UIMatchTargets.insertRow(irow)
self.parent.UIMatchTargets.setItem(irow, 0, QtWidgets.QTableWidgetItem(key))
if isinstance(ele, tuple):
fld = self.convertTargetTuple(ele)
self.parent.UIMatchTargets.setItem(irow, 1, QtWidgets.QTableWidgetItem(fld))
elif isinstance(ele,str):
self.parent.UIMatchTargets.setItem(irow, 1, QtWidgets.QTableWidgetItem('Result from: %s ' % ele))
self.parent.UIMatchTargets.resizeColumnsToContents()
self.parent.UIMatchTargets.verticalHeader().hide()
return
def updateReferenceComboBox(self):
self.parent.UITrackReference.clear()
for ref in self.reference.keys():
self.parent.UITrackReference.addItem(ref)
self.parent.UITrackReference.addItem('User Defined')
def convertTargetTuple(self,tuple_in):
sym = ['=', '<', '>']
retval = tuple_in[0]+sym[int(tuple_in[1])]
if tuple_in[2] is None:
return retval+'undefined'
flt = '%7.3f' % tuple_in[2]
return retval + flt.strip()
###########################################
#--------------------------------
# obtaining reference data
@@ -263,37 +91,6 @@ class ReferenceManager:
return twiss
def getReferenceLocation(self):
return str(self.parent.UITrackLocation.text())
####################################################
###### only relevant for tracking
##### interaction of the tracking reference point
def swithToUserDefinedLocation(self):
n = self.parent.UITrackReference.count()
self.parent.UITrackReference.setCurrentIndex(n-1)
def updateReferenceWidgets(self):
key = str(self.parent.UITrackReference.currentText())
if key == 'User Defined':
return
if key=='': # some quick solution in the case that the referenc epoints are regenerated, generating a signal for empty table
return
twiss = self.reference[key]['Twiss']
name = self.reference[key]['Location']
self.parent.UITrackLocation.setText(name)
for key in self.twisswidget.keys():
if key in twiss.keys():
value = twiss[key]
else:
value = 0
if 'beta' in key:
value = 30
self.twisswidget[key].setText('%7.3f' % value)
def updateReferenceComboBox(self):
self.parent.UITrackReference.clear()
for ref in self.reference.keys():
self.parent.UITrackReference.addItem(ref)
self.parent.UITrackReference.addItem('User Defined')
tag = str(self.parent.UITrackLocation.text())
return self.locationDict[tag]

View File

@@ -28,8 +28,8 @@ class Ui_OpticsGUI(object):
self.TabMaster.setObjectName("TabMaster")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.tab_3)
self.horizontalLayout.setObjectName("horizontalLayout")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.tab_3)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.widget_2 = QtWidgets.QWidget(self.tab_3)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
@@ -270,9 +270,121 @@ class Ui_OpticsGUI(object):
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)
self.horizontalLayout_4.addWidget(self.widget_2)
self.widget = QtWidgets.QWidget(self.tab_3)
self.widget.setObjectName("widget")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.UIMatchSelected = QtWidgets.QPushButton(self.widget)
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.UIMatchSelected.setFont(font)
self.UIMatchSelected.setStyleSheet("background-color: rgb(255, 255, 127);")
self.UIMatchSelected.setObjectName("UIMatchSelected")
self.verticalLayout_3.addWidget(self.UIMatchSelected)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_31 = QtWidgets.QLabel(self.widget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_31.sizePolicy().hasHeightForWidth())
self.label_31.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.label_31.setFont(font)
self.label_31.setObjectName("label_31")
self.horizontalLayout.addWidget(self.label_31)
self.UIMatchOpticsSelect = QtWidgets.QComboBox(self.widget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.UIMatchOpticsSelect.sizePolicy().hasHeightForWidth())
self.UIMatchOpticsSelect.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.UIMatchOpticsSelect.setFont(font)
self.UIMatchOpticsSelect.setObjectName("UIMatchOpticsSelect")
self.horizontalLayout.addWidget(self.UIMatchOpticsSelect)
self.verticalLayout_3.addLayout(self.horizontalLayout)
self.matchbranches = QtWidgets.QGroupBox(self.widget)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.matchbranches.setFont(font)
self.matchbranches.setObjectName("matchbranches")
self.gridLayout_5 = QtWidgets.QGridLayout(self.matchbranches)
self.gridLayout_5.setObjectName("gridLayout_5")
self.UIMatchInjector = QtWidgets.QCheckBox(self.matchbranches)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.UIMatchInjector.setFont(font)
self.UIMatchInjector.setObjectName("UIMatchInjector")
self.gridLayout_5.addWidget(self.UIMatchInjector, 0, 0, 1, 1)
self.UIMatchPorthos = QtWidgets.QCheckBox(self.matchbranches)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.UIMatchPorthos.setFont(font)
self.UIMatchPorthos.setObjectName("UIMatchPorthos")
self.gridLayout_5.addWidget(self.UIMatchPorthos, 0, 1, 1, 1)
self.UIMatchAthos = QtWidgets.QCheckBox(self.matchbranches)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.UIMatchAthos.setFont(font)
self.UIMatchAthos.setObjectName("UIMatchAthos")
self.gridLayout_5.addWidget(self.UIMatchAthos, 1, 0, 1, 1)
self.UIMatchAramis = QtWidgets.QCheckBox(self.matchbranches)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.UIMatchAramis.setFont(font)
self.UIMatchAramis.setObjectName("UIMatchAramis")
self.gridLayout_5.addWidget(self.UIMatchAramis, 1, 1, 1, 1)
self.verticalLayout_3.addWidget(self.matchbranches)
self.checkBox_3 = QtWidgets.QCheckBox(self.widget)
self.checkBox_3.setObjectName("checkBox_3")
self.verticalLayout_3.addWidget(self.checkBox_3)
self.checkBox = QtWidgets.QCheckBox(self.widget)
self.checkBox.setObjectName("checkBox")
self.verticalLayout_3.addWidget(self.checkBox)
self.checkBox_2 = QtWidgets.QCheckBox(self.widget)
self.checkBox_2.setObjectName("checkBox_2")
self.verticalLayout_3.addWidget(self.checkBox_2)
self.label_19 = QtWidgets.QLabel(self.widget)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_19.setFont(font)
self.label_19.setObjectName("label_19")
self.verticalLayout_3.addWidget(self.label_19)
self.UIMatchKnobs = QtWidgets.QTableWidget(self.widget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.UIMatchKnobs.sizePolicy().hasHeightForWidth())
self.UIMatchKnobs.setSizePolicy(sizePolicy)
self.UIMatchKnobs.setObjectName("UIMatchKnobs")
self.UIMatchKnobs.setColumnCount(2)
self.UIMatchKnobs.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.UIMatchKnobs.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.UIMatchKnobs.setHorizontalHeaderItem(1, item)
self.verticalLayout_3.addWidget(self.UIMatchKnobs)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem1)
self.horizontalLayout_4.addWidget(self.widget)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_4.addItem(spacerItem2)
self.TabMaster.addTab(self.tab_3, "")
self.tab_8 = QtWidgets.QWidget()
self.tab_8.setObjectName("tab_8")
@@ -359,197 +471,6 @@ class Ui_OpticsGUI(object):
self.verticalLayout_17.addWidget(self.SB2ModUnd)
self.horizontalLayout_5.addWidget(self.groupBox_9)
self.TabMaster.addTab(self.tab_8, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.horizontalLayout_9 = QtWidgets.QHBoxLayout(self.tab_2)
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.label_31 = QtWidgets.QLabel(self.tab_2)
self.label_31.setObjectName("label_31")
self.verticalLayout_6.addWidget(self.label_31)
self.UIMatchOpticsSelect = QtWidgets.QComboBox(self.tab_2)
self.UIMatchOpticsSelect.setObjectName("UIMatchOpticsSelect")
self.verticalLayout_6.addWidget(self.UIMatchOpticsSelect)
self.UIMatchInjector = QtWidgets.QCheckBox(self.tab_2)
self.UIMatchInjector.setObjectName("UIMatchInjector")
self.verticalLayout_6.addWidget(self.UIMatchInjector)
self.UIMatchAthos = QtWidgets.QCheckBox(self.tab_2)
self.UIMatchAthos.setObjectName("UIMatchAthos")
self.verticalLayout_6.addWidget(self.UIMatchAthos)
self.UIMatchPorthos = QtWidgets.QCheckBox(self.tab_2)
self.UIMatchPorthos.setObjectName("UIMatchPorthos")
self.verticalLayout_6.addWidget(self.UIMatchPorthos)
self.UIMatchAramis = QtWidgets.QCheckBox(self.tab_2)
self.UIMatchAramis.setObjectName("UIMatchAramis")
self.verticalLayout_6.addWidget(self.UIMatchAramis)
self.UIMatchSelected = QtWidgets.QPushButton(self.tab_2)
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.UIMatchSelected.setFont(font)
self.UIMatchSelected.setStyleSheet("background-color: rgb(255, 255, 127);")
self.UIMatchSelected.setObjectName("UIMatchSelected")
self.verticalLayout_6.addWidget(self.UIMatchSelected)
self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.label_14 = QtWidgets.QLabel(self.tab_2)
self.label_14.setObjectName("label_14")
self.horizontalLayout_8.addWidget(self.label_14)
self.UIMatchSequenceLabel = QtWidgets.QLineEdit(self.tab_2)
self.UIMatchSequenceLabel.setText("")
self.UIMatchSequenceLabel.setObjectName("UIMatchSequenceLabel")
self.horizontalLayout_8.addWidget(self.UIMatchSequenceLabel)
self.verticalLayout_6.addLayout(self.horizontalLayout_8)
self.label_15 = QtWidgets.QLabel(self.tab_2)
self.label_15.setObjectName("label_15")
self.verticalLayout_6.addWidget(self.label_15)
self.UIMatchOrder = QtWidgets.QListWidget(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.UIMatchOrder.sizePolicy().hasHeightForWidth())
self.UIMatchOrder.setSizePolicy(sizePolicy)
self.UIMatchOrder.setMinimumSize(QtCore.QSize(350, 0))
self.UIMatchOrder.setObjectName("UIMatchOrder")
self.verticalLayout_6.addWidget(self.UIMatchOrder)
self.UIMatchRandom = QtWidgets.QCheckBox(self.tab_2)
self.UIMatchRandom.setObjectName("UIMatchRandom")
self.verticalLayout_6.addWidget(self.UIMatchRandom)
self.horizontalLayout_9.addLayout(self.verticalLayout_6)
self.verticalLayout_7 = QtWidgets.QVBoxLayout()
self.verticalLayout_7.setObjectName("verticalLayout_7")
self.label_21 = QtWidgets.QLabel(self.tab_2)
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label_21.setFont(font)
self.label_21.setObjectName("label_21")
self.verticalLayout_7.addWidget(self.label_21)
self.gridLayout_5 = QtWidgets.QGridLayout()
self.gridLayout_5.setObjectName("gridLayout_5")
self.label_17 = QtWidgets.QLabel(self.tab_2)
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)
self.label_11.setObjectName("label_11")
self.gridLayout_5.addWidget(self.label_11, 3, 0, 1, 1)
self.label_16 = QtWidgets.QLabel(self.tab_2)
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)
self.label_19 = QtWidgets.QLabel(self.tab_2)
self.label_19.setObjectName("label_19")
self.verticalLayout_7.addWidget(self.label_19)
self.UIMatchKnobs = QtWidgets.QTableWidget(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.UIMatchKnobs.sizePolicy().hasHeightForWidth())
self.UIMatchKnobs.setSizePolicy(sizePolicy)
self.UIMatchKnobs.setObjectName("UIMatchKnobs")
self.UIMatchKnobs.setColumnCount(3)
self.UIMatchKnobs.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.UIMatchKnobs.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.UIMatchKnobs.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.UIMatchKnobs.setHorizontalHeaderItem(2, item)
self.verticalLayout_7.addWidget(self.UIMatchKnobs)
self.label_20 = QtWidgets.QLabel(self.tab_2)
self.label_20.setObjectName("label_20")
self.verticalLayout_7.addWidget(self.label_20)
self.UIMatchTargets = QtWidgets.QTableWidget(self.tab_2)
self.UIMatchTargets.setObjectName("UIMatchTargets")
self.UIMatchTargets.setColumnCount(2)
self.UIMatchTargets.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.UIMatchTargets.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.UIMatchTargets.setHorizontalHeaderItem(1, item)
self.verticalLayout_7.addWidget(self.UIMatchTargets)
self.horizontalLayout_9.addLayout(self.verticalLayout_7)
spacerItem2 = QtWidgets.QSpacerItem(242, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_9.addItem(spacerItem2)
self.TabMaster.addTab(self.tab_2, "")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.tab)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.UIConfigMatching = QtWidgets.QPushButton(self.tab)
self.UIConfigMatching.setObjectName("UIConfigMatching")
self.verticalLayout_2.addWidget(self.UIConfigMatching)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_18 = QtWidgets.QLabel(self.tab)
self.label_18.setObjectName("label_18")
self.horizontalLayout_2.addWidget(self.label_18)
self.UIMatchingConfigLabel = QtWidgets.QLineEdit(self.tab)
self.UIMatchingConfigLabel.setObjectName("UIMatchingConfigLabel")
self.horizontalLayout_2.addWidget(self.UIMatchingConfigLabel)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
self.line = QtWidgets.QFrame(self.tab)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.verticalLayout_2.addWidget(self.line)
self.label_22 = QtWidgets.QLabel(self.tab)
self.label_22.setObjectName("label_22")
self.verticalLayout_2.addWidget(self.label_22)
self.UIMatchConfigSYComp = QtWidgets.QLineEdit(self.tab)
self.UIMatchConfigSYComp.setObjectName("UIMatchConfigSYComp")
self.verticalLayout_2.addWidget(self.UIMatchConfigSYComp)
self.label_25 = QtWidgets.QLabel(self.tab)
self.label_25.setObjectName("label_25")
self.verticalLayout_2.addWidget(self.label_25)
self.UIMatchConfigARFoc = QtWidgets.QLineEdit(self.tab)
self.UIMatchConfigARFoc.setObjectName("UIMatchConfigARFoc")
self.verticalLayout_2.addWidget(self.UIMatchConfigARFoc)
self.label_27 = QtWidgets.QLabel(self.tab)
self.label_27.setObjectName("label_27")
self.verticalLayout_2.addWidget(self.label_27)
self.UIMatchConfigATFoc = QtWidgets.QLineEdit(self.tab)
self.UIMatchConfigATFoc.setObjectName("UIMatchConfigATFoc")
self.verticalLayout_2.addWidget(self.UIMatchConfigATFoc)
self.UIMatchConfigECOLAsBC = QtWidgets.QCheckBox(self.tab)
self.UIMatchConfigECOLAsBC.setObjectName("UIMatchConfigECOLAsBC")
self.verticalLayout_2.addWidget(self.UIMatchConfigECOLAsBC)
self.label_28 = QtWidgets.QLabel(self.tab)
self.label_28.setObjectName("label_28")
self.verticalLayout_2.addWidget(self.label_28)
self.UIMatchConfigECOLR56 = QtWidgets.QLineEdit(self.tab)
self.UIMatchConfigECOLR56.setObjectName("UIMatchConfigECOLR56")
self.verticalLayout_2.addWidget(self.UIMatchConfigECOLR56)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem3)
self.horizontalLayout_3.addLayout(self.verticalLayout_2)
spacerItem4 = QtWidgets.QSpacerItem(380, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_3.addItem(spacerItem4)
self.TabMaster.addTab(self.tab, "")
self.verticalLayout_4.addWidget(self.TabMaster)
OpticsGUI.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(OpticsGUI)
@@ -559,8 +480,6 @@ 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")
@@ -685,21 +604,15 @@ class Ui_OpticsGUI(object):
self.menuFile.addAction(self.actionOpen_2)
self.menuFile.addAction(self.actionSave)
self.menuFile.addSeparator()
self.menuFile.addAction(self.actionExportElegant)
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.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)
@@ -735,6 +648,21 @@ class Ui_OpticsGUI(object):
self.UIPY.setText(_translate("OpticsGUI", "30"))
self.UIUpdateFromMachine.setText(_translate("OpticsGUI", "Update Model from Machine"))
self.label_13.setText(_translate("OpticsGUI", "Status"))
self.UIMatchSelected.setText(_translate("OpticsGUI", "Match Selected"))
self.label_31.setText(_translate("OpticsGUI", "Matched Optics"))
self.matchbranches.setTitle(_translate("OpticsGUI", "Branches"))
self.UIMatchInjector.setText(_translate("OpticsGUI", "Injector"))
self.UIMatchPorthos.setText(_translate("OpticsGUI", "Porthos"))
self.UIMatchAthos.setText(_translate("OpticsGUI", "Athos"))
self.UIMatchAramis.setText(_translate("OpticsGUI", "Aramis"))
self.checkBox_3.setText(_translate("OpticsGUI", "Save matched machine settings automtically"))
self.checkBox.setText(_translate("OpticsGUI", "Initialize all magnets to zero before matching"))
self.checkBox_2.setText(_translate("OpticsGUI", "Overwrite default values for matching variables "))
self.label_19.setText(_translate("OpticsGUI", "Matching Variables"))
item = self.UIMatchKnobs.horizontalHeaderItem(0)
item.setText(_translate("OpticsGUI", "Parameter"))
item = self.UIMatchKnobs.horizontalHeaderItem(1)
item.setText(_translate("OpticsGUI", "Value"))
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"))
@@ -747,49 +675,8 @@ class Ui_OpticsGUI(object):
self.Mach2ModUnd.setText(_translate("OpticsGUI", "Model <- Sandbox <- Machine"))
self.SB2ModUnd.setText(_translate("OpticsGUI", "Model <- Sandbox"))
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab_8), _translate("OpticsGUI", "Sandbox"))
self.label_31.setText(_translate("OpticsGUI", "Optics"))
self.UIMatchInjector.setText(_translate("OpticsGUI", "Injector"))
self.UIMatchAthos.setText(_translate("OpticsGUI", "Athos"))
self.UIMatchPorthos.setText(_translate("OpticsGUI", "Porthos"))
self.UIMatchAramis.setText(_translate("OpticsGUI", "Aramis"))
self.UIMatchSelected.setText(_translate("OpticsGUI", "Match Selected"))
self.label_14.setText(_translate("OpticsGUI", "Label"))
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"))
self.label_11.setText(_translate("OpticsGUI", "Sequence"))
self.label_16.setText(_translate("OpticsGUI", "Match"))
self.label_12.setText(_translate("OpticsGUI", "End"))
self.label_19.setText(_translate("OpticsGUI", "Knobs"))
item = self.UIMatchKnobs.horizontalHeaderItem(0)
item.setText(_translate("OpticsGUI", "Parameter"))
item = self.UIMatchKnobs.horizontalHeaderItem(1)
item.setText(_translate("OpticsGUI", "Value"))
item = self.UIMatchKnobs.horizontalHeaderItem(2)
item.setText(_translate("OpticsGUI", "Limit"))
self.label_20.setText(_translate("OpticsGUI", "Target"))
item = self.UIMatchTargets.horizontalHeaderItem(0)
item.setText(_translate("OpticsGUI", "Location"))
item = self.UIMatchTargets.horizontalHeaderItem(1)
item.setText(_translate("OpticsGUI", "Condition"))
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab_2), _translate("OpticsGUI", "Matching"))
self.UIConfigMatching.setText(_translate("OpticsGUI", "Generate Matching File"))
self.label_18.setText(_translate("OpticsGUI", "Label"))
self.UIMatchingConfigLabel.setText(_translate("OpticsGUI", "Custom"))
self.label_22.setText(_translate("OpticsGUI", "Compression in Switchyard (%)"))
self.UIMatchConfigSYComp.setText(_translate("OpticsGUI", "0"))
self.label_25.setText(_translate("OpticsGUI", "Focal Strength Aramis (%)"))
self.UIMatchConfigARFoc.setText(_translate("OpticsGUI", "100"))
self.label_27.setText(_translate("OpticsGUI", "Focal Strength Aramis (%)"))
self.UIMatchConfigATFoc.setText(_translate("OpticsGUI", "100"))
self.UIMatchConfigECOLAsBC.setText(_translate("OpticsGUI", "SARCL02 as BC"))
self.label_28.setText(_translate("OpticsGUI", "R56 in SARCL02 (mm)"))
self.UIMatchConfigECOLR56.setText(_translate("OpticsGUI", "0"))
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab), _translate("OpticsGUI", "Matching Config (Expert)"))
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..."))

View File

@@ -24,13 +24,13 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>2</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Track</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QWidget" name="widget_2" native="true">
<property name="sizePolicy">
@@ -439,6 +439,204 @@
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QPushButton" name="UIMatchSelected">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 127);</string>
</property>
<property name="text">
<string>Match Selected</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_31">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Matched Optics</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="UIMatchOpticsSelect">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="matchbranches">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="title">
<string>Branches</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QCheckBox" name="UIMatchInjector">
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Injector</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="UIMatchPorthos">
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Porthos</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="UIMatchAthos">
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Athos</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="UIMatchAramis">
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Aramis</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_3">
<property name="text">
<string>Save matched machine settings automtically</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>Initialize all magnets to zero before matching</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>Overwrite default values for matching variables </string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_19">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Matching Variables</string>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="UIMatchKnobs">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<column>
<property name="text">
<string>Parameter</string>
</property>
</column>
<column>
<property name="text">
<string>Value</string>
</property>
</column>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
@@ -591,396 +789,6 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Matching</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QLabel" name="label_31">
<property name="text">
<string>Optics</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="UIMatchOpticsSelect"/>
</item>
<item>
<widget class="QCheckBox" name="UIMatchInjector">
<property name="text">
<string>Injector</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="UIMatchAthos">
<property name="text">
<string>Athos</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="UIMatchPorthos">
<property name="text">
<string>Porthos</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="UIMatchAramis">
<property name="text">
<string>Aramis</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="UIMatchSelected">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 127);</string>
</property>
<property name="text">
<string>Match Selected</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>Label</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UIMatchSequenceLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_15">
<property name="text">
<string>Matching Order (Closest Reference Point)</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="UIMatchOrder">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>350</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="UIMatchRandom">
<property name="text">
<string>Random Initialization</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QLabel" name="label_21">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Matching Point</string>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_5">
<item row="1" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Start</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="UIMatchSequence">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="UIMatchLabel">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Sequence</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Match</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="UIMatchStart">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>End</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="UIMatchEnd">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_19">
<property name="text">
<string>Knobs</string>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="UIMatchKnobs">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<column>
<property name="text">
<string>Parameter</string>
</property>
</column>
<column>
<property name="text">
<string>Value</string>
</property>
</column>
<column>
<property name="text">
<string>Limit</string>
</property>
</column>
</widget>
</item>
<item>
<widget class="QLabel" name="label_20">
<property name="text">
<string>Target</string>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="UIMatchTargets">
<column>
<property name="text">
<string>Location</string>
</property>
</column>
<column>
<property name="text">
<string>Condition</string>
</property>
</column>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>242</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Matching Config (Expert)</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPushButton" name="UIConfigMatching">
<property name="text">
<string>Generate Matching File</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>Label</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UIMatchingConfigLabel">
<property name="text">
<string>Custom</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_22">
<property name="text">
<string>Compression in Switchyard (%)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UIMatchConfigSYComp">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_25">
<property name="text">
<string>Focal Strength Aramis (%)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UIMatchConfigARFoc">
<property name="text">
<string>100</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_27">
<property name="text">
<string>Focal Strength Aramis (%)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UIMatchConfigATFoc">
<property name="text">
<string>100</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="UIMatchConfigECOLAsBC">
<property name="text">
<string>SARCL02 as BC</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_28">
<property name="text">
<string>R56 in SARCL02 (mm)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UIMatchConfigECOLR56">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>380</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
@@ -1001,8 +809,6 @@
<addaction name="actionOpen_2"/>
<addaction name="actionSave"/>
<addaction name="separator"/>
<addaction name="actionExportElegant"/>
<addaction name="separator"/>
<addaction name="actionQuit"/>
<addaction name="separator"/>
</widget>
@@ -1013,16 +819,7 @@
<addaction name="actionAbout"/>
<addaction name="actionHelp"/>
</widget>
<widget class="QMenu" name="menuMatching">
<property name="title">
<string>Matching</string>
</property>
<addaction name="actionOpenMatch"/>
<addaction name="actionOpenMatchEditor"/>
<addaction name="actionOpenScriptEditor"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuMatching"/>
<addaction name="menuHelp"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>