Initial Reference optics done

This commit is contained in:
2026-01-13 15:06:24 +01:00
parent ac3e68082d
commit 4725565a80
8 changed files with 343 additions and 345 deletions

View File

@@ -4,7 +4,7 @@ import webbrowser
import subprocess
from argparse import ArgumentParser
from PyQt5 import QtWidgets,QtGui
from PyQt5 import QtWidgets,QtGui,QtCore
from ui.OpticsToolsGui import Ui_OpticsGUI
from plot import OpticsPlot
@@ -15,7 +15,10 @@ from sandbox import Sandbox
from matchmaker import MatchMaker
class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
sigStatus = QtCore.pyqtSignal(str)
def __init__(self,phase=0, office= 1):
super(OpticsTools, self).__init__()
self.setupUi(self)
@@ -34,7 +37,7 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
self.model = Model(phase=phase,parent=self)
# initialize modeling
self.match = MatchMaker()
self.match = MatchMaker(signal=self.sigStatus)
self.UIMatchOpticsSelect.clear()
for key in self.match.matchlist.keys():
self.UIMatchOpticsSelect.addItem(key)
@@ -65,7 +68,7 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
self.actionHelp.triggered.connect(self.openGit)
self.actionAbout.triggered.connect(self.about)
self.actionOpenScriptEditor.triggered.connect(self.editMatchingScript)
self.sigStatus.connect(self.status)
def doMatch(self):
"""
@@ -166,7 +169,7 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
"Json Files (*.json)", options=options)
if not fileName:
return
self.saveSettingDirect(fileName)
self.saveSettingdirect(fileName)
def loadSettings(self):
@@ -197,7 +200,8 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
self.sandbox.updateSandbox()
self.status('Machine Settings')
def status(self,msg=''):
@QtCore.pyqtSlot(str)
def status(self,msg):
self.UIStatus.setText(msg)
# --------------------------------
# Main routine

View File

@@ -1,11 +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; ! 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
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.0548, 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

@@ -1,243 +1,109 @@
!-----------------------------------
! 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.
!------------------------------
! match periodic lattice of linac 3
s30cb01.mqua430.k1 := 0.8168941546;
s30cb02.mqua430.k1 := -0.8168914699;
muLin3=0.188;
y_sep=0.01;
py_sep=0.0;
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;
select,flag=Error,pattern="SAT.*";
ealign,DY=0.01;
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.007;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dpy=1.7e-3;
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mqua180, BETY < 60;
LMDIF,CALLS=8000,TOLERANCE=1.e-21;
ENDMATCH;
! this statements are needed to have explicit values in the output file
SYKICK=0;
S20SY02.MKDC010.c1:= SYKICK*2;
S20SY02.MKAC020.c1:= SYKICK*3;
S20SY02.MKDC030.c1:= SYKICK*2;
S20SY02.MKAC040.c1:= SYKICK*3;
S20SY02.MKDC050.c1:= SYKICK*2;
s20bc01.mqua010.k1:=1.;
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;
VARY,NAME=s20bc01.mqua050.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,betx<4;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,bety<90;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,betx<250;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,bety<20;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/S20BC02$END,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
muLin3=0.2;
pol = 1;
s20cb01.mqua430.k1=0.5*pol;
s20cb02.mqua430.k1=-0.5*pol;
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=muLin3;
constraint,sequence=swissfel,range=s20cb02$end,muy=muLin3;
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;
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);
plot,haxis=s,vaxis=betx,bety,colour=100;
s20cb03.mqua430.k1 = s20cb01.mqua430.k1;
s20cb04.mqua430.k1 = s20cb02.mqua430.k1;
s30cb01.mqua430.k1 = s20cb01.mqua430.k1;
s30cb02.mqua430.k1 = s20cb02.mqua430.k1;
s30cb03.mqua430.k1 = s20cb01.mqua430.k1;
s30cb04.mqua430.k1 = s20cb02.mqua430.k1;
s30cb05.mqua430.k1 = s20cb01.mqua430.k1;
s30cb06.mqua430.k1 = s20cb02.mqua430.k1;
s30cb07.mqua430.k1 = s20cb01.mqua430.k1;
s30cb08.mqua430.k1 = s20cb02.mqua430.k1;
s30cb09.mqua430.k1 = s20cb01.mqua430.k1;
s30cb10.mqua430.k1 = s20cb02.mqua430.k1;
s30cb11.mqua430.k1 = s20cb01.mqua430.k1;
s30cb12.mqua430.k1 = s20cb02.mqua430.k1;
s30cb13.mqua430.k1 = s20cb01.mqua430.k1;
s30cb14.mqua430.k1 = s20cb02.mqua430.k1;
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);
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;
VARY,NAME=s20ma01.mqua040.k1,STEP=0.0001;
vary,name=s20cb01.mqua430.k1,step=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20cb03$start,betx=nbetx;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20cb03$start,bety=nbety;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20cb03$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20cb03$start,alfy=nalfy;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/S20cb04$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
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;
VARY,NAME=s30cb03.mqua430.k1,STEP=0.0001;
VARY,NAME=s30cb04.mqua430.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb05$start,betx=nbetx;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb05$start,bety=nbety;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb05$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb05$start,alfy=nalfy;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
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;
!L = 9;
!alpha = 1.5;
!beta = alpha*L;
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;
!MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s30cb14$end,beta0=twisssep;
!VARY,NAME=s30cb10.mqua430.k1,STEP=0.0001;
!VARY,NAME=s30cb11.mqua430.k1,STEP=0.0001;
!VARY,NAME=s30cb12.mqua430.k1,STEP=0.0001;
!VARY,NAME=s30cb13.mqua430.k1,STEP=0.0001;
!VARY,NAME=s30cb14.mqua430.k1,STEP=0.0001;
!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,betx=beta;
!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,bety=beta;
!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,alfx=alpha;
!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,alfy=alpha;
!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,X<1;
!LMDIF,CALLS=1000,TOLERANCE=1.e-21;
!ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/S30cb14$END,beta0=twisssep;
twiss,SEQUENCE=swissfel,range=s20SY02$start/sarcl01$start,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
Select,flag=Error,pattern="SPO.*";
EALIGN,DY=0.01;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
! energy collimator
PSYKICK:=0.1;
S30cb15.MKDC010.cory := PSYKICK*2;
S30cb15.MKAC020.cory := PSYKICK*3;
S30cb15.MKDC030.cory := PSYKICK*2;
S30cb15.MKAC040.cory := PSYKICK*3;
S30CB15.MKDC050.cory := PSYKICK*2;
pqf:=1;
S30cb15.mqua100.k1 := -0.2*pqf;
S30cb15.mqua200.k1 := -pqf;
MATCH,SEQUENCE=Swissfel,range=S30CB15$START/s30cb15$END,BETA0 = TWISSsep;
VARY, NAME=PSYKICK, STEP=0.00001;
VARY, NAME=PQF, STEP=0.00001;
CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end, Y = 0.01;
CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end, PY = 0.;
LMDIF, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
pbetx=3.9036;
palfx=-0.05021;
pbety=37.6374;
palfy=4.4433;
twisspor: beta0, betx=pbetx,alfx=palfx, bety=pbety,alfy=palfy;
s30cb13.mqua430.k1 = 0.456;
s30cb14.mqua430.k1 = -1.741;
s30cb15.mqua010.k1 = 1.1533;
s30cb15.mqua020.k1 = -0.0961;
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;
VARY,NAME=s30cb15.mqua010.k1,STEP=0.0001;
VARY,NAME=s30cb15.mqua020.k1,STEP=0.0001;
CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end,betx=pbetx;
CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end,bety=pbety;
CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end,alfx=palfx;
CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end,alfy=palfy;
!LMDIF, CALLS=1000, TOLERANCE=1.E-21;
Simplex, CALLS=1000, TOLERANCE=1.E-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/s30cb15$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=y,dy,range=s30cb15$start/#e,colour=100;
S30cb15.MKDC010.cory := 0;
S30cb15.MKAC020.cory := 0;
S30cb15.MKDC030.cory := 0;
S30cb15.MKAC040.cory := 0;
S30CB15.MKDC050.cory := 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;
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;
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;
@@ -252,103 +118,175 @@ by=by0+dL*dL/by0;
ay=-dL/by0;
twiss,sequence=swissfel,range=sarcl02.mqsk300/sarma01.mqua010,betx=bx,alfx=ax,bety=by,alfy=ay;
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,sarma01$start,betx);
nalfx=-table(twiss,sarma01$start,alfx);
nbety= table(twiss,sarma01$start,bety);
nalfy=-table(twiss,sarma01$start,alfy);
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;
MATCH,SEQUENCE=swissfel,range=S30SY01$start/sarma01.mqua010,beta0=twisspor;
!---------------------------------
! 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;
!CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua080,betx=beta;
!CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua080,alfx=alpha;
!CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua080,bety=beta;
!CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua080,alfy=alpha;
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=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;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
muAR=0.17;
match,SEQUENCE=swissfel,range=sarun02$start/sarun03$end;
Vary,name=sarun02.mqua080.k1,step=0.0001;
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;
constraint,sequence=swissfel,range=sarun03$end,mux=muAR;
constraint,sequence=swissfel,range=sarun03$end,muy=muAR;
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=sarun02$start/sarun03$end;
mbetx=table(twiss,sarun02$end,betx);
malfx=table(twiss,sarun02$end,alfx);
mbety=table(twiss,sarun02$end,bety);
malfy=table(twiss,sarun02$end,alfy);
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
sarun04.mqua080.k1=sarun02.mqua080.k1;
sarun05.mqua080.k1=sarun03.mqua080.k1;
sarun06.mqua080.k1=sarun02.mqua080.k1;
sarun07.mqua080.k1=sarun03.mqua080.k1;
sarun08.mqua080.k1=sarun02.mqua080.k1;
sarun09.mqua080.k1=sarun03.mqua080.k1;
sarun10.mqua420.k1=sarun02.mqua080.k1;
sarun11.mqua080.k1=sarun03.mqua080.k1;
sarun12.mqua080.k1=sarun02.mqua080.k1;
sarun13.mqua080.k1=sarun03.mqua080.k1;
sarun14.mqua080.k1=sarun02.mqua080.k1;
sarun15.mqua080.k1=sarun03.mqua080.k1;
sarun16.mqua080.k1=sarun02.mqua080.k1;
sarun17.mqua080.k1=sarun03.mqua080.k1;
sarun18.mqua080.k1=sarun02.mqua080.k1;
sarun19.mqua080.k1=sarun03.mqua080.k1;
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);
SARUN01.mqua080.k1=sarun03.mqua080.k1;
sarma02.mqua050.k1=0;
sarma02.mqua120.k1=0.7*sarun02.mqua080.k1;
sarma02.mqua050.k1=sarun03.mqua080.k1;
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.435783623;
sarma01.mqua060.k1 := 1.29993551;
sarma01.mqua080.k1 := -1.1356922498;
sarma01.mqua120.k1 := 0.4142170392;
sarma01.mqua140.k1 := -0.4428419456;
sarma01.mqua080.k1 := -0.1356922498;
sarma01.mqua120.k1 := -0.4142170392;
sarma01.mqua140.k1 := 0.4428419456;
MATCH,SEQUENCE=swissfel,range=S30SY01$start/sarun02$start,beta0=twisspor;
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=sarun01$start,betx=mbetx;
CONSTRAINT,SEQUENCE=swissfel,range=sarun01$start,bety=mbety;
CONSTRAINT,SEQUENCE=swissfel,range=sarun01$start,alfx=malfx;
CONSTRAINT,SEQUENCE=swissfel,range=sarun01$start,alfy=malfy;
CONSTRAINT,SEQUENCE=swissfel,range=sarun02$start,x<5;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
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;
LMDIF,CALLS=300,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;
twiss,SEQUENCE=swissfel,range=#s/sarun19$end,beta0=twiss0;
sarun19.mqua080.k1=sarun03.mqua080.k1;
sarun20.mqua080.k1=sarun04.mqua080.k1;
sarbd01.mqua020.k1=0;
match,sequence=swissfel,range=s20SY02$start/#e,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=#e,betx<200;
constraint,sequence=swissfel,range=#e,bety<150;
constraint,sequence=swissfel,range=#e,dx<100;
constraint,sequence=swissfel,range=#e,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;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
exit;

View File

@@ -27,7 +27,7 @@ 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.006;
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;
@@ -87,7 +87,7 @@ satsy01.mqua280.k1 = satsy01.mqua280.k1*(1+leakdisp);
!------------------------------------------
! close vertical dispersion
satcl01.mqsk125.k1 = 0;
satsy02.mqua010.k1 := - 1.71;
satsy02.mqua110.k1 := 1.22622;
@@ -124,12 +124,13 @@ 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;
satsy02.mqua230.k1 = -0.12*0;
satsy03.mqua010.k1 = 0.56*0;
satsy03.mqua040.k1 = 0.72*0;
satsy03.mqua070.k1 = 0.427*0;
satsy03.mqua100.k1 = -0.01*0;
satsy03.mqua130.k1 = -0.67*0;
MATCH,SEQUENCE=swissfel,range=#s/#e,range=s20SY02$start/satcl01$end,beta0=twisssep;
@@ -139,9 +140,9 @@ 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,betx=10;
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,bety<10.0; ! 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 ;
@@ -170,15 +171,15 @@ plot,haxis=s,vaxis=re56,range=s20SY02$start/#e,colour=100;
muATL := 0.053;
! Linac 1 Fodo lattice matching
satcb01.mqua230.k1 := 1.490961973;
satcb01.mqua430.k1 := -1.490511125;
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=satcb01,range=#e,mux=muATL;
constraint,sequence=satcb01,range=#e,muy=muATL;
constraint,sequence=swissfel,range=satcb01$end,mux=muATL;
constraint,sequence=swissfel,range=satcb01$end,muy=muATL;
lmdif,calls=100,tolerance=1e-21;
endmatch;
@@ -197,15 +198,15 @@ nalfy=table(twiss,satcb01$end,alfy);
!---------------------------------------
! match to reference point at satdi01-mqua250
MATCH, SEQUENCE=swissfel,range=s20sy02$start/satcb01$start,beta0=twisssep;
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=35.76;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua250$start,alfx=-1.166;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua250$start,bety=24.087;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua250$start,alfy=0.648;
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;
@@ -214,12 +215,11 @@ ENDMATCH;
!------------------------------------
! match into SATCB01
MATCH, SEQUENCE=swissfel,range=s20sy02$start/satcb01$end,beta0=twisssep;
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;
@@ -229,7 +229,7 @@ ENDMATCH;
twiss, SEQUENCE=swissFEL,range=s20sy02$start/satcl02$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/satcl02$end,colour=100;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/#e,colour=100;
@@ -238,7 +238,7 @@ plot,haxis=s,vaxis=betx,bety,range=satdi01$start/satcl02$end,colour=100;
pol=-1;
satun06.mqua080.k1 := -1.699673315*pol;
satun07.mqua080.k1 := 1.746074065*pol;
muAT=0.15;
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;
@@ -254,9 +254,9 @@ 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.mqua080.k1 := satun06.mqua080.k1;
satun14.mqua420.k1 := satun06.mqua080.k1;
satun15.mqua080.k1 := satun07.mqua080.k1;
satun16.mqua420.k1 := satun06.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;
@@ -274,17 +274,7 @@ ATalfy=table(twiss,satun07$end,alfy);
eebetx=8;
eealfx=0.5;
eebety=30;
eealfy=-0.5;
eebetx=7;
eealfx=0.5;
eebety=30;
eealfy=1.5;
twissee: beta0,betx=eebetx,bety=eebety,alfx=eealfx,alfy=eealfy;
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;
@@ -305,14 +295,7 @@ twiss,SEQUENCE=swissfel,range=satma01.mqua250$end/satun11$end,beta0=twissee;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
scl=4;
satcb02.mqua230.k1=scl*0.2;
satcb02.mqua430.k1=-scl*0.2;
satcb03.mqua230.k1=scl*0.2;
satcb03.mqua430.k1=-scl*0.2;
satma01.mqua050.k1 = 1.;
satma01.mqua120.k1=0;
satma01.mqua140.k1=0;
@@ -330,10 +313,10 @@ 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=eebetx;
CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,bety=eebety;
CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,alfx=eealfx;
CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,alfy=eealfy;
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;
@@ -346,7 +329,6 @@ 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;
@@ -355,16 +337,18 @@ 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=50;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,bety=50;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,alfx=0;
CONSTRAINT,SEQUENCE=swissfel,range=satbd01.mqua010$start,alfy=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 ;
@@ -376,7 +360,7 @@ twiss,SEQUENCE=swissfel,range=s20sy02$start/satbd01$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/#e,colour=100;
twiss,SEQUENCE=swissfel,range=#s/satbd01$end,beta0=twiss0;
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

@@ -25,12 +25,12 @@ ENDMATCH;
sinsb04.mqua130.k1 :=0.7219189344;
sinsb04.mqua230.k1 :=-0.71562666978;
muInj := 0.2;
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=#e,mux=muInj;
CONSTRAINT,SEQUENCE=swissfel,range=#e,muy=muInj;
CONSTRAINT,SEQUENCE=swissfel,range=sinsb04$end,mux=muInj;
CONSTRAINT,SEQUENCE=swissfel,range=sinsb04$end,muy=muInj;
LMDIF,CALLS=100,TOLERANCE=1.e-21;
ENDMATCH;
@@ -42,7 +42,8 @@ nalfy=table(twiss,sinsb04$end,alfy);
! Matching from Laser heater into S-band linac
sinsb03.mqua130.k1 = sinsb04.mqua130.k1;
sinsb03.mqua230.k1 = sinsb04.mqua230;
MATCH,SEQUENCE=SwissFEL,range=#s/sinsb04$end,beta0 = Twiss0;
VARY,NAME=sinlh02.MQUA410.k1,STEP=0.0001,lower=-3.5,upper=3.5;
@@ -81,7 +82,7 @@ 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<100;
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;
@@ -110,10 +111,10 @@ s10cb02.mqua230.k1 := -1.490961973;
s10cb02.mqua430.k1 := 1.490511125;
MATCH,SEQUENCE=swissfel,range=s10cb02$start/s10cb02$end;
VARY,NAME=s10cb02.MQUA130.k1,STEP=0.0001,lower=-2.5,upper=2.5;
VARY,NAME=s10cb02.MQUA230.k1,STEP=0.0001,lower=-2.5,upper=2.5;
CONSTRAINT,SEQUENCE=swissfel,range=#e,mux=muLin1;
CONSTRAINT,SEQUENCE=swissfel,range=#e,muy=muLin1;
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;
@@ -146,7 +147,7 @@ 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;
@@ -223,8 +224,8 @@ 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=linac2,range=#e,mux=muLin2;
constraint,sequence=linac2,range=#e,muy=muLin2;
constraint,sequence=swissfel,range=s20cb02$end,mux=muLin2;
constraint,sequence=swissfel,range=s20cb02$end,muy=muLin2;
lmdif,calls=100,tolerance=1e-21;
endmatch;

View File

@@ -1,11 +1,18 @@
3) matching output on a log
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) Allo filter to update quadrupoles to be part of the match scripts and not globally written in the code
#) include ecol in reference matching script
#) Give feedback on the matching results to GUI
#) allow for some progress indication of matching
#) make matching more robust.
#) Fix matching point of linac 3
#) Check for maximum gradient for matched values
3) Match for sextupoles!

View File

@@ -1,14 +1,19 @@
import os
import re
from onlinemodel.madx import CMadX
import io
import contextlib
from io import StringIO
import sys
class MatchMaker:
def __init__(self):
def __init__(self,signal = None):
self.matchlist={'Reference-SwissFEL':'Scripts/Reference-SwissFEL','SwissFEL+':'Scripts/SFPlus'}
self.referencePoints={}
self.variables={}
self.scriptdir = None
self.signal=signal
def initScripts(self,target):
self.scriptdir = self.matchlist[target]
@@ -31,9 +36,13 @@ class MatchMaker:
if 'location:' in line:
tags = line.split('location:')
location = tags[1].strip()
if 'label:' in tags[0]:
label = tags[0].split('label:')[1].strip()
else:
label=None
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}
self.referencePoints[location] = {'Twiss':{twiss.split('=')[0].strip().lower():float(twiss.split('=')[1].strip()) for twiss in fields},'Label':label}
if 'Description:' in line:
tags = line.split('Description:')
description = tags[1].strip()
@@ -51,7 +60,9 @@ class MatchMaker:
target = 'SATBD01'
else:
target = 'SARUN20'
madx = CMadX()
f = io.StringIO()
madx = CMadX(f)
madx.E0 = 2000
om.setBranch(target, 'SINLH01')
madx.updateLattice(om, target) # write lattice
@@ -60,12 +71,23 @@ class MatchMaker:
if not variables is None:
madx.definePresets(variables)
if Injector:
if self.signal:
self.signal.emit('Matching Injector ...')
madx.madx.call(self.scriptdir+'/matchInjector.madx', chdir=True)
self.updateOnlineModel(om,madx.madx, 's[i1].*k1|s20sy01.*k1')
self.parseMatchOutput(f.getvalue().split('\n'),'Injector')
if Athos:
f.flush()
if self.signal:
self.signal.emit('Matching Athos ...')
madx.madx.call(self.scriptdir+'/matchAthos.madx', chdir=True)
self.updateOnlineModel(om, madx.madx, 'sat.*k1|s20sy02.*m[kq]')
self.parseMatchOutput(f.getvalue().split('\n'), 'Athos')
if Aramis:
f.flush()
if self.signal:
self.signal.emit('Matching Aramis ...')
if target=='SATBD01':
target = 'SARUN20'
om.setBranch(target, 'SINLH01')
@@ -73,9 +95,41 @@ class MatchMaker:
madx.commonHeader('SwissFEL', '#s/#e', None) # sets header
madx.madx.call(self.scriptdir + '/initTwiss.madx')
madx.madx.call(self.scriptdir + '/matchAramis.madx', chdir=True)
self.updateOnlineModel(om, madx.madx, 's[3a][0r].*k1|s20[bm][ca].*k1')
self.updateOnlineModel(om, madx.madx, 's[3a][0r].*k1|s20sy03.*k1')
self.parseMatchOutput(f.getvalue().split('\n'), 'Aramis')
if self.signal:
self.signal.emit('Matching done')
return madx.madx.table.twiss
def parseMatchOutput(self, result,prefix,full=False):
isMatch = False
penalty = 1
report=[]
for line in result:
if full:
print(line)
continue
if 'MATCH SUMMARY' in line:
isMatch = True
continue
if 'VARIABLE "TAR"' in line:
isMatch = False
print("--------------------------------------")
print('MATCHING RESULTS: %s (error: %e)' % (prefix,penalty))
if penalty > 1e-5:
for rep in report:
print(rep)
penalty = 1
report.clear()
continue
if isMatch and len(line) > 4:
if 'Final Penal' in line:
penalty = float(line.split('=')[1].strip())
else:
report.append(line)
def updateOnlineModel(self,om,madx,filter):
reg = re.compile(filter)
for var in list(madx.globals):

View File

@@ -31,8 +31,12 @@ class ReferenceManager:
if i is 0:
tag = 'Start'
else:
tag = 'Matchpoint %d' % i
self.reference[tag]= {'Location':key,'Twiss':matchmaker.referencePoints[key]}
label = matchmaker.referencePoints[key]['Label']
if label is None:
tag = 'Matchpoint %d' % i
else:
tag = label
self.reference[tag]= {'Location':key,'Twiss':matchmaker.referencePoints[key]['Twiss']}
self.updateReferenceComboBox()
def swithToUserDefinedLocation(self):