Holy List Release on 2025_08_18_14_56_36
This commit is contained in:
363
Matching/Lat11.0.1_Ver1/matchAramis.madx
Normal file
363
Matching/Lat11.0.1_Ver1/matchAramis.madx
Normal 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/Lat11.0.1_Ver1/matchAthos.madx
Normal file
320
Matching/Lat11.0.1_Ver1/matchAthos.madx
Normal 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/Lat11.0.1_Ver1/matchInjector.madx
Normal file
246
Matching/Lat11.0.1_Ver1/matchInjector.madx
Normal 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
363
Matching/matchAramis.madx
Normal 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
320
Matching/matchAthos.madx
Normal 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
246
Matching/matchInjector.madx
Normal 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
34
Matching/matchLattice.py
Normal 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)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
# -------
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user