Support for different phases. Settings have to match the loaded phase

This commit is contained in:
2026-01-21 14:41:19 +01:00
parent d168cd2a69
commit 1bbf5c0ba5
23 changed files with 6599 additions and 236 deletions

View File

@@ -37,14 +37,11 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
self.model = Model(phase=phase,parent=self)
# initialize modeling
self.match = MatchMaker(signal=self.sigStatus)
self.match = MatchMaker(signal=self.sigStatus,phase=phase)
self.UIMatchOpticsSelect.clear()
for key in self.match.matchlist.keys():
self.UIMatchOpticsSelect.addItem(key)
if phase == 0:
self.UIMatchOpticsSelect.setCurrentIndex(0)
else:
self.UIMatchOpticsSelect.setCurrentIndex(1)
self.UIMatchOpticsSelect.setCurrentIndex(0)
self.updateMatchingCase()
@@ -114,6 +111,7 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
listitem.setBackground(color)
self.UIReportMatchResult.addItem(listitem)
def updateMatchingCase(self):
"""
Update the check box for selecting the different matching steps and initial settings if reference file is present
@@ -125,6 +123,8 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
self.updateMatchingCaseScript(self.UIMatchAthos, self.match.scriptAthos)
self.updateMatchingCaseScript(self.UIMatchAramis, self.match.scriptAramis)
self.updateMatchingCaseScript(self.UIMatchPorthos, self.match.scriptPorthos)
if not self.match.settings is None:
self.loadSettingsdirect(self.match.settings)
def updateMatchingCaseScript(self,widget,state):
"""
@@ -189,6 +189,7 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
self.saveSettingdirect(fileName)
def loadSettings(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
@@ -198,12 +199,22 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
if not fileName:
return
self.loadSettingsdirect(fileName)
self.match.referencePoints.clear()
self.match.referencePoints['swissfel$start'] = {'Twiss': self.model.startTwiss,'Label': 'Start'}
self.reference.initReferencePoints(self.match)
def loadSettingsdirect(self,fileName):
with open(fileName, 'r', encoding='utf-8') as f:
settings = json.load(f)
self.model.loadSettings(settings)
self.status('Reference loaded')
status=self.model.loadSettings(settings)
if status:
print('Reference loaded from file %s' % fileName)
self.status('Reference file loaded')
else:
print('Reference cannot be loaded from file %s' % fileName)
print('Missing or mismatched phase of settings file with model')
self.status('Phase Mismatch in Setting')
def saveSettingsdirect(self,fileName):
settings = self.model.getSettings()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,17 @@
option,-echo;
! starting condition
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; ! label: Laser heater location:sinlh02.mqua410$start
TwissM2: beta0, betx = 11.1557, alfx = -1.17, bety = 50, alfy = 0.; ! label: After BC1 location:sindi02.mqua020$start
TwissM3: beta0, betx = 4.88, alfx = 0.5546, bety = 16.11, alfy = -1.81; ! label: After Linac 1 location:s10bc01.mqua020$start
TwissM4: beta0, betx = 6.14, alfx = -0.83, bety = 22.86, alfy = -1.18; ! label: After BC 2 location:s10ma01.mqua020$start
Twisssep: beta0,betx = 48.26, alfx = 7.322, bety = 14.293, alfy = -3.513; ! label: Septum location:s20sy02$start
TwissAT1: beta0, betx=35.76, alfx = -1.166, bety = 24.087, alfy = 0.648; ! label: Athos diagnostics location: satdi01.mqua250$start
twissee: beta0, betx=7,bety=30,alfx=0.5,alfy=1.5; ! label: EEHG location: satma01.mqua250$end
twissAT2: beta0, betx=50,bety=50,alfx=0.0,alfy=0; ! label: Athos XTCAV location: satbd01.mqua010$start
twissL3: beta0, betx = 8.83, alfx = 0.548, bety = 30.44, alfy = -1.866; ! label: Linac 3 location:s30cb10.mqua430$start
twissARECOL:beta0, betx = 2.304, alfx = -1.4045, bety = 25.929, alfy = -6.363; ! label: Aramis ECOL location:sarma01.mqua010$start
! variables
leakdisp = 0; ! Description: Leaked dispersion in SATSY01 to control R56 of switchyard
ECOLasBC = 0; ! Description: Flag to configure Aramis Energy collimator as a bunch compressor

View File

@@ -0,0 +1,316 @@
!-----------------------------------
! switch yard
! matching condition at the septum, the new design by Natalia on 27th July 2011
! find the correct kicker strength to have the right dispersion and offset.
S20SY02.MKDC010.cory := 0;
S20SY02.MKAC020.cory := 0;
S20SY02.MKDC030.cory := 0;
S20SY02.MKAC040.cory := 0;
S20SY02.MKDC050.cory := 0;
!------------------------------
! match periodic lattice of linac 3
s30cb01.mqua430.k1 := 0.8168941546;
s30cb02.mqua430.k1 := -0.8168914699;
muLin3=0.1883;
match,SEQUENCE=swissfel,range=s30cb01$start/s30cb03$start;
Vary,name=S30CB01.MQUA430.k1,step=0.0001;
Vary,name=S30CB02.MQUA430.k1,step=0.0001;
constraint,sequence=swissfel,range=s30cb02$end,mux=muLin3;
constraint,sequence=swissfel,range=s30cb02$end,muy=muLin3;
lmdif,calls=100,tolerance=1e-21;
endmatch;
S30CB03.MQUA430.k1=S30CB01.MQUA430.k1;
S30CB04.MQUA430.k1=S30CB02.MQUA430.k1;
S30CB05.MQUA430.k1=S30CB01.MQUA430.k1;
S30CB06.MQUA430.k1=S30CB02.MQUA430.k1;
S30CB07.MQUA430.k1=S30CB01.MQUA430.k1;
S30CB08.MQUA430.k1=S30CB02.MQUA430.k1;
S30CB09.MQUA430.k1=S30CB01.MQUA430.k1;
S30CB10.MQUA430.k1=S30CB02.MQUA430.k1;
S30CB11.MQUA430.k1=S30CB01.MQUA430.k1;
S30CB12.MQUA430.k1=S30CB02.MQUA430.k1;
S30CB13.MQUA430.k1=S30CB01.MQUA430.k1;
S30CB14.MQUA430.k1=S30CB02.MQUA430.k1;
S30CB15.MQUA430.k1=S30CB01.MQUA430.k1;
twiss,SEQUENCE=swissfel,range=s30cb01$start/s30cb02$end;
nbetx=table(twiss,s30cb02$end,betx);
nalfx=table(twiss,s30cb02$end,alfx);
nbety=table(twiss,s30cb02$end,bety);
nalfy=table(twiss,s30cb02$end,alfy);
use,sequence=swissfel;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/s30cb01$end,beta0=twisssep;
VARY,NAME=s20sy03.mqua020.k1,STEP=0.0001,lower=-2.2,upper=2.2;
VARY,NAME=s20sy03.mqua030.k1,STEP=0.0001,lower=-2.2,upper=2.2;
VARY,NAME=s20sy03.mqua050.k1,STEP=0.0001,lower=-2.2,upper=2.2;
VARY,NAME=s20sy03.mqua060.k1,STEP=0.0001,lower=-2.2,upper=2.2;
VARY,NAME=s20sy03.mqua100.k1,STEP=0.0001,lower=-2.2,upper=2.2;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy03$end,betx=nbetx;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy03$end,alfx=nalfx;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy03$end,bety=nbety;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy03$end,alfy=nalfy;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy03.mqua060$start,betx<30; ! for the new design
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
use,sequence=swissfel;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/s30cb12$end,beta0=twisssep;
VARY,NAME=s30cb06.mqua430.k1,STEP=0.0001;
VARY,NAME=s30cb07.mqua430.k1,STEP=0.0001;
VARY,NAME=s30cb08.mqua430.k1,STEP=0.0001;
VARY,NAME=s30cb09.mqua430.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=swissfel,range=s30cb10.mqua430$start,betx=twissL3->BETX;
CONSTRAINT,SEQUENCE=swissfel,range=s30cb10.mqua430$start,alfx=twissL3->ALFX;
CONSTRAINT,SEQUENCE=swissfel,range=s30cb10.mqua430$start,bety=twissL3->BETY;
CONSTRAINT,SEQUENCE=swissfel,range=s30cb10.mqua430$start,alfy=twissL3->ALFY;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20SY02$start/sarcl01$start,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
! energy collimator
if (ECOLasBC ==0.) {
sarcl02.mqua130.k1=1.8;
R56 = -000e-6;
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;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
sarcl02.mqua210.k1=-sarcl02.mqua130.k1*0.9;
sarcl02.mqua250.k1= sarcl02.mqua130.k1;
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;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
sarcl02.mqua310.k1=sarcl02.mqua250.k1;
sarcl02.mqua350.k1=sarcl02.mqua210.k1;
sarcl02.mqua460.k1=sarcl02.mqua130.k1;
dL=0.625+0.25;
bx0=25;
bx=bx0+dL*dL/bx0;
ax=-dL/bx0;
by0=0.8;
by=by0+dL*dL/by0;
ay=-dL/by0;
twiss,sequence=swissfel,range=sarcl02.mqsk300/sarcl02$end,betx=bx,alfx=ax,bety=by,alfy=ay;
plot,haxis=s,vaxis=betx,bety,colour=100;
nbetx= table(twiss,sarcl02$end,betx);
nalfx=-table(twiss,sarcl02$end,alfx);
nbety= table(twiss,sarcl02$end,bety);
nalfy=-table(twiss,sarcl02$end,alfy);
sarcl02.msex255.k2:=110;
sarcl02.msex305.k2:=110;
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;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
sarcl02.msex255.k2=ecol_k2;
sarcl02.msex305.k2=ecol_k2;
twiss,chrom,rmatrix,range=SARCL02$START/SARCL02$END,betx=nbetx,alfx=nalfx,bety=nbety,alfy=nalfy;
plot,haxis=s,vaxis=betx,colour=100;
plot,haxis=s,vaxis=bety,colour=100;
plot,haxis=s,vaxis=dx,colour=100;
plot,haxis=s,vaxis=ddx,colour=100;
plot,haxis=s,vaxis=re56,colour=100;
} else {
sarcl02.mqua130.k1=0;
sarcl02.mqua210.k1=0;
sarcl02.mqua250.k1=0;
sarcl02.mqua310.k1=0;
sarcl02.mqua350.k1=0;
sarcl02.mqua460.k1=0;
sarcl02.msex255.k2=0;
sarcl02.msex305.k2=0;
}
!---------------------------------
! match into energy collimator
! reference point is sarma01-mqua010
sarcl01.mqua020.k1 := 0.4550820417;
sarcl01.mqua050.k1 := -0.02350776516;
sarcl01.mqua080.k1 := -0.3705426893;
sarcl01.mqua100.k1 := 0.3937186328;
sarcl01.mqua140.k1 := 1.214406656;
sarcl01.mqua190.k1 := -1.475278354;
use,sequence=swissfel;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/sarma02$start,beta0=twisssep;
VARY,NAME=sarcl01.mqua020.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua050.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua080.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua100.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua140.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua190.k1,STEP=0.0001;
if (ECOLasBC ==0.){
CONSTRAINT,SEQUENCE=swissfel,range=sarma01.mqua010$start,betx=twissARECOL->BETX;
CONSTRAINT,SEQUENCE=swissfel,range=sarma01.mqua010$start,alfx=twissARECOL->ALFX;
CONSTRAINT,SEQUENCE=swissfel,range=sarma01.mqua010$start,bety=twissARECOL->BETY;
CONSTRAINT,SEQUENCE=swissfel,range=sarma01.mqua010$start,alfy=twissARECOL->ALFY;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua050,bety<30;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua190,betx<30;
} else {
CONSTRAINT,SEQUENCE=swissfel,range=sarcl02.dscr280$start,betx = 10;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl02.dscr280$start,alfx=0.14;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl02.dscr280$start,bety = 10;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl02.dscr280$start,alfy=0.14;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua050,bety<70;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua190,betx<70;
}
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
twiss,sequence=swissfel,range=s20SY02$start/sarcl01$start,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=S30CB15$START/SARCL02$END,colour=100;
!---------------------
! match periodic lattice of Aramis
muAR=0.15;
sarun03.mqua080.k1 := -1.699673315;
sarun04.mqua080.k1 := 1.746074065;
match,SEQUENCE=swissfel,range=sarun03$start/sarun04$end;
Vary,name=sarun03.mqua080.k1,step=0.0001;
Vary,name=sarun04.mqua080.k1,step=0.0001;
constraint,sequence=swissfel,range=sarun04$end,mux=muAR;
constraint,sequence=swissfel,range=sarun04$end,muy=muAR;
lmdif,calls=100,tolerance=1e-21;
endmatch;
twiss,SEQUENCE=swissfel,range=sarun03$start/sarun04$end;
nbetx=table(twiss,sarun04$end,betx);
nalfx=table(twiss,sarun04$end,alfx);
nbety=table(twiss,sarun04$end,bety);
nalfy=table(twiss,sarun04$end,alfy);
sarma02.mqua050.k1=sarun03.mqua080.k1*0.5;
sarma02.mqua120.k1=sarun04.mqua080.k1;
sarun01.mqua080.k1=sarun03.mqua080.k1;
sarun02.mqua080.k1=sarun04.mqua080.k1;
!---------------------------
! matching into the undulator line
sarma01.mqua010.k1 := -1.1706132612849132;
sarma01.mqua060.k1 := 1.5075569628969636;
sarma01.mqua080.k1 :=-0.6940972890297992;
sarma01.mqua120.k1 := -0.18956644741333395;
sarma01.mqua140.k1 := 0.5634249743213624;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/sarun06$start,beta0=twisssep;
VARY,NAME=sarma01.mqua010.k1,STEP=0.0001;
VARY,NAME=sarma01.mqua060.k1,STEP=0.0001;
VARY,NAME=sarma01.mqua080.k1,STEP=0.0001;
VARY,NAME=sarma01.mqua120.k1,STEP=0.0001;
VARY,NAME=sarma01.mqua140.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=swissfel,range=sarun03$start,betx=nbetx;
CONSTRAINT,SEQUENCE=swissfel,range=sarun03$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=swissfel,range=sarun03$start,bety=nbety;
CONSTRAINT,SEQUENCE=swissfel,range=sarun03$start,alfy=nalfy;
CONSTRAINT,SEQUENCE=swissfel,range=sarma01.mqua060,betx<40;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
sarun05.mqua080.k1=sarun03.mqua080.k1;
sarun06.mqua080.k1=sarun04.mqua080.k1;
sarun07.mqua080.k1=sarun03.mqua080.k1;
sarun08.mqua080.k1=sarun04.mqua080.k1;
sarun09.mqua080.k1=sarun03.mqua080.k1;
sarun10.mqua080.k1=sarun04.mqua080.k1;
sarun11.mqua080.k1=sarun03.mqua080.k1;
sarun12.mqua080.k1=sarun04.mqua080.k1;
sarun13.mqua080.k1=sarun03.mqua080.k1;
sarun14.mqua080.k1=sarun04.mqua080.k1;
sarun15.mqua080.k1=sarun03.mqua080.k1;
sarun16.mqua080.k1=sarun04.mqua080.k1;
sarun17.mqua080.k1=sarun03.mqua080.k1;
sarun18.mqua080.k1=sarun04.mqua080.k1;
sarun19.mqua080.k1=sarun03.mqua080.k1;
sarun20.mqua080.k1=sarun04.mqua080.k1;
sarbd01.mqua020.k1=0;
match,sequence=swissfel,range=s20SY02$start/satbd02$end,beta0=twisssep;
vary,name=sarun19.mqua080.k1,step=0.0001,lower=-3,upper=3;
vary,name=sarun20.mqua080.k1,step=0.0001,lower=-3,upper=3;
vary,name=sarbd02.mqua030.k1,step=0.0001;
constraint,sequence=swissfel,range=satbd02$end,betx<200;
constraint,sequence=swissfel,range=satbd02$end,bety<150;
constraint,sequence=swissfel,range=satbd02$end,dx<100;
constraint,sequence=swissfel,range=satbd02$end,dy<0.5;
lmdif,calls=300,tolerance=1e-21;
endmatch;
twiss,RMATRIX,SEQUENCE=swissfel,range=#s/sarbd02$end,beta0=twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;

View File

@@ -0,0 +1,367 @@
!-----------------------------------
! switch yard
! matching condition at the septum, the new design by Natalia on 27th July 2011
! find the correct kicker strength to have the right dispersion and offset.
y_sep=0.01;
py_sep=0.0;
dy_sep=-y_sep;
dpy_sep=-py_sep;
Syskick:=0.0002538/2.;
S20SY02.MKDC010.cory := SYKICK*2;
S20SY02.MKAC020.cory := SYKICK*3;
S20SY02.MKDC030.cory := SYKICK*2;
S20SY02.MKAC040.cory := SYKICK*3;
S20SY02.MKDC050.cory := SYKICK*2;
S20SY02.MQUA070.k1= -0.8522139943144122;
S20SY02.MQUA100.k1= -0.5378671955035621;
S20SY02.MQUA140.k1= 1.042013352497239;
S20SY02.MQUA180.k1= -1.2175949038409828;
use,sequence=swissfel;
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;
VARY,NAME=s20sy02.mqua140.k1,STEP=0.0001,lower=-3,upper=3;
VARY,NAME=s20sy02.mqua180.k1,STEP=0.0001,lower=-3,upper=3;
VARY,NAME=SYKICK,STEP=0.0001;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,y=y_sep;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,py=py_sep;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dy<-0.0063;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dpy<1;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mqua180, BETY < 60;
LMDIF,CALLS=8000,TOLERANCE=1.e-21;
ENDMATCH;
use,sequence=swissfel;
select,flag=Error,pattern="SAT.*";
ealign,DY=0.01;
satsy01.mqua020.k1 := 0.48577;
satsy01.mqua040.k1 := 1.0122;
satsy01.mqua070.k1 := -0.055;
satsy01.mqua090.k1 := -0.826;
kmin=-2.1;
kmax=2.1;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/satcl01$end,beta0=twisssep;
VARY, NAME=satsy01.mqua020.k1, STEP=0.00001,LOWER=0,UPPER=4;
VARY, NAME=satsy01.mqua040.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy01.mqua070.k1, STEP=0.00001,LOWER=Kmin,UPPER=KMAX;
VARY, NAME=satsy01.mqua090.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, DX < 7.05e2;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, DPX = 10.e-3;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, ALFX=0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, ALFY=0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, DPY =-1.16e-4;
!CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, DPY =0;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
satsy01.mqua210.k1=satsy01.mqua090.k1;
satsy01.mqua230.k1=satsy01.mqua070.k1;
satsy01.mqua260.k1=satsy01.mqua040.k1;
satsy01.mqua280.k1=satsy01.mqua020.k1;
satsy01.mqua300.k1 := 5.27400e-01;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/satcl01$end,beta0=twisssep;
VARY, NAME=satsy01.mqua230.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy01.mqua210.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy01.mqua300.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy01.mqua280.k1, STEP=0.00001,LOWER=-4,UPPER=4;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, DX = 0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, DPX = 0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, DY < -0.008;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, X<10;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
satsy01.mqua280.k1 = satsy01.mqua280.k1*(1+leakdisp);
!------------------------------------------
! close vertical dispersion
satcl01.mqsk125.k1 = 0;
satsy02.mqua010.k1 := -1.8649770138303619;
satsy02.mqua110.k1 := 2.09998;
satsy02.mqua120.k1 := -1.3492181718919152;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/satcl01$end,beta0=twisssep;
VARY, NAME=satsy02.mqua010.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy02.mqua110.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy02.mqua120.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy02$end, DY = 0.0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy02$end, DPY = 0.0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy02$end, X <0;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
satcl011:=-1.3;
satcl012:= 1.1;
satcl01.mqua120.k1:=satcl011;
satcl01.mqua130.k1:=satcl012;
satcl01.mqua180.k1:=satcl012;
satcl01.mqua190.k1:=satcl011;
MATCH, SEQUENCE=swissfel, range=SATCL01$START/SATCL01$END,betx=5,alfx=0,bety=30,alfy=0;
VARY, NAME=satcl011, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satcl012, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satcl01$end, DX = 0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satcl01$end, DPX = 0;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
MATCH,SEQUENCE=swissfel,range=#s/#e,range=s20SY02$start/satcl01$end,beta0=twisssep;
VARY, NAME=satsy02.mqua230.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua010.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua040.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua070.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua100.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua130.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissFEL, RANGE=satcl01.msex160,betx=20;
CONSTRAINT, SEQUENCE=swissFEL, RANGE=satcl01.msex160,alfx=-0.01;
CONSTRAINT, SEQUENCE=swissFEL, RANGE=satcl01.msex160,bety=10; ! was 13.8
CONSTRAINT, SEQUENCE=swissFEL, RANGE=satcl01.msex160,alfy=-0.01;
constraint, sequence=swissfel, range=satsy03.mqua130$end, betx <90 ;
constraint, sequence=swissfel, range=satsy03.mqua130$end, bety <90 ;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
MATCH, SEQUENCE=swissfel, range=s20SY02$start/satcl01$end,beta0=twisssep;
VARY, NAME= satcl01.mqua180.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME= satcl01.mqua190.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satcl01$end, DX = 0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satcl01$end, DPX = 0;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
twiss,sequence=swissfel,range=s20sy02$start/satcl01$end,rmatrix,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=s20SY02$start/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=s20SY02$start/#e,colour=100;
plot,haxis=s,vaxis=re56,range=s20SY02$start/#e,colour=100;
!---------------------------------------
! match first cell of linac1RF cell of Athos
muATL := 0.053;
! Linac 1 Fodo lattice matching
satcb01.mqua230.k1 := 0.490961973;
satcb01.mqua430.k1 := -0.490511125;
match,SEQUENCE=swissfel,range=satcb01$start/satcb01$end;
Vary,name=SatCB01.MQUA230.k1,step=0.0001;
Vary,name=SatCB01.MQUA430.k1,step=0.0001;
constraint,sequence=swissfel,range=satcb01$end,mux=muATL;
constraint,sequence=swissfel,range=satcb01$end,muy=muATL;
lmdif,calls=100,tolerance=1e-21;
endmatch;
satcl02.mqua230.k1=satcb01.mqua230.k1;
satcl02.mqua430.k1=satcb01.mqua430.k1;
twiss,SEQUENCE=swissfel,range=satcb01$start/satcb01$end;
nbetx=table(twiss,satcb01$end,betx);
nalfx=table(twiss,satcb01$end,alfx);
nbety=table(twiss,satcb01$end,bety);
nalfy=table(twiss,satcb01$end,alfy);
!---------------------------------------
! match to reference point at satdi01-mqua250
MATCH, SEQUENCE=swissfel,range=s20sy02$start/satma01$start,beta0=twisssep;
VARY,NAME=satdi01.mqua025.k1,STEP=0.0001,lower=-2.0,upper=2.0;
VARY,NAME=satdi01.mqua080.k1,STEP=0.0001,lower=-2.0,upper=2.0;
VARY,NAME=satdi01.mqua220.k1,STEP=0.0001,lower=-1.8,upper=1.8;
VARY,NAME=satdi01.mqua230.k1,STEP=0.0001,lower=-1.8,upper=1.8;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua250$start,betx = TwissAT1->BETX;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua250$start,alfx = TwissAT1->ALFX;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua250$start,bety = TwissAT1->BETY;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua250$start,alfy = TwissAT1->ALFY;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
!------------------------------------
! match into SATCB01
MATCH, SEQUENCE=swissfel,range=s20sy02$start/satcl02$end,beta0=twisssep;
VARY,NAME=satdi01.mqua250.k1,STEP=0.0001,lower=-1.8,upper=1.8;
VARY,NAME=satdi01.mqua260.k1,STEP=0.0001,lower=-1.8,upper=1.8;
VARY,NAME=satdi01.mqua280.k1,STEP=0.0001,lower=-1.8,upper=1.8;
VARY,NAME=satdi01.mqua300.k1,STEP=0.0001,lower=-1.8,upper=1.8;
CONSTRAINT,SEQUENCE=swissfel,range=satcb01$start,betx=nbetx;
CONSTRAINT,SEQUENCE=swissfel,range=satcb01$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=swissfel,range=satcb01$start,bety=nbety;
CONSTRAINT,SEQUENCE=swissfel,range=satcb01$start,alfy=nalfy;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss, SEQUENCE=swissFEL,range=s20sy02$start/satcl02$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/#e,colour=100;
!!!!!!!!!!!!!!!!!!!!!! Athos undulator
pol=-1;
satun06.mqua080.k1 := -1.699673315*pol;
satun07.mqua080.k1 := 1.746074065*pol;
muAT=0.14;
match,SEQUENCE=swissfel,range=satun06$start/satun07$end;
Vary,name=satun06.mqua080.k1,step=0.0001;
Vary,name=satun07.mqua080.k1,step=0.0001;
constraint,sequence=swissfel,range=satun07$end,mux=muAT;
constraint,sequence=swissfel,range=satun07$end,muy=muAT;
lmdif,calls=100,tolerance=1e-21;
endmatch;
satun08.mqua080.k1 := satun06.mqua080.k1;
satun09.mqua080.k1 := satun07.mqua080.k1;
satun10.mqua080.k1 := satun06.mqua080.k1;
satun11.mqua080.k1 := satun07.mqua080.k1;
satun12.mqua080.k1 := satun06.mqua080.k1;
satun13.mqua080.k1 := satun07.mqua080.k1;
satun14.mqua420.k1 := satun06.mqua080.k1;
satun15.mqua080.k1 := satun07.mqua080.k1;
satun16.mqua080.k1 := satun06.mqua080.k1;
satun17.mqua080.k1 := satun07.mqua080.k1;
satun18.mqua080.k1 := satun06.mqua080.k1;
satun19.mqua080.k1 := satun07.mqua080.k1;
satun20.mqua080.k1 := satun06.mqua080.k1;
satun21.mqua080.k1 := satun07.mqua080.k1;
satun22.mqua080.k1 := satun06.mqua080.k1;
twiss,sequence=swissfel,range=satun06$start/satun07$end;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
ATbetx=table(twiss,satun07$end,betx);
ATalfx=table(twiss,satun07$end,alfx);
ATbety=table(twiss,satun07$end,bety);
ATalfy=table(twiss,satun07$end,alfy);
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;
VARY,NAME=satma01.mqua640.k1,STEP=0.0001,lower=-2.0,upper=2.0;
VARY,NAME=satun04.mqua060.k1,STEP=0.0001,lower=-3.8,upper=3.8;
VARY,NAME=satun05.mqua420.k1,STEP=0.0001,lower=-3.8,upper=3.8;
CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,betx=ATbetx;
CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,bety=ATbety;
CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,alfx=ATalfx;
CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,alfy=ATalfy;
CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,x<10;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=satma01.mqua250$end/satun11$end,beta0=twissee;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
satma01.mqua050.k1 = 1.;
MATCH, SEQUENCE=swissfel,range=s20sy02$start/satma01$end,beta0=twisssep;
VARY,NAME=satma01.mqua050.k1,STEP=0.0001,lower=-3.8,upper=3.8;
VARY,NAME=satma01.mqua120.k1,STEP=0.0001,lower=-3.8,upper=3.8;
VARY,NAME=satma01.mqua140.k1,STEP=0.0001,lower=-3.8,upper=3.8;
VARY,NAME=satma01.mqua160.k1,STEP=0.0001,lower=-3.8,upper=3.8;
VARY,NAME=satma01.mqua180.k1,STEP=0.0001,lower=-3.8,upper=3.8;
VARY,NAME=satma01.mqua230.k1,STEP=0.0001,lower=-3.0,upper=3.0;
VARY,NAME=satma01.mqua250.k1,STEP=0.0001,lower=-3.0,upper=3.0;
CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,betx=twissee->BETX;
CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,bety=twissee->BETY;
CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,alfx=twissee->ALFX;
CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,alfy=twissee->ALFY;
CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua120$start, betx <70;
CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua120$start, bety <70;
CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua140$start, betx <70;
CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua140$start, bety <70;
CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua160$start, betx <70;
CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua160$start, bety <70;
CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua180$start, betx <70;
CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua180$start, bety <70;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
MATCH, SEQUENCE=swissfel,range=s20sy02$start/satbd01$end,beta0=twisssep;
VARY,NAME=satun22.mqua080.k1,STEP=0.0001,lower=-5.0,upper=5.0;
VARY,NAME=satma02.mqua010.k1,STEP=0.0001,lower=-5.0,upper=5.0;
VARY,NAME=satma02.mqua020.k1,STEP=0.0001,lower=-5.0,upper=5.0;
VARY,NAME=satma02.mqua040.k1,STEP=0.0001,lower=-5.0,upper=5.0;
VARY,NAME=satma02.mqua050.k1,STEP=0.0001,lower=-5.0,upper=5.0;
VARY,NAME=satma02.mqua070.k1,STEP=0.0001,lower=-5.0,upper=5.0;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,betx=twissAT2->BETX;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,bety=twissAT2->BETY;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,alfx=twissAT2->ALFX;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,alfy=twissAT2->ALFY;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,x=0;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,px=0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
! fixed values, given by Eduard
SATBD01.MQUA010.K1= 5.069789237265826e-01;
SATBD01.MQUA030.K1= -6.184665903305938e-01 ;
SATBD01.MQUA050.K1= 1.324854421128419e-01 ;
SATBD01.MQUA070.K1= 4.740280173415730e-01 ;
SATBD01.MQUA090.K1= -7.442648986155268e-01;
SATBD02.MQUA030.K1= -1.050806764409536e+00;
twiss,SEQUENCE=swissfel,range=s20sy02$start/satbd01$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/#e,colour=100;
twiss,RMATRIX,SEQUENCE=swissfel,range=#s/satbd01$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;

View File

@@ -0,0 +1,299 @@
! matching scripts for SwissFEL reference
! into 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;
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$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;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
!---------------------------------------------------------------------------------
! match the periodic lattice of the S-band structure
sinsb04.mqua130.k1 :=0.7219189344;
sinsb04.mqua230.k1 :=-0.71562666978;
muInj := 0.1;
MATCH,SEQUENCE=swissfel,range=sinsb04$start/sinsb04$end;
VARY,NAME=sinsb04.MQUA130.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=sinsb04.MQUA230.k1,STEP=0.0001,lower=-2.5,upper=2.5;
CONSTRAINT,SEQUENCE=swissfel,range=sinsb04$end,mux=muInj;
CONSTRAINT,SEQUENCE=swissfel,range=sinsb04$end,muy=muInj;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=sinsb04$start/sinsb04$end;
nbetx=table(twiss,sinsb04$end,betx);
nalfx=table(twiss,sinsb04$end,alfx);
nbety=table(twiss,sinsb04$end,bety);
nalfy=table(twiss,sinsb04$end,alfy);
! Matching from Laser heater into S-band linac
SINLH02.MQUA410.k1= -1.1004699049013937;
SINLH03.MQUA030.k1= 1.214540293254702;
SINLH03.MQUA040.k1= 2.3655916310830505;
SINLH03.MQUA060.k1= -1.8720927342603897;
SINLH03.MQUA080.k1= -3.30357388716279;
SINSB03.MQUA130.k1= 1.705920260985911;
SINSB03.MQUA230.k1= -1.1958386267066743;
MATCH,SEQUENCE=SwissFEL,range=#s/sinsb04$end,beta0 = Twiss0;
VARY,NAME=sinlh02.MQUA410.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinlh03.MQUA030.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinlh03.MQUA040.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinlh03.MQUA060.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinlh03.MQUA080.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinsb03.MQUA130.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinsb03.MQUA230.k1,STEP=0.0001,lower=-3.5,upper=3.5;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04$start,betx=nbetx;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04$start,bety=nbety;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04$start,alfy=nalfy;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb03.mqua130$start,betx<50;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb03.mqua130$start,bety<50;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb03.mqua230$start,betx<50;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb03.mqua230$start,bety<50;
simplex,CALLS=1000,TOLERANCE=1.e-21;
jacobian,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,sequence=SwissFEL,range=#s/sinsb04$end,beta0 = twiss0;
plot,haxis=s,vaxis=betx,bety,colour=100;
sinsb05.mqua130.k1 := sinsb04.mqua130.k1;
sinsb05.mqua230.k1 := sinsb04.mqua230.k1;
MATCH,SEQUENCE=SwissFEL,range=#s/sindi02$end,beta0=twiss0;
VARY,NAME=sinbc01.mqua020.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinbc01.mqua050.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinbc01.mqua070.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinbc01.mqua090.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sinbc01.mqua110.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sindi01.mqua020.k1,STEP=0.0001,lower=-3.5,upper=3.5;
VARY,NAME=sindi01.mqua070.k1,STEP=0.0001,lower=-3.5,upper=3.5;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc01.mqua110$end,betx<120;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02.mbnd400,bety<100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02.mbnd400,betx<5.1;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,bety=TwissM2->BETY;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,alfy=TwissM2->ALFY;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,betx=TwissM2->BETX;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,alfx=TwissM2->ALFY;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,sequence=SwissFEL,range=#s/SINDI02.MQUA020$START,beta0=twiss0;
plot,haxis=s,vaxis=betx,bety,colour=100;
!-------------------------------------
! match periodic lattice of Linac 1
muLin1 := 0.1883;
s10cb02.mqua230.k1 := -1.490961973;
s10cb02.mqua430.k1 := 1.490511125;
MATCH,SEQUENCE=swissfel,range=s10cb02$start/s10cb02$end;
VARY,NAME=s10cb02.MQUA230.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10cb02.MQUA430.k1,STEP=0.0001,lower=-2.5,upper=2.5;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$end,mux=muLin1;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$end,muy=muLin1;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s10cb02$start/s10cb02$end;
nbetx=table(twiss,s10cb02$end,betx);
nalfx=table(twiss,s10cb02$end,alfx);
nbety=table(twiss,s10cb02$end,bety);
nalfy=table(twiss,s10cb02$end,alfy);
s10cb01.mqua230.k1 := s10cb02.mqua230.k1;
s10cb01.mqua430.k1 := s10cb02.mqua430.k1;
S10DI01.MQUA120.k1 :=S10CB02.MQUA230.k1;
S10CB03.MQUA230.k1 :=S10CB02.MQUA430.k1;
S10CB03.MQUA430.k1 :=S10CB02.MQUA230.k1;
S10CB04.MQUA230.k1 :=S10CB02.MQUA430.k1;
S10CB04.MQUA430.k1 :=S10CB02.MQUA230.k1;
S10CB05.MQUA230.k1 :=S10CB02.MQUA430.k1;
S10CB05.MQUA430.k1 :=S10CB02.MQUA230.k1;
S10CB06.MQUA230.k1 :=S10CB02.MQUA430.k1;
S10CB06.MQUA430.k1 :=S10CB02.MQUA230.k1;
S10CB07.MQUA230.k1 :=S10CB02.MQUA430.k1;
S10CB07.MQUA430.k1 :=S10CB02.MQUA230.k1;
S10CB08.MQUA230.k1 :=S10CB02.MQUA430.k1;
S10CB08.MQUA430.k1 :=S10CB02.MQUA230.k1;
S10CB09.MQUA230.k1 :=S10CB02.MQUA430.k1;
!-----------------------------------
! match into Linac 1st
sindi02.mqua020.k1=-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;
VARY,NAME=sindi02.mqua050.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=sindi02.mqua060.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=sindi02.mqua090.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s10cb01.mqua230.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s10cb01.mqua430.k1,STEP=0.0001,lower=-5.5,upper=5.5;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$start,betx=nbetx;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$start,bety=nbety;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$start,alfy=nalfy;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,x=0;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,y=0;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,px=0;
!CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,py=0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,sequence=SwissFEL,range=#s/S10BC01$start,beta0=twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
USE,SEQUENCE=SwissFEL;
MATCH,SEQUENCE=SwissFEL,range=#s/s20cb01$start,beta0=twiss0;
VARY,NAME=s10cb07.mqua430.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10cb08.mqua230.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10cb08.mqua430.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10cb09.mqua230.k1,STEP=0.0001,lower=-2.5,upper=2.5;
CONSTRAINT,SEQUENCE=swissFEL,range=s10bc01.mqua020$start,betx=TwissM3->BETX;
CONSTRAINT,SEQUENCE=swissFEL,range=s10bc01.mqua020$start,alfx=TwissM3->ALFX;
CONSTRAINT,SEQUENCE=swissFEL,range=s10bc01.mqua020$start,bety=TwissM3->BETY;
CONSTRAINT,SEQUENCE=swissFEL,range=s10bc01.mqua020$start,alfy=TwissM3->ALFY;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
!-------------------------------------------------
! Linac Bunch Compressor
! reference point s10ma01-mqua020
USE,SEQUENCE=SwissFEL;
MATCH,SEQUENCE=SwissFEL,range=#s/s20cb01$start,beta0 = twiss0;
VARY,NAME=s10bc01.mqua020.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10bc01.mqua040.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10bc01.mqua060.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10bc01.mqua080.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10bc01.mqua100.k1,STEP=0.0001,lower=-2.5,upper=2.5;
CONSTRAINT,SEQUENCE=swissFEL,range=s10ma01.mqua020$start,betx=TwissM4->BETX;
CONSTRAINT,SEQUENCE=swissFEL,range=s10ma01.mqua020$start,alfx=TwissM4->ALFX;
CONSTRAINT,SEQUENCE=swissFEL,range=s10ma01.mqua020$start,bety=TwissM4->BETY;
CONSTRAINT,SEQUENCE=swissFEL,range=s10ma01.mqua020$start,alfy=TwissM4->ALFY;
CONSTRAINT,SEQUENCE=swissFEL,range=s10ma01.mqua020$start,dx=0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
!---------------------------------------
! Linac 2
s20cb01.mqua430.k1 = -0.8156528972;
s20cb02.mqua430.k1 = 0.8156479879;
muLin2=0.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;
constraint,sequence=swissfel,range=s20cb02$end,mux=muLin2;
constraint,sequence=swissfel,range=s20cb02$end,muy=muLin2;
lmdif,calls=100,tolerance=1e-21;
endmatch;
s20cb03.mqua430.k1 = s20cb01.mqua430.k1;
twiss,SEQUENCE=swissfel,range=s20cb01$start/s20cb02$end;
nbetx=table(twiss,s20cb02$end,betx);
nalfx=table(twiss,s20cb02$end,alfx);
nbety=table(twiss,s20cb02$end,bety);
nalfy=table(twiss,s20cb02$end,alfy);
!--------------------------------
! Linac Bunch Compressor and matching into Linac 2
MATCH,SEQUENCE=swissfel,beta0=twiss0;
VARY,NAME=s10ma01.mqua020.k1,STEP=0.0001,lower=-2.4,upper=2.4;
VARY,NAME=s10ma01.mqua050.k1,STEP=0.0001,lower=-2.4,upper=2.4;
VARY,NAME=s10ma01.mqua070.k1,STEP=0.0001,lower=-2.4,upper=2.4;
VARY,NAME=s10ma01.mqua110.k1,STEP=0.0001,lower=-2.4,upper=2.4;
VARY,NAME=s10ma01.mqua130.k1,STEP=0.0001,lower=-2.4,upper=2.4;
CONSTRAINT,SEQUENCE=Swissfel,range=s20cb01$start,betx=nbetx;
CONSTRAINT,SEQUENCE=Swissfel,range=s20cb01$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=Swissfel,range=s20cb01$start,bety=nbety;
CONSTRAINT,SEQUENCE=Swissfel,range=s20cb01$start,alfy=nalfy;
CONSTRAINT,SEQUENCE=Swissfel,range=s10ma01.mqua070$start,bety<100;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
!-----------------
! into septum
S20SY01.MQUA020.k1= -1.4084554435040675;
S20SY01.MQUA030.k1= 1.6527516900200674;
S20SY01.MQUA050.k1= -1.2455405678473916;
S20SY01.MQUA080.k1= 1.3915642831470632;
MATCH,SEQUENCE=SwissFEL,range=#s/s20sy02$start,beta0 = Twiss0;
VARY,NAME=s20sy01.mqua020.k1,STEP=0.0001,lower=-2.2,upper=2.2;
VARY,NAME=s20sy01.mqua030.k1,STEP=0.0001,lower=-2.2,upper=2.2;
VARY,NAME=s20sy01.mqua050.k1,STEP=0.0001,lower=-2.2,upper=2.2;
VARY,NAME=s20sy01.mqua080.k1,STEP=0.0001,lower=-2.2,upper=2.2;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,betx=Twisssep->BETX;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfx=Twisssep->ALFX;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,bety=Twisssep->BETY;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfy=Twisssep->ALFY;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
!
twiss,SEQUENCE=swissfel,range=#s/s20sy01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=s10cb08$start/#e,colour=100;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;

File diff suppressed because it is too large Load Diff

View File

@@ -1,63 +0,0 @@
!-----------------------------------
! collimator
R56 = -000e-6;
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;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
sarcl02.mqua210.k1=-sarcl02.mqua130.k1*0.9;
MATCH,SEQUENCE=swissfel,range=sarcl02$start/sarma01.mqua010,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;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
sarcl02.mqua310.k1=sarcl02.mqua250.k1;
sarcl02.mqua350.k1=sarcl02.mqua210.k1;
sarcl02.mqua460.k1=sarcl02.mqua130.k1;
dL=0.625+0.25;
bx0=25;
bx=bx0+dL*dL/bx0;
ax=-dL/bx0;
by0=0.8;
by=by0+dL*dL/by0;
ay=-dL/by0;
twiss,sequence=swissfel,range=sarcl02.mqsk300/sarma01.mqua010,betx=bx,alfx=ax,bety=by,alfy=ay;
nbetx= table(twiss,sarma01$start,betx);
nalfx=-table(twiss,sarma01$start,alfx);
nbety= table(twiss,sarma01$start,bety);
nalfy=-table(twiss,sarma01$start,alfy);
MATCH,SEQUENCE=swissfel,range=s30cb10.mqua430$start/sarma01.mqua010,beta0=initcon;
VARY,NAME=sarcl01.mqua020.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua050.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua080.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua100.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua140.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua190.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl02$start,betx=nbetx;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl02$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl02$start,bety=nbety;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl02$start,alfy=nalfy;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua050,bety<30;
CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua190,betx<30;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
twiss,sequence=swissfel,range=s30cb10.mqua430$start/sarma01.mqua010,rmatrix,beta0=initcon;

View File

@@ -1,118 +0,0 @@
satsy01.mqua020.k1 := 0.48577;
satsy01.mqua040.k1 := 1.0122;
satsy01.mqua070.k1 := -0.055;
satsy01.mqua090.k1 := -0.826;
kmin=-2;
kmax=2;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/satcl01$end,beta0=initcon;
VARY, NAME=satsy01.mqua020.k1, STEP=0.00001,LOWER=0,UPPER=4;
VARY, NAME=satsy01.mqua040.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy01.mqua070.k1, STEP=0.00001,LOWER=Kmin,UPPER=KMAX;
VARY, NAME=satsy01.mqua090.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, DX < 7.05e2;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, DPX = 7.87e-3;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, ALFX=0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, ALFY=0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01.mbnd200, DPY =-1.16e-4;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
satsy01.mqua210.k1=satsy01.mqua090.k1;
satsy01.mqua230.k1=satsy01.mqua070.k1;
satsy01.mqua260.k1=satsy01.mqua040.k1;
satsy01.mqua280.k1=satsy01.mqua020.k1;
satsy01.mqua300.k1 := 5.27400e-01;
DXS = 0.000;
DPXS = 0.000;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/satcl01$end,beta0=initcon;
VARY, NAME=satsy01.mqua230.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy01.mqua210.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy01.mqua300.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy01.mqua280.k1, STEP=0.00001,LOWER=-4,UPPER=4;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, DX = 0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, DPX = 0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, DY < -0.009;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy01$end, X<10;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
satsy01.mqua280.k1 = satsy01.mqua280.k1*(1+leakdisp);
!------------------------------------------
! close vertical dispersion
satsy02.mqua010.k1 := - 1.71;
satsy02.mqua110.k1 := 1.22622;
satsy02.mqua120.k1 := 1.64073;
satsy02.mqua230.k1 = -1.61620;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/satcl01$end,beta0=initcon;
VARY, NAME=satsy02.mqua010.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy02.mqua110.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy02.mqua120.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy02$end, DY = 0.0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy02$end, DPY = 0.0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satsy02$end, X <0;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
satcl011:=-1.3;
satcl012:= 1.1;
satcl01.mqua120.k1:=satcl011;
satcl01.mqua130.k1:=satcl012;
satcl01.mqua180.k1:=satcl012;
satcl01.mqua190.k1:=satcl011;
MATCH, SEQUENCE=swissfel, range=SATCL01$START/SATCL01$END,betx=5,alfx=0,bety=30,alfy=0;
VARY, NAME=satcl011, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satcl012, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satcl01$end, DX = 0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satcl01$end, DPX = 0;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
satsy02.mqua230.k1 = -0.12;
satsy03.mqua010.k1 = 0.56;
satsy03.mqua040.k1 = 0.72;
satsy03.mqua070.k1 = 0.427;
satsy03.mqua100.k1 = -0.01;
satsy03.mqua130.k1 = -0.67;
MATCH,SEQUENCE=swissfel,range=#s/#e,range=s20SY02$start/satcl01$end,beta0=initcon;
VARY, NAME=satsy02.mqua230.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua010.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua040.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua070.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua100.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME=satsy03.mqua130.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissFEL, RANGE=satcl01.msex160,betx=10.8;
CONSTRAINT, SEQUENCE=swissFEL, RANGE=satcl01.msex160,alfx=-0.01;
CONSTRAINT, SEQUENCE=swissFEL, RANGE=satcl01.msex160,bety<30.8; ! was 13.8
CONSTRAINT, SEQUENCE=swissFEL, RANGE=satcl01.msex160,alfy=-0.01;
constraint, sequence=swissfel, range=satsy03.mqua130$end, betx <90 ;
constraint, sequence=swissfel, range=satsy03.mqua130$end, bety <90 ;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
MATCH, SEQUENCE=swissfel, range=s20SY02$start/satcl01$end,beta0=initcon;
VARY, NAME= satcl01.mqua180.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
VARY, NAME= satcl01.mqua190.k1, STEP=0.00001,LOWER=Kmin,UPPER=Kmax;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satcl01$end, DX = 0;
CONSTRAINT, SEQUENCE=swissfel, RANGE=satcl01$end, DPX = 0;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
twiss,sequence=swissfel,range=s20sy02$start/satcl01$end,rmatrix,beta0=initcon;

View File

@@ -1,35 +0,0 @@
!-----------------------------------
! switch yard
! matching condition at the septum, the new design by Natalia on 27th July 2011
! find the correct kicker strength to have the right dispersion and offset.
y_sep=0.01;
py_sep=0.0;
dy_sep=-y_sep;
dpy_sep=-py_sep;
S20SY02.MKDC010.cory := SYKICK*2;
S20SY02.MKAC020.cory := SYKICK*3;
S20SY02.MKDC030.cory := SYKICK*2;
S20SY02.MKAC040.cory := SYKICK*3;
S20SY02.MKDC050.cory := SYKICK*2;
use,sequence=swissfel;
MATCH,SEQUENCE=swissfel,range=s20sy02$start/s20sy02$end,beta0=initcon;
VARY,NAME=s20sy02.mqua070.k1,STEP=0.0001,lower=-3,upper=3;
VARY,NAME=s20sy02.mqua100.k1,STEP=0.0001,lower=-3,upper=3;
VARY,NAME=s20sy02.mqua140.k1,STEP=0.0001,lower=-3,upper=3;
VARY,NAME=s20sy02.mqua180.k1,STEP=0.0001,lower=-3,upper=3;
VARY,NAME=SYKICK,STEP=0.0001;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,y=y_sep;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,py=py_sep;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dy=-0.007;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dpy<1;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mqua180, BETY < 60;
LMDIF,CALLS=8000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,sequence=swissfel,range=s20sy02$start/s20sy02$end,rmatrix,beta0=initcon;

View File

@@ -1,14 +1,6 @@
5) Load Reference -> initial matching condition
4) Save aver matching -> save initial twiss conditions
6) filter for current, planned and final phase for matching scripts
1) Check reference settings directory, depending on online and offline mode
2) switch between references
3) Match for sextupoles!

View File

@@ -8,8 +8,8 @@ import copy
class MatchMaker:
def __init__(self,signal = None):
self.matchlist={'Reference-SwissFEL':'Scripts/Reference-SwissFEL','SwissFEL+':'Scripts/SFPlus'}
def __init__(self,signal = None,phase = 0):
self.matchlist = self.getAllScripts(phase)
self.referencePoints={}
self.variables={}
self.scriptdir = None
@@ -17,6 +17,17 @@ class MatchMaker:
self.matchresult=[]
self.filter={}
def getAllScripts(self,phase):
phases = ['Current','Planned','Final']
path = 'Scripts/%s' % phases[phase]
print(path)
res={}
dirs = [f.path for f in os.scandir(path) if f.is_dir()]
for ele in dirs:
tags=ele.split('/')[-1]
res[tags]=ele
return res
def initScripts(self,target):
self.scriptdir = self.matchlist[target]
if os.path.exists(self.scriptdir+'/initTwiss.madx'):
@@ -25,8 +36,10 @@ class MatchMaker:
self.scriptAramis = os.path.exists(self.scriptdir+'/matchAramis.madx')
self.scriptAthos = os.path.exists(self.scriptdir + '/matchAthos.madx')
self.scriptPorthos = os.path.exists(self.scriptdir + '/matchPorthos.madx')
self.settings = os.path.exists(self.scriptdir + '/ReferenceSettings')
if os.path.exists(self.scriptdir + '/settings.json'):
self.settings=self.scriptdir + '/settings.json'
else:
self.settings=None
def parseReferencePoints(self):
file = self.scriptdir+'/initTwiss.madx'
@@ -67,6 +80,7 @@ class MatchMaker:
print('##### Reference Twiss values parsed')
def match(self, om, variables = None, Injector=True, Athos = True, Aramis = False, Porthos = False):
self.matchresult.clear()

View File

@@ -139,7 +139,7 @@ class Model:
elif 'MKAC' in ele.Name or 'MKDC' in ele.Name:
kicker[ele.Name] = {'cory': ele.cory,'design_kick':ele.design_kick}
return {'Quadrupole':quadrupoles,'Sextupole':sextupoles,'Dipole':dipoles,'RF':rf,'Undulator':undulators,
'Kicker':kicker,'Energy':energy, 'InitialCondition':self.startTwiss}
'Kicker':kicker,'Energy':energy, 'InitialCondition':self.startTwiss,'Phase':self.phase}
def loadSettingsGroup(self,group,fields,normalized=False):
for key in group.keys():
@@ -150,6 +150,10 @@ class Model:
ele.__dict__[field]/=ele.Length
def loadSettings(self,settings):
if not 'Phase' in settings.keys():
return False
if not settings['Phase'] == self.phase:
return False
self.loadSettingsGroup(settings['Quadrupole'],['k1'])
self.loadSettingsGroup(settings['Sextupole'], ['k2'])
self.loadSettingsGroup(settings['Dipole'], ['angle'])
@@ -163,6 +167,7 @@ class Model:
self.updateEnergy(self.startEnergy)
print('Settings loaded (Reference Energy:',self.om.EnergyAt(self.energyReference)[0],')')
self.forceLat=True
return True
def updateModelFromMatching(self,var):
for magm in var.keys():

View File

@@ -30,6 +30,7 @@ class ReferenceManager:
for i, key in enumerate(matchmaker.referencePoints.keys()):
if i is 0:
tag = 'Start'
self.parent.model.startTwiss=matchmaker.referencePoints[key]['Twiss'] # save initial referenc point for save settings
else:
label = matchmaker.referencePoints[key]['Label']
if label is None: