diff --git a/OpticsTools.py b/OpticsTools.py index 7cba2dd..f6ba186 100644 --- a/OpticsTools.py +++ b/OpticsTools.py @@ -91,6 +91,7 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI): else: vars = None twiss = self.match.match(self.model.om, variables = vars, Injector = injector,Athos = athos, Aramis = aramis, Porthos = porthos) + self.updateMatchResult(self.match.matchresult) energy = self.model.calcEnergyProfile(twiss) #enfore the writing of a new lattice so that the magnet settings are in the new lattice self.model.forceLat = True @@ -100,7 +101,18 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI): self.saveSettingsdirect(fileName) - + def updateMatchResult(self,result): + self.UIReportMatchResult.clear() + for ele in result: + label = '%s (%6.2e)' % (ele['Location'],ele['Error']) + listitem = QtWidgets.QListWidgetItem(label) + color = QtGui.QColor(100, 255, 100) # white + if ele['Error'] > 1e-5: + color = QtGui.QColor(255, 255, 100) + if ele['Error'] > 1: + color = QtGui.QColor(255, 100, 100) + listitem.setBackground(color) + self.UIReportMatchResult.addItem(listitem) def updateMatchingCase(self): """ diff --git a/Scripts/SFPlus/matchAramis.madx b/Scripts/SFPlus/matchAramis.madx index 4da53af..1461837 100644 --- a/Scripts/SFPlus/matchAramis.madx +++ b/Scripts/SFPlus/matchAramis.madx @@ -10,7 +10,7 @@ S20SY02.MKDC050.cory:= SYKICK*2; s20bc01.mqua010.k1:=1.; - +Print,text='MATCH POINT: BC2 in Linac 2'; MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s20bc02$end,beta0=twisssep; VARY,NAME=s20bc01.mqua010.k1,STEP=0.0001; VARY,NAME=s20bc01.mqua030.k1,STEP=0.0001; @@ -32,6 +32,7 @@ pol = 1; s20cb01.mqua430.k1=0.5*pol; s20cb02.mqua430.k1=-0.5*pol; +Print,text='MATCH POINT: FODO - Linac 2'; match,SEQUENCE=swissfel,range=S20cb01$start/s20cb02$end; Vary,name=S20CB01.MQUA430.k1,step=0.0001; Vary,name=S20CB02.MQUA430.k1,step=0.0001; @@ -70,6 +71,7 @@ s30cb14.mqua430.k1 = s20cb02.mqua430.k1; +Print,text='MATCH POINT: Match into Linac 2'; MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s20cb04$end,beta0=twisssep; VARY,NAME=s20ma01.mqua010.k1,STEP=0.0001; VARY,NAME=s20ma01.mqua020.k1,STEP=0.0001; @@ -86,6 +88,8 @@ twiss,SEQUENCE=swissfel,range=s20sy02$start/S20cb04$end,beta0=twisssep; plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; + +Print,text='MATCH POINT: Corrected Matching into Linac 3'; MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s30cb07$end,beta0=twisssep; VARY,NAME=s30cb01.mqua430.k1,STEP=0.0001; VARY,NAME=s30cb02.mqua430.k1,STEP=0.0001; @@ -119,6 +123,7 @@ pqf:=1; S30cb15.mqua100.k1 := -0.2*pqf; S30cb15.mqua200.k1 := -pqf; +Print,text='MATCH POINT: Kicker Strength for Porthos Septum'; MATCH,SEQUENCE=Swissfel,range=S30CB15$START/s30cb15$END,BETA0 = TWISSsep; VARY, NAME=PSYKICK, STEP=0.00001; VARY, NAME=PQF, STEP=0.00001; @@ -134,6 +139,8 @@ s30cb15.mqua010.k1 = 1.1533; s30cb15.mqua020.k1 = -0.0961; + +Print,text='MATCH POINT: Match into Porthos Septum'; MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s30sy01$end,beta0=twisssep; VARY,NAME=s30cb13.mqua430.k1,STEP=0.0001; VARY,NAME=s30cb14.mqua430.k1,STEP=0.0001; @@ -171,6 +178,7 @@ if (ECOLasBC ==0.) { sarcl02.mqua130.k1=1.8; R56 = -000e-6; + Print,text='MATCH POINT: Isochronous Setup of Energy Collimator'; MATCH,RMATRIX,SEQUENCE=swissfel,range=SARCL02$START/SARCL02$END,betx=10,alfx=0,bety=10,alfy=0; VARY,NAME=sarcl02.mqua130.k1,STEP=0.0001; CONSTRAINT,SEQUENCE=swissfel,range=sarcl02.mqua210,re56=R56*0.5; @@ -180,6 +188,7 @@ if (ECOLasBC ==0.) { sarcl02.mqua210.k1=-sarcl02.mqua130.k1*0.9; sarcl02.mqua250.k1= sarcl02.mqua130.k1; + Print,text='MATCH POINT: Dispersion Symmetry Point of Energy Collimator'; MATCH,SEQUENCE=swissfel,range=SARCL02$START/SARCL02$END,betx=10,alfx=0,bety=10,alfy=0; VARY,NAME=sarcl02.mqua250.k1,STEP=0.0001; CONSTRAINT,SEQUENCE=swissfel,range=sarcl02.dbpm260$end,dpx=0; @@ -210,7 +219,7 @@ if (ECOLasBC ==0.) { sarcl02.msex255.k2:=110; sarcl02.msex305.k2:=110; - + Print,text='MATCH POINT: Sextupoles in Energy Collimator'; MATCH,chrom,SEQUENCE=sarcl02,range=#s/#e,betx=nbetx,alfx=nalfx,bety=nbety,alfy=nalfy; VARY,NAME=ecol_k2,STEP=0.0001; CONSTRAINT,SEQUENCE=Sarcl02,range=#e,ddx=0; @@ -259,6 +268,7 @@ sarcl01.mqua190.k1 := -1.475278354; use,sequence=swissfel; +Print,text='MATCH POINT: Match into Energy Collimator'; MATCH,SEQUENCE=swissfel,range=s20SY02$start/sarma02$start,beta0=twisssep; VARY,NAME=sarcl01.mqua020.k1,STEP=0.0001,lower=-1., upper =1.; VARY,NAME=sarcl01.mqua050.k1,STEP=0.0001; @@ -295,6 +305,7 @@ plot,haxis=s,vaxis=betx,bety,range=S30CB15$START/SARCL02$END,colour=100; !----------------- muAR=0.16; +Print,text='MATCH POINT: FODO - Aramis Undulator'; match,SEQUENCE=swissfel,range=sarun02$start/sarun03$end; Vary,name=sarun02.mqua080.k1,step=0.0001; Vary,name=sarun03.mqua080.k1,step=0.0001; @@ -338,6 +349,7 @@ sarma01.mqua080.k1 := -1.1356922498; sarma01.mqua120.k1 := 0.4142170392; sarma01.mqua140.k1 := -0.4428419456; +Print,text='MATCH POINT: Match into Aramis Undulator'; MATCH,SEQUENCE=swissfel,range=S30SY01$start/sarun02$start,beta0=twisspor; VARY,NAME=sarma01.mqua010.k1,STEP=0.0001; VARY,NAME=sarma01.mqua060.k1,STEP=0.0001; @@ -369,7 +381,7 @@ twiss,SEQUENCE=swissfel,range=#s/sarbd02.dscr050$end,beta0=twiss0; plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100; -exit; + diff --git a/Scripts/SFPlus/matchAthos.madx b/Scripts/SFPlus/matchAthos.madx index 00a2c72..2f4b98b 100644 --- a/Scripts/SFPlus/matchAthos.madx +++ b/Scripts/SFPlus/matchAthos.madx @@ -17,6 +17,9 @@ use,sequence=swissfel; select,flag=Error,pattern="SAT.*"; ealign,DY=0.01; + + +Print,text='MATCH POINT: Kicker Strength of Septum'; MATCH,SEQUENCE=swissfel,range=s20sy02$start/s20sy02$end,beta0=Twisssep; VARY,NAME=s20sy02.mqua070.k1,STEP=0.0001,lower=-3,upper=3; VARY,NAME=s20sy02.mqua100.k1,STEP=0.0001,lower=-3,upper=3; @@ -49,7 +52,7 @@ plot,haxis=s,vaxis=y,dy,range=#s/#e,colour=100; satsy01.mqua110.k1=-0.7; - +Print,text='MATCH POINT: Closed Dispersion in Switchyard'; MATCH,SEQUENCE=Swissfel,range=s20sy02$start/satsy02$end,beta0=twisssep; VARY,NAME=satsy01.mqua020.k1,STEP=0.0001; VARY,NAME=satsy01.mqua050.k1,STEP=0.0001; @@ -73,7 +76,7 @@ plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100; - +Print,text='MATCH POINT: Closed Dispersion in SATSY03'; MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep; VARY,NAME=satsy03.mqua120.k1,STEP=0.0001; CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mbnd200,DX=0.0; @@ -85,6 +88,7 @@ satsy02.mqua230.k1=0; satsy02.mqua240.k1=0; satsy02.mqua260.k1=0; +Print,text='MATCH POINT: Switchyard Drift'; MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep; VARY,NAME=satsy02.mqua210.k1,STEP=0.0001; VARY,NAME=satsy02.mqua230.k1,STEP=0.0001; @@ -98,6 +102,7 @@ LMDIF,CALLS=1000,TOLERANCE=1.e-21; ENDMATCH; +Print,text='MATCH POINT: Match into SATSY03'; MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep; VARY,NAME=satsy02.mqua300.k1,STEP=0.0001; VARY,NAME=satsy02.mqua310.k1,STEP=0.0001; @@ -119,6 +124,7 @@ plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100; +Print,text='MATCH POINT: BC2 in Switchyard'; MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satbc01$end,beta0=twisssep; VARY,NAME=satsy03.mqua220.k1,STEP=0.0001; VARY,NAME=satsy03.mqua310.k1,STEP=0.0001; @@ -137,6 +143,7 @@ satcl01.mqua180.k1 := CL2.k1; satcl01.mqua190.k1 := CL1.k1; +Print,text='MATCH POINT: Closed Dispersion in SATCL01'; MATCH,SEQUENCE=SwissFEL,range=satcl01$start/satcl01$end,betx=3,alfx=0,bety=50,alfy=5; VARY,NAME=cl1.k1,STEP=0.0001; VARY,NAME=cl2.k1,STEP=0.0001; @@ -148,7 +155,7 @@ LMDIF,CALLS=1000,TOLERANCE=1.e-21; ENDMATCH; - +Print,text='MATCH POINT: Match into SATCL01'; MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satcl01$end,beta0=twisssep; VARY,NAME=satbc01.mqua410.k1,STEP=0.0001; VARY,NAME=satbc01.mqua430.k1,STEP=0.0001; @@ -162,6 +169,10 @@ CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, bety < 5; LMDIF,CALLS=1000,TOLERANCE=1.e-21; ENDMATCH; + + +Print,text='MATCH POINT: Minimizing Beam Size in HERO Modulator'; + MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satdi01$end,beta0=twisssep; VARY,NAME=satdi01.mqua025.k1,STEP=0.0001; CONSTRAINT,SEQUENCE=SwissFEL,range= satdi01.dscr065$start, betx<19; @@ -191,6 +202,7 @@ L = 20.; alpha=0.7; beta=L*alpha; +Print,text='MATCH POINT: Match through Athos C-Band Linac'; MATCH, SEQUENCE=SwissFEL,range=s20sy02$start/satcb01$end,beta0=twisssep; VARY,NAME=satdi01.mqua080.k1,STEP=0.0001,lower=-1.8,upper=1.8; @@ -220,6 +232,8 @@ pol=-1; satun06.mqua080.k1 := -1.699673315*pol; satun07.mqua080.k1 := 1.746074065*pol; muAT=0.15; + +Print,text='MATCH POINT: FODO - Athos Undulator'; match,SEQUENCE=swissfel,range=satun06$start/satun07$end; Vary,name=satun06.mqua080.k1,step=0.0001; Vary,name=satun07.mqua080.k1,step=0.0001; @@ -271,6 +285,7 @@ eealfy=1.5; twissee: beta0,betx=eebetx,bety=eebety,alfx=eealfx,alfy=eealfy; +Print,text='MATCH POINT: Match into Athos Undulator'; MATCH, SEQUENCE=swissfel,range=satma01.mqua250$end/satun07$end,beta0=twissee; VARY,NAME=satma01.mqua610.k1,STEP=0.0001,lower=-2.0,upper=2.0; VARY,NAME=satma01.mqua630.k1,STEP=0.0001,lower=-2.0,upper=2.0; @@ -298,7 +313,7 @@ satcb03.mqua230.k1=scl*0.2; satcb03.mqua430.k1=-scl*0.2; - +Print,text='MATCH POINT: Match through EEHG Section'; MATCH, SEQUENCE=swissfel,range=s20sy02$start/satma01$end,beta0=twisssep; VARY,NAME=satcb03.mqua430.k1,STEP=0.0001,lower=-3.8,upper=3.8; VARY,NAME=satma01.mqua120.k1,STEP=0.0001,lower=-3.8,upper=3.8; @@ -329,3 +344,4 @@ plot,haxis=s,vaxis=betx,bety,range=satdi01$start/#e,colour=100; twiss,SEQUENCE=swissfel,range=#s/satun26$end,beta0=twiss0; plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100; + diff --git a/Scripts/SFPlus/matchInjector.madx b/Scripts/SFPlus/matchInjector.madx index 7028c97..7281d25 100644 --- a/Scripts/SFPlus/matchInjector.madx +++ b/Scripts/SFPlus/matchInjector.madx @@ -8,7 +8,7 @@ alpha = 1; beta = alpha*L; - +Print,text='MATCH POINT: Laser Heater'; MATCH,SEQUENCE=SwissFEL,range=#s/sinbc02$start,beta0 = Twiss0; VARY,NAME=sinlh01.MQUA020.k1,STEP=0.0001; VARY,NAME=sinlh01.MQUA040.k1,STEP=0.0001; @@ -35,6 +35,7 @@ ENDMATCH; twiss,SEQUENCE=swissfel,range=#s/sinbc01$end,beta0 = Twiss0; plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; +Print,text='MATCH POINT: BC 1'; MATCH,SEQUENCE=SwissFEL,range=#s/sinma01$start,beta0 = Twiss0; VARY,NAME=sinbc01.MQUA020.k1,STEP=0.0001; VARY,NAME=sinbc01.MQUA050.k1,STEP=0.0001; @@ -54,6 +55,7 @@ plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; sinma01.mqua020.k1=-0.1; +Print,text='MATCH POINT: Injector-TDS'; MATCH,SEQUENCE=SwissFEL,range=#s/sindi02$end,beta0 = Twiss0; VARY,NAME=sinma01.MQUA020.k1,STEP=0.0001; VARY,NAME=sinma01.MQUA030.k1,STEP=0.0001; @@ -83,7 +85,7 @@ s10cb02.mqua230.k1=0.2; s10cb02.mqua430.k1=-0.2; muLin1=0.2; - +Print,text='MATCH POINT: FODO - Linac 1'; match,SEQUENCE=swissfel,range=S10cb02$start/s10cb02$end; Vary,name=S10CB02.MQUA230.k1,step=0.0001; Vary,name=S10CB02.MQUA430.k1,step=0.0001; @@ -103,7 +105,7 @@ nbety=table(twiss,s10cb02$end,bety); nalfy=table(twiss,s10cb02$end,alfy); plot,haxis=s,vaxis=betx,bety,colour=100; - +Print,text='MATCH POINT: Match into Linac 1'; MATCH,SEQUENCE=SwissFEL,range=#s/s10cb02$end,beta0 = Twiss0; VARY,NAME=sindi02.mqua020.k1,STEP=0.0001,lower=-5.5,upper=5.5; VARY,NAME=sindi02.mqua030.k1,STEP=0.0001,lower=-5.5,upper=5.5; @@ -151,7 +153,7 @@ twiss,SEQUENCE=swissfel,range=#s/s10cb10$end,beta0 = Twiss0; plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; - +Print,text='MATCH POINT: Match into Athos Septum'; MATCH,SEQUENCE=SwissFEL,range=#s/s20sy02$start,beta0 = Twiss0; VARY,NAME=s20sy01.mqua010.k1,STEP=0.0001,lower=-5.5,upper=5.5; VARY,NAME=s20sy01.mqua060.k1,STEP=0.0001,lower=-5.5,upper=5.5; diff --git a/issues.txt b/issues.txt index c32a84b..23bc989 100644 --- a/issues.txt +++ b/issues.txt @@ -9,10 +9,10 @@ 3) Allo filter to update quadrupoles to be part of the match scripts and not globally written in the code -#) Give feedback on the matching results to GUI + #) allow for some progress indication of matching -#) Check for maximum gradient for matched values + 3) Match for sextupoles! -#) check why program crashes when matching all 3 beamlines + diff --git a/matchmaker.py b/matchmaker.py index 6b42526..e9a385f 100644 --- a/matchmaker.py +++ b/matchmaker.py @@ -2,10 +2,10 @@ import os import re from onlinemodel.madx import CMadX import io -import contextlib -from io import StringIO -import sys +import copy + + class MatchMaker: def __init__(self,signal = None): @@ -14,6 +14,7 @@ class MatchMaker: self.variables={} self.scriptdir = None self.signal=signal + self.matchresult=[] def initScripts(self,target): self.scriptdir = self.matchlist[target] @@ -56,6 +57,9 @@ class MatchMaker: def match(self, om, variables = None, Injector=True, Athos = True, Aramis = False, Porthos = False): + self.matchresult.clear() + cwd = os.getcwd() + os.chdir(self.scriptdir) if Athos: target = 'SATBD02' else: @@ -67,58 +71,68 @@ class MatchMaker: om.setBranch(target, 'SINLH01') madx.updateLattice(om, target) # write lattice madx.commonHeader('SwissFEL', '#s/#e', None) # sets header - madx.madx.call(self.scriptdir + '/initTwiss.madx') + madx.madx.call('initTwiss.madx') if not variables is None: madx.definePresets(variables) if Injector: print('Matching Injector ...') - madx.madx.call(self.scriptdir+'/matchInjector.madx', chdir=True) + madx.madx.call('matchInjector.madx') self.updateOnlineModel(om,madx.madx, 's[i1].*k[12]|s20cb.*k1|s20sy01.*k1') self.parseMatchOutput(f.getvalue().split('\n'),'Injector') if Athos: f.truncate(0) print('Matching Athos ...') - if self.signal: - self.signal.emit('Matching Athos ...') - madx.madx.call(self.scriptdir+'/matchAthos.madx', chdir=True) + madx.madx.call('matchAthos.madx') self.updateOnlineModel(om, madx.madx, 'sat.*mqua.*k1|sat.*msex.*k2|s20sy02.*m[kq]') self.parseMatchOutput(f.getvalue().split('\n'), 'Athos') if Aramis: f.truncate(0) print('Matching Aramis ...') - if target=='SATBD01': + if target=='SATBD02': target = 'SARUN20' om.setBranch(target, 'SINLH01') madx.updateLattice(om, target) # write lattice madx.commonHeader('SwissFEL', '#s/#e', None) # sets header - madx.madx.call(self.scriptdir + '/initTwiss.madx') - madx.madx.call(self.scriptdir + '/matchAramis.madx', chdir=True) + madx.madx.call('initTwiss.madx') + madx.madx.call('matchAramis.madx') self.updateOnlineModel(om, madx.madx, 's[3a][0r].*k[12]|s20sy03.*k1') self.parseMatchOutput(f.getvalue().split('\n'), 'Aramis') - if self.signal: - self.signal.emit('Matching done') + os.chdir(cwd) + return madx.madx.table.twiss def parseMatchOutput(self, result,prefix,full=False): + loc = None + locidx = 1 isMatch = False penalty = 1 report=[] + for line in result: if full: print(line) + if 'MATCH POINT' in line: + isMatch = False + print("--------------------------------------") + print(line) + loc = line.split(':')[1].strip() continue - if 'MATCH SUMMARY' in line: + if 'MATCH SUMMARY' in line.upper(): isMatch = True continue if 'VARIABLE "TAR"' in line: isMatch = False - print("--------------------------------------") print('MATCHING RESULTS: %s (error: %e)' % (prefix,penalty)) + if loc is None: + loc = 'Matchpoint %d' % locidx + locidx +=1 + self.matchresult.append({'Location':loc,'Error':penalty}) if penalty > 1e-5: for rep in report: print(rep) penalty = 1 + loc = None report.clear() continue if isMatch and len(line) > 4: @@ -126,7 +140,7 @@ class MatchMaker: penalty = float(line.split('=')[1].strip()) else: report.append(line) - + return def updateOnlineModel(self,om,madx,filter): reg = re.compile(filter) diff --git a/model.py b/model.py index 807f95a..d400bf6 100644 --- a/model.py +++ b/model.py @@ -2,9 +2,10 @@ import json import copy import numpy as np +from PyQt5 import QtWidgets,QtGui from onlinemodel.core import Facility from onlinemodel.madx import CMadX -#from sipbuild.generator.outputs.formatters import variable + converttwiss= {'betx':'betx','bety':'bety','alfx':'alfx','alfy':'alfy', 'etax':'dx','etay':'dy','etapx':'dpx','etapy':'dpy','mux':'mux','muy':'muy', @@ -309,6 +310,7 @@ class Model: ########################################3 def checkMagnetLimit(self): # using magnet calibration + self.parent.UIReportMagnetResult.clear() self.updateEnergy(140.) quad={} quad['QFA'] = [0.15, 0.173, 150.0, 91.1, 0.0, 0.74521, -0.00813, -0.03542, @@ -347,7 +349,16 @@ class Model: if bg in k1brho.keys(): k1max=k1brho[bg]/brho rat=np.abs(ele.k1/k1max)*100. - print('%s: %5.1f (percent)' % (ele.Name.replace('.','-'),rat)) + label = '%s: %5.1f %%' % (ele.Name.replace('.','-'),rat) + print(label) + listitem = QtWidgets.QListWidgetItem(label) + color = QtGui.QColor(255,255,255) # white + if rat>95: + color = QtGui.QColor(255,255,0) + if rat>100: + color = QtGui.QColor(255,0,0) + listitem.setBackground(color) + self.parent.UIReportMagnetResult.addItem(listitem) else: print('%s: Unsupported type %s' % (ele.Name.replace('.','-'),bg)) diff --git a/ui/OpticsToolsGui.py b/ui/OpticsToolsGui.py index f97199f..73a9af2 100644 --- a/ui/OpticsToolsGui.py +++ b/ui/OpticsToolsGui.py @@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_OpticsGUI(object): def setupUi(self, OpticsGUI): OpticsGUI.setObjectName("OpticsGUI") - OpticsGUI.resize(813, 775) + OpticsGUI.resize(938, 791) self.centralwidget = QtWidgets.QWidget(OpticsGUI) self.centralwidget.setObjectName("centralwidget") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.centralwidget) @@ -386,6 +386,38 @@ class Ui_OpticsGUI(object): spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_3.addItem(spacerItem1) self.horizontalLayout_4.addWidget(self.widget) + self.groupBox = QtWidgets.QGroupBox(self.tab_3) + font = QtGui.QFont() + font.setPointSize(9) + font.setBold(True) + font.setWeight(75) + self.groupBox.setFont(font) + self.groupBox.setObjectName("groupBox") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.label_11 = QtWidgets.QLabel(self.groupBox) + self.label_11.setObjectName("label_11") + self.verticalLayout_2.addWidget(self.label_11) + self.UIReportMatchResult = QtWidgets.QListWidget(self.groupBox) + font = QtGui.QFont() + font.setPointSize(9) + font.setBold(False) + font.setWeight(50) + self.UIReportMatchResult.setFont(font) + self.UIReportMatchResult.setObjectName("UIReportMatchResult") + self.verticalLayout_2.addWidget(self.UIReportMatchResult) + self.label_12 = QtWidgets.QLabel(self.groupBox) + self.label_12.setObjectName("label_12") + self.verticalLayout_2.addWidget(self.label_12) + self.UIReportMagnetResult = QtWidgets.QListWidget(self.groupBox) + font = QtGui.QFont() + font.setPointSize(9) + font.setBold(False) + font.setWeight(50) + self.UIReportMagnetResult.setFont(font) + self.UIReportMagnetResult.setObjectName("UIReportMagnetResult") + self.verticalLayout_2.addWidget(self.UIReportMagnetResult) + self.horizontalLayout_4.addWidget(self.groupBox) spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem2) self.TabMaster.addTab(self.tab_3, "") @@ -477,7 +509,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, 938, 22)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") @@ -667,6 +699,9 @@ class Ui_OpticsGUI(object): item = self.UIMatchKnobs.horizontalHeaderItem(1) item.setText(_translate("OpticsGUI", "Value")) self.UIReportMagnetStrength.setText(_translate("OpticsGUI", "Report Matched Quadrupole Strength")) + self.groupBox.setTitle(_translate("OpticsGUI", "Matching Results")) + self.label_11.setText(_translate("OpticsGUI", "Matching")) + self.label_12.setText(_translate("OpticsGUI", "Magnet Strength")) 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")) diff --git a/ui/OpticsToolsGui.ui b/ui/OpticsToolsGui.ui index 099aac8..8372bee 100644 --- a/ui/OpticsToolsGui.ui +++ b/ui/OpticsToolsGui.ui @@ -6,8 +6,8 @@ 0 0 - 813 - 775 + 938 + 791 @@ -644,6 +644,58 @@ + + + + + 9 + 75 + true + + + + Matching Results + + + + + + Matching + + + + + + + + 9 + 50 + false + + + + + + + + Magnet Strength + + + + + + + + 9 + 50 + false + + + + + + + @@ -805,7 +857,7 @@ 0 0 - 813 + 938 22