Holy List Release on 2025_08_18_14_56_36

This commit is contained in:
2025-08-18 14:56:37 +02:00
parent b466fe561e
commit aa55882e47
23 changed files with 1895 additions and 3606 deletions

View File

@@ -0,0 +1,363 @@
betax0=10;
alphax0=0;
betay0=10;
alphay0=0;
Twiss0: beta0,betx=betax0,alfy=alphay0,bety=betay0,alfy=alphay0;
Twisssep: beta0,betx=40,alfx=0,bety=60,alfy=5;
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;
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<3;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,bety<100;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,betx<150;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,bety<50;
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;
s30cb01.mqua430.k1=0.2;
s30cb02.mqua430.k1=-0.2;
muLin3=0.2;
match,SEQUENCE=swissfel,range=S30cb01$start/s30cb02$end;
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=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);
plot,haxis=s,vaxis=betx,bety,colour=100;
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;
s20cb03.mqua430.k1=0;
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s30cb02$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=s20cb03.mqua430.k1,step=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb01$start,betx=nbetx;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb01$start,bety=nbety;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb01$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb01$start,alfy=nalfy;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
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;
ENDMATCH;
!L = 9;
!alpha = 1.5;
!beta = alpha*L;
!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;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
Select,flag=Error,pattern="SPO.*";
EALIGN,DY=0.01;
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;
PSYSKICK=0;
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;
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=S30SY01$start/sarma01.mqua010,beta0=twisspor;
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=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;
Vary,name=sarun03.mqua080.k1,step=0.0001;
constraint,sequence=swissfel,range=sarun03$end,mux=muAR;
constraint,sequence=swissfel,range=sarun03$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;
SARUN01.mqua080.k1=sarun03.mqua080.k1;
sarma02.mqua050.k1=0;
sarma02.mqua120.k1=0.7*sarun02.mqua080.k1;
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;
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;
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;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=S30SY01$start/sarun19$end,beta0=twisspor;
plot,haxis=s,vaxis=betx,bety,range=sarcl02$start/sarun18$end,colour=100;
value, table(twiss,sarun19.mqua080$start,betx);
value, table(twiss,sarun19.mqua080$start,alfx);
value, table(twiss,sarun19.mqua080$start,bety);
value, table(twiss,sarun19.mqua080$start,alfy);
twiss,SEQUENCE=swissfel,range=#s/sarun19$end,beta0=twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/sarun18$end,colour=100;
exit;

View File

@@ -0,0 +1,320 @@
!!!!!!!!!!!!!!!!! septum
betax0=10;
alphax0=0;
betay0=10;
alphay0=0;
Twiss0: beta0,betx=betax0,alfy=alphay0,bety=betay0,alfy=alphay0;
Twisssep: beta0,betx=40,alfx=0,bety=60,alfy=5;
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;
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
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;
twiss,SEQUENCE=swissfel,range=s20sy02$start/S20SY02$END,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=y,dy,range=#s/#e,colour=100;
satsy01.mqua040.k1=0.8;
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/satsy02$end,beta0=twisssep;
VARY,NAME=satsy01.mqua010.k1,STEP=0.0001;
VARY,NAME=satsy01.mqua020.k1,STEP=0.0001;
VARY,NAME=satsy01.mqua030.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua010.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,DX=0.0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,DPX=0.0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mbnd200,DY=0.0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mbnd200,DPY=0.0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/Satsy02.mbnd200,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
exit;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep;
VARY,NAME=satsy03.mqua110.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mbnd200,DX=0.0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
satsy02.mqua205.k1=1.6;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep;
!VARY,NAME=satsy02.mqua205.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua210.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua220.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua230.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua240.k1,STEP=0.0001;
!CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua220,betx=beta;
!CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua220,bety=beta;
!CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua220,alfx=alpha;
!CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua220,alfy=alpha;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,betx=5;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,bety=4;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,alfx=1.77;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,alfy=-1.04;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,X<0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/Satsy03.mbnd200,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satbc01$end,beta0=twisssep;
VARY,NAME=satsy03.mqua210.k1,STEP=0.0001;
VARY,NAME=satsy03.mqua220.k1,STEP=0.0001;
VARY,NAME=satsy03.mqua230.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd400,BETX<5;
CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd400,BETY<60;
CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd100,BETX<80;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
CL1.k1 := -1.3;
CL2.k1 := 1.1;
satcl01.mqua120.k1 := CL1.k1;
satcl01.mqua130.k1 := CL2.k1;
satcl01.mqua180.k1 := CL2.k1;
satcl01.mqua190.k1 := CL1.k1;
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;
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=s20sy02$start/satcl01$end,beta0=twisssep;
VARY,NAME=satbc01.mqua410.k1,STEP=0.0001;
VARY,NAME=satbc01.mqua420.k1,STEP=0.0001;
VARY,NAME=satbc01.mqua430.k1,STEP=0.0001;
VARY,NAME=satbc01.mqua440.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, alfx = 0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, alfy = 0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, betx > 10;
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, bety < 5;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
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<18;
CONSTRAINT,SEQUENCE=SwissFEL,range= satdi01.dscr065$start, bety<18;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/satdi01.dscr065$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
scl:=1.5;
ss:=0.83;
satdi01.mqua080.k1:=0.8*scl;
satdi01.mqua220.k1:=-0.52*scl;
satdi01.mqua230.k1:=-1.2*ss;
satdi01.mqua250.k1:=1.2*ss;
satdi01.mqua260.k1:=1.2*ss;
satdi01.mqua280.k1:=-1.2*ss+0.2;
satdi01.mqua300.k1=0;
satcb01.mqua230.k1=0;
satcb01.mqua430.k1=0;
satcb02.mqua230.k1=0;
satcb02.mqua430.k1=0;
L = 26.;
alpha=0.7;
beta=L*alpha;
MATCH, SEQUENCE=SwissFEL,range=s20sy02$start/satdi01$end,beta0=twisssep;
VARY,NAME=satdi01.mqua080.k1,STEP=0.0001,lower=-1.8,upper=1.8;
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;
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;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua280$end,betx=beta;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua280$end,alfx=alpha;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua280$end,bety=beta;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua280$end,alfy=alpha;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua300$start,x<10;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua300$start,y<10;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua300$start,DX<10;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/satma01$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/satma01.dscr030$start,colour=100;
!!!!!!!!!!!!!!!!!!!!!! Athos undulator
pol=-1;
satun06.mqua080.k1 := -1.699673315*pol;
satun07.mqua080.k1 := 1.746074065*pol;
muAT=0.15;
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;
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);
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;
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;
scl=4.0;
satcb01.mqua230.k1=scl*0.2*0;
satcb01.mqua430.k1=-scl*0.2*0;
satcb02.mqua230.k1=scl*0.2;
satcb02.mqua430.k1=-scl*0.2;
satma01.mqua050.k1=0;
satma01.mqua120.k1=0;
satma01.mqua140.k1=0;
satma01.mqua160.k1=0;
satma01.mqua180.k1=0;
satma01.mqua230.k1=0;
satma01.mqua250.k1=0;
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=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.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;
twiss,SEQUENCE=swissfel,range=s20sy02$start/satun11$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/#e,colour=100;
!

View File

@@ -0,0 +1,246 @@
option,-echo;
betax0=10;
alphax0=0;
betay0=10;
alphay0=0;
Twiss0: beta0,betx=betax0,alfy=alphay0,bety=betay0,alfy=alphay0;
sinlh01.mqua020.k1 = 0;
sinlh01.mqua040.k1 = 0;
sinlh01.mqua070.k1 = 0;
sinsb03.mqua110.k1 = 0;
sinsb03.mqua130.k1 = 0;
sinsb03.mqua210.k1 = 0;
sinsb03.mqua230.k1 = 0;
L = 8.72;
alpha = 1;
beta = alpha*L;
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.MQUA070.k1,STEP=0.0001;
VARY,NAME=sinsb03.MQUA130.k1,STEP=0.0001;
VARY,NAME=sinsb03.MQUA230.k1,STEP=0.0001;
VARY,NAME=sinsb04.MQUA130.k1,STEP=0.0001;
VARY,NAME=sinsb04.MQUA230.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, alfx = alpha;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, alfy = alpha;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, betx = beta;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, bety = beta;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua130$end, betx < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua130$end, bety < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh01.mqua070$end, betx < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh01.mqua070$end, bety < 100;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
sinbc01.mqua020.k1=0.0;
sinbc01.mqua050.k1=0;
sinbc01.mqua070.k1=0;
sinbc01.mqua090.k1=0;
sinbc01.mqua110.k1=0;
twiss,SEQUENCE=swissfel,range=#s/sinbc01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
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;
VARY,NAME=sinbc01.MQUA070.k1,STEP=0.0001;
VARY,NAME=sinbc01.MQUA090.k1,STEP=0.0001;
VARY,NAME=sinbc01.MQUA110.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, betx < 5;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, alfx = 0;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc01.mqua070$end, bety < 32;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, bety < 59;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc01$end, x = 0;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/sinbc02$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
sinma01.mqua020.k1=-0.1;
sinma01.mqua030.k1=0;
sinma01.mqua040.k1=0;
sincb01.mqua230.k1=0;
sincb01.mqua430.k1=0;
sindi01.mqua020.k1=0;
sindi01.mqua070.k1=0;
sindi02.mqua020.k1=0.0;
sindi02.mqua030.k1=0.0;
sindi02.mqua050.k1=0;
sindi02.mqua060.k1=0;
sindi02.mqua090.k1=0;
bc1betx=11.1557;
bc1alfx=-1.17;
bc1bety=50;
bc1alfy=0;
beta=50;
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;
VARY,NAME=sinma01.MQUA040.k1,STEP=0.0001;
VARY,NAME=sincb01.MQUA230.k1,STEP=0.0001;
VARY,NAME=sincb01.MQUA430.k1,STEP=0.0001;
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=sindi02.mqua020$start,bety=bc1bety;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,alfy=bc1alfy;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,betx=bc1betx;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,alfx=bc1alfx;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinma01$end, betx < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinma01$end, bety < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sincb01$end, betx < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sincb01$end, bety < 100;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/sindi02$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=sinbc02$start/#e,colour=100;
s10cb01.mqua230.k1=0.2;
s10cb01.mqua430.k1=-0.2;
muLin1=0.20;
match,SEQUENCE=swissfel,range=S10cb01$start/s10cb01$end;
Vary,name=S10CB01.MQUA230.k1,step=0.0001;
Vary,name=S10CB01.MQUA430.k1,step=0.0001;
constraint,sequence=swissfel,range=s10cb01$end,mux=muLin1;
constraint,sequence=swissfel,range=s10cb01$end,muy=muLin1;
lmdif,calls=100,tolerance=1e-21;
endmatch;
s10cb02.mqua230.k1 = s10cb01.mqua230.k1;
s10cb02.mqua430.k1 = s10cb01.mqua430.k1;
twiss,SEQUENCE=swissfel,range=s10cb01$start/s10cb01$end;
nbetx=table(twiss,s10cb01$end,betx);
nalfx=table(twiss,s10cb01$end,alfx);
nbety=table(twiss,s10cb01$end,bety);
nalfy=table(twiss,s10cb01$end,alfy);
plot,haxis=s,vaxis=betx,bety,colour=100;
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,dx=0;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,dy=0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/s10cb02$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
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;
S10CB09.MQUA430.k1=S10CB02.MQUA230.k1;
S10CB10.MQUA230.k1=S10CB02.MQUA430.k1;
S10CB10.MQUA430.k1=S10CB02.MQUA230.k1;
S10CB11.MQUA230.k1=S10CB02.MQUA430.k1;
s10ma01.mqua010.k1=0.;
s10ma01.mqua020.k1=0;
s10ma01.mqua030.k1=0;
s10ma01.mqua040.k1=0;
s10ma01.mqua050.k1=0;
s10ma01.mqua060.k1=0;
s10ma01.mqua070.k1=0;
s10ma01.mqua080.k1=0;
twiss,SEQUENCE=swissfel,range=#s/s10ma01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
L = 10;
alpha = 0.85;
beta = alpha*L;
MATCH,SEQUENCE=SwissFEL,range=#s/s10ma01$end,beta0 = Twiss0;
VARY,NAME=s10ma01.mqua010.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s10ma01.mqua030.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s10ma01.mqua050.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s10ma01.mqua070.k1,STEP=0.0001,lower=-5.5,upper=5.5;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01.mqua070$end,betx=beta;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01.mqua070$end,alfx=alpha;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01.mqua070$end,bety=beta;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01.mqua070$end,alfy=alpha;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01$start,x=0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/s10ma01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=s10cb09$start/#e,colour=100;
s10ma01.mqua130.k1=0.7;
s20cb01.mqua430.k1=0.0;
MATCH,SEQUENCE=SwissFEL,range=#s/s20sy02$start,beta0 = Twiss0;
VARY,NAME=s20cb01.mqua430.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua020.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua030.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua050.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua080.k1,STEP=0.0001,lower=-5.5,upper=5.5;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,betx=40;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfx=0;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,bety=60;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfy=5;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01.mqua020$end,bety<80;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/s20sy01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=s10ma01$start/#e,colour=100;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;

363
Matching/matchAramis.madx Normal file
View File

@@ -0,0 +1,363 @@
betax0=10;
alphax0=0;
betay0=10;
alphay0=0;
Twiss0: beta0,betx=betax0,alfy=alphay0,bety=betay0,alfy=alphay0;
Twisssep: beta0,betx=40,alfx=0,bety=60,alfy=5;
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;
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<3;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,bety<100;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,betx<150;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,bety<50;
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;
s30cb01.mqua430.k1=0.2;
s30cb02.mqua430.k1=-0.2;
muLin3=0.2;
match,SEQUENCE=swissfel,range=S30cb01$start/s30cb02$end;
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=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);
plot,haxis=s,vaxis=betx,bety,colour=100;
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;
s20cb03.mqua430.k1=0;
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s30cb02$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=s20cb03.mqua430.k1,step=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb01$start,betx=nbetx;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb01$start,bety=nbety;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb01$start,alfx=nalfx;
CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb01$start,alfy=nalfy;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
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;
ENDMATCH;
!L = 9;
!alpha = 1.5;
!beta = alpha*L;
!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;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
Select,flag=Error,pattern="SPO.*";
EALIGN,DY=0.01;
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;
PSYSKICK=0;
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;
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=S30SY01$start/sarma01.mqua010,beta0=twisspor;
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=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;
Vary,name=sarun03.mqua080.k1,step=0.0001;
constraint,sequence=swissfel,range=sarun03$end,mux=muAR;
constraint,sequence=swissfel,range=sarun03$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;
SARUN01.mqua080.k1=sarun03.mqua080.k1;
sarma02.mqua050.k1=0;
sarma02.mqua120.k1=0.7*sarun02.mqua080.k1;
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;
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;
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;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=S30SY01$start/sarun19$end,beta0=twisspor;
plot,haxis=s,vaxis=betx,bety,range=sarcl02$start/sarun18$end,colour=100;
value, table(twiss,sarun19.mqua080$start,betx);
value, table(twiss,sarun19.mqua080$start,alfx);
value, table(twiss,sarun19.mqua080$start,bety);
value, table(twiss,sarun19.mqua080$start,alfy);
twiss,SEQUENCE=swissfel,range=#s/sarun19$end,beta0=twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/sarun18$end,colour=100;
exit;

320
Matching/matchAthos.madx Normal file
View File

@@ -0,0 +1,320 @@
!!!!!!!!!!!!!!!!! septum
betax0=10;
alphax0=0;
betay0=10;
alphay0=0;
Twiss0: beta0,betx=betax0,alfy=alphay0,bety=betay0,alfy=alphay0;
Twisssep: beta0,betx=40,alfx=0,bety=60,alfy=5;
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;
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
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;
twiss,SEQUENCE=swissfel,range=s20sy02$start/S20SY02$END,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=y,dy,range=#s/#e,colour=100;
satsy01.mqua040.k1=0.8;
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/satsy02$end,beta0=twisssep;
VARY,NAME=satsy01.mqua010.k1,STEP=0.0001;
VARY,NAME=satsy01.mqua020.k1,STEP=0.0001;
VARY,NAME=satsy01.mqua030.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua010.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,DX=0.0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,DPX=0.0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mbnd200,DY=0.0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mbnd200,DPY=0.0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/Satsy02.mbnd200,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
exit;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep;
VARY,NAME=satsy03.mqua110.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mbnd200,DX=0.0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
satsy02.mqua205.k1=1.6;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep;
!VARY,NAME=satsy02.mqua205.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua210.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua220.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua230.k1,STEP=0.0001;
VARY,NAME=satsy02.mqua240.k1,STEP=0.0001;
!CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua220,betx=beta;
!CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua220,bety=beta;
!CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua220,alfx=alpha;
!CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua220,alfy=alpha;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,betx=5;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,bety=4;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,alfx=1.77;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,alfy=-1.04;
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,X<0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/Satsy03.mbnd200,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satbc01$end,beta0=twisssep;
VARY,NAME=satsy03.mqua210.k1,STEP=0.0001;
VARY,NAME=satsy03.mqua220.k1,STEP=0.0001;
VARY,NAME=satsy03.mqua230.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd400,BETX<5;
CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd400,BETY<60;
CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd100,BETX<80;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
CL1.k1 := -1.3;
CL2.k1 := 1.1;
satcl01.mqua120.k1 := CL1.k1;
satcl01.mqua130.k1 := CL2.k1;
satcl01.mqua180.k1 := CL2.k1;
satcl01.mqua190.k1 := CL1.k1;
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;
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=s20sy02$start/satcl01$end,beta0=twisssep;
VARY,NAME=satbc01.mqua410.k1,STEP=0.0001;
VARY,NAME=satbc01.mqua420.k1,STEP=0.0001;
VARY,NAME=satbc01.mqua430.k1,STEP=0.0001;
VARY,NAME=satbc01.mqua440.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, alfx = 0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, alfy = 0;
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, betx > 10;
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, bety < 5;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
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<18;
CONSTRAINT,SEQUENCE=SwissFEL,range= satdi01.dscr065$start, bety<18;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/satdi01.dscr065$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
scl:=1.5;
ss:=0.83;
satdi01.mqua080.k1:=0.8*scl;
satdi01.mqua220.k1:=-0.52*scl;
satdi01.mqua230.k1:=-1.2*ss;
satdi01.mqua250.k1:=1.2*ss;
satdi01.mqua260.k1:=1.2*ss;
satdi01.mqua280.k1:=-1.2*ss+0.2;
satdi01.mqua300.k1=0;
satcb01.mqua230.k1=0;
satcb01.mqua430.k1=0;
satcb02.mqua230.k1=0;
satcb02.mqua430.k1=0;
L = 26.;
alpha=0.7;
beta=L*alpha;
MATCH, SEQUENCE=SwissFEL,range=s20sy02$start/satdi01$end,beta0=twisssep;
VARY,NAME=satdi01.mqua080.k1,STEP=0.0001,lower=-1.8,upper=1.8;
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;
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;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua280$end,betx=beta;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua280$end,alfx=alpha;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua280$end,bety=beta;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua280$end,alfy=alpha;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua300$start,x<10;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua300$start,y<10;
CONSTRAINT,SEQUENCE=swissfel,range=satdi01.mqua300$start,DX<10;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/satma01$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/satma01.dscr030$start,colour=100;
!!!!!!!!!!!!!!!!!!!!!! Athos undulator
pol=-1;
satun06.mqua080.k1 := -1.699673315*pol;
satun07.mqua080.k1 := 1.746074065*pol;
muAT=0.15;
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;
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);
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;
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;
scl=4.0;
satcb01.mqua230.k1=scl*0.2*0;
satcb01.mqua430.k1=-scl*0.2*0;
satcb02.mqua230.k1=scl*0.2;
satcb02.mqua430.k1=-scl*0.2;
satma01.mqua050.k1=0;
satma01.mqua120.k1=0;
satma01.mqua140.k1=0;
satma01.mqua160.k1=0;
satma01.mqua180.k1=0;
satma01.mqua230.k1=0;
satma01.mqua250.k1=0;
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=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.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;
twiss,SEQUENCE=swissfel,range=s20sy02$start/satun11$end,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=satdi01$start/#e,colour=100;
!

246
Matching/matchInjector.madx Normal file
View File

@@ -0,0 +1,246 @@
option,-echo;
betax0=10;
alphax0=0;
betay0=10;
alphay0=0;
Twiss0: beta0,betx=betax0,alfy=alphay0,bety=betay0,alfy=alphay0;
sinlh01.mqua020.k1 = 0;
sinlh01.mqua040.k1 = 0;
sinlh01.mqua070.k1 = 0;
sinsb03.mqua110.k1 = 0;
sinsb03.mqua130.k1 = 0;
sinsb03.mqua210.k1 = 0;
sinsb03.mqua230.k1 = 0;
L = 8.72;
alpha = 1;
beta = alpha*L;
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.MQUA070.k1,STEP=0.0001;
VARY,NAME=sinsb03.MQUA130.k1,STEP=0.0001;
VARY,NAME=sinsb03.MQUA230.k1,STEP=0.0001;
VARY,NAME=sinsb04.MQUA130.k1,STEP=0.0001;
VARY,NAME=sinsb04.MQUA230.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, alfx = alpha;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, alfy = alpha;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, betx = beta;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, bety = beta;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua130$end, betx < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua130$end, bety < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh01.mqua070$end, betx < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh01.mqua070$end, bety < 100;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
sinbc01.mqua020.k1=0.0;
sinbc01.mqua050.k1=0;
sinbc01.mqua070.k1=0;
sinbc01.mqua090.k1=0;
sinbc01.mqua110.k1=0;
twiss,SEQUENCE=swissfel,range=#s/sinbc01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
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;
VARY,NAME=sinbc01.MQUA070.k1,STEP=0.0001;
VARY,NAME=sinbc01.MQUA090.k1,STEP=0.0001;
VARY,NAME=sinbc01.MQUA110.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, betx < 5;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, alfx = 0;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc01.mqua070$end, bety < 32;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, bety < 59;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc01$end, x = 0;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/sinbc02$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
sinma01.mqua020.k1=-0.1;
sinma01.mqua030.k1=0;
sinma01.mqua040.k1=0;
sincb01.mqua230.k1=0;
sincb01.mqua430.k1=0;
sindi01.mqua020.k1=0;
sindi01.mqua070.k1=0;
sindi02.mqua020.k1=0.0;
sindi02.mqua030.k1=0.0;
sindi02.mqua050.k1=0;
sindi02.mqua060.k1=0;
sindi02.mqua090.k1=0;
bc1betx=11.1557;
bc1alfx=-1.17;
bc1bety=50;
bc1alfy=0;
beta=50;
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;
VARY,NAME=sinma01.MQUA040.k1,STEP=0.0001;
VARY,NAME=sincb01.MQUA230.k1,STEP=0.0001;
VARY,NAME=sincb01.MQUA430.k1,STEP=0.0001;
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=sindi02.mqua020$start,bety=bc1bety;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,alfy=bc1alfy;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,betx=bc1betx;
CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,alfx=bc1alfx;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinma01$end, betx < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sinma01$end, bety < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sincb01$end, betx < 100;
CONSTRAINT,SEQUENCE=SwissFEL,range=sincb01$end, bety < 100;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/sindi02$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=sinbc02$start/#e,colour=100;
s10cb01.mqua230.k1=0.2;
s10cb01.mqua430.k1=-0.2;
muLin1=0.20;
match,SEQUENCE=swissfel,range=S10cb01$start/s10cb01$end;
Vary,name=S10CB01.MQUA230.k1,step=0.0001;
Vary,name=S10CB01.MQUA430.k1,step=0.0001;
constraint,sequence=swissfel,range=s10cb01$end,mux=muLin1;
constraint,sequence=swissfel,range=s10cb01$end,muy=muLin1;
lmdif,calls=100,tolerance=1e-21;
endmatch;
s10cb02.mqua230.k1 = s10cb01.mqua230.k1;
s10cb02.mqua430.k1 = s10cb01.mqua430.k1;
twiss,SEQUENCE=swissfel,range=s10cb01$start/s10cb01$end;
nbetx=table(twiss,s10cb01$end,betx);
nalfx=table(twiss,s10cb01$end,alfx);
nbety=table(twiss,s10cb01$end,bety);
nalfy=table(twiss,s10cb01$end,alfy);
plot,haxis=s,vaxis=betx,bety,colour=100;
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,dx=0;
CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,dy=0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/s10cb02$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
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;
S10CB09.MQUA430.k1=S10CB02.MQUA230.k1;
S10CB10.MQUA230.k1=S10CB02.MQUA430.k1;
S10CB10.MQUA430.k1=S10CB02.MQUA230.k1;
S10CB11.MQUA230.k1=S10CB02.MQUA430.k1;
s10ma01.mqua010.k1=0.;
s10ma01.mqua020.k1=0;
s10ma01.mqua030.k1=0;
s10ma01.mqua040.k1=0;
s10ma01.mqua050.k1=0;
s10ma01.mqua060.k1=0;
s10ma01.mqua070.k1=0;
s10ma01.mqua080.k1=0;
twiss,SEQUENCE=swissfel,range=#s/s10ma01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
L = 10;
alpha = 0.85;
beta = alpha*L;
MATCH,SEQUENCE=SwissFEL,range=#s/s10ma01$end,beta0 = Twiss0;
VARY,NAME=s10ma01.mqua010.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s10ma01.mqua030.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s10ma01.mqua050.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s10ma01.mqua070.k1,STEP=0.0001,lower=-5.5,upper=5.5;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01.mqua070$end,betx=beta;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01.mqua070$end,alfx=alpha;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01.mqua070$end,bety=beta;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01.mqua070$end,alfy=alpha;
CONSTRAINT,SEQUENCE=swissfel,range=s10ma01$start,x=0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/s10ma01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=s10cb09$start/#e,colour=100;
s10ma01.mqua130.k1=0.7;
s20cb01.mqua430.k1=0.0;
MATCH,SEQUENCE=SwissFEL,range=#s/s20sy02$start,beta0 = Twiss0;
VARY,NAME=s20cb01.mqua430.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua020.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua030.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua050.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua080.k1,STEP=0.0001,lower=-5.5,upper=5.5;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,betx=40;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfx=0;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,bety=60;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfy=5;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01.mqua020$end,bety<80;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=#s/s20sy01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=s10ma01$start/#e,colour=100;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;

34
Matching/matchLattice.py Normal file
View File

@@ -0,0 +1,34 @@
from onlinemodel.core import Facility
from onlinemodel.madx import CMadX
def match(athos=True):
om = Facility(init=1, alt=2)
if athos:
target='SATBD01'
else:
target='SARBD01'
om.setBranch(target, 'SINLH01')
madx = CMadX()
madx.E0 = 2000
madx.updateLattice(om, target) # write lattice
madx.commonHeader('SwissFEL', '#s/#e', None) # sets header
madx.madx.call('Matching/matchInjector.madx', chdir=True)
if athos:
madx.madx.call('Matching/matchAthos.madx', chdir=True)
else:
madx.madx.call('Matching/matchAramis.madx', chdir=True)
match(True)

View File

@@ -1,59 +0,0 @@
class ApplicationTemplate:
def __init__(self):
self.switch=0
self.path='.'
self.avoidPreset=0
self.MapIndx=[]
self.MapIndxSave=[]
def isType(self,key):
return 0
def demandMapID(self):
return 0
def writeLine(self,line,seq):
return
def writeDrift(self,ele):
return
def writeVacuum(self,ele):
self.writeMarker(ele)
return
def writeAlignment(self,ele):
self.writeMarker(ele)
return
def writeBend(self,ele):
return
def writeQuadrupole(self,ele):
return
def writeCorrector(self,ele):
return
def writeSextupole(self,ele):
return
def writeRF(self,ele):
return
def writeUndulator(self,ele):
return
def writeDiagnostic(self,ele):
return
def writeMarker(self,ele):
return
def writeSolenoid(self,ele):
return

View File

@@ -1,115 +0,0 @@
import math
import os
import sys
from OMAppTemplate import ApplicationTemplate
import numpy as np
from string import *
from os import system
#--------
# Energy Manager Interface
class EnergyManager(ApplicationTemplate):
def __init__(self):
ApplicationTemplate.__init__(self)
self.p0=0
self.p=0
self.Energy={}
def update(self,p0):
self.p0=p0
def writeLine(self,line,seq):
# print(line.Name)
'Nothing to do?'
def register(self,ele,Egain=0.0):
if (self.MapIndx!=self.MapIndxSave): # New line comes
self.p=0
self.MapIndxSave=self.MapIndx
self.Energy[ele.Name]=[self.p,Egain]
if ('cor' in ele.__dict__) or ('corx' in ele.__dict__):
name=ele.Name.replace('MQUA','MCRX').replace('MBND','MCRX').replace('UIND','MCRX').replace('MCOR','MCRX')
self.Energy[name]=[self.p,Egain]
if 'cory' in ele.__dict__:
name=ele.Name.replace('MQUA','MCRY').replace('MBND','MCRY').replace('UIND','MCRY').replace('MCOR','MCRY')
self.Energy[name]=[self.p,Egain]
# Double registration for later convenience
# ... 07.08.2015 Removed. After gaining some experience, it turns out inconvenient rather than useful.
#self.Energy[EpicsName]=[self.p,Egain]
return
def demandMapID(self):
'Energy manager always requests Map ID to Layout manger'
return 1
def writeVacuum(self,ele):
self.writeMarker(ele)
return
def writeAlignment(self,ele):
self.writeMarker(ele)
return
def writeBend(self,ele):
# Here, it is possible to implement Egain (loss) from CSR
# EgainCSR=***
# self.Energy[ele.Name]=[self.p,EgainCSR]
self.register(ele)
def writeQuadrupole(self,ele):
self.register(ele)
def writeCorrector(self,ele):
self.register(ele)
def writeSextupole(self,ele):
self.register(ele)
def writeRF(self,ele):
if (self.MapIndx!=self.MapIndxSave): # New line comes
self.p=0
self.MapIndxSave=self.MapIndx
if ('Gradient' in ele.__dict__) and ('Phase' in ele.__dict__): # needs a check for TDS to not give energy gain
if 'TDS' in ele.Name:
Egain=0.0
else:
E=ele.Gradient
V=E*ele.Length
phase=ele.Phase*math.pi/180.0
Egain=V*math.sin(phase)
# print(ele.Name, ' - Energy Gain:',Egain*1e-6,ele.Gradient*1e-6,self.p*1e-6)
else:
Egain=0.0
self.Energy[ele.Name]=[self.p,Egain,ele.Length]
self.p=self.p+Egain
def writeUndulator(self,ele):
self.register(ele)
def writeDiagnostic(self,ele):
self.register(ele)
def writeSolenoid(self,ele):
self.register(ele)
def writeMarker(self,ele):
self.register(ele)
def demandMapID(self):
'Energy manager always requests Map ID to Layout manger'
return 1

View File

@@ -1,319 +0,0 @@
from copy import deepcopy
from string import *
import math
import re
import numpy as np
import sys
#from OMLayout import SwissFEL
from OMFacilityAccess import FacilityAccess
from OMType import *
from OMEnergyManager import *
from OMLayout import SwissFEL
class Facility(FacilityAccess):
def __init__(self,init=0,alt=0,layout=None):
# init=0 : no initialization of dynamic parameters
# init=1 : initialization of dynamic parameters as in OMLayout.initialize()
# init=2 : initialization of dynamic parameters as in OMLayout.initialize() but dipoles are forcibly turned off
# init=3 : initialization of dynamic parameters as in OMLayout.initialize() but branch dipoles are forcibly turned off
# Note that FacilityContainer.BeamPath() set the branch bend to the design angle
# alt= 0 : select current layout in OMLayout
# alt <> 0: select alternative Layout in OMLayout
# layout = None : loads the curren tlayout
# layout = '10.3.2': loads SwissFEL from the module file OMLayout_10_3_2.py
Layout=SwissFEL(alt) # instanciate the layout
if layout is not None and Layout.Version is not layout:
module_name='OMLayout_%s' % layout.replace('.','_')
module=__import__(module_name)
Layout=module.SwissFEL(alt)
print('Importing Layout Module:',module_name)
self.Version=Layout.Version
print('Initializing Lattice',self.Version,flush=True);
self.PartsList=Layout.build() # generate the lattice and return the beamlines
self.EM=EnergyManager()
# Note that the subsections have also a direct reference to the elements but if elements are altered
# in ElementDB then the SectionDB is automatically updated with the new values.
self.ElementDB={} # dictionary to hold all elements of the facility
self.SectionDB={} # dictionary of subsections with 7 Letter ID
self.IntegratedCorrDB={} # Database for integrated correctors
# flatten beamlines so that only one outer container exists with the section container, e.g. SINSB01
for p in self.PartsList:
line=LineContainer('') #
p[0].flatten('S',line,self.ElementDB,self.SectionDB,self.IntegratedCorrDB)
p[0]=line # replace the current nested line container with the list of atomic subsection
# initiate the element values with default values
if init:
Layout.initialize(self.ElementDB)
if init==2:
self.turnOffBends()
if init==3:
self.turnOffBranchBends()
# define the mapping of the element, defining their position and asignment to a branch
self.mapping()
# setup a dictionary of bending magnets.
BCdict={}
self.BranchBend=[]
for k in self.ElementDB.keys():
if isinstance(self.ElementDB[k],Dipole):
try:
self.ElementDB[k].branch
# print(k)
self.BranchBend.append(k)
except:
None
try:
self.ElementDB[k].BC
if self.ElementDB[k].BC in BCdict:
# It must be the element itself (not Element.Name) becuase the new feature altSection allows the same element name in the altered section...
BCdict[self.ElementDB[k].BC].append(self.ElementDB[k])
else:
BCdict[self.ElementDB[k].BC]=[self.ElementDB[k]]
except:
None
# get braching points and bunch compressor magnets
self.BC=[]
self.BCBPM={}
for k in BCdict.keys():
BC=BCdict[k]
BCsorted=[0]*len(BC)
for i in range(0,len(BC)):
judge=[]
for j in range(0,len(BC)):
if i!=j:
judge.append(self.isUpstream(BC[i].Name,BC[j].Name))
jsum=sum(judge)
BCsorted[len(BC)-jsum-1]=BC[i]
if len(BCsorted)==4:
sect=BCsorted[3].Name.split('.')[0]
for s in self.SectionDB.keys():
if s==sect:
#if BCsorted[3].altSection==s.altSection: # altSection is turned off for now... 29.05.2015
#arm=self.SectionDB[s].position(self.ElementDB[BCsorted[3].Name])-self.SectionDB[s].position(self.ElementDB[BCsorted[2].Name])
arm=self.SectionDB[s].position(BCsorted[3])-self.SectionDB[s].position(BCsorted[2])
BCsorted.append(arm)
self.BCBPM[BCsorted[0].Name]=['','',0]
for ele in self.SectionDB[s].Element:
if 'DBPM' in ele.Name: # This does not detect Laser heater...
if self.isUpstream(BCsorted[0].Name,ele.Name) and self.isUpstream(ele.Name,BCsorted[1].Name):
self.BCBPM[BCsorted[0].Name][0]=ele # BPM between the first and second dipoles
if self.isUpstream(BCsorted[2].Name,ele.Name) and self.isUpstream(ele.Name,BCsorted[3].Name):
self.BCBPM[BCsorted[0].Name][1]=ele # BPM between the third and fourth dipoles
self.BCBPM[BCsorted[0].Name][2]=self.SectionDB[s].position(BCsorted[3])+BCsorted[3].Length/2-self.SectionDB[s].position(ele)-ele.Length/2
self.BC.append(BCsorted)
# get list of first nd last magnetin bunch compressor.
self.BCstart={}
self.BCend={}
for ele in self.BC:
self.BCstart[ele[0]]=1
self.BCend[ele[-1]]=1
#initialize all element with the energy. All elements need to be registered first to avoid an error message of not registered elements
for ele in self.ElementDB.values():
self.EM.register(ele)
self.writeFacility(self.EM)
def turnOffBends(self):
for ele in self.ElementDB.values():
if isinstance(ele,Dipole):
ele.angle=0.0
def turnOffBranchBends(self):
for ele in self.ElementDB.values():
if isinstance(ele,Dipole) and ('branch' in ele.__dict__):
ele.angle=0.0
# end of initialization
#----------------------------------------------------------------------------------
def isUpstream(self,a,b):
# Tell you if a is upstream of b.
try:
A=self.ElementDB[a]
Amap=A.mapping
except:
try:
A=self.IntegratedCorrDB[a]
Amap=A.mapping
except:
print('Your input element name is not in Element data base...A:',a,flush=True)
return None
try:
B=self.ElementDB[b]
Bmap=B.mapping
except:
try:
B=self.IntegratedCorrDB[b]
Bmap=B.mapping
except:
print('Your input element name is not in Element data base...B:',b,flush=True)
return None
if Amap[0]==Bmap[0]: # Two elements are in the same part of the machine, easy case
if Amap[2]<Bmap[2]:
return True
else:
return False
myself=Bmap[0]
parent=999
while parent>=0:
parent=self.PartsList[myself][1]
if Amap[0]==parent:
branch=self.PartsList[myself][2]
if branch==-1:
return True # The part is connected to the paprent at the end, so Elem A is upstream of B
elif Amap[1]<=branch:
return True # The part is connected to the parent at a branch and Elem A is upstream of the branch, and thus upstream of B
elif Amap[1]>branch:
return False # The part is connected to the parent at a branch but Elem A is downstream of the branch and thus not upstream of B
myself=parent
return False # The part which includes Elem A is not upstream of Elem B
def mapping(self):
foundMarker={}
List1=[]
for i in range(0,len(self.PartsList)):
p=self.PartsList[i]
found=0
#line=self.BeamPath(i)
j=1
k=0
for subsec in p[0].Element:
for ele in subsec.Element:
if ele.Tag=='MKBR':
key=str(i)+'_'+str(j)
found=found+1
foundMarker[key]=ele.Name
j=j+1
k=k+1
ele.__dict__.update({'mapping':[i,j,k]})
#if ele.__dict__.has_key('cor') or ele.__dict__.has_key('corx') or ele.__dict__.has_key('cor'):
if 'cor' in ele.__dict__ or 'corx' in ele.__dict__ or 'cor' in ele.__dict__:
if ('MQUA' in ele.Name) or ('MBND' in ele.Name) or ('UIND' in ele.Name):
#if ele.__dict__.has_key('cor') or ele.__dict__.has_key('corx'):
if 'cor' in ele.__dict__ or 'corx' in ele.__dict__:
cname=ele.Name.replace('MQUA','MCRX').replace('MBND','MCRX').replace('UIND','MCRX')
cele=self.IntegratedCorrDB[cname]
cele.__dict__.update({'mapping':[i,j,k]})
#if ele.__dict__.has_key('cory'):
if 'cory' in ele.__dict__:
cname=ele.Name.replace('MQUA','MCRY').replace('MBND','MCRY').replace('UIND','MCRY')
cele=self.IntegratedCorrDB[cname]
cele.__dict__.update({'mapping':[i,j,k]})
section=self.SectionDB[subsec.Name]
section.__dict__.update({'mapping':i})
List1.append([p[1],p[2],found])
self.foundMarker=foundMarker
return List1
def BeamPath(self, PathIndx, Branch=0):
#Branch indicates that for a branching marker is searched and then stopped at the correct occurence (e.g. Branch=2 stops at the second marker)
if PathIndx<0 or PathIndx>len(self.PartsList)-1:
return None
if not isinstance(PathIndx,int):
return None
path=self.PartsList[PathIndx]
parentID=path[1] # reference to parent beamline (0 means root and has no parent)
branchID=path[2] # branching point: the nth occurence of a marker in the parent beam line. If negative -1 than line is appended to parent line
line=LineContainer('') # clear current line
if (branchID!=0): # get line from parents first
line=self.BeamPath(parentID,branchID)
foundMarker=0 # to count makers in a given line
for sec in path[0].Element: # loob over all subsection in a line
for ele in sec.Element: # check if the element of the subsection is a marker and increase counter if so
#if isinstance(ele,Dipole):
# ele.angle=ele.design_angle
if isinstance(ele,Marker):
foundMarker=foundMarker+1
if Branch>0 and foundMarker==Branch: # check whether the branching point is found
found=0 # find dipole before marker to sert to desing_angle
idx=sec.Element.index(ele)-1
while found==0 and idx >-1:
if isinstance(sec.Element[idx],Dipole):
# print('setting branching angle for',sec.Element[idx].Name,'for branch', Branch)
sec.Element[idx].angle=sec.Element[idx].design_angle;
found=1;
idx=idx-1;
secnew=LineContainer(sec.Name) # create a new line container to hold reduced section
for i in range(0,sec.Element.index(ele)):
ref=sec.Ref[sec.Element[i]]
secnew.append(sec.Element[i],ref['pos'],ref['ref']) # add element and its reference
line.append(secnew,0,'relative')
return line
else:
# check for dipoles to be set straight if not a branching point.
found=0; # search backwards from the marker
idx=sec.Element.index(ele)-1
while found==0 and idx >-1:
if isinstance(sec.Element[idx],Dipole):
sec.Element[idx].angle=0;
found=1;
idx=idx-1;
line.append(sec,0,'relative') # append subsection
return line
def writeFacility(self,app=None,simple=0,EM=None):
# Handle the entire facility at one time - experimental
# Particular application is the energy manager
if not app:
'no application, no action'
return
for i in range(0,len(self.PartsList)):
p=self.PartsList[i]
if 'demandMapID' in dir(app):
if app.demandMapID(): # app is asking which part is under writing
if i==len(self.PartsList)-1:
app.MapIndx=-i # Give a negative index for the last part
else:
app.MapIndx=i
if simple:
line=p[0] # this might be wrong if a branching has happen, because it takes the full cenn and not the adjusted on eup to branch
else:
line=self.BeamPath(self.PartsList.index(p))
print('Writing Beam line for: ', p[3],flush=True)
# if no energy manager is specified than use the internal one as default
if not EM:
EM=self
line.writeLattice(app,EM)

View File

@@ -1,188 +0,0 @@
import re
import numpy as np
class FacilityAccess:
def listElement(self, word=None, NoE=0):
# Return a list of elements that includes word
# Wild card (*) can be used
# NoE stands for Name or Element, switching the output
# 0: list of Element names, 1: list of element instances.
if word==None:
return
elif word=='*':
allRequested=1
elif len(word)==0:
return []
else:
word=word.upper()
word=word.split('*')
allRequested=0
ElementList=[]
for p in self.PartsList:
for sec in p[0].Element:
for ele in sec.Element:
requested=1
for w in word:
if w not in ele.Name:
requested=allRequested
if requested:
if NoE:
ElementList.append(ele)
else:
if ele.Type!='Corrector':
ElementList.append(ele.Name)
if ('cor' in ele.__dict__) or ('corx' in ele.__dict__):
ElementList.append(ele.Name.replace(ele.Name[8:12],'MCRX'))
if ('cory' in ele.__dict__):
if (ele.Name[8:12]=='MKAC') or (ele.Name[8:12]=='MKDC'):
ElementList.append(ele.Name)
else:
ElementList.append(ele.Name.replace(ele.Name[8:12],'MCRY'))
return ElementList
def listSection(self, word=None, NoE=0):
# Return a list of elements that includes word
# Wild card (*) can be used
# NoE stands for Name or Element, switching the output
# 0: list of Element names, 1: list of line instances.
if word==None:
return
elif word=='*':
allRequested=1
elif len(word)==0:
return []
else:
word=upper(word)
word=word.split('*')
allRequested=0
SectionList=[]
for p in self.PartsList:
for sec in p[0].Element:
requested=1
for w in word:
if w not in sec.Name:
requested=allRequested
if requested:
if NoE:
SectionList.append(sec)
else:
SectionList.append(sec.Name)
return SectionList
def getElement(self,name):
name=name.upper()
if name in self.ElementDB:
return self.ElementDB[name]
else:
return None
def getSection(self,name):
name=name.upper()
if name in self.SectionDB:
return self.SectionDB[name]
else:
return None
def setGroup(self,dn,field,values):
# dn is a list of element names. It can be obtained from OMEpicsChannel
for i in range(0,len(dn)):
n=dn[i]
ele=self.ElementDB[n]
if field in dir(ele):
ele.__dict__.update({field:values[i]})
else:
print('Error due to unregistered Channel:',ele,field)
def getGroup(self,dn,field):
values=[]
for i in range(0,len(dn)):
n=dn[i]
ele=self.ElementDB[n]
if field in dir(ele):
values.append(ele[field])
else:
print('Error due to unregistered Channel:',ele,field)
return values
def setRegExpElement(self,section,device,field,value):
myRe=re.compile(section+'.*'+device)
for key in self.ElementDB.keys():
if (myRe.match(key)):
ele=self.ElementDB[key]
if field in ele.__dict__.keys():
if (field=='angle'):
ele.__dict__[field]=np.sign(ele['design_angle'])*abs(value) # this is needed to set collectively a bunch compressor angle without flipping signs
# print(ele.Name,ele.__dict__[field])
else:
ele.__dict__[field]=value
def getRegExpElement(self,section,device,field):
val=[]
myRe=re.compile(section+'.*'+device)
for key in self.ElementDB.keys():
if (myRe.match(key)):
ele=self.ElementDB[key]
if field in ele.__dict__.keys():
val.append(ele[field])
return val
#-------------------------
# routines from former Energy Manager
def EnergyAt(self,ele):
if isinstance(ele,str):
name=ele
else:
name=ele.Name
if name in self.EM.Energy.keys():
return self.EM.Energy[name]
else:
print(name+' is not found in Energy manager of Module Facility!')
return [0.0,0.0]
def forceEnergyAt(self,elename,Ei):
# force an update of the energy profile
self.writeFacility(self.EM)
if Ei<0:
# The initial energy should be positive
return
try:
# Check if elename exists
E0=self.EM.Energy[elename][0]
dE=Ei-E0
# dE=Ei
# print('energy change',elename,Ei,E0)
# self.EM.Energy[elename][0]=Ei
except:
return
# First compute the energy with the present gradient and phase
# Note that the energy at the elements upstream of the given initial element is not touched.
for k in self.EM.Energy.keys():
if len(self.EM.Energy[k])==2:
self.EM.Energy[k]=[self.EM.Energy[k][0]+dE,self.EM.Energy[k][1]]
elif len(self.EM.Energy[k])==3:
self.EM.Energy[k]=[self.EM.Energy[k][0]+dE,self.EM.Energy[k][1],self.EM.Energy[k][2]]

File diff suppressed because it is too large Load Diff

View File

@@ -1,750 +0,0 @@
import math
#-------------------------------------
# Type Manager - exclusively called by OMLayout
class TypeManager:
def __init__(self):
self.library={} #----- dictionary to contain all the element and line definition
self.typecase={'Solenoid':self.sol,'Photonics':self.xray,'Undulator':self.ID,'Vacuum':self.vac, \
'Quadrupole':self.quad,'Corrector':self.cor,'Diagnostic':self.diag,'RF':self.rf, \
'Dipole':self.bend,'Sextupole':self.sext, 'Marker':self.marker}
def info(self):
for ele in self.library.keys():
eledef=self.library[ele]
for att in eledef.keys():
if isinstance(eledef[att],str):
print('\t',att," = '",eledef[att],"'")
else:
print('\t',att,' = ',eledef[att])
print('\n')
def define(self,name,properties): #----------- Routine to call when an element or line is defined
indict={name:properties}
self.library.update(indict)
def generate(self,name,index=0,option={}): # create an instance of the object based on the content of the dictionary 'library'
prop=self.library[name]
#print ("name=", name)
#print ("prop=", prop)
#Convert tuple to list
if isinstance(prop,tuple):
prop=list(prop)
print ("tuple======== REPORT THIS PLEASE TO JAN CHRIN ======= ")
if isinstance(prop,list): #--------- is a line-----------------
#print ("list")
prop0=prop[0]
L=0
if 'Length' in prop0: #prop0.has_key('Length'):
L=prop0['Length']
name=''
if 'Name' in option: #option.has_key('Name'):
name=option['Name']
obj=LineContainer(name,L)
for ele in prop[1:len(prop)]:
eletype=ele['Element']
sRef=ele['sRef']
index=0
if 'index' in ele: #ele.has_key('index'):
index=ele['index']
if 'Option' in ele: #ele.has_key('Option'):
opt=ele['Option']
else:
opt={}
rel='absolute'
if 'Ref' in ele: #ele.has_key('Ref'):
if ele['Ref']=='relative':
rel='relative'
obj.append(self.generate(eletype,index,opt),sRef,rel)
else:
#print ("else other")
obj=self.typecase[prop['Type']](prop) # is a simple element
option['index']=index
obj.__dict__.update(option)
return obj
def xray(self,prop):
return Photonic(prop)
def ID(self,prop):
return Undulator(prop)
def vac(self,prop):
return Vacuum(prop)
def quad(self,prop):
return Quadrupole(prop)
def bend(self,prop):
return Dipole(prop)
def sol(self,prop):
return Solenoid(prop)
def sext(self,prop):
return Sextupole(prop)
def cor(self,prop):
return Corrector(prop)
def diag(self,prop):
return Diagnostic(prop)
def rf(self,prop):
return RF(prop)
def marker(self,prop):
return Marker(prop)
#-----------------------------------------------------------------------------
# Line Container
class LineContainer:
def __init__(self, namein='', Lin=0):
self.Name=namein
self.LengthRes=Lin
self.Ref={}
self.Element=[]
self.sRef=0
self.initiated=0
self.output=1
self.isFlat=0
def getLength(self):
return self.getResLength()
def getResLength(self):
if len(self.Element)==0:
return self.LengthRes
ele=self.Element[-1]
slen=self.position(ele)+ele.getLength()
if (self.LengthRes<0):
return slen-self.LengthRes
else:
if (self.LengthRes<slen):
return slen
else:
return self.LengthRes
def position(self,ele): # Beginning of the element (Reserve length inclusive)
Ref=self.Ref[ele]
if Ref['ref']=='absolute':
return Ref['pos']
else:
idx=self.Element.index(ele)-1
srel=0
if idx>=0:
srel=self.position(self.Element[idx])+self.Element[idx].getResLength()
if Ref['ref']=='relative':
return srel+Ref['pos']
else:
idx=Ref['pos']
angle=self.Element[idx].angle
return srel+Ref['ref'].len(angle)
def positionCenter(self,ele): # Centre of the element
return self.position(ele)+ele.sRef+ele.getLength()*0.5
def append(self, ele, sRef=0,Ref='absolute'):
if isinstance(ele,list): # a quick waz to add a series of elements if thez are givien in a list
sRef=0
Ref='relative'
for p in ele:
self.Element.append(p)
reference={'pos':sRef,'ref':Ref}
self.Ref.update({p:reference})
else: # otherwise a single element is added
self.Element.append(ele)
reference={'pos':sRef,'ref':Ref}
self.Ref.update({ele:reference})
def flatten(self,name,line,eleDB,secDB,corrDB): # this routine is called in the facilitycontainer class to remove all arbitrary nesting of containers
if self.isFlat>0: # check whether a given line has been already flatten (needed for phase 2 lines
if (len(self.Name)==7):
line.append(self)
return
self.Name=name+self.Name;
if (len(self.Name)==7): # chgeck wether section length has 7 letters
for ele in self.Element:
ele.initiate(self.Name) # initiate all elements
eleDB[ele.Name]=ele
try:
if ele.Type=='Corrector':
#if ele.__dict__.has_key('cor') or ele.__dict__.has_key('corx'):
if 'cor' in ele.__dict__ or 'corx' in ele.__dict__:
eleDB[ele.Name.replace('COR','CRX')]=ele
#if ele.__dict__.has_key('cory'):
if 'cory' in ele.__dict__:
eleDB[ele.Name.replace('COR','CRY')]=ele
except:
'Alignment elem??'
if 'cor' in ele.__dict__ or 'corx' in ele.__dict__ or 'cory' in ele.__dict__:
#if ele.__dict__.has_key('cor') or ele.__dict__.has_key('corx') or ele.__dict__.has_key('cory'):
if ('MQUA' in ele.Name) or ('MBND' in ele.Name) or ('UIND' in ele.Name):
#if ele.__dict__.has_key('cor') or ele.__dict__.has_key('corx'):
if 'cor' in ele.__dict__ or 'corx' in ele.__dict__:
cname=ele.Name.replace('MQUA','MCRX').replace('MBND','MCRX').replace('UIND','MCRX')
prop={}
prop['Name']=cname
prop['Type']='Corrector'
cele=Corrector(prop)
corrDB[cname]=cele
#if ele.__dict__.has_key('cory'):
if 'cory' in ele.__dict__:
cname=ele.Name.replace('MQUA','MCRY').replace('MBND','MCRY').replace('UIND','MCRY')
prop={}
prop['Name']=cname
prop['Type']='Corrector'
cele=Corrector(prop)
corrDB[cname]=cele
line.append(self) # add section to beamline
secDB[self.Name]=self # Revive sectionDB...09.06.2015 Masamitsu
self.isFlat=1
else:
for ele in self.Element:
ele.flatten(self.Name,line,eleDB,secDB,corrDB);
def initiate(self,name=''):
self.Name=name+self.Name
self.output=1
for ele in self.Element:
ele.initiate(self.Name)
def setRange(self,start='start',end='end',out=0):
self.output=out # inherit output from parent container
if (start=='start'):
start=self.Name
if (self.Name==start): # start output if name math
self.output=1
hasend=0
output=self.output
for ele in self.Element:
if isinstance(ele,LineContainer):
outchild=ele.setRange(start,end,output)
#if outchild<>0: # Not valid in python3.x
if outchild!=0: # if child is part of the range - parent has output
self.output=1
output=1
if outchild==-1: # if child was last then
output=0 # suppress output for following children
hasend=1 # indicate parent that this is the last element
if (self.Name==end) or (hasend==1):
return -1
return self.output
#def writeLattice(self,CI,EM,app):
# Change the order of input arguments and set defaults
def writeLattice(self,app,EM=None):
if self.output==0:
return 0
seq=[]
Last=0
if (len(self.Name)==7):
for ele in self.Element:
ds=self.position(ele)-Last
app.writeDrift(ds)
name=ele.writeElement(app,EM)
Last=self.position(ele)+ele.getResLength()
#if name<>0: # not valid in python3.x
if name!=0:
seq.append(ele)
app.writeDrift(self.getResLength()-Last)
app.writeLine(self,seq)
baseseq={'Name':self.Name,'L':self.getResLength()}
return baseseq
else:
for ele in self.Element:
name=ele.writeLattice(app,EM)
# if name<>0: # not valid in python3.x
if name!=0:
seq.append(name)
if len(self.Name)>1:
return seq
else:
app.writeLine(self,seq);
return 0
class VariableContainer: # used to allow varibale length in the arm of a bunch compressor, stored in a line container
def __init__(self,L=0,Loff=0):
self.L=L
self.Loff=Loff
def len(self,angle):
dL=self.L/math.cos(angle*math.asin(1)/90)-self.Loff
return dL
#----------------------------
# list of basic elements such as magnets, diagnostics etc. All are based on the SimpleContainer class
class SimpleContainer:
def __init__(self,prop):
# makes sure that common elements are defined and calculates the length and reserved length
if not('Name' in prop): #prop.has_key('Name')):
prop.update({'Name':''})
if not('Baugruppe' in prop): #prop.has_key('Baugruppe')):
prop.update({'Baugruppe':'none'})
if not('BG-Variant' in prop): #prop.has_key('BG-Variant')):
prop.update({'BG-Variant':'A'})
if not('index' in prop): #prop.has_key('index')):
prop.update({'index':0})
if not('p0' in prop): #prop.has_key('p0')):
prop.update({'p0':0})
if not('Length' in prop): #prop.has_key('Length')):
prop.update({'Length':0})
if not('LengthRes' in prop): #prop.has_key('LengthRes')):
prop.update({'LengthRes':0})
if not('sRef' in prop): #prop.has_key('sRef')):
prop.update({'sRef':-1})
if not('Tilt' in prop): #prop.has_key('Tilt')):
prop.update({'Tilt':0})
self.__dict__.update(prop)
if self.LengthRes <=0 :
self.LengthRes=self.Length
self.sRef=0
elif self.sRef >=0:
LRes=self.sRef+self.Length
if self.LengthRes < LRes:
self.LengthRes=LRes
else:
if self.LengthRes < self.Length:
self.sRef=0
self.LengthRes=self.Length
else:
self.sRef=0.5*(self.LengthRes-self.Length)
def __getitem__(self,field):
exec('a=self.'+field)
# fine for python2 and python3
return locals()['a']
def getResLength(self):
# return the reserved length for that element
return self.LengthRes
def getLength(self):
# return the length for that element
return self.Length
def writeElement(self,app,EM):
return 0
def initiate(self,name=""):
# defined element name and local energy and the element entrance
self.Name="%s.%s%3.3d" % (name,self.Tag,self.index)
def register(self):
return
#---------------------------------------
# Base Elements
class Magnet(SimpleContainer):
def __init__(self,prop):
SimpleContainer.__init__(self, prop)
if not('Group' in prop): #prop.has_key('Group')):
self.__dict__.update({'Group':'Magnets'})
class Dipole(Magnet):
def __init__(self, prop):
Magnet.__init__(self,prop)
if not('angle' in prop): #prop.has_key('angle')):
self.__dict__.update({'angle':0})
if not('design_angle' in prop): #prop.has_key('design_angle')):
self.__dict__.update({'design_angle':0})
if not('e1' in prop): #prop.has_key('e1')):
self.__dict__.update({'e1':0})
if not('e2' in prop): #prop.has_key('e2')):
self.__dict__.update({'e2':0})
if not('Tag' in prop): #prop.has_key('Tag')):
self.__dict__.update({'Tag':'MBND'})
def getResLength(self):
if (self.angle==0):
return self.LengthRes
else:
return self.LengthRes-self.Length+self.getLength()
def getLength(self):
if (self.angle==0):
return self.Length
else:
angrad=math.asin(1)*self.angle/90.
if self.e1==0 or self.e2==0:
Lpath=self.Length/math.sin(angrad)*angrad
else:
Lpath=0.5*self.Length/math.sin(angrad*0.5)*angrad
return Lpath
#def register(self,CI=None):
# if CI:
# CI.registerChannel(self.Name,'angle')
# if self.__dict__.has_key('cor'):
# CI.registerChannel(self.Name,'cor')
def writeElement(self,app,EM):
#if CI:
# self.angle=CI.getValue(self.Name,'angle')
# if self.__dict__.has_key('cor'):
# self.cor=CI.getValue(self.Name,'cor')
if EM:
EA=EM.EnergyAt(self)
self.p0=EA[0] # Beam energy may be needed for some purpose, namely CSR
app.writeBend(self)
return self.Name
class Quadrupole(Magnet):
def __init__(self, prop):
Magnet.__init__(self,prop)
if not('k1' in prop): #prop.has_key('k1')):
self.__dict__.update({'k1':0})
if not('Tag' in prop): #prop.has_key('Tag')):
self.__dict__.update({'Tag':'MQUA'})
def writeElement(self,app,EM):
# MADExclude flag becomes 'Overlap' flag, which is more general name and may be used in other applications
#if (app.isType('madx')):
# if self.__dict__.has_key('MADExclude'):
# if self.MADExclude==1:
# return 0
#if CI:
# self.k1=CI.getValue(self.Name,'k1')
# if self.__dict__.has_key('corx'):
# self.corx=CI.getValue(self.Name,'corx')
# if self.__dict__.has_key('cory'):
# self.cory=CI.getValue(self.Name,'cory')
app.writeQuadrupole(self)
return self.Name
#def register(self,CI=None):
# if CI:
# CI.registerChannel(self.Name,'k1')
# if self.__dict__.has_key('corx'):
# CI.registerChannel(self.Name,'corx')
# if self.__dict__.has_key('cory'):
# CI.registerChannel(self.Name,'cory')
class Sextupole(Magnet):
def __init__(self, prop):
Magnet.__init__(self,prop)
if not('k2' in prop): #prop.has_key('k2')):
self.__dict__.update({'k2':0})
if not('Tag' in prop): #prop.has_key('Tag')):
self.__dict__.update({'Tag':'MSEX'})
#def register(self,CI=None):
# if CI:
# CI.registerChannel(self.Name,'k2')
def writeElement(self,app,EM):
#if CI:
# self.k2=CI.getValue(self.Name,'k2')
app.writeSextupole(self)
return self.Name
class Solenoid(Magnet):
def __init__(self, prop):
Magnet.__init__(self,prop)
if not('ks' in prop): #prop.has_key('ks')):
self.__dict__.update({'ks':0})
if not('Tag' in prop): #prop.has_key('Tag')):
self.__dict__.update({'Tag':'MSOL'})
def writeElement(self,app,EM):
#if CI:
# self.ks=CI.getValue(self.Name,'ks')
app.writeSolenoid(self)
return self.Name
#def register(self,CI=None):
# if CI:
# CI.registerChannel(self.Name,'ks')
class Corrector(Magnet):
def __init__(self, prop):
Magnet.__init__(self,prop)
#def register(self,CI=None):
# if CI:
# if self.__dict__.has_key('corx'):
# CI.registerChannel(self.Name,'corx')
# if self.__dict__.has_key('cory'):
# CI.registerChannel(self.Name,'cory')
def writeElement(self,app,EM):
#if CI:
# if self.__dict__.has_key('corx'):
# CI.getValue(self.Name,'corx')
# if self.__dict__.has_key('cory'):
# CI.getValue(self.Name,'cory')
app.writeCorrector(self)
return self.Name
# -------
class Vacuum(SimpleContainer):
def __init__(self, prop):
SimpleContainer.__init__(self,prop)
if not('Group' in prop): #prop.has_key('Group')):
self.__dict__.update({'Group':'Vacuum'})
#def register(self,CI=None):
# return
def writeElement(self,app,EM):
app.writeVacuum(self)
return self.Name
# -------
class Undulator(SimpleContainer):
def __init__(self, prop):
SimpleContainer.__init__(self,prop)
if not('Group' in prop): #prop.has_key('Group')):
self.__dict__.update({'Group':'ID'})
if not('K' in prop): #prop.has_key('K')):
self.__dict__.update({'K':0})
if not('ku' in prop): #prop.has_key('ku')):
self.__dict__.update({'ku':0})
if not('kx' in prop): #prop.has_key('kx')):
self.__dict__.update({'kx':0})
if not('ky' in prop): #prop.has_key('ky')):
self.__dict__.update({'ky':1})
if not('Tag' in prop): #prop.has_key('Tag')):
self.__dict__.update({'Tag':'UIND'})
if not('Power' in prop): #prop.has_key('Power')):
self.__dict__.update({'Power':0})
if not('Waist' in prop): #prop.has_key('Waist')):
self.__dict__.update({'Waist':1})
#def register(self,CI=None):
# if CI:
# CI.registerChannel(self.Name,'K')
def writeElement(self,app,EM):
#if CI:
# self.K=CI.getValue(self.Name,'K')
if EM:
EA=EM.EnergyAt(self)
self.p0=EA[0]
self.dP=EA[1]
else:
self.p0=1e9
app.writeUndulator(self)
return self.Name
# --------------
class RF(SimpleContainer):
def __init__(self, prop):
SimpleContainer.__init__(self,prop)
if not('Gradient' in prop): #prop.has_key('Gradient')):
self.__dict__.update({'Gradient':0})
if not('Phase' in prop): #prop.has_key('Phase')):
self.__dict__.update({'Phase':0})
if not('Band' in prop): #prop.has_key('Band')):
self.__dict__.update({'Band':'S'})
if not('Frequency' in prop): #prop.has_key('Frequency')):
f0=5.712e9
if 'S' in self.Band:
f0=2.9988e9
if 'X' in self.Band:
f0=11.9952e9
self.__dict__.update({'Frequency':f0})
if not('Tag' in prop): #prop.has_key('Tag')):
self.__dict__.update({'Tag':'RACC'})
if not('Group' in prop): #prop.has_key('Group')):
self.__dict__.update({'Group':'RF'})
# Enable flag for TDS as well as in the diagnostics
if 'TDS' in prop['Baugruppe']:
self.__dict__.update({'enable':0})
def writeElement(self,app,EM):
#if CI:
# self.Gradient=CI.getValue(self.Name,'Gradient')
# self.Phase=CI.getValue(self.Name,'Phase')
if EM:
EA=EM.EnergyAt(self)
self.p0=EA[0]
self.dP=EA[1]
else:
self.p0=1e9 # set it to 1 GeV if EM is not available...
app.writeRF(self)
# Energy manager is in charge of this...
#if self.Tag=='RACC':
# if EM:
# EM.update(self.p0+self.Gradient/511000*math.sin(self.Phase*math.asin(1)/90)*self.Length)
return self.Name
#def register(self,CI=None):
# if CI:
# CI.registerChannel(self.Name,'Gradient')
# CI.registerChannel(self.Name,'Phase')
# -----
class Diagnostic(SimpleContainer):
def __init__(self, prop):
SimpleContainer.__init__(self,prop)
if not('Seval' in prop): #prop.has_key('Seval')):
self.__dict__.update({'Seval':-1})
if not('Cx' in prop): #prop.has_key('Cx')):
self.__dict__.update({'Cx':1})
if not('Cy' in prop): #prop.has_key('Cy')):
self.__dict__.update({'Cy':1})
if not('Cz' in prop): #prop.has_key('Cz')):
self.__dict__.update({'Cz':0})
if not('Sx' in prop): #prop.has_key('Sx')):
self.__dict__.update({'Sx':0})
if not('Sy' in prop): #prop.has_key('Sy')):
self.__dict__.update({'Sy':0})
if not('Sz' in prop): #prop.has_key('Sz')):
self.__dict__.update({'Sz':0})
if not('Distribution' in prop): #prop.has_key('Distribution')):
self.__dict__.update({'Distribution':0})
if not('Tag' in prop): #prop.has_key('Tag')):
self.__dict__.update({'Tag':'DBPM'})
if not('Group' in prop): #prop.has_key('Group')):
self.__dict__.update({'Group':'Diagnostics'})
if not('enable' in prop): #prop.has_key('enable')):
self.__dict__.update({'enable':0})
def writeElement(self,app,EM):
app.writeDiagnostic(self)
return self.Name
#def register(self,CI=None):
# if CI:
# if self.__dict__.has_key('Cx'):
# CI.registerChannel(self.Name,'Cx')
# if self.__dict__.has_key('Cy'):
# CI.registerChannel(self.Name,'Cy')
# if self.__dict__.has_key('Cz'):
# CI.registerChannel(self.Name,'Cz')
# if self.__dict__.has_key('Sx'):
# CI.registerChannel(self.Name,'Sx')
# if self.__dict__.has_key('Sy'):
# CI.registerChannel(self.Name,'Sy')
# if self.__dict__.has_key('Sz'):
# CI.registerChannel(self.Name,'Sz')
class Photonic(Diagnostic):
def __init__(self, prop):
prop.update({'Group':'Photonics'})
if not('Tag' in prop): #prop.has_key('Tag')):
prop.update({'Tag':'PPRM'})
Diagnostic.__init__(self,prop)
class Alignment(SimpleContainer):
def __init__(self, prop):
SimpleContainer.__init__(self,prop)
if not('Group' in prop): #prop.has_key('Group')):
self.__dict__.update({'Group':'Alignment'})
def writeElement(self,app,EM):
app.writeAlignment(self)
return self.Name
def getLength(self):
# return the reserved length for that element
return 0
#def initiate(self,dummy):
# return
class Marker(SimpleContainer):
def __init__(self, prop):
SimpleContainer.__init__(self,prop)
if not('Group' in prop): #prop.has_key('Group')):
self.__dict__.update({'Group':'Marker'})
def writeElement(self,app,EM):
app.writeMarker(self)
return self.Name
def getLength(self):
# return the reserved length for that element
return 0
#def register(self,CI=None):
# return
# -------

View File

@@ -4,9 +4,9 @@
### Machine Lattice
- Current: [11.0.1](Release/HolyList-Latest-Phase-Current.xlsx) _(Released: 14/08/2025 - 10:23:57)_
- Planned: [11.0.1](Release/HolyList-Latest-Phase-Planned.xlsx) _(Released: 14/08/2025 - 10:23:57)_
- Final: [11.0.1](Release/HolyList-Latest-Phase-Final.xlsx) _(Released: 14/08/2025 - 10:23:57)_
- Current: [11.0.1](Release/HolyList-Latest-Phase-Current.xlsx) _(Released: 18/08/2025 - 14:56:37)_
- Planned: [11.0.1](Release/HolyList-Latest-Phase-Planned.xlsx) _(Released: 18/08/2025 - 14:56:37)_
- Final: [11.0.1](Release/HolyList-Latest-Phase-Final.xlsx) _(Released: 18/08/2025 - 14:56:37)_
### Optical Beamlines