diff --git a/Matching/Lat11.0.1_Ver1/matchAramis.madx b/Matching/Lat11.0.1_Ver1/matchAramis.madx new file mode 100644 index 0000000..22254bf --- /dev/null +++ b/Matching/Lat11.0.1_Ver1/matchAramis.madx @@ -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; + + + diff --git a/Matching/Lat11.0.1_Ver1/matchAthos.madx b/Matching/Lat11.0.1_Ver1/matchAthos.madx new file mode 100644 index 0000000..3ec5175 --- /dev/null +++ b/Matching/Lat11.0.1_Ver1/matchAthos.madx @@ -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; + +! \ No newline at end of file diff --git a/Matching/Lat11.0.1_Ver1/matchInjector.madx b/Matching/Lat11.0.1_Ver1/matchInjector.madx new file mode 100644 index 0000000..b43ce56 --- /dev/null +++ b/Matching/Lat11.0.1_Ver1/matchInjector.madx @@ -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; + + diff --git a/Python_Code/Old OnlineModel/OMAppTemplate.py b/Python_Code/Old OnlineModel/OMAppTemplate.py deleted file mode 100644 index 1abcffa..0000000 --- a/Python_Code/Old OnlineModel/OMAppTemplate.py +++ /dev/null @@ -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 - diff --git a/Python_Code/Old OnlineModel/OMEnergyManager.py b/Python_Code/Old OnlineModel/OMEnergyManager.py deleted file mode 100644 index 31c94c8..0000000 --- a/Python_Code/Old OnlineModel/OMEnergyManager.py +++ /dev/null @@ -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 - - - diff --git a/Python_Code/Old OnlineModel/OMFacility.py b/Python_Code/Old OnlineModel/OMFacility.py deleted file mode 100644 index 4ad6dcc..0000000 --- a/Python_Code/Old OnlineModel/OMFacility.py +++ /dev/null @@ -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]=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) - - - diff --git a/Python_Code/Old OnlineModel/OMFacilityAccess.py b/Python_Code/Old OnlineModel/OMFacilityAccess.py deleted file mode 100644 index ad71840..0000000 --- a/Python_Code/Old OnlineModel/OMFacilityAccess.py +++ /dev/null @@ -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]] - - diff --git a/Python_Code/Old OnlineModel/OMLayout.py b/Python_Code/Old OnlineModel/OMLayout.py deleted file mode 100644 index 459715b..0000000 --- a/Python_Code/Old OnlineModel/OMLayout.py +++ /dev/null @@ -1,2172 +0,0 @@ -import OMType -import math -# 7) Aramis Undulator end correctors have two channels (DCR - R. Ganter) -# 8) Minor modification along the maching to get space for bellows (Email L. Schulz, 7.5.2014) -# 9) Screen added in the straigh ahead section of the final beam dumps - -# Layout 8.4.1 -# 1) Solenoids around Gun got correct Baugruppe (WFG and WFB) -# 2) Quadrupole in Injector spectrometer arm (S10BD01) changed to QFA type -# 3) Change Baugruppe of DHVS (Slit) to DHVS-SLIT -# 4) Apply Changes from Lothas Schult and Adriano Zandonello (email: 21.7.2014) -# 5) Cameras in Athos line have only their vacuum part installed except for one camera which is an overview camera -# 6) Change moving vacuum parts (e.g. collimator) to diagnostics group -# 7) Move Wire Scanner into Linac 3 cells 1,5,9, and 13 to separate from collimator in Linac 3 -# 8) BAMs before Injector BC and in Athos line are not fully equiped and only the pick up (vacuum parts) is installed -# 9) Beam stopper after linac bunch compressor changed to type AFBC1 with corrector coil -# 10) AFDL is now 1 m long and has no tilted pole faces -# 11) Cameras in the photon beamline after the dump dipole are of type Overview -# 12) Snchrotron radiation port DSRP changed to DSRM (Synchrotron radiation monitor) and DBCM (Bunch compression monitor) -# 13) Added a synchrotron radiation monitor port after the first dipole of SATCL01 -# 14) Added two coherent diffraction radiation ports (vacuum components only) - -# Layout 8.5.1 -# 1) Apply changes from Lothar Schulz (email 20.8.2014) -# 2) Dumps and Stopper are in the Safety group -# 3) Adjusted ALignment Ports and Outcoupling Ports for BC1 and 2. Effective Length set to 0 cm but reserved length is 10 cm (email A. Zandonella 14.8.2014) -# 4) Removed Coherent Diffraction Radiator because position and usefulness is not clear - -# Layout 8.5.2 -# 1) Added Alignment LAser Ports in Athos and Aramis. -# 2) Changed section layout of beam dumps. The spectrometer dipole now belongs to the straight ahead section, e.g. SARBD01 -# 3) Final Screens in SARBD01/SATBD01 are of type OV38 (changed from OV16) - -# Layout 8.6.1 -# 1) Implementation of multiple beamlines (Phase 1 and Phase 2) -# 2) Removal of various parts in Athos Switchyard for Phase 1 (e.g. Vert Collimator, SRM, BCM) -# 3) Self/Seeding Chicane of Aramis is now Phase 2. In Phase 1 the section is instrumented with an Undulator module -# 4) Change of the Sextupoles in BC2 10 mm upstream for the first and downstream for the second (email F. Loehl 17.10) -# 5) Indexing of SATUN22 now consistant with other undulator cells -# 6) Added the chicane information and branching point (moved from SwissFELmagnets.py) -# 7) Branching dipoles have now the addition key 'branch' set to true -# 8) Chicanes magnets have now the common field entry 'BC' to mark them into a group -# 9) Move BAMs in SARBD01 and SATDI01 according to email by R. Ganter 16.1.2015 -# 10) Move WSC from S10MA01 to S20CB01 -# 11) Move Last camera in S10MA01 30cm upstream (email. Bruno Zandonella, 5.2.15) -# 12) New Position of CDR (vacuum only thus phase 2) according to email by Bruno Zandonella, 10.2.15) - -# Layout 8.7.1 -# 1) Change that OMLayout is alwazs delivering one set of beamlines. With a argument in the access function build the routine -# can implement alternative designs -# 2) Change SINEG01.MCOR220 from type SFDD to SFD1 -# 3) Complete new redistributions of ICTs according to DCR50 (email M. Pedrozzi, 28.4.2015) -# 4) Correcting a 200 micron longitudinal offset for S20SY02-MBND200 -# 5) Changing BAMs after Aramis and Athos to type DBAM-FS8 (formerly DBAM-FS16). Email: R. Ganter 2.6.15 -# 6) Applying changes from layout optimization (email. A. Zandonella 3.6.15) -# 7) Correcting the residual transverse offset of a few nanometer in the Aramis undulator line -# 8) Changing the Wirescanner in SARUN20 to type 38mm vacuum chamber -# 9) Applying changes from A. Zandonella (email: 26.6.2015) e.g. shift of energy collimator 20 cm down stream - -# Layout 8.8.1 -# 1) Adjust the element in the gun section SINEG01-####190, 20 and 210 in position to get space for faraday cup -# 2) Add faraday cup as SINEG01-DFCP185 -# 3) Coherent Diffraction radiation monitor DCDR are now implemented in phase 1 -# 4) Adjust TAU Monitor Position according to change in Holy List (Report from Website on 9.11.2015) -# 5) Add vertical mover with slits into cxollimator section SARCL02-DSFV282 -# 6) Adding shielding element SLOS in the Front End of Aramis - -# Layout 9.0.1 -# 1) Define new Athos layout with shorter undulator modules and period length of 38 mm -# 2) Define Laser acceleration in Phase 1 (Injector and Athos Switchyard) -# 3) Add Slits in Athos Switchyard for slicing at SATSY01 for phase 2 -# 4) Add Gun Laser incoupling port -# 5) Rename Aramis and Athos radiation Shielding -# 6) Change Athos spectrometer magnet to same type as Aramis -# 7) Add Camera in SATCL01 for phase 1 -# 8) adjust position of ICTs in SARBD01 and SARMA01 according to email by Zandonella 1.3.16) -# 9) changed last decirper to two individual ones of 1 meter length for horizontal and vertical plane. Responsibility is now in the undulator group. -#10) Some wire scanners have a new Baugruppe, indicating an additional AL foil for beam loss measurements. -#11) Adjusting second RF cavity in SINSB03 and SINSB04 according to email by Alessandro Citterio 2.3.16 - -# Layout 9.0.2 (email: Adriano 4.7.2016) -# 1) Correct the Baugruppen of the Lasser Acceleration Box -# 2) Correct the WSC with AL foil in SINDI01 and s10DI01 -# 3) Shift WSC in SARUN20 downstream by 30 mm for phase 1 -# 4) Correct the assignment of the 1m dechirper to insertion device group - - -# Layout 9.1.1 -# 1) Repositioning the ICTs in SARBD01 and SARMA01 (see point 8 of 9.0.1) -# 2) Adjust length of laser acceleration chamber and shift to new position (email by Silke Pfinninger, 18.8.2016) -# 3) SATCB01 and SATCB02 have no elements in phase 1 (BPMs and Quads removed) -# 4) Adjust elements around Athos dump (email by Silke Pfinninger, 18.8.2016) -# 5) Add first design of post undulator TDS (email. E. Prat, 20.7.16) -# 6) Removal of C-Band TDS in Athos line - -# Layout 9.2.1 -# 1) Correct the spacing in SATUN01-SATUN05 for having the same periodicity as the following sections -# 2) Shift X-bad TDS downstream to allocate space for possible ACHIP experiment. - -# Layout 9.3.1 -# 1) Eliminate BC alignment ports DALA150 in both bunch compressors -# 2) Move OFC quadrupole for the gun spectrometer at position z=1.6653 and new index 212 (before 310) -# 3) ACHIP Chamber in SATSY03 is now installed from phase 1 on. -# 4) Wirescanner in SARUN20 in all phases changed to type C8 type -# 5) Position correction of SARBD01-DICT030, SARMA01-DICT090 and SARUN20-DWSC010 -# 6) correct position of X-band deflector to avoid conflict of overlap -# 7) Move dechirper into Athos straight section. 2m elements into formerly SATCB02 now SATCL01, 1 m long elements into the space of the former C-band deflector in SATDI01 and one 2 m element before SATCB01 -# 8) Camera before Athos beam stopper is now HR in final phase -# 9) Replace QFD at SATSY01-MQUA020/280 with QFM + Corrector magnets -#10) Remove two ICTs and one BAM from Athos beam line for the final phase -#11) Moved SFUE correctors 3 mm away from undulator (email A. Zandonella from 20.12.2016) -#12) Added ICT back into SATDI01 -#13) Correction according to vacuum group (email. S.Pfinninger, 30.1.) -#14) Adding Wirescanner in SATBD01 -#15) Adding Wirescanner in SATSY03 (emal. A.Zandonella, 20.1.2017) -#16) Correction of various position in Phase 1 (email. A. Zandonella: 19.1.2017) - -# Layout 9.3.2 -# 1) Applied some fine correction (email A. Zandonella, 8.2.2017) - -# Layout 10.0.1 -# 1) Omitting phase 1. Now only the final phase is given for elements where funding exists. -# 2) New Layout for chicane for two color operation in Athos and Aramis. -# 3) Chicane magnets AFSS are 30 cm long now (formerly 36 cm) -# 4) change index of SATDI wirescanner to 65 - -# Layout 10.1.1 -# 1) Reintroducing different phases: alt=0 is current state, alt=1 is a near future state/possible modification, alt=2 is the final layout -# 2) Change correctors from SINLH03-DQUA040/080 to 030/060 -# 3) Change naming of permanent and skew magnets: MQUA->MQUP, MBND -> MBNP and MQUA -> MQSK -# 4) Move two color chicane in ARAMIS from SARUN08 to SARUN09 -# 5) Change number of correctors of UE38 from 1 to 2 -# 6) Add some fine correction in the ATHOS undulator cells and tow color chicane positions - -# Layout 10.1.2 -# Synchronization of the holy list with Adriano/Hubert (email 4.6.18) -# 1) Change energy collimator from DCOL to VCOL -# 2) Temporary installation of the variable gap dechirper in SINSB05 with some change in quadrupole and BPM position in SINSB05 and SINSB04 -# 3) Correction of the beam stopper dump in SATBD01, which should be after the permanent dipole magnet (index change from 205 to 305) -# 4) Reduce number of X-band deflector station to one, and shift it (and space for the other) by 22 cm against the beam (upstream): email R. Ganter 23.1.18 and confirmation by D. Hauenstein -# 5) Place 6 dechirper into Athos line, 4 in the SATCL02 section and 2 more in SATMA01 - -# Layout 10.1.3 -# 1) Remove SATDI01-MQUA310 and SATDI-DBPM320 to SATDI01-MQUA300 and SAT-DBPM310 -# 2) Take out Athos ACHIP Box in current version (alt=0) - -# Layout 10.2.1 -# 1) Moving planned layout (alt=1) to current -# 2) Move first QFM magnet in SATSY01 35 mm upstream -# 3) Correct for wrong calculation of the SINSB04 cell -# 4) Enables the ict in SATDI01-DICT020 for all phases -# 5) Added Athos ACHIP in 'Phase planned' (installation november shutdown 2018) -# 6) added two slit dechirper in SARUN16 (finanzed by CROSS proposal) -# 7) Move of SINDI01-DSCR080, replacing SINDI02-MQUA070 -# 8) Move of SINLH03 screen to SINSB05 after the dechirper -# 9) Correct septum length from 1 m to 0.76 m - -# Layout 10.2.2 -# 1) pushed the two screen changes and ACHIP box from planned to current -# 2) Fine correction of the changed screen of change in 10.2.1 according to D. Hauensteins email (28.11) -# 3) Changes of BPM position in SATMA02 (email D>Hauenstein 28.11) -# 4) Added a C16 BAM to Athos in SATBD01 -# 5) Placed X-band deflector in Athos in new section SATXB01 - -# Layout 10.2.3 -# 1) Screen SINLH03-DSCR070 removed in phase current since it was move to SINSB05 -# 2) Change correct length of 8 mm BAM to 100 mm -# 3) Replace BAM in SAT from 16 mm to 8 mm -# 4) Correct dechirper position in Athos according to input from Silke Pfiffinger -# 5) Correct Wire Scanner Position in final phase in SARUN09 -# 6) Moved dechirpers after Aramis undulator from SARUN16 to SARUN18 after input from E. PRat -# 7) Added dechirpers from CROSS proposal in S30CB15 -# 8) Possition changes of sextupoles and wirescanner in SARCL02 according to email D. Hauenstein 26.3 -# 9) First implementation of seeding for the HERO project. This applies mostly to a reconfiguration of SATDI01 and the addition of a second two color chicane in SATUN05 - -# Layout 10.3.1 -# 1) Moved final layout of Athos into planned layout -# 2) Included in the final layout of Athos HERO and EEHG first iteration. -# 3) Renamed XBAND cavity in Athos back to section SARMA02 (email by Romain, April 19) -# 4) Change in Dechirper position in SARUN18 (email D. HAuenstein 17th April 19) - -# Layout 10.3.2 -# 1) Add Athos beam dump SATBD02 to all phases -# 2) Verschiebung der Dechirper in S30CB15 (email. S. Pfinninger, 14.10.19) -# 3) Verschiebung der TDS in SATMA02 by 6 cm downstream (email. S. Pfinninger, 14.10.19) -# 4) Verschiebung des BAMS in SATBD01 by a small margin upstream (email. S. Pfinninger, 14.10.19) -# 5) Change Dipole type in the large EEHG chicane to AFBC3 to get maximum R56 of 12 mm for an angle of 2.3 degree -# 6) Added a power supply channel to the Athos CHIC-chicanes. -# 7) The phase final of SATDI01 will be copied over to phase planned -# 8) In the current phase there will be only 4 Athos undulator modules installed -# 9) Increase apeture from the large Athos chicane to the end of the modulator to 16 mm (before the undulator) and 8 mm after before going back to 5 mm. -# 10) Removed last sextupole in SATCL01 and moved DALA upstream -# 11) Move the periodic lattice after Athos stopper by 50 cm downstream and compensate for shorter triplet structures. -# 12) Second dechirper girder in SATCL02 moved into 'phase current', first in SATCL02 and the one in SATMA01 in 'phase planned' -# 13) Dechirper in SARUN18 comes in 'phase current' -# 14) phase current: LAst 4 Undulators and phase shifter, 'phase planned' last 8 undulators but all phase shifter in SATUN -# 15) X-Band TCAV only in phase planned and higher. -# 16) Shift of BMP sin S20SY03 and the placement of a screen, latter only from phase planned on -# 17) Remove SATDI01-DWSC290 out of phase current and planed (email R. Ganter 29.10.2019) - -# Layout 10.4.2 -# 1) Adding undulator SATUN12 to SATUN18 up till sep 2020 -# 2) Adding back again the second RF structure for the X-band deflector in Athos -# 3) Adding CDR Monitor in SATSY02 for 'phase final' -# 4) Adding CDR Monitor in S20SY03 for 'phase final' -# 5) Adding BPM and Quadrupole before SATCL02-UDCP300 -# 6) Adding Dechirper in SATMA02 -# 7) Increase number of periods of bother modulator from 8 to 9 -# 8) Increase length of EEHG chicane in SAT by 4 cm (last dipole shifts by 4 cm, the inner by 2 cm) -# 9) Change order of BPMs and Quads around EEHG chicane to allow for the vacuum chamber and 9 period modulator -# 10) Reduced spacing of 3 quadrupoles between EEHG chicane and modulator in SATMA01 to accomidate 9 periods -# 11) Correct position of SATDI01-DBAM -# 12) Correct the position of SARMA01-DBCM030 which is build before the correct 020. Idex swapped. -# 13) Added Dechirper 100 and 200 in SATCL02 - -# Layout 10.4.3 -# 1) Remove Dechirper in SINSB05 -# 2) Add Dechirper in S30CB15 -# 3) Add Dechirper in SATMA01 -# 4) Add Undulator in SATUN10 -# 5) Renamed quadrupole and BPM in SATUN05 to 410 and 420 indec respectively - -# Layout 10.4.4 -# 1) Adding SATUN09 to the current layout -# 2) Adding Screen S20SY03-DSCR085 already to current layout. -# 3) Splitting SATDI01 into three girder due to the stage installation of the girders. Dechirper is moved into planned phase, while modulator girder and the final matching are still in final phase. -# 4) Adding SINBC01-DBAM060 to all phases -# 5) Addind SATDI01-DBAM070 to all phases -# 6) Move CDR in S20SY03 to SARCL01 - -# Layout 10.4.5 -# 1) Complete Undulator installation in Athos -# 2) Installation of the dechirper girder in SATDI01 for current layout -# 3) Keep last girders in SATDI01 for final layout -# 4) Till the modulator is not installed the BPM and Quad before the SATDI dechirper are not enabled -# 5) The first bpm and quad on the girder after the SATDI dechirper are disabled and the names are moved to the BPM and quad directly after the dechirper -# 6) Added first draft for FCC experiment beam line at Porthos - -# Layout 10.4.6 -# 1) Increased angle in Porthos-FFC arm to 3 degree for a faster separation - -# Layout 10.4.7 -# 1) Added CDR in SARCL01 in current phase -# 2) Move wirescanner from SATDI01-DWSC065 to SATDI01-DWSC290 -# 3) Displace the inner dipoles of SATUN05 and SATUN14 by 149 mm -# 4) Move the FCC experiment into S30CB15 and move the dechirper to S30CB16 -# 5) Remove differences between proto list and holy list according to email by S. Pfiffinger -# 5a) Position SATDI01-DBAM070 for all phases -# 5b) Position of SARCL01-DCDR105 -# 5c) SATSY03-DCDR050 moved into phase planned -# 5d) SATUN05 Chicane moved into phase planned -# 5e) SATDI01-DBPM090 and SATDI01-MQUA080 moved into phase planned -# 4f) Adjust various position aorund the modulator in Athos - -# Layout 10.4.8 -# 1) After decision of FCC/P3 project leader, the FCC experiment is moved back into Porthos arm -# 2) Sextupole SATCL01-MSEX200 and the Alignment laser port SATCL01-DALA210 have been removed from the lattice -# 3) Quadrupole SATCL01-MQUA120 adn MQUA190 have been moved inwards the SATCL01 symmetry point by 26.3 mm -# 4) The BAM SATDI01-DBAM095 has been temporarily removed due to aperture limitations -# 5) Define the offsets of the inner dipoles for the Athos beamline (small chicane sby 8 mm , big EEHG chicane by -# 6) correct the pointing direction of the EEHG chicane in SATMA01 - -# Layout 10.4.9 -# 1) Adding initial draft of Porthos extraction also used for P3 experiment. The porthos are is placed in thephase future while the P3 experiment is using same layout with less elements installed. - -# Layout 10.4.10 -# 1) Installationof Modulator in SATDI01 for phase current -# 2) Dipole type change for P3 experiment form CERN Type to SLS BX type -# 3) Reuse of Athos Dipole with the correct Baugruppen Type BE -# 4) First iteration of Porthos arm to resolve conflicts. - -# Layout 10.5.1 -# 1) Modification for EEHG Layout to keep quadrupoles in SATMA01 on the same position up to SATMA01-MQUA180 at the same position. -# 2) Shifting SATMA-MQUA640 and SATUN04-DBPM010 7 cm upstream (email S.Pfiffinger, 28.6.2022) -# 3) SATMA01-MQUA630 changed from QFD to QFDM - -# Layout 10.5.2 -# 1) Realization of full EEHG in phase current - -class SwissFEL: - def __init__(self,alt=0): - self.alt=alt - self.Version='10.5.1' - - def Types(self,TM): -# type definitions for the SwissFEL lattice - - #define common Undulator - indict={'Type':'Undulator','Length':4,'K':1.2,'ku':4*math.asin(1)/0.015,'cor':0,'Baugruppe':'U15'} - TM.define('U15',indict) - indict={'Type':'Undulator','Length':2,'K':1.5,'ku':4*math.asin(1)/0.04,'corx':0,'cory':0,'Baugruppe':'UE38'} - TM.define('UE38',indict) - indict={'Type':'Undulator','Length':0.06,'Tag':'UPHS','Baugruppe':'U15-PS'} - TM.define('PSU15',indict) - indict={'Type':'Undulator','Length':0.20,'Tag':'UDLY','Baugruppe':'UE38-DELAY'} - TM.define('PSUE38',indict) - indict={'Type':'Undulator','Length':0.20,'K':8., 'ku':4*math.asin(1)/0.2, 'Tag':'UMOD','Baugruppe':'U200'} - TM.define('UMOD',indict) - indict={'Type':'Undulator','Length':0.4,'K':2.27,'ku':4*math.asin(1)/0.05,'Baugruppe':'U50','Power':20e3,'Waist':400e-6} - TM.define('U50',indict) - - - # QFD Quadrupole and variants - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.25,'corx':0,'cory':0,'Baugruppe':'QFD'} - TM.define('QFD',indict) - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.15,'corx':0,'cory':0,'Baugruppe':'QFD'} - TM.define('QFD-short',indict) - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.25,'corx':0,'cory':0,'Baugruppe':'QFDM'} - TM.define('QFDM',indict) - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.15,'corx':0,'cory':0,'Baugruppe':'QFDM'} - TM.define('QFDM-short',indict) - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.25,'Baugruppe':'QUA-QFD'} - TM.define('QFD-noCor',indict) - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.25,'Baugruppe':'QFDM'} - TM.define('QFDM-noCor',indict) - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.25,'Tilt':math.asin(1)/2,'Tag':'MQSK','Baugruppe':'QFD-SKEW'} - TM.define('QFS',indict) - - - # QFA Quadrupoles - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.25,'Baugruppe':'QFA'} - TM.define('QFA',indict) - indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.25,'Tilt':math.asin(1)/2,'Tag':'MQSK','Baugruppe':'QFA-SKEW'} - TM.define('QFAS',indict) - - # QFM Quadrupoles - indict={'Type':'Quadrupole','Length':0.3,'LengthRes':0.7,'Baugruppe':'QFM'} - TM.define('QFM',indict) - indict={'Type':'Quadrupole','Length':0.3,'LengthRes':0.5,'Baugruppe':'QFM'} - TM.define('QFM-short',indict) - indict={'Type':'Quadrupole','Length':0.3,'LengthRes':0.3,'Baugruppe':'QFM'} - TM.define('QFM-veryshort',indict) - - # QFF Quadrupoles - indict={'Type':'Quadrupole','Length':0.08,'LengthRes':0.08,'corx':0,'cory':0,'Baugruppe':'QFF'} - TM.define('QFF',indict) - indict={'Type':'Quadrupole','Length':0.08,'LengthRes':0.08,'corx':0,'cory':0,'Baugruppe':'QFF'} - TM.define('QFF-UN',indict) - - # Alignment Quads for Undulators - indict={'Type':'Quadrupole','Length':0.04,'LengthRes':0.04,'Tag':'MQUP','Baugruppe':'QFU','Overlap':1} - TM.define('QFU',indict) - indict={'Type':'Quadrupole','Length':0.015,'LengthRes':0.03,'Tag':'MQUP','Baugruppe':'QFUE'} - TM.define('QFUE',indict) - - indict={'Type':'Quadrupole','Length':0.08,'LengthRes':0.10,'Baugruppe':'QFC'} - TM.define('QFC',indict) - indict={'Type':'Quadrupole','Length':0.08,'LengthRes':0.10,'Tilt':math.asin(1)/2,'Tag':'MQSK','Baugruppe':'QFC-SKEW'} - TM.define('QFCS',indict) - indict={'Type':'Quadrupole','Length':0.08,'LengthRes':0.10,'Baugruppe':'QFB'} - TM.define('QFB',indict) - indict={'Type':'Quadrupole','Length':0.08,'LengthRes':0.10,'Tilt':math.asin(1)/2,'Tag':'MQSK','Baugruppe':'QFB-SKEW'} - TM.define('QFBS',indict) - indict={'Type':'Quadrupole','Length':0.16,'LengthRes':0.16,'Baugruppe':'QFCOR'} - TM.define('QFCOR',indict) - indict={'Type':'Quadrupole','Length':0.16,'LengthRes':0.16,'Tilt':math.asin(1)/2,'Tag':'MQSK','Baugruppe':'QFCOR-SKEW'} - TM.define('QFCORS',indict) - indict={'Type':'Quadrupole','Length':0.1,'LengthRes':0.1,'Baugruppe':'QPM1'} - TM.define('QPM1',indict) - indict={'Type':'Quadrupole','Length':0.1,'LengthRes':0.1,'Baugruppe':'QPM2'} - TM.define('QPM2',indict) - - - indict={'Type':'Sextupole','Length':0.08,'LengthRes':0.10,'Baugruppe':'HFA'} - TM.define('HFA',indict) - indict={'Type':'Sextupole','Length':0.08,'LengthRes':0.10,'Baugruppe':'HFB'} - TM.define('HFB',indict) - - indict={'Type':'Solenoid','Length':0.75,'Baugruppe':'WFS'} - TM.define('WFS',indict) - indict={'Type':'Solenoid','Length':0.03,'Baugruppe':'WFB'} - TM.define('WFB',indict) - indict={'Type':'Solenoid','Length':0.26,'Baugruppe':'WFG'} - TM.define('WFG',indict) - - - # define common dipoles - indict={'Type':'Dipole','Length':0.25,'Baugruppe':'SHA'} - TM.define('SHA',indict) - indict={'Type':'Dipole','Length':0.12,'cor':0,'Baugruppe':'AFL'} - TM.define('AFL',indict) - indict={'Type':'Dipole','Length':0.25,'cor':0,'Baugruppe':'AFBC1'} - TM.define('AFBC1',indict) - - indict={'Type':'Dipole','Length':0.5,'cor':0,'Baugruppe':'AFBC3'} - TM.define('AFBC3',indict) - indict={'Type':'Dipole','Length':0.5,'Baugruppe':'AFBC3'} - TM.define('AFBC3-noCor',indict) - - # Athos Lambertson - indict={'Type':'Dipole','Length':0.76,'Baugruppe':'AFS'} - TM.define('AFS',indict) - - # two color chicane - indict={'Type':'Dipole','Length':0.3,'cor':0,'Baugruppe':'AFSS'} - TM.define('AFSS-OUTER',indict) - indict={'Type':'Dipole','Length':0.3,'cor':0,'Baugruppe':'AFSS'} - TM.define('AFSS-INNER',indict) - - - - indict={'Type':'Dipole','Length':2,'Tilt':math.asin(1),'Baugruppe':'AFD1'} - TM.define('AFD1',indict) - indict={'Type':'Dipole','Length':1.1,'Tilt':math.asin(1),'Baugruppe':'AFD2'} - TM.define('AFD2',indict) - indict={'Type':'Dipole','Length':0.3,'Tag':'MBNP','Baugruppe':'AFP1'} - TM.define('AFP1',indict) - indict={'Type':'Dipole','Length':1.0,'cor':0,'Baugruppe':'AFDL'} - TM.define('AFDL',indict) - # new dipole for Porthos - indict={'Type':'Dipole','Length':1.,'cor':0,'Baugruppe':'AFBC4'} - TM.define('AFBC4',indict) - # cern dipole - indict={'Type':'Dipole','Length':1.9,'cor':0,'Baugruppe':'BX'} - TM.define('B190',indict) - # porthos septum - indict={'Type':'Dipole','Length':1.4,'Baugruppe':'AFSPO'} - TM.define('AFSPO',indict) - # porthos dipoles from SLS - indict={'Type':'Dipole','Length':0.8,'Baugruppe':'BE'} - TM.define('AFSLS1',indict) - indict={'Type':'Dipole','Length':0.8,'Tilt':math.asin(1),'Baugruppe':'BE'} - TM.define('AFSLS1-Vert',indict) - - - # define common correctors - indict={'Type':'Corrector','Length':1,'Tag':'MKAC','cory':0,'Baugruppe':'RES-KICKER-AC'} - TM.define('RESKICKAC',indict) - indict={'Type':'Corrector','Length':0.21,'Tag':'MKDC','cory':0,'Baugruppe':'RES-KICKER-DC'} - TM.define('RESKICKDC',indict) - indict={'Type':'Corrector','Length':0.05,'LengthRes':0.1,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFC'} - TM.define('SFC',indict) - - # correctors for QFM quadrupoles - indict={'Type':'Corrector','Length':0.2,'LengthRes':0.3,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFQFM'} - TM.define('SFQFM',indict) - indict={'Type':'Corrector','Length':0.2,'LengthRes':0.2,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFQFM'} - TM.define('SFQFM-short',indict) - indict={'Type':'Corrector','Length':0.015,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFDD'} - TM.define('SFDD',indict) - indict={'Type':'Corrector','Length':0.015,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFD1'} - TM.define('SFD1',indict) - indict={'Type':'Corrector','Length':0.05,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFC'} - TM.define('SFC',indict) - indict={'Type':'Corrector','Length':0.005,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFB'} - TM.define('SFB',indict) - - # correctors for undulators - indict={'Type':'Corrector','Length':0.06,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFU'} - TM.define('SFU-US',indict) - indict={'Type':'Corrector','Length':0.01,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFUE'} - TM.define('SFUE-US',indict) - indict={'Type':'Corrector','Length':0.06,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFU'} - TM.define('SFU-DS',indict) - indict={'Type':'Corrector','Length':0.01,'Tag':'MCOR','corx':0,'cory':0,'Baugruppe':'SFUE'} - TM.define('SFUE-DS',indict) - - - - # define common RF structure - indict={'Type':'RF','Length': 0.2,'LengthRes':0.25,'Band':'S','Tag':'RGUN','Baugruppe':'PSI-GUN'} - TM.define('GUN',indict) - indict={'Type':'RF','Length': 1.978045,'LengthRes':2.05,'Band':'C','Baugruppe':'C-BAND-ACC'} - TM.define('TW Cav C-Band',indict) - indict={'Type':'RF','Length': 4.0830,'LengthRes':4.15,'Band':'S','Baugruppe':'S-BAND-ACC'} - TM.define('TW Cav S-Band',indict) - indict={'Type':'RF','Length': 0.75,'LengthRes':0.965,'Band':'X','Baugruppe':'X-BAND-ACC'} - TM.define('TW Cav X-Band',indict) - indict={'Type':'RF','Length': 0.240,'LengthRes':0.441,'Band':'S','Tag':'RTDS','Baugruppe':'S-BAND-TDS'} - TM.define('TDS S-Band',indict) - indict={'Type':'RF','Length': 1.9,'LengthRes':2.0,'Band':'C','Tag':'RTDS','Baugruppe':'C-BAND-TDS'} - TM.define('TDS C-Band',indict) - indict={'Type':'RF','Length': 1.20,'LengthRes':1.2,'Band':'X','Tag':'RTDS','Baugruppe':'X-BAND-TDS'} - TM.define('TDS X-Band',indict) - - # define diagnostics template - indict={'Type':'Diagnostic','Length':0.10,'Baugruppe':'DBPM-C16'} - TM.define('DBPM-C16',indict) - indict={'Type':'Diagnostic','Length':0.10,'Baugruppe':'DBPM-C8'} - TM.define('DBPM-C8',indict) - indict={'Type':'Diagnostic','Length':0.08,'Baugruppe':'DBPM-C5'} - TM.define('DBPM-C5',indict) - indict={'Type':'Diagnostic','Length':0.255,'Baugruppe':'DBPM-C38'} - TM.define('DBPM-C38',indict) - indict={'Type':'Diagnostic','Length':0.137,'Seval': 0.0685, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-OV16'} - TM.define('DSCR-OV16',indict) - indict={'Type':'Diagnostic','Length':0.137,'Seval': 0.0685, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-OV38'} - TM.define('DSCR-OV38',indict) - indict={'Type':'Diagnostic','Length':0.137,'Seval': 0.0685, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-HR16'} - TM.define('DSCR-HR16',indict) - indict={'Type':'Diagnostic','Length':0.137,'Seval': 0.0685, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-HR16-VO'} - TM.define('DSCR-HR16-VACONLY',indict) - indict={'Type':'Diagnostic','Length':0.137,'Seval': 0.0685, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-HR8'} - TM.define('DSCR-HR8',indict) - indict={'Type':'Diagnostic','Length':0.137,'Seval': 0.0685, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-HR8-TEMP'} - TM.define('DSCR-HR8-P1-OV16',indict) - indict={'Type':'Diagnostic','Length':0.137,'Seval': 0.0685, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-HR38'} - TM.define('DSCR-HR38',indict) - indict={'Type':'Diagnostic','Length':0.137,'Seval': 0.0685, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-LH16'} - TM.define('DSCR-LH16',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-LE16'} - TM.define('DSCR-LE16',indict) - indict={'Type':'Diagnostic','Length':0.1,'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-BC120'} - TM.define('DSCR-BC120',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-LE38R'} - TM.define('DSCR-LE38R',indict) - indict={'Type':'Diagnostic','Length':0.126,'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-LE38'} - TM.define('DSCR-LE38',indict) - indict={'Type':'Diagnostic','Length':0.085,'Tag':'DHVS','Baugruppe':'DHVS-SLIT'} - TM.define('DHVS',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DCDR','Baugruppe':'DCDR'} - TM.define('DCDR-BC1',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DCDR','Baugruppe':'DCDR'} - TM.define('DCDR-BC2',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DCDR','Baugruppe':'DCDR'} - TM.define('DCDR',indict) - - - indict={'Type':'Diagnostic','Length':0.1,'Sx':1,'Sy':1,'Tag':'DSRM','Baugruppe':'DSRM-VIS'} - TM.define('DSRM-VIS',indict) - indict={'Type':'Diagnostic','Length':0.1,'Sx':1,'Sy':1,'Tag':'DSRM','Baugruppe':'DSRM-UV'} - TM.define('DSRM-UV',indict) - indict={'Type':'Diagnostic','Length':0.1,'Sx':1,'Sy':1,'Tag':'DBCM','Baugruppe':'DBCM-THZ'} - TM.define('DBCM-THZ',indict) - indict={'Type':'Diagnostic','Length':0.1,'Sx':1,'Sy':1,'Tag':'DBCM','Baugruppe':'DBCM-IR'} - TM.define('DBCM-IR',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DALA','Baugruppe':'DALA'} - TM.define('DALA-BC1',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DALA','Baugruppe':'DALA'} - TM.define('DALA',indict) - - indict={'Type':'Diagnostic','Length':0.02, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DSCR-LA'} - TM.define('DSCR-LA',indict) - indict={'Type':'Diagnostic','Length':0.02, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DLAC-TARGET'} - TM.define('DLAC-TARGET',indict) - indict={'Type':'Diagnostic','Length':0.02, 'Sx':1,'Sy':1,'Tag':'DSCR','Baugruppe':'DCDR-LA'} - TM.define('DCDR-LA',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DLAC','Baugruppe':'DLAC-LL16'} - TM.define('DLAC-LL16',indict) - - - - - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DWSC','Baugruppe':'DWSC-C16'} - TM.define('DWSC-C16',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DWSC','Baugruppe':'DWSC-C16-AL'} - TM.define('DWSC-C16-AL',indict) - indict={'Type':'Diagnostic','Length':0.15,'Sx':1,'Sy':1,'Tag':'DWSC','Baugruppe':'DWSC-C38'} - TM.define('DWSC-C38',indict) - indict={'Type':'Diagnostic','Length':0.1,'Sx':1,'Sy':1,'Tag':'DWSC','Baugruppe':'DWSC-C8'} - TM.define('DWSC-C8',indict) - indict={'Type':'Diagnostic','Length':0.137,'Sx':1,'Sy':1,'Tag':'DWSC','Apery':0,'Baugruppe':'DWSC-C16-COL'} - TM.define('DWSC-C16-COL',indict) - indict={'Type':'Diagnostic','Length':0.075,'Cx':0,'Cy':0,'Cz':1,'Tag':'DBAM','Baugruppe':'DBAM-PS16'} - TM.define('DBAM-PS16',indict) - indict={'Type':'Diagnostic','Length':0.075,'Cx':0,'Cy':0,'Cz':1,'Tag':'DBAM','Baugruppe':'DBAM-FS16'} - TM.define('DBAM-FS16',indict) - indict={'Type':'Diagnostic','Length':0.1,'Cx':0,'Cy':0,'Cz':1,'Tag':'DBAM','Baugruppe':'DBAM-FS8'} - TM.define('DBAM-FS8',indict) - indict={'Type':'Diagnostic','Length':0.04,'Cx':0,'Cy':0,'Cz':0,'Tag':'DICT','Baugruppe':'DICT-C16'} - TM.define('DICT-C16',indict) - indict={'Type':'Diagnostic','Length':0.04,'Cx':0,'Cy':0,'Cz':0,'Tag':'DICT','Baugruppe':'DICT-C38'} - TM.define('DICT-C38',indict) - indict={'Type':'Diagnostic','Length':0.06,'Cx':0,'Cy':0,'Cz':0,'Tag':'DICT','Baugruppe':'DICT-C38-GUN'} - TM.define('DICT-C38-GUN',indict) - indict={'Type':'Diagnostic','Length':0.1,'Cx':0,'Cy':0,'Cz':0,'Tag':'DWCM','Baugruppe':'DWCM-C38'} - TM.define('DWCM-C38',indict) - indict={'Type':'Diagnostic','Length':0.15,'Cx':0,'Cy':0,'Sz':1,'Tag':'DTAU','Baugruppe':'DTAU'} - TM.define('DTAU',indict) - indict={'Type':'Diagnostic','Length':0.15,'Cx':0,'Cy':0,'Sz':1,'Tag':'DEOM','Baugruppe':'DEOM'} - TM.define('DEOM',indict) - indict={'Type':'Diagnostic','Length':0.126,'Cx':0,'Cy':0,'Sz':1,'Tag':'DFCP','Baugruppe':'DFCP-GUN'} - TM.define('DFCP',indict) - - # define x-ray diagnostic - indict={'Type':'Photonics','Length':0.15,'Sx':1,'Sy':1,'Tag':'PPRM','Baugruppe':'PPRM'} - TM.define('PPRM-C38',indict) - indict={'Type':'Photonics','Length':0.15,'Tag':'PCRY','Baugruppe':'BRAGG-CRYSTAL'} - TM.define('PCRY-C38',indict) - - - - # define aperture templates (moving apertures are part of diagnostics and diagnostics) - indict={'Type':'Diagnostic','Length':0.137,'Tag':'DCOL','Apery':0,'Baugruppe':'VERT-COL'} - TM.define('COL-TR-16',indict) - indict={'Type':'Diagnostic','Length':0.5,'Tag':'VCOL','Aperx':0,'Baugruppe': 'E-COL'} - TM.define('COL-Energy',indict) - indict={'Type':'Undulator','Length':1,'Tag':'UDCP','gap':20e-3,'offset':0,'Aperx':0,'Baugruppe': 'DECHIRPER-V'} - TM.define('COL-Dechirper-V',indict) - indict={'Type':'Undulator','Length':1,'Tag':'UDCP','gap':20e-3,'offset':0,'Aperx':0,'Baugruppe': 'DECHIRPER-H'} - TM.define('COL-Dechirper-H',indict) - indict={'Type':'Diagnostic','Length':0.01,'Tag':'DCOL','Aperx':0,'Baugruppe':'BC-SCRAPER'} - TM.define('COL-BC-Scraper',indict) - indict={'Type':'Diagnostic','Length':0.01,'Tag':'DSFH','Baugruppe':'SLOT-FOIL-H'} - TM.define('BC-SlotFoil-H',indict) - indict={'Type':'Diagnostic','Length':0.15,'Tag':'DSFV','Baugruppe':'SLOT-FOIL-V'} - TM.define('BC-SlotFoil-V',indict) - indict={'Type':'Vacuum','Length':0.085,'Tag':'VLAP','Baugruppe':'LH-LASER-PORT'} - TM.define('LH-Laserport',indict) -# indict={'Type':'Vacuum','Length':0.085,'Tag':'VLAP','Baugruppe':'LASER-HEATER-SP-OUT'} -# TM.define('LH-Laserport-out',indict) - indict={'Type':'Vacuum','Length':0.1,'Tag':'VLAP','Baugruppe':'LC-GUN-IN'} - TM.define('GUN-Laserport',indict) - - - # Beam Stopper and Dumps - indict={'Type':'Vacuum','Length':1,'Tag':'SDMP','Baugruppe':'BEAM-DUMP-SIN'} - TM.define('Beam-Dump-Sin',indict) - indict={'Type':'Vacuum','Length':1,'Tag':'SDMP','Baugruppe':'BEAM-DUMP-S10'} - TM.define('Beam-Dump-S10',indict) - indict={'Type':'Vacuum','Length':1,'Tag':'SDMP','Baugruppe':'BEAM-DUMP-SAR'} - TM.define('Beam-Dump-Sar',indict) - indict={'Type':'Vacuum','Length':1,'Tag':'SDMP','Baugruppe':'BEAM-DUMP-SAT'} - TM.define('Beam-Dump-Sat',indict) - indict={'Type':'Vacuum','Length':2.5,'Tag':'SSTP','Baugruppe':'BEAM-STOP-SAR'} - TM.define('Beam-Stopper-Sar',indict) - indict={'Type':'Vacuum','Length':2.5,'Tag':'SSTP','Baugruppe':'BEAM-STOP-SAT'} - TM.define('Beam-Stopper-Sat',indict) - indict={'Type':'Vacuum','Length':1.6,'Tag':'SSTP','Baugruppe': 'BEAM-STOP-S10'} - TM.define('Beam-Stopper-S10',indict) - indict={'Type':'Vacuum','Length':1.5,'Tag':'SLOS','Baugruppe': 'SHIELD-FE'} - TM.define('FE-Shielding',indict) - - #Laser Acceleration - indict={'Type':'Diagnostic','Length':2.13,'Tag':'DLAC','Aperx':0,'Baugruppe':'LASER-ACC-BOX'} - TM.define('Laser-Acceleration',indict) - - - # define branching point - indict={'Type':'Marker','Length':0.0,'Tag':'MKBR','Baugruppe': 'BRANCHING-POINT'} - TM.define('MKBR',indict) - # define branching point - indict={'Type':'Marker','Length':0.0,'Tag':'PHLD','Baugruppe': 'PLACE-HOLDER'} - TM.define('PHLD',indict) - indict={'Type':'Marker','Length':0.0,'Tag':'ENDS','Baugruppe': 'END-SECTION'} - TM.define('ENDS',indict) - - # FCC experiment - indict={'Type':'Vacuum','Length':0.01,'Tag':'FCRY','Baugruppe': 'P3-Crystal'} - TM.define('P3-Crystal',indict) - indict={'Type':'Vacuum','Length':0.01,'Tag':'FTAR','Baugruppe': 'P3-Target'} - TM.define('P3-Target',indict) - indict={'Type':'Dipole','Length':0.8,'cor':0,'Baugruppe':'AFSC'} - TM.define('AFSC',indict) - indict={'Type':'RF','Length': 1.2,'LengthRes':1.2,'Band':'S','Baugruppe':'S-BAND-ACC-P3'} - TM.define('P3-RF-ACC',indict) - indict={'Type':'Solenoid','Length':0.5,'Baugruppe':'WFP3'} - TM.define('WFP3',indict) - indict={'Type':'Solenoid','Length':0.3,'Baugruppe':'WFAMD'} - TM.define('WFAMD',indict) - indict={'Type':'Diagnostic','Length':0.431,'Baugruppe':'DBPM-P3'} - TM.define('DBPM-P3',indict) - indict={'Type':'Diagnostic','Length':0.20,'Tag':'DSCR','Baugruppe':'DSCR-P3'} - TM.define('DSCR-P3',indict) - indict={'Type':'Diagnostic','Length':1.05,'Tag':'DFCP','Baugruppe':'FC-P3'} - TM.define('FC-P3',indict) - indict={'Type':'Dipole','Length':0.5,'Baugruppe':'AFBC2-SPEC'} - TM.define('SHA-P3',indict) - indict={'Type':'Vacuum','Length':1.25,'Tag':'SDMP','Baugruppe':'BEAM-DUMP-P3'} - TM.define('Beam-Dump-P3',indict) - - - def Lines(self,TM): -# defines common lines in the lattice - - # define sequence templates - - # Aramis - a0={'Length':4.75} - a1cor={'Element':'SFU-US','sRef':0.105+0.026,'Ref':'absolute','index':10,'Option':{'MADthin':1,'MADshift':-0.02}} - a1={'Element':'QFU','sRef':0.115,'Ref':'absolute','index':20} - a2={'Element':'U15','sRef':0.0575,'Ref':'relative','index':30} - a3cor={'Element':'SFU-DS','sRef':0.0475-0.026,'Ref':'relative','index':40,'Option':{'MADthin':1,'MADshift':-0.02}} - a3={'Element':'QFU','sRef':4.27,'Ref':'absolute','index':50} - a4={'Element':'PSU15','sRef':0.035,'Ref':'relative','index':60} - a5={'Element':'DBPM-C8','sRef':0.078,'Ref':'relative','index':70} - a6={'Element':'QFF-UN','sRef':0.06,'Ref':'relative','index':80} - seq=[a0,a1cor,a1,a2,a3cor,a3,a4,a5,a6] - TM.define('U15-Cell',seq) - a5alt={'Element':'DBPM-C8','sRef':0.173,'Ref':'relative','index':70} - seq=[a0,a1cor,a1,a2,a3cor,a3,a5alt,a6] - TM.define('U15-Cell-Last',seq) - a5alt={'Element':'DBPM-C8','sRef':4.483,'Ref':'relative','index':70} - seq=[a0,a5alt,a6] - TM.define('U15-Cell-Empty',seq) - - - # Athos - - a0={'Length':2.8} - a1={'Element':'QFUE','sRef':0.035,'Ref':'relative','index':10} - a2={'Element':'SFUE-US','sRef':0.0095,'Ref':'relative','index':20} - a3={'Element':'UE38','sRef':0.038,'Ref':'relative','index':30} - a4={'Element':'SFUE-DS','sRef':0.038,'Ref':'relative','index':40} - a5={'Element':'QFUE','sRef':0.0095,'Ref':'relative','index':50} - a6={'Element':'PSUE38','sRef':0.035+0.01,'Ref':'relative','index':60} - a7={'Element':'DBPM-C5','sRef':0.035-0.01+0.00775,'Ref':'relative','index':70} - a8={'Element':'QFF-UN','sRef':0.06025-0.00775+0.005,'Ref':'relative','index':80} - - seq=[a0,a1,a2,a3,a4,a5,a6,a7,a8] - TM.define('UE38-Cell',seq) # normal line - a7alt={'Element':'DBPM-C5','sRef':0.27+0.00775,'Ref':'relative','index':70} - seq=[a0,a1,a2,a3,a4,a5,a7alt,a8] - TM.define('UE38-Cell-Last',seq) # line without phase shifter - a6alt={'Element':'PSUE38','sRef':2.21+0.035+0.01,'Ref':'relative','index':60} - seq=[a0,a6alt,a7,a8] - TM.define('UE38-Cell-PS',seq) # empty cell with only phase shifter - a7alt={'Element':'DBPM-C5','sRef':2.48+0.00775,'Ref':'relative','index':70} - seq=[a0,a7alt,a8] - TM.define('UE38-Cell-Empty',seq) # fully empty cell - - a7_400={'Element':'DBPM-C5','sRef':2.48+0.00775,'Ref':'relative','index':410} - a8_400={'Element':'QFF-UN','sRef':0.06025-0.00775+0.005,'Ref':'relative','index':420} - seq=[a0,a7_400,a8_400] - TM.define('UE38-Cell-Empty-400',seq) # fully empty cell - - - # C-banLinac - - a0={'Length': 9.8} - a1={'Element':'TW Cav C-Band','sRef':0.035,'Ref':'relative','index':100} - a2={'Element':'TW Cav C-Band','sRef':0.049387,'Ref':'relative','index':200} - a3={'Element':'DBPM-C16','sRef':0.080613,'Ref':'relative','index':220} - a4={'Element':'QFDM','sRef':0.049,'Ref':'relative','index':230} - a5={'Element':'TW Cav C-Band','sRef':0.252075,'Ref':'relative','index':300} - a6={'Element':'TW Cav C-Band','sRef':0.049387,'Ref':'relative','index':400} - a7={'Element':'DBPM-C16','sRef':0.099538,'Ref':'relative','index':420} - a8={'Element':'QFDM','sRef':0.049,'Ref':'relative','index':430} - a9={'Element':'DWSC-C16','sRef':0.019,'Ref':'relative','index':440} - seq=[a0,a1,a2,a3,a4,a5,a6,a7,a8] - TM.define('CB-Lin1-Cell',seq) - seq=[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9] - TM.define('CB-Lin1-Cell-WSC',seq) - a0alt={'Length': 9.135} - seq=[a0alt,a1,a2,a3,a4,a5,a6] - TM.define('CB-Lin1-Cell-Last',seq) - - a0={'Length': 9.8} - a1={'Element':'TW Cav C-Band','sRef':0.035,'Ref':'relative','index':100} - a2={'Element':'TW Cav C-Band','sRef':0.049387,'Ref':'relative','index':200} - a3={'Element':'DBPM-C16','sRef':0.080613,'Ref':'relative','index':220} - - a3empty={'Element':'DBPM-C16','sRef':4.265,'Ref':'relative','index':220} - a4={'Element':'QFD','sRef':0.049,'Ref':'relative','index':230} - a5={'Element':'COL-TR-16','sRef':0.019,'Ref':'relative','index':240} - a6={'Element':'TW Cav C-Band','sRef':0.096075,'Ref':'relative','index':300} - a7={'Element':'TW Cav C-Band','sRef':0.049387,'Ref':'relative','index':400} - a8={'Element':'DBPM-C16','sRef':0.099538,'Ref':'relative','index':420} - a8empty={'Element':'DBPM-C16','sRef':4.501,'Ref':'relative','index':420} - a9={'Element':'QFD','sRef':0.049,'Ref':'relative','index':430} - a10={'Element':'COL-TR-16','sRef':0.019,'Ref':'relative','index':440} - seq=[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10] - TM.define('CB-Athos-Cell',seq) - seq=[a0,a3empty,a4,a8empty,a9] - TM.define('CB-Athos-Cell-empty',seq) - - - a0={'Length': 9.1} - a1={'Element':'TW Cav C-Band','sRef':0.035,'Ref':'relative','index':100} - a2={'Element':'TW Cav C-Band','sRef':0.049387,'Ref':'relative','index':200} - a3={'Element':'TW Cav C-Band','sRef':0.049387,'Ref':'relative','index':300} - a4={'Element':'TW Cav C-Band','sRef':0.049387,'Ref':'relative','index':400} - a5={'Element':'DBPM-C16','sRef':0.081839,'Ref':'relative','index':420} - a6={'Element':'QFD','sRef':0.049,'Ref':'relative','index':430} - a7={'Element':'DWSC-C16','sRef':0.019,'Ref':'relative','index':440} - - - seq=[a0,a1,a2,a3,a4,a5,a6] - TM.define('CB-Lin2-Cell',seq) - seq=[{'Length': 8.435},a1,a2,a3,a4] - TM.define('CB-Lin2-Cell-Last',seq) - seq=[a0,a1,a2,a3,a4,a5,a6,a7] - TM.define('CB-Lin2-Cell-WSC',seq) - - seq=[a0,a1,a2,a3,a4,a5,a6] - TM.define('CB-Lin3-Cell-incomplete',seq) - - #s-Band - a0={'Length': 11.0} - a1={'Element':'TW Cav S-Band','sRef':0.155,'Ref':'relative','index':100} - a2={'Element':'DBPM-C16','sRef':0.835,'Ref':'relative','index':120} - a3={'Element':'QFDM','sRef':0.03,'Ref':'relative','index':130} - a4={'Element':'TW Cav S-Band','sRef':0.135-0.0016,'Ref':'relative','index':200} - a5={'Element':'DBPM-C16','sRef':0.835+0.0016,'Ref':'relative','index':220} - a6={'Element':'QFDM','sRef':0.03,'Ref':'relative','index':230} - - # replaces a3 - a3alt1={'Element':'DSCR-HR16','sRef':0.235,'Ref':'relative','index':110} - a3alt2={'Element':'DBPM-C16','sRef':0.463,'Ref':'relative','index':120} - a3alt3={'Element':'QFDM','sRef':0.03,'Ref':'relative','index':130} - - # - a2alt1={'Element':'DBPM-C16','sRef':0.837+4.15+0.153,'Ref':'relative','index':120} - a2alt2={'Element':'DBPM-C16','sRef':0.837+4.15+0.133,'Ref':'relative','index':220} - - - a0alt={'Length': 11.6} - a5alt1={'Element':'DBPM-C16','sRef':0.835+0.0016+0.57450,'Ref':'relative','index':220} - - seq=[a0,a1,a2,a3,a4,a5,a6] - TM.define('SB-Lin-Cell-Mid',seq) - seq=[a0,a1,a3alt1,a3alt2,a3alt3,a4,a5,a6] - TM.define('SB-Lin-Cell-First',seq) - seq=[a0,a2alt1,a3,a2alt2,a6] - TM.define('SB-Lin-Cell-Empty',seq) - - seq=[a0alt,a1,a2,a3,a4,a5alt1,a6] - TM.define('SB-Lin-TMP-DECHIRPER',seq) - - - def build(self): - - #initiate the TypeManage - TM = OMType.TypeManager() - self.Types(TM) - self.Lines(TM) - - #----------------------------------------------- - # define actual layout - - - - - #---------- short branch for gun dump - BD01=OMType.LineContainer('BD01',0) - BD01.append(TM.generate('DSCR-LE38R',10),0.489+0.097811,'relative') - BD01.append(TM.generate('Beam-Dump-Sin',15),0.165+0.165-0.017,'relative') - - InjectorDump=OMType.LineContainer('IN') - InjectorDump.append(BD01,0,'relative') - - - - #---------- elements of injector - - Lsec=3.6039 - angle=0 # default angle - EG01=OMType.LineContainer('EG01',Lsec) - EG01.append(TM.generate('WFB',10),0,'absolute') - EG01.append(TM.generate('GUN',100),0.1,'absolute') - EG01.append(TM.generate('SFB',120,{'Overlap':1}),0.265,'absolute') - EG01.append(TM.generate('WFG',130,{'Overlap':1}),0.27,'absolute') - EG01.append(TM.generate('QFCOR',140,{'Overlap':1}),0.32,'absolute') - EG01.append(TM.generate('QFCORS',150,{'Overlap':1}),0.32,'absolute') - EG01.append(TM.generate('SFB',160,{'Overlap':1}),0.054,'relative') - EG01.append(TM.generate('DWCM-C38',170),0.143,'relative') - EG01.append(TM.generate('SFDD',180),0.07-0.0002,'relative') - EG01.append(TM.generate('GUN-Laserport',185),0.2397,'relative') - EG01.append(TM.generate('DFCP',185),0.0,'relative') - EG01.append(TM.generate('DSCR-LE38',190),0.1445-0.126,'relative') - EG01.append(TM.generate('SFDD',200),1.3725+0.0615-0.06+0.1445,'absolute') - EG01.append(TM.generate('DICT-C38-GUN',210),0.07+0.0375-0.064,'relative') - EG01.append(TM.generate('QFC',212),0.123-0.0547,'relative') - EG01.append(TM.generate('DICT-C38',215),0.4-0.055+0.062-0.0845-0.223+0.0547,'relative') - EG01.append(TM.generate('SFD1',220),0.6894-0.45-0.0425-0.0795,'relative') - EG01.append(TM.generate('SHA',300, {'angle':angle,'design_angle':30,'e1':0.5,'e2':0.5,'branch':True}),0.035,'relative') - EG01.append(TM.generate('MKBR',301),0.0,'relative') # Marker to indicate a branching to Injector beam dump -# EG01.append(TM.generate('QFC',310),0.123,'relative') - EG01.append(TM.generate('QFCS',320),0.05+0.223,'relative') - EG01.append(TM.generate('DHVS',330),0.06,'relative') - EG01.append(TM.generate('DBPM-C16',340),0.2275-0.0885+0.041,'relative') - EG01.append(TM.generate('DSCR-LE16',350),0.0455+0.013+0.0885-0.067,'relative') - - SB01=OMType.LineContainer('SB01',5-0.022) - SB01.append(TM.generate('SFDD',10),0.02,'relative') - SB01.append(TM.generate('TW Cav S-Band',100),0.025,'relative') - SB01.append(TM.generate('WFS',110,{'Overlap':1}),0.41,'absolute') - SB01.append(TM.generate('WFS',120,{'Overlap':1}),0.15,'relative') - SB01.append(TM.generate('WFS',130,{'Overlap':1}),0.15,'relative') - SB01.append(TM.generate('WFS',140,{'Overlap':1}),0.15,'relative') - SB01.append(TM.generate('DBPM-C16',150),0.582,'relative') - - SB02=OMType.LineContainer('SB02',4.59+0.032-0.0039) - SB02.append(TM.generate('SFC',10),0.,'relative') - SB02.append(TM.generate('TW Cav S-Band',100),0.032,'relative') - SB02.append(TM.generate('WFS',110,{'Overlap':1}),0.432,'absolute') - SB02.append(TM.generate('WFS',120,{'Overlap':1}),0.15,'relative') - SB02.append(TM.generate('WFS',130,{'Overlap':1}),0.15,'relative') - SB02.append(TM.generate('WFS',140,{'Overlap':1}),0.15,'relative') - SB02.append(TM.generate('DBPM-C16',150),0.585,'relative') - - LH01=OMType.LineContainer('LH01',2.19) - LH01.append(TM.generate('DBAM-PS16',10),0.099,'relative') - LH01.append(TM.generate('QFDM-short',20),0.04+0.026,'relative') - LH01.append(TM.generate('QFCS',30),0.1,'relative') - LH01.append(TM.generate('QFDM-noCor',40),0.05,'relative') - LH01.append(TM.generate('QFDM',50),0.2,'relative') - LH01.append(TM.generate('DBPM-C16',60),0.18-0.008-0.056,'relative') - LH01.append(TM.generate('QFDM-noCor',70),0.02+0.008+0.056,'relative') - LH01.append(TM.generate('DSCR-OV16',80),0.066,'relative') - - LH02=OMType.LineContainer('LH02',-0.412) - LH02.append(TM.generate('QFDM',10),0.09,'relative') - LH02.append(TM.generate('LH-Laserport',15),0.033,'relative') - varC=OMType.VariableContainer(0.16,0) - LH02.append(TM.generate('AFL',100,{'angle':-4.1,'design_angle':-4.1,'e1':0,'e2':1,'BC':'Laser Heater'}),0.142,'relative') - LH02.append(TM.generate('AFL',200,{'angle':4.1,'design_angle':4.1,'e1':1,'e2':0,'BC':'Laser Heater'}),2,varC) - LH02.append(TM.generate('DBPM-C16',210),0.19,'relative') - LH02.append(TM.generate('DSCR-LH16',220),0.08,'relative') - LH02.append(TM.generate('U50',230),0.14-0.007,'relative') - LH02.append(TM.generate('DBPM-C16',240),0.21-0.058,'relative') - LH02.append(TM.generate('DSCR-LH16',250),0.08,'relative') - LH02.append(TM.generate('AFL',300,{'angle':4.1,'design_angle':4.1,'e1':0,'e2':1,'BC':'Laser Heater'}),0.191,'relative') - LH02.append(TM.generate('AFL',400,{'angle':-4.1,'design_angle':-4.1,'e1':1,'e2':0,'BC':'Laser Heater'}),2,varC) - LH02.append(TM.generate('LH-Laserport',405),0.141,'relative') - LH02.append(TM.generate('QFDM',410),0.038,'relative') - - LH03=OMType.LineContainer('LH03',2.563) - LH03.append(TM.generate('DBPM-C16',10),0.,'relative') - LH03.append(TM.generate('QFDM',30),0.298,'relative') - LH03.append(TM.generate('QFDM-noCor',40),0.255,'relative') - LH03.append(TM.generate('DBPM-C16',50),0.155-0.062,'relative') - LH03.append(TM.generate('QFDM',60),0.062,'relative') - LH03.append(TM.generate('QFDM-noCor',80),0.15-0.035+0.137+0.088,'relative') - LH03.append(TM.generate('DBPM-C16',90),0.135,'relative') - - SB03=TM.generate('SB-Lin-Cell-First',0,{'Name':'SB03'}) - SB04=TM.generate('SB-Lin-Cell-Mid',0,{'Name':'SB04'}) - SB05=TM.generate('SB-Lin-Cell-Empty',0,{'Name':'SB05'}) - - XB01=OMType.LineContainer('XB01',5.311) - XB01.append(TM.generate('TW Cav X-Band',100),0.305-0.013,'relative') - XB01.append(TM.generate('DBPM-C16',120),0.2048,'relative') - XB01.append(TM.generate('TW Cav X-Band',200),0.2048,'relative') - - BC01=OMType.LineContainer('BC01',6.615) - BC01.append(TM.generate('DBPM-C16',10),0.12+0.08,'relative') - BC01.append(TM.generate('QFDM',20),0.105-0.08,'relative') - BC01.append(TM.generate('DBPM-C16',30),0.425,'relative') - BC01.append(TM.generate('DSCR-OV16',40),0.15,'relative') - BC01.append(TM.generate('QFDM',50),0.240-0.027,'relative') - BC01.append(TM.generate('DBAM-PS16',60),0.749-0.075+0.175,'relative') - BC01.append(TM.generate('QFDM',70),0.466-0.175,'relative') - BC01.append(TM.generate('DBPM-C16',80),1.011,'relative') - BC01.append(TM.generate('QFDM',90),0.189,'relative') - BC01.append(TM.generate('DBPM-C16',100),0.987,'relative') - BC01.append(TM.generate('QFDM',110),0.098,'relative') - - BC02=OMType.LineContainer('BC02',-0.8226) - varC=OMType.VariableContainer(6,2.655+0.0175) - varD=OMType.VariableContainer(6,3.601+0.0175+0.306) - BC02.append(TM.generate('AFBC1',100,{'angle':-3.82,'design_angle':-3.82,'e1':0,'e2':1,'BC':'Bunch Compressor 1'}),0.,'relative') - BC02.append(TM.generate('QFBS',110),1.8,'relative') - BC02.append(TM.generate('QFB',120),0.1,'relative') - BC02.append(TM.generate('HFA',130),0.1,'relative') - BC02.append(TM.generate('DBPM-C38',140),0.1+0.0175,'relative') - BC02.append(TM.generate('AFBC1',200,{'angle':3.82,'design_angle':3.82,'e1':1,'e2':0,'BC':'Bunch Compressor 1'}),0,varC) - BC02.append(TM.generate('COL-BC-Scraper',210),0.29,'relative') - BC02.append(TM.generate('DSCR-BC120',220),0.025,'relative') - BC02.append(TM.generate('AFBC1',300,{'angle':3.82,'design_angle':3.82,'e1':0,'e2':1,'BC':'Bunch Compressor 1'}),0.325,'relative') - BC02.append(TM.generate('DSRM-VIS',310),0.846+0.306,'relative') - BC02.append(TM.generate('DBPM-C38',320),0,varD) - BC02.append(TM.generate('HFA',330),0.1+0.0175,'relative') - BC02.append(TM.generate('QFB',340),0.1,'relative') - BC02.append(TM.generate('QFAS',350),0.09,'relative') - BC02.append(TM.generate('DALA',360),1.214-0.0385,'relative') - BC02.append(TM.generate('AFBC1',400,{'angle':-3.82,'design_angle':-3.82,'e1':1,'e2':0,'BC':'Bunch Compressor 1'}),1.56-1.214+0.0385-0.037,'relative') - BC02.append(TM.generate('DBCM-THZ',410),0.4274,'relative') - - DI01=OMType.LineContainer('DI01',3.84) - DI01.append(TM.generate('DBPM-C16',10),0.263,'relative') - DI01.append(TM.generate('QFDM',20),0.037,'relative') - DI01.append(TM.generate('QFBS',30),0.27,'relative') - DI01.append(TM.generate('DBPM-C16',60),0.109+0.012+0.4+0.137,'relative') - DI01.append(TM.generate('QFDM',70),0.03-0.008,'relative') - DI01.append(TM.generate('DWSC-C16-AL',90),0.167-0.022+0.005+0.137+0.022+0.061,'relative') - DI01.append(TM.generate('TDS S-Band',100),0.346,'relative') - - DI02=OMType.LineContainer('DI02',5.456) - DI02.append(TM.generate('DBPM-C16',10),0.366+0.037,'relative') - DI02.append(TM.generate('QFDM',20),0.09-0.037,'relative') - DI02.append(TM.generate('QFDM',30),0.9,'relative') - DI02.append(TM.generate('DBPM-C16',40),0.756,'relative') - DI02.append(TM.generate('QFDM',50),0.044,'relative') - DI02.append(TM.generate('DLAC-LL16',55),0.363-0.091,'relative') - DI02.append(TM.generate('QFDM',60),0.4+0.091,'relative') - DI02.append(TM.generate('DCDR-BC1',65),0.263,'relative') - DI02.append(TM.generate('DSCR-OV16',75),0.09-0.137+0.1+0.047,'relative') - DI02.append(TM.generate('DBPM-C16',80),0.11-0.047+0.037,'relative') - DI02.append(TM.generate('QFDM',90),0.11-0.037,'relative') - - - InjLine=[EG01,SB01,SB02,LH01,LH02,LH03,SB03,SB04,SB05,XB01,BC01,BC02,DI01,DI02] - Injector=OMType.LineContainer('IN') - Injector.append(InjLine) - - - - #------------------------------------------------------ - #----- Insertion of short Linac beam dump - BD01=OMType.LineContainer('BD01',0) - BD01.append(TM.generate('QFA',10),1.1,'relative') - BD01.append(TM.generate('DBPM-C38',20),0.4,'relative') - BD01.append(TM.generate('DSCR-HR38',30),0.15,'relative') - BD01.append(TM.generate('Beam-Dump-S10',35),3.8115,'relative') - Linac1Dump=OMType.LineContainer('10') - Linac1Dump.append(BD01,0,'relative') - - - #----------------------------------------------------- - # Linac 1 - - CB01=TM.generate('CB-Lin1-Cell',0,{'Name':'CB01'}) - CB02=TM.generate('CB-Lin1-Cell',0,{'Name':'CB02'}) - - angle=0 - Lcell=4.9 - DI01=OMType.LineContainer('DI01',Lcell) - DI01.append(TM.generate('DWSC-C16',10),0.094,'relative') - DI01.append(TM.generate('DSCR-HR16',20),0.12,'relative') - DI01.append(TM.generate('DICT-C16',25),0.0675,'relative') - DI01.append(TM.generate('QFDM-noCor',30),0.03-0.0005,'relative') - DI01.append(TM.generate('AFDL',100,{'angle':angle,'design_angle':-20,'e1':0.5,'e2':0.5,'branch':True}),0.303,'relative') - DI01.append(TM.generate('MKBR',101),0.0,'relative') - DI01.append(TM.generate('DBPM-C16',110),2.09-0.003,'relative') - DI01.append(TM.generate('QFDM',120),0.049,'relative') - - CB03=TM.generate('CB-Lin1-Cell-WSC',0,{'Name':'CB03'}) - CB04=TM.generate('CB-Lin1-Cell',0,{'Name':'CB04'}) - CB05=TM.generate('CB-Lin1-Cell-WSC',0,{'Name':'CB05'}) - CB06=TM.generate('CB-Lin1-Cell',0,{'Name':'CB06'}) - CB07=TM.generate('CB-Lin1-Cell-WSC',0,{'Name':'CB07'}) - CB08=TM.generate('CB-Lin1-Cell',0,{'Name':'CB08'}) - CB09=TM.generate('CB-Lin1-Cell-Last',0,{'Name':'CB09'}) - - BC01=OMType.LineContainer('BC01',9.665) - BC01.append(TM.generate('DBPM-C16',10),0.03,'relative') - BC01.append(TM.generate('QFDM',20),0.049,'relative') - BC01.append(TM.generate('DWSC-C16-AL',30),0.019,'relative') - BC01.append(TM.generate('QFDM',40),1.08,'relative') - BC01.append(TM.generate('DBPM-C16',50),2.351,'relative') - BC01.append(TM.generate('QFDM',60),0.049,'relative') - BC01.append(TM.generate('DBAM-FS16',70),0.839,'relative') - BC01.append(TM.generate('QFDM',80),1.586,'relative') - BC01.append(TM.generate('DBPM-C16',90),1.305,'relative') - BC01.append(TM.generate('QFDM',100),0.095,'relative') - - BC02=OMType.LineContainer('BC02',-0.521) -# varC=OMType.VariableContainer(7,3.15+0.1+0.72+0.037) - varC=OMType.VariableContainer(7,3.15) - varD=OMType.VariableContainer(7,4.2761+0.357-0.661) - BC02.append(TM.generate('AFBC3',100,{'angle':-2.15,'design_angle':-2.15,'e1':0,'e2':1,'BC':'Bunch Compressor 2'}),0.,'relative') - BC02.append(TM.generate('QFBS',110),2.45,'relative') - BC02.append(TM.generate('QFB',120),0.1,'relative') - BC02.append(TM.generate('HFB',130),0.09,'relative') - BC02.append(TM.generate('DBPM-C16',140),0.11,'relative') -# BC02.append(TM.generate('DALA',150),0,varC) -# BC02.append(TM.generate('AFBC3',200,{'angle':2.15,'design_angle':2.15,'e1':1,'e2':0,'BC':'Bunch Compressor 2'}),0.720,'relative') -# BC02.append(TM.generate('DALA',150),0,varC) - BC02.append(TM.generate('AFBC3',200,{'angle':2.15,'design_angle':2.15,'e1':1,'e2':0,'BC':'Bunch Compressor 2'}),0,varC) - BC02.append(TM.generate('COL-BC-Scraper',210),0.3005,'relative') - BC02.append(TM.generate('DSCR-BC120',220),0.0395,'relative') - BC02.append(TM.generate('BC-SlotFoil-H',230),0.0395,'relative') - BC02.append(TM.generate('BC-SlotFoil-V',240),0.0405,'relative') - BC02.append(TM.generate('AFBC3',300,{'angle':2.15,'design_angle':2.15,'e1':0,'e2':1,'BC':'Bunch Compressor 2'}),0.26,'relative') - BC02.append(TM.generate('DSRM-VIS',310),1.0261+0.357-0.661,'relative') - BC02.append(TM.generate('DBPM-C16',320),0,varD) - BC02.append(TM.generate('HFB',330),0.11,'relative') - BC02.append(TM.generate('QFB',340),0.09,'relative') - BC02.append(TM.generate('QFS',350),0.05,'relative') - BC02.append(TM.generate('DALA-BC1',360),1.922-0.019,'relative') - BC02.append(TM.generate('AFBC3',400,{'angle':-2.15,'design_angle':-2.15,'e1':1,'e2':0,'BC':'Bunch Compressor 2'}),2.25-1.922+0.019-0.037,'relative') - BC02.append(TM.generate('DBCM-IR',410),0.4-0.021,'relative') - - Lsec=9.43 - angle=0 - MA01=OMType.LineContainer('MA01',Lsec) - MA01.append(TM.generate('DBPM-C16',10),0.104,'relative') - MA01.append(TM.generate('QFDM',20),0.1-0.004,'relative') -# MA01.append(TM.generate('DCDR-VACONLY',25),1.38-0.137,'relative') - MA01.append(TM.generate('QFDM',50),0.05+0.15+0.12+1.480+0.05,'relative') - MA01.append(TM.generate('DBPM-C16',60),1.82,'relative') - MA01.append(TM.generate('QFDM',70),0.08,'relative') - MA01.append(TM.generate('DCDR-BC2',80),1.008-0.312-0.037,'relative') - MA01.append(TM.generate('DSCR-HR16',90),0.2,'relative') - MA01.append(TM.generate('AFBC1',100,{'angle':0,'design_angle':0,'e1':0,'e2':1}),0.16+0.025+0.05+0.3-0.043,'relative') - MA01.append(TM.generate('QFDM',110),0.10-0.025,'relative') - MA01.append(TM.generate('Beam-Stopper-S10',115),0.15,'relative') - MA01.append(TM.generate('DBPM-C16',120),0.13-0.05,'relative') - MA01.append(TM.generate('QFDM',130),0.07,'relative') - - - L1Line=[CB01,CB02,DI01,CB03,CB04,CB05,CB06,CB07,CB08,CB09,BC01,BC02,MA01] - Linac10=OMType.LineContainer('10') - Linac10.append(L1Line) - - - #-------------------------------- - # Linac 2 - - CB01=TM.generate('CB-Lin2-Cell-WSC',0,{'Name':'CB01'}) -# CB01=TM.generate('CB-Lin2-Cell',0,{'Name':'CB01'}) - CB02=TM.generate('CB-Lin2-Cell',0,{'Name':'CB02'}) - CB03=TM.generate('CB-Lin2-Cell',0,{'Name':'CB03'}) - CB04=TM.generate('CB-Lin2-Cell-Last',0,{'Name':'CB04'}) - - SY01=OMType.LineContainer('SY01',8.165) - SY01.append(TM.generate('DBPM-C16',10),0.03,'relative') - SY01.append(TM.generate('QFD',20),0.049,'relative') - SY01.append(TM.generate('QFD',30),1.536+0.8,'relative') - SY01.append(TM.generate('DBPM-C16',40),3.9-0.8+0.032,'relative') - SY01.append(TM.generate('QFD',50),0.1-0.032,'relative') - SY01.append(TM.generate('DBPM-C16',60),0.75-0.042,'relative') - SY01.append(TM.generate('DWSC-C16',70),0.1,'relative') - SY01.append(TM.generate('QFD',80),0.063+0.042,'relative') - - SY02=OMType.LineContainer('SY02',-0.7502) - SY02.append(TM.generate('RESKICKDC',10,{'design_kick':0}),0.285,'relative') - SY02.append(TM.generate('RESKICKAC',20,{'design_kick':0}),0.0,'relative') - SY02.append(TM.generate('RESKICKDC',30,{'design_kick':0}),0.0,'relative') - SY02.append(TM.generate('RESKICKAC',40,{'design_kick':0}),0.0,'relative') - SY02.append(TM.generate('RESKICKDC',50,{'design_kick':0}),0.0,'relative') - SY02.append(TM.generate('SFC',60),0.080,'relative') - SY02.append(TM.generate('QFA',70),0.105,'relative') - SY02.append(TM.generate('DBPM-C38',80),1.33-0.12,'relative') - SY02.append(TM.generate('SFC',90),0.08,'relative') - SY02.append(TM.generate('QFA',100),0.105,'relative') - SY02.append(TM.generate('DBPM-C38',120),1.33-0.12,'relative') - SY02.append(TM.generate('SFC',130),0.08,'relative') - SY02.append(TM.generate('QFA',140),0.105,'relative') - SY02.append(TM.generate('DBPM-C38',150),1.18-0.24,'relative') - SY02.append(TM.generate('DWSC-C38',160),0.12,'relative') - SY02.append(TM.generate('SFC',170),0.08,'relative') - SY02.append(TM.generate('QFA',180),0.105,'relative') - angle=0 - SY02.append(TM.generate('AFS',200,{'angle':angle,'design_angle':2,'e1':0,'e2':0,'branch':True,'BC':'Switch Yard 1'}),0.30-0.0002+0.12,'relative') - SY02.append(TM.generate('MKBR',201),0.,'relative') - - SY03=OMType.LineContainer('SY03', 19.53+0.12) - SY03.append(TM.generate('DBPM-C16',10),4.8+0.12,'relative') - SY03.append(TM.generate('QFD',20),0.1,'relative') - SY03.append(TM.generate('QFD',30),3,'relative') - SY03.append(TM.generate('DBPM-C16',40),2.6,'relative') - SY03.append(TM.generate('QFD',50),0.1,'relative') - SY03.append(TM.generate('QFD',60),4.2,'relative') - SY03.append(TM.generate('DBPM-C16',80),0.2+2.31+0.05-0.257,'relative') - SY03.append(TM.generate('DSCR-HR16',85),0.12,'relative') - SY03.append(TM.generate('DWSC-C16-AL',90),0.1+0.257-0.12-0.137,'relative') - SY03.append(TM.generate('QFD',100),0.053,'relative') - - L2Line=[CB01,CB02,CB03,CB04,SY01,SY02,SY03] - Linac20=OMType.LineContainer('20') - Linac20.append(L2Line) - - - #-------------------------------------- - # Linac 3 - - CB01=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB01'}) - CB01.append(TM.generate('DWSC-C16',440),0.019,'relative') - CB02=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB02'}) - CB03=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB03'}) - CB04=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB04'}) - CB05=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB05'}) - CB05.append(TM.generate('DWSC-C16-AL',440),0.019,'relative') - CB06=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB06'}) - CB07=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB07'}) - CB08=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB08'}) - CB08.append(TM.generate('COL-TR-16',440),0.019,'relative') - CB09=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB09'}) - CB09.append(TM.generate('DWSC-C16',440),0.019,'relative') - CB10=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB10'}) - CB10.append(TM.generate('COL-TR-16',440),0.019,'relative') - CB11=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB11'}) - CB12=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB12'}) - CB12.append(TM.generate('COL-TR-16',440),0.019,'relative') - CB13=TM.generate('CB-Lin3-Cell-incomplete',0,{'Name':'CB13'}) - CB13.append(TM.generate('DWSC-C16',440),0.019,'relative') - CB14=OMType.LineContainer('CB14', 9.1) - CB14.append(TM.generate('TDS C-Band',100),0.035,'relative') - CB14.append(TM.generate('TDS C-Band',200),0.1,'relative') - CB14.append(TM.generate('DBPM-C16',420),4.33,'relative') - CB14.append(TM.generate('QFD',430),0.049,'relative') - CB14.append(TM.generate('COL-TR-16',440),0.019,'relative') - CB15=OMType.LineContainer('CB15', 9.1) - if self.alt < 2: - CB15.append(TM.generate('COL-Dechirper-H',100),1-0.315,'relative') - CB15.append(TM.generate('COL-Dechirper-V',200),1+0.315-0.465,'relative') - CB15.append(TM.generate('DBPM-C16',420),4.465+0.465,'relative') - CB15.append(TM.generate('QFD',430),0.049,'relative') - else: - CB15.append(TM.generate('QFM',10),0.6-0.45,'relative') - CB15.append(TM.generate('QFM',20),0.75-0.45,'relative') - CB15.append(TM.generate('RESKICKDC',30,{'design_kick':0}),0.1,'relative') - CB15.append(TM.generate('RESKICKAC',40,{'design_kick':0}),0.0,'relative') - CB15.append(TM.generate('RESKICKDC',50,{'design_kick':0}),0.0,'relative') - CB15.append(TM.generate('RESKICKAC',60,{'design_kick':0}),0.0,'relative') - CB15.append(TM.generate('RESKICKDC',70,{'design_kick':0}),0.0,'relative') - CB15.append(TM.generate('QFA',100),1,'relative') - CB15.append(TM.generate('QFA',200),3.,'relative') - - CB16=OMType.LineContainer('SY01', 9.1-0.665) - if self.alt > 0: # porthos extraction - if self.alt > 1: - CB16.append(TM.generate('AFSPO',100,{'angle':0,'design_angle':-2.55,'e1':0,'e2':0,'branch':True,'BC':'Switch Yard 2'}),0.35,'relative') - else: - CB16.append(TM.generate('B190',100,{'angle':0,'design_angle':-2.55,'e1':0,'e2':0,'branch':True}),0.1-0.00022,'relative') - CB16.append(TM.generate('MKBR',101),0.,'relative') - - L3Line =[CB01,CB02,CB03,CB04,CB05,CB06,CB07,CB08,CB09,CB10,CB11,CB12,CB13,CB14,CB15,CB16] - Linac30=OMType.LineContainer('30') - Linac30.append(L3Line) - - - #---------------------------- - # Aramis - - dx=8.435-1.3 - CL01=OMType.LineContainer('CL01', 13.54) - CL01.append(TM.generate('DBPM-C16',10),0.03,'relative') - CL01.append(TM.generate('QFD',20),0.049,'relative') - CL01.append(TM.generate('COL-TR-16',30),0.019,'relative') - CL01.append(TM.generate('SFQFM',40),0.855,'relative') - CL01.append(TM.generate('QFM',50),0,'relative') - CL01.append(TM.generate('DBPM-C16',60),1.95,'relative') - CL01.append(TM.generate('SFQFM',70),0.0,'relative') - CL01.append(TM.generate('QFM',80),0,'relative') - CL01.append(TM.generate('SFQFM',90),2.05,'relative') - CL01.append(TM.generate('QFM',100),0,'relative') - CL01.append(TM.generate('DCDR',105),0.5+0.649-0.039,'relative') # 0.137 length - CL01.append(TM.generate('DBAM-FS16',110),1.775-0.637-0.649+0.039,'relative') - CL01.append(TM.generate('DBPM-C16',120),0.1,'relative') - CL01.append(TM.generate('SFQFM',130),0.0,'relative') - CL01.append(TM.generate('QFM',140),0,'relative') - CL01.append(TM.generate('DBPM-C16',150),0.276,'relative') - CL01.append(TM.generate('DWSC-C16-AL',160),0.1,'relative') - CL01.append(TM.generate('DSCR-HR16',170),0.1,'relative') - CL01.append(TM.generate('SFQFM',180),0.0,'relative') - CL01.append(TM.generate('QFM',190),0,'relative') - - CL02=OMType.LineContainer('CL02', 0) - CL02.append(TM.generate('AFBC3',100,{'angle':-1,'design_angle':-1,'e1':0,'e2':1,'BC':'Aramis Collimator'}),0.,'relative') - CL02.append(TM.generate('DBPM-C16',110),2.55+0.035,'relative') - CL02.append(TM.generate('SFQFM',120),0.0,'relative') - CL02.append(TM.generate('QFM-short',130),0.1-0.035,'relative') -# CL02.append(TM.generate('HFB',140),0.35+0.035,'relative') - CL02.append(TM.generate('QFB',150),0.1+0.45+0.035,'relative') - CL02.append(TM.generate('QFBS',160),0.1,'relative') - dl=5.25/math.cos(math.asin(1)/90)-4.4-0.035 - CL02.append(TM.generate('AFBC3',200,{'angle':1,'design_angle':1,'e1':1,'e2':0,'BC':'Aramis Collimator'}),dl,'relative') - CL02.append(TM.generate('QFM-short',210),0.35,'relative') - CL02.append(TM.generate('DBPM-C16',220),0.1-0.065,'relative') - CL02.append(TM.generate('SFQFM',230),0.065,'relative') - CL02.append(TM.generate('DWSC-C16',235),0.1+0.141,'relative') - CL02.append(TM.generate('SFQFM',240),0.4-0.237-0.141,'relative') - CL02.append(TM.generate('QFM-short',250),0.1,'relative') - CL02.append(TM.generate('HFB',255),0.02,'relative') - CL02.append(TM.generate('DBPM-C16',260),0.1-0.089+0.157,'relative') - CL02.append(TM.generate('DSCR-HR16',280),0.12,'relative') - CL02.append(TM.generate('BC-SlotFoil-V',282),0.57,'relative') - CL02.append(TM.generate('COL-Energy',290),0.8-0.15-0.57,'relative') - CL02.append(TM.generate('QFS',300),0.274-0.073+0.104,'relative') - CL02.append(TM.generate('HFB',305),0.08,'relative') - CL02.append(TM.generate('QFM-short',310),0.02,'relative') - CL02.append(TM.generate('SFQFM',320),0.1,'relative') - CL02.append(TM.generate('DALA',325),0.119-0.011,'relative') - CL02.append(TM.generate('DBPM-C16',330),0.35+0.015-0.137-0.119+0.011,'relative') - CL02.append(TM.generate('SFQFM',340),0.035,'relative') - CL02.append(TM.generate('QFM',350),0,'relative') - CL02.append(TM.generate('AFBC3',400,{'angle':1,'design_angle':1,'e1':0,'e2':1,'BC':'Aramis Collimator'}),0.25,'relative') - dl=5.25/math.cos(math.asin(1)/90)-5.0+0.03-0.1 - CL02.append(TM.generate('DSRM-UV',410),0.5,'relative') - CL02.append(TM.generate('QFBS',420),dl,'relative') - CL02.append(TM.generate('QFB',430),0.1,'relative') -# CL02.append(TM.generate('HFB',440),0.1,'relative') - CL02.append(TM.generate('SFQFM',450),0.05+0.2,'relative') - CL02.append(TM.generate('QFM-short',460),0.1-0.03,'relative') - CL02.append(TM.generate('DBPM-C16',470),0.3+0.03,'relative') - CL02.append(TM.generate('SFQFM',480),0.00,'relative') - CL02.append(TM.generate('DALA',485),1.875-0.012,'relative') - CL02.append(TM.generate('AFBC3',500,{'angle':-1,'design_angle':-1,'e1':1,'e2':0,'BC':'Aramis Collimator'}),2.35-0.03-0.137-1.875+0.012,'relative') - - MA01=OMType.LineContainer('MA01', 13.25) - MA01.append(TM.generate('QFM-veryshort',10),0.3,'relative') - MA01.append(TM.generate('DBCM-IR',15),0.125,'relative') - MA01.append(TM.generate('SFQFM-short',20),0.05-0.025,'relative') - MA01.append(TM.generate('DBPM-C16',40),0.25+0.7+0.1,'relative') - MA01.append(TM.generate('SFQFM',50),0.00,'relative') - MA01.append(TM.generate('QFM',60),0.0,'relative') - MA01.append(TM.generate('SFQFM',70),2.55,'relative') - MA01.append(TM.generate('QFM',80),0.0,'relative') - MA01.append(TM.generate('DICT-C16',90),1.95-0.075-0.09+0.1575-0.05,'relative') - MA01.append(TM.generate('DBPM-C16',100),0.2+0.175-0.1575+0.05,'relative') - MA01.append(TM.generate('SFQFM',110),0.00,'relative') - MA01.append(TM.generate('QFM',120),0.0,'relative') - MA01.append(TM.generate('SFQFM',130),2.0,'relative') - MA01.append(TM.generate('QFM',140),0.0,'relative') - - - Lsec=9.5 - angle=0 - MA02=OMType.LineContainer('MA02', Lsec) - MA02.append(TM.generate('DBPM-C8',10),0.385,'relative') - MA02.append(TM.generate('DBPM-C8',20),0.85+0.05+1-0.002+0.051,'relative') - MA02.append(TM.generate('DSCR-HR8',30),1.78-0.037+0.009-0.06,'relative') - MA02.append(TM.generate('DBPM-C8',40),0.12,'relative') - MA02.append(TM.generate('QFF',50),0.06,'relative') - MA02.append(TM.generate('DWSC-C8',60),0.077,'relative') - MA02.append(TM.generate('AFP1',100,{'angle':angle,'design_angle':0,'e1':0,'e2':1}),0.175,'relative') - MA02.append(TM.generate('Beam-Stopper-Sar',105),0.881,'relative') - MA02.append(TM.generate('DBPM-C8',110),0.477,'relative') - MA02.append(TM.generate('QFF-UN',120),0.06,'relative') - - UN01=TM.generate('U15-Cell-Empty',0,{'Name':'UN01'}) - - if (self.alt==2): - UN02=TM.generate('U15-Cell',0,{'Name':'UN02'}) - else: - UN02=TM.generate('U15-Cell-Empty',0,{'Name':'UN02'}) - - UN03=TM.generate('U15-Cell',0,{'Name':'UN03'}) - UN04=TM.generate('U15-Cell',0,{'Name':'UN04'}) - UN05=TM.generate('U15-Cell',0,{'Name':'UN05'}) - UN06=TM.generate('U15-Cell',0,{'Name':'UN06'}) - UN07=TM.generate('U15-Cell',0,{'Name':'UN07'}) - UN08=TM.generate('U15-Cell',0,{'Name':'UN08'}) - - if (self.alt==2): - UN09=OMType.LineContainer('UN09',-0.027) - varC=OMType.VariableContainer(1.200,0) - UN09.append(TM.generate('DWSC-C8',10),0.05+0.175,'relative') - UN09.append(TM.generate('AFSS-OUTER',100,{'angle':-0,'design_angle':-0.22,'e1':0,'e2':1,'BC':'Aramis Self-Seeding'}),0.199,'relative') - UN09.append(TM.generate('AFSS-INNER',200,{'angle':0,'design_angle':0.22,'e1':1,'e2':0,'BC':'Aramis Self-Seeding'}),1,varC) - UN09.append(TM.generate('AFSS-INNER',300,{'angle':0,'design_angle':0.22,'e1':0,'e2':1,'BC':'Aramis Self-Seeding'}),0.16,'relative') - UN09.append(TM.generate('AFSS-OUTER',400,{'angle':-0,'design_angle':-0.22,'e1':1,'e2':0,'BC':'Aramis Self-Seeding'}),1,varC) - UN09.append(TM.generate('DBPM-C8',410),0.374-0.175,'relative') - UN09.append(TM.generate('QFF',420),0.06,'relative') - else: - UN09=TM.generate('U15-Cell',0,{'Name':'UN09'}) - - UN10=TM.generate('U15-Cell',0,{'Name':'UN10'}) - UN11=TM.generate('U15-Cell',0,{'Name':'UN11'}) - UN12=TM.generate('U15-Cell',0,{'Name':'UN12'}) - UN13=TM.generate('U15-Cell',0,{'Name':'UN13'}) - UN14=TM.generate('U15-Cell',0,{'Name':'UN14'}) - UN15=TM.generate('U15-Cell-Last',0,{'Name':'UN15'}) - UN16=TM.generate('U15-Cell-Empty',0,{'Name':'UN16'}) - UN17=TM.generate('U15-Cell-Empty',0,{'Name':'UN17'}) - UN18=OMType.LineContainer('UN18',4.75) - UN18.append(TM.generate('COL-Dechirper-H',10),0.85-0.0625,'relative') - UN18.append(TM.generate('COL-Dechirper-H',20),0.85,'relative') - UN18.append(TM.generate('DBPM-C8',70),4.483-3.7+0.0625,'relative') - UN18.append(TM.generate('QFF',80),0.06,'relative') - UN19=TM.generate('U15-Cell-Empty',0,{'Name':'UN19'}) - UN20=OMType.LineContainer('UN20',4.75) - UN20.append(TM.generate('DWSC-C8',10),0.05,'relative') - UN20.append(TM.generate('DBAM-FS8',20),0.025+2.133-0.0005,'relative') - UN20.append(TM.generate('DBPM-C8',70),2.1+0.0005+0.025-0.05,'relative') - UN20.append(TM.generate('QFF',80),0.06,'relative') - - Lsec=0 - angle=0 - BD01=OMType.LineContainer('BD01',Lsec) - BD01.append(TM.generate('QFF',20),0.2265-0.116+0.29+0.125+0.075+1.05-0.29,'relative') - BD01.append(TM.generate('DICT-C16',30),0.06+0.3235-0.125+0.03,'relative') - BD01.append(TM.generate('DBPM-C16',40),0.25+0.106-0.1-0.1885,'relative') - BD01.append(TM.generate('DSCR-HR16',50),0.12,'relative') - BD01.append(TM.generate('AFD1',100,{'angle':angle,'design_angle':8,'e1':0.5,'e2':0.5,'branch':True}),0.279-0.0125,'relative') - BD01.append(TM.generate('MKBR',101),0.0,'relative') - BD01.append(TM.generate('DSCR-OV38',110),5.55-2.2665,'relative') - BD01.append(TM.generate('AFP1',200,{'angle':0,'design_angle':0,'e1':0,'e2':1,'Tilt':math.asin(1)}),0.363,'relative') - BD01.append(TM.generate('FE-Shielding',205),2.967,'relative') - - - ArLine=[CL01,CL02,MA01,MA02,UN01,UN02,UN03,UN04,UN05,UN06,UN07,UN08,UN09,UN10,UN11,UN12,UN13,UN14,UN15,UN16,UN17,UN18,UN19,UN20,BD01] - Aramis=OMType.LineContainer('AR') - Aramis.append(ArLine) - - - # Aramis Dump - BD02=OMType.LineContainer('BD02',0) - BD02.append(TM.generate('DBPM-C16',10),0.42,'relative') - dlict=0.0 - dlict=0.1575 - LD=1.1/math.cos(8*math.asin(1)/90)-0.92-0.1+dlict-0.0075 - BD02.append(TM.generate('QFM',30),LD,'relative') - LD=LD+0.3015-dlict - BD02.append(TM.generate('DBPM-C16',40),LD-0.022+0.03235,'relative') - BD02.append(TM.generate('DSCR-HR16',50),0.12,'relative') - LD=19.478/math.cos(8*math.asin(1)/90)-0.0685+0.2+0.002-0.0249 - BD02.append(TM.generate('Beam-Dump-Sar',55),LD,'relative') - - AramisDump=OMType.LineContainer('AR') - AramisDump.append(BD02,0,'relative') - - - #----------------------------- - # Athos Beamline - - - - ddx=0.7502 - SY01=OMType.LineContainer('SY01', 29.100107+ddx+0.12+0.000049) - SY01.append(OMType.Alignment({'dy':0.01,'Tag':'ALIG','index':1})) - SY01.append(TM.generate('DBPM-C16',10),3.3+ddx+0.12+0.000048,'relative') - SY01.append(TM.generate('QFM',20),0.35-0.183-0.035,'relative') - SY01.append(TM.generate('SFQFM',22),0.183+0.925+0.035,'relative') - SY01.append(TM.generate('BC-SlotFoil-V',25),1.65-0.626-0.925,'relative') - SY01.append(TM.generate('QFBS',30),0.15+0.026,'relative') - SY01.append(TM.generate('QFD',40),0.05,'relative') - SY01.append(TM.generate('HFB',50),0.1,'relative') - SY01.append(TM.generate('DBPM-C16',60),2.1,'relative') - SY01.append(TM.generate('QFD',70),0.1,'relative') - SY01.append(TM.generate('HFB',80),0.1,'relative') - SY01.append(TM.generate('QFD',90),2.3,'relative') - SY01.append(TM.generate('DBPM-C16',100),1.25-0.135,'relative') - SY01.append(TM.generate('AFBC3-noCor',200,{'angle':1,'design_angle':1,'e1':0.5,'e2':0.5,'BC':'Switch Yard 1'}),0.15+0.135,'relative') - #used for matching SY01.append(TM.generate('AFBC3',200,{'angle':1,'e1':0.5,'e2':0.5}),0.15,'relative') - SY01.append(TM.generate('QFD',210),1.5,'relative') - SY01.append(TM.generate('HFB',220),2.3,'relative') - SY01.append(TM.generate('QFD',230),0.1,'relative') - SY01.append(TM.generate('DBPM-C16',240),1.8,'relative') - SY01.append(TM.generate('HFB',250),0.4,'relative') - SY01.append(TM.generate('QFD',260),0.1,'relative') - SY01.append(TM.generate('QFS',270),0.05,'relative') - SY01.append(TM.generate('QFM',280),1.912,'relative') - SY01.append(TM.generate('SFQFM',282),0.,'relative') - SY01.append(TM.generate('DBPM-C16',290),3.0-0.45-0.012,'relative') - SY01.append(TM.generate('QFD',300),0.1,'relative') - SY01.append(TM.generate('AFBC3-noCor',400,{'angle':2,'design_angle':2,'e1':1,'e2':0.,'BC':'Switch Yard 1'}),1.15,'relative') - - SY02=OMType.LineContainer('SY02', 9.13) - SY02.append(TM.generate('QFD',10),1.0,'relative') - SY02.append(TM.generate('DBPM-C16',20),0.7-0.004,'relative') - SY02.append(TM.generate('AFL',100,{'angle':0.108,'design_angle':0.108,'e1':0,'e2':1.,'Tilt':math.asin(1)}),0.194,'relative') - SY02.append(TM.generate('QFD',110),1.29,'relative') - SY02.append(TM.generate('QFD',120),2.1,'relative') - SY02.append(TM.generate('AFL',200,{'angle':-0.108,'design_angle':-0.108,'e1':1,'e2':0.,'Tilt':math.asin(1)}),1.29,'relative') - SY02.append(TM.generate('DBPM-C16',210),0.103,'relative') - SY02.append(TM.generate('QFD',230),0.03+0.137+0.12,'relative') - - SY03=OMType.LineContainer('SY03', 12.65) - SY03.append(TM.generate('QFD',10),0.45,'relative') - SY03.append(TM.generate('DBPM-C16',30),0.1+2.35,'relative') - SY03.append(TM.generate('QFD',40),0.1,'relative') - if self.alt < 1: - SY03.append(TM.generate('DBPM-C16',60),0.1+2.25,'relative') - else: - SY03.append(TM.generate('DCDR',50),0.876,'relative') - SY03.append(TM.generate('DBPM-C16',60),0.1+2.25-0.876-0.137,'relative') - - SY03.append(TM.generate('QFD',70),0.1,'relative') - SY03.append(TM.generate('Laser-Acceleration',80),0.13-0.106,'relative') - SY03.append(TM.generate('DBPM-C16',90),0.1-0.01+0.106,'relative') - SY03.append(TM.generate('QFD',100),0.1,'relative') - SY03.append(TM.generate('DWSC-C16',110),2.-0.02-0.064,'relative') - SY03.append(TM.generate('DALA',115),0.08,'relative') - SY03.append(TM.generate('DBPM-C16',120),0.08,'relative') - SY03.append(TM.generate('QFD',130),0.1,'relative') - SY03.append(TM.generate('DSCR-HR16',140),0.08+0.153,'relative') - - - CL01=OMType.LineContainer('CL01', 12.050318) - CL01.append(TM.generate('AFBC3',100,{'angle':-2.5,'design_angle':-2.5,'e1':0,'e2':1.,'BC':'Switch Yard 2'}),0.0,'relative') - CL01.append(TM.generate('HFB',110),0.15+0.7,'relative') - CL01.append(TM.generate('QFD',120),0.05+0.0263,'relative') - CL01.append(TM.generate('QFD',130),2.5-0.0263,'relative') - CL01.append(TM.generate('DBPM-C16',140),0.718,'relative') - CL01.append(TM.generate('DSCR-HR16',150),0.12,'relative') - CL01.append(TM.generate('HFB',160),0.45,'relative') - CL01.append(TM.generate('COL-Energy',170),0.5-0.05,'relative') - CL01.append(TM.generate('QFD',180),0.475,'relative') - CL01.append(TM.generate('QFD',190),2.5-0.0263,'relative') - CL01.append(TM.generate('AFBC3',300,{'angle':-2.5,'design_angle':-2.5,'e1':1,'e2':0.,'BC':'Switch Yard 2'}),0.85-0.137+0.0263+0.05+0.237,'relative') - - - DI01=OMType.LineContainer('DI01', 18.52) - - DI01.append(TM.generate('DBCM-IR',10),0.4,'relative') - DI01.append(TM.generate('DICT-C16',20),0.46-0.1,'relative') - DI01.append(TM.generate('QFD',25),0.15,'relative') - DI01.append(TM.generate('DBPM-C16',30),0.2+0.226-0.326,'relative') - DI01.append(TM.generate('DSCR-OV16',40),0.1,'relative') - DI01.append(TM.generate('UMOD',50),0.4-0.226+0.326-0.1,'relative') - DI01.append(TM.generate('UMOD',51),0.001,'relative') - DI01.append(TM.generate('UMOD',52),0.001,'relative') - DI01.append(TM.generate('UMOD',53),0.001,'relative') - DI01.append(TM.generate('UMOD',54),0.001,'relative') - DI01.append(TM.generate('UMOD',55),0.001,'relative') - DI01.append(TM.generate('UMOD',56),0.001,'relative') - DI01.append(TM.generate('UMOD',57),0.001,'relative') - DI01.append(TM.generate('UMOD',58),0.001,'relative') - DI01.append(TM.generate('DBPM-C16',60),0.286-0.008-0.06,'relative') - DI01.append(TM.generate('DSCR-OV16',65),0.1,'relative') - DI01.append(TM.generate('DBAM-FS16',70),0.1+0.06+0.02-0.02+0.1,'relative') - - # girder 2 - - DI01.append(TM.generate('QFD',80),2.15-1.563-0.397-0.02+0.02,'relative') - DI01.append(TM.generate('DBPM-C16',90),0.063,'relative') - DI01.append(TM.generate('COL-Dechirper-H',100,{'gap':2e-3}),0.5+0.087,'relative') - DI01.append(TM.generate('COL-Dechirper-V',200,{'gap':2e-3}),0.5+0.35,'relative') - DI01.append(TM.generate('DBPM-C16',210),0.5+0.019+0.115+0.327-0.437,'relative') - DI01.append(TM.generate('QFD',220),0.081,'relative') -# DI01.append(TM.generate('DBPM-C16',222),0.5+0.019+2+3.58-0.23-0.255-4.975,'relative') -# DI01.append(TM.generate('QFD',225),0.1-0.019,'relative') - DI01.append(TM.generate('QFD',230),1.25+0.7+0.37,'relative') - DI01.append(TM.generate('DBPM-C16',240),1.05-0.001,'relative') - DI01.append(TM.generate('QFD',250),0.101,'relative') - DI01.append(TM.generate('QFD',260),1.25,'relative') - DI01.append(TM.generate('DBPM-C16',270),1.05-0.021,'relative') - DI01.append(TM.generate('QFD',280),0.121,'relative') - DI01.append(TM.generate('DWSC-C16',290),0.1+0.729,'relative') - DI01.append(TM.generate('QFD',300),0.163+0.137+0.85-0.237-0.729,'relative') - DI01.append(TM.generate('DBPM-C16',310),0.04,'relative') - # needs a wire scanner here - - CB01=OMType.LineContainer('CB01',9.8) - CB02=OMType.LineContainer('CL02',9.8) - CB01.append(TM.generate('TW Cav C-Band',100),0.035,'relative') - CB01.append(TM.generate('TW Cav C-Band',200),0.049387,'relative') - CB01.append(TM.generate('DBPM-C16',220),0.080613,'relative') - CB01.append(TM.generate('QFD',230),0.049,'relative') - CB01.append(TM.generate('TW Cav C-Band',300),0.096075+0.137+0.019,'relative') - CB01.append(TM.generate('TW Cav C-Band',400),0.049387,'relative') - CB01.append(TM.generate('DBPM-C16',420),0.099538,'relative') - CB01.append(TM.generate('QFD',430),0.049,'relative') - CB02.append(TM.generate('COL-Dechirper-V',100,{'gap':2e-3}),0.5+0.528-0.003,'relative') - CB02.append(TM.generate('COL-Dechirper-H',200,{'gap':2e-3}),0.5-0.528+0.875+0.003,'relative') - CB02.append(TM.generate('DBPM-C16',220),0.080613+0.035+0.049387+0.085+1.015-0.875,'relative') - CB02.append(TM.generate('QFD',230),0.049,'relative') - CB02.append(TM.generate('COL-Dechirper-V',300,{'gap':2e-3}),0.5+0.74208,'relative') - CB02.append(TM.generate('COL-Dechirper-H',400,{'gap':2e-3}),0.5-0.74208+1.09208,'relative') - CB02.append(TM.generate('DBPM-C16',420),0.099538+1.40146-1.09208,'relative') - CB02.append(TM.generate('QFD',430),0.049,'relative') - - - # here the missing part of the Athos comes only in the later phase (planned and final) - - LMA01 = 0 - MA01=OMType.LineContainer('MA01',LMA01) - angle=0 - MA01.append(TM.generate('DBPM-C8',10),0.293+0.102-0.257,'relative') - MA01.append(TM.generate('COL-Dechirper-V',15,{'gap':2e-3}),0.5+0.257-0.202,'relative') - MA01.append(TM.generate('DBPM-C8',20),0.5-0.051-0.1285+0.202,'relative') - if self.alt > 1: - MA01.append(TM.generate('COL-Dechirper-H',25,{'gap':2e-3}),0.5+0.1285-0.2155,'relative') - MA01.append(TM.generate('DSCR-HR8',30),0.28-0.037-0.051+0.2155,'relative') - else: - MA01.append(TM.generate('DSCR-HR8',30),0.28-0.037-0.051+0.2155+0.5+0.1285-0.2155+1,'relative') - - MA01.append(TM.generate('DBPM-C8',40),0.12,'relative') - MA01.append(TM.generate('QFF',50),0.06,'relative') - MA01.append(TM.generate('AFP1',100,{'angle':0,'e1':0,'e2':1}),0.175+0.177,'relative') - MA01.append(TM.generate('Beam-Stopper-Sat',105),0.881,'relative') - angcal=0.1 - - - MA01.append(TM.generate('DBPM-C8',110),1.477,'relative') - MA01.append(TM.generate('QFF',120),0.06,'relative') - MA01.append(TM.generate('DBPM-C8',130),4,'relative') - MA01.append(TM.generate('QFF',140),0.06,'relative') - MA01.append(TM.generate('DBPM-C8',150),4.,'relative') - MA01.append(TM.generate('QFF',160),0.06,'relative') - MA01.append(TM.generate('DBPM-C8',170),4.,'relative') - MA01.append(TM.generate('QFF',180),0.06,'relative') - - MA01.append(TM.generate('QFF',230),1-0.18+0.4043,'relative') - MA01.append(TM.generate('DBPM-C8',240),0.06+0.6,'relative') - MA01.append(TM.generate('QFF',250),1-0.18-0.16-0.6,'relative') - MA01.append(TM.generate('AFBC3',300,{'angle':0,'design_angle':2.3,'e1':0,'e2':1,'BC':'Athos EEHG first BC'}),0.26,'relative') - MA01.append(TM.generate('AFBC3',400,{'angle':0,'design_angle':-2.3,'e1':1,'e2':0,'BC':'Athos EEHG first BC'}),3.47,'relative') - MA01.append(TM.generate('AFBC3',500,{'angle':0,'design_angle':-2.3,'e1':0,'e2':1,'BC':'Athos EEHG first BC'}),0.2,'relative') - MA01.append(TM.generate('AFBC3',600,{'angle':0,'design_angle':2.3,'e1':1,'e2':0,'BC':'Athos EEHG first BC'}),3.47,'relative') - MA01.append(TM.generate('QFD',610),0.06+0.22,'relative') # reserve space for 9.5 m chicane (4x 0.5m Dipole, 2x3m long drift, 3x 0.5m short drift) - MA01.append(TM.generate('DBPM-C16',620),0.2+0.0438,'relative') - MA01.append(TM.generate('QFDM',630),1-0.18-0.17-0.3-0.25-0.0438,'relative') - MA01.append(TM.generate('QFD-short',640),1-0.18-0.17-0.25-0.07+0.05,'relative') - - - UN04=OMType.LineContainer('UN04',3.0247+0.0027+0.0925+0.07+0.0852+0.0196+0.0968+0.0032) # modulator - UN04.append(TM.generate('DBPM-C16',10),0.008+0.0968-0.05,'relative') - UN04.append(TM.generate('DSCR-HR16',20),0.05+0.0293+0.1925-0.2218+0.07,'relative') - UN04.append(TM.generate('UMOD',30),0.03+0.3491+0.2218-0.301,'relative') - UN04.append(TM.generate('UMOD',31),0.001,'relative') - UN04.append(TM.generate('UMOD',32),0.001,'relative') - UN04.append(TM.generate('UMOD',33),0.001,'relative') - UN04.append(TM.generate('UMOD',34),0.001,'relative') - UN04.append(TM.generate('UMOD',35),0.001,'relative') - UN04.append(TM.generate('UMOD',36),0.001,'relative') - UN04.append(TM.generate('UMOD',37),0.001,'relative') - UN04.append(TM.generate('UMOD',38),0.001,'relative') - UN04.append(TM.generate('DBPM-C16',40),0.03-0.0381+0.301-0.17614,'relative') - UN04.append(TM.generate('DSCR-HR16',50),0.05,'relative') - UN04.append(TM.generate('QFF',60),0.06025-0.00775+0.005+0.0338+0.0381-0.00004-0.059+0.17614+0.0095,'relative') - UN05=OMType.LineContainer('UN05',-0.027-0.07275+0.005) - varC=OMType.VariableContainer(0.38,0) - UN05.append(TM.generate('AFSS-OUTER',100,{'angle':0.0,'design_angle':angcal,'e1':0,'e2':1,'BC':'Athos Self-Seeding'}),0.18-0.05,'relative') - UN05.append(TM.generate('AFSS-INNER',200,{'angle':0.0,'design_angle':-angcal,'e1':1,'e2':0,'BC':'Athos Self-Seeding'}),1,varC) - UN05.append(TM.generate('AFSS-INNER',300,{'angle':0.0,'design_angle':-angcal,'e1':0,'e2':1,'BC':'Athos Self-Seeding'}),0.16,'relative') - UN05.append(TM.generate('AFSS-OUTER',400,{'angle':0.0,'design_angle':angcal,'e1':1,'e2':0,'BC':'Athos Self-Seeding'}),1,varC) - UN05.append(TM.generate('DBPM-C5',410),0.18+0.00775,'relative') - UN05.append(TM.generate('QFF',420),0.06025-0.00775+0.005,'relative') - - UN06=TM.generate('UE38-Cell',0,{'Name':'UN06'}) - UN07=TM.generate('UE38-Cell',0,{'Name':'UN07'}) - UN08=TM.generate('UE38-Cell',0,{'Name':'UN08'}) - UN09=TM.generate('UE38-Cell',0,{'Name':'UN09'}) - UN10=TM.generate('UE38-Cell',0,{'Name':'UN10'}) - UN11=TM.generate('UE38-Cell',0,{'Name':'UN11'}) - UN12=TM.generate('UE38-Cell',0,{'Name':'UN12'}) - UN13=TM.generate('UE38-Cell',0,{'Name':'UN13'}) - - SS=OMType.LineContainer('UN14',-0.027-0.07275+0.005) - varC=OMType.VariableContainer(0.38,0) - SS.append(TM.generate('AFSS-OUTER',100,{'angle':0.0,'design_angle':angcal,'e1':0,'e2':1,'BC':'Athos Self-Seeding'}),0.18,'relative') - SS.append(TM.generate('AFSS-INNER',200,{'angle':0.0,'design_angle':-angcal,'e1':1,'e2':0,'BC':'Athos Self-Seeding'}),1,varC) - SS.append(TM.generate('AFSS-INNER',300,{'angle':0.0,'design_angle':-angcal,'e1':0,'e2':1,'BC':'Athos Self-Seeding'}),0.16,'relative') - SS.append(TM.generate('AFSS-OUTER',400,{'angle':0.0,'design_angle':angcal,'e1':1,'e2':0,'BC':'Athos Self-Seeding'}),1,varC) - SS.append(TM.generate('DBPM-C5',410),0.18+0.00775,'relative') - SS.append(TM.generate('QFF',420),0.06025-0.00775+0.005,'relative') - - - UN14=TM.generate('UE38-Cell',0,{'Name':'UN15'}) - UN15=TM.generate('UE38-Cell',0,{'Name':'UN16'}) - UN16=TM.generate('UE38-Cell',0,{'Name':'UN17'}) - UN17=TM.generate('UE38-Cell',0,{'Name':'UN18'}) - UN18=TM.generate('UE38-Cell',0,{'Name':'UN19'}) - UN19=TM.generate('UE38-Cell',0,{'Name':'UN20'}) - UN20=TM.generate('UE38-Cell',0,{'Name':'UN21'}) - UN21=TM.generate('UE38-Cell-Last',0,{'Name':'UN22'}) - - - - MA02=OMType.LineContainer('MA02',15-1.2591+1.3) - MA02.append(TM.generate('QFF',10),1.51534,'relative') - MA02.append(TM.generate('QFF',20),2.183,'relative') - MA02.append(TM.generate('DBPM-C8',30),2.183-0.2,'relative') - MA02.append(TM.generate('QFF',40),0.1,'relative') - MA02.append(TM.generate('COL-Dechirper-H',45),0.1+0.6015-0.03,'relative') - MA02.append(TM.generate('QFF',50),2.183-1.1-0.6015+0.03,'relative') - MA02.append(TM.generate('DBPM-C8',60),2.183-0.2,'relative') - MA02.append(TM.generate('QFF',70),0.1,'relative') - MA02.append(TM.generate('TDS X-Band',100),2.0535-0.22+0.06,'relative') - MA02.append(TM.generate('TDS X-Band',200),0.1,'relative') # currently disable the second cavity - - - BD01=OMType.LineContainer('BD01',0) - - BD01.append(TM.generate('QFM',10),0.15+0.12-0.06,'relative') - BD01.append(TM.generate('DBPM-C16',20),1.1-0.3,'relative') - BD01.append(TM.generate('QFM',30),0.2,'relative') - BD01.append(TM.generate('SFQFM',40),0.1,'relative') - BD01.append(TM.generate('QFM',50),1.1-0.4,'relative') - BD01.append(TM.generate('DBPM-C16',60),1.1-0.3,'relative') - BD01.append(TM.generate('QFM',70),0.2,'relative') - BD01.append(TM.generate('SFQFM',80),0.1,'relative') - BD01.append(TM.generate('QFM',90),1.1-0.4,'relative') - if self.alt > 0: - BD01.append(TM.generate('DBAM-FS8',95),0.025+0.4735+0.0018+1-0.002998+0.0026,'relative') - BD01.append(TM.generate('DBPM-C16',100),3.1-0.0685-0.2-0.237-0.1-0.4753-0.025-1+0.002998-0.0026,'relative') - else: - BD01.append(TM.generate('DBPM-C16',100),3.1-0.0685-0.2-0.237-0.1+0.1,'relative') - BD01.append(TM.generate('DWSC-C16',110),0.1,'relative') - BD01.append(TM.generate('DSCR-HR16',120),0.1,'relative') - BD01.append(TM.generate('AFD1',200,{'angle':angle,'design_angle':8,'e1':0.5,'e2':0.5,'branch':True}),0.2165+0.05,'relative') - BD01.append(TM.generate('MKBR',201),0.0,'relative') - BD01.append(TM.generate('DSCR-OV38',210),5.5-1.2683-0.0044-0.94425,'relative') - BD01.append(TM.generate('AFP1',300,{'angle':0,'design_angle':0,'e1':0,'e2':1,'Tilt':math.asin(1)}),0.363+0.0064,'relative') - BD01.append(TM.generate('FE-Shielding',305),2.967+0.94425,'relative') - - AtLine=[SY01,SY02,SY03,CL01,DI01,CB01,CB02,MA01,UN04,UN05,UN06,UN07,UN08,UN09,UN10,UN11,UN12,UN13,SS,UN14,UN15,UN16,UN17,UN18,UN19,UN20,UN21,MA02,BD01] - Athos=OMType.LineContainer('AT') - Athos.append(AtLine) - - BD02=OMType.LineContainer('BD02',0) - BD02.append(TM.generate('DBPM-C16',10),0.4+0.02072,'relative') - BD02.append(TM.generate('DICT-C16',20),0.12-0.0035,'relative') - LD=1.1/math.cos(8*math.asin(1)/90)-0.92-0.1 - BD02.append(TM.generate('QFM',30),LD+0.01-0.02072+0.0035,'relative') - LD=LD+0.3015 - BD02.append(TM.generate('DBPM-C16',40),LD+0.00317,'relative') - BD02.append(TM.generate('DSCR-HR16',50),0.1+0.01913,'relative') - LD=19.478/math.cos(8*math.asin(1)/90)-0.0685+0.44+0.21-0.45 - BD02.append(TM.generate('Beam-Dump-Sat',55),LD-0.00317-0.01913,'relative') - AthosDump=OMType.LineContainer('AT') - AthosDump.append(BD02,0,'relative') - - - # - # Porthos Branch for FCC experiment - # - # currntly not used so there will be no Porthos branch in the moment - d1 = 6-0.3 - d2 = 1.4+0.5-0.3-0.1 - doff=0 - if self.alt is 1: - doff = 0.25024755-0.00021974 - if self.alt >0: - SY01=OMType.LineContainer('SY01', 0) - # first group - if self.alt >1: - SY01.append(OMType.Alignment({'dy':0.01,'Tag':'ALIG','index':1})) - SY01.append(TM.generate('DBPM-C16',10),d1+0.2-0.2-doff-0.7,'relative') - if self.alt >1: - SY01.append(TM.generate('HFB',20),0.1,'relative') - else: - SY01.append(TM.generate('PHLD',20),0.2,'relative') - SY01.append(TM.generate('QFM',30),0.1,'relative') - SY01.append(TM.generate('SFQFM',40),0,'relative') - if self.alt > 1: - SY01.append(TM.generate('QFBS',50),0.1,'relative') - else: - SY01.append(TM.generate('PHLD',50),0.2,'relative') - - # center group - SY01.append(TM.generate('QFM',60),d2+0.1+0.7,'relative') - SY01.append(TM.generate('SFQFM',70),0.,'relative') - SY01.append(TM.generate('DBPM-C16',80),0.3,'relative') - if self.alt > 1: - SY01.append(TM.generate('HFB',90),0.3,'relative') - else: - SY01.append(TM.generate('PHLD',90),0.4,'relative') - SY01.append(TM.generate('QFM',100),0.1,'relative') - SY01.append(TM.generate('SFQFM',110),0.,'relative') - - # last group - if self.alt >1: - SY01.append(TM.generate('HFB',120),d2-0.1+1.-0.1,'relative') - else: - SY01.append(TM.generate('PHLD',120),d2-0.1+1.,'relative') - SY01.append(TM.generate('QFM',130),0.1,'relative') - SY01.append(TM.generate('SFQFM',140),0.,'relative') - if self.alt >1: - SY01.append(TM.generate('QFBS',150),0.1,'relative') - else: - SY01.append(TM.generate('PHLD',150),0.2,'relative') - SY01.append(TM.generate('DBPM-C16',160),0.1,'relative') - # before last dipole - if self.alt >1: - SY01.append(TM.generate('HFB',170),d1+0.1-0.2-0.2-0.7+0.1,'relative') - else: - SY01.append(TM.generate('PHLD',170),d1+0.1-0.2-0.2+0.1-0.7+0.1,'relative') - SY01.append(TM.generate('AFSLS1',200,{'angle':-2.55,'design_angle':-2.55,'e1':-3.4,'e2':-3.4}),0.1,'relative') - - - SY02=OMType.LineContainer('SY02',0) - SY02.append(TM.generate('QFM',10),0.2,'relative') - angPO=0.1*1.7885*1.085 - if self.alt > 1: - SY02.append(TM.generate('SFQFM',20),0.,'relative') - SY02.append(TM.generate('AFSLS1-Vert',100,{'angle':angPO,'design_angle':angPO,'e1':3.4,'e2':3.4}),0.2,'relative') - else: - SY02.append(TM.generate('PHLD',20),1.1+0.1992048+0.0007886-2.51e-6,'relative') - SY02.append(TM.generate('QFM',110),0.2,'relative') - SY02.append(TM.generate('SFQFM',120),0.,'relative') - SY02.append(TM.generate('DBPM-C16',130),0.1,'relative') - if self.alt >1: - SY02.append(TM.generate('QFD',140),0.3,'relative') - SY02.append(TM.generate('AFSLS1-Vert',200,{'angle':-angPO,'design_angle':-angPO,'e1':-3.4,'e2':-3.4}),0.2,'relative') - SY02.append(TM.generate('DBPM-C16',210),0.2,'relative') - else: - SY02.append(TM.generate('PHLD',140),0.3+0.3+0.2+0.8+0.3-0.05-1.1e-5+5.38e-6,'relative') - if self.alt is 1: # P3 line - SY03=OMType.LineContainer('SY03',11.3) - SY03.append(TM.generate('QFM',20),0.1,'relative') - SY03.append(TM.generate('PHLD',30),0.3,'relative') - SY03.append(TM.generate('QFM',120),2.4,'relative') - SY03.append(TM.generate('PHLD',130),0.3,'relative') - SY03.append(TM.generate('DBPM-C16',210),2.2,'relative') - SY03.append(TM.generate('QFM',220),.1,'relative') - SY03.append(TM.generate('SFQFM',230),0.1,'relative') - - Lpad=8.1+0.255+0.137+0.1 - P301=OMType.LineContainer('P301', Lpad) - P301.append(TM.generate('DBPM-C38',1),8,'relative') - P301.append(TM.generate('DSCR-OV38',2),0.1,'relative') - - P302=OMType.LineContainer('P302',0) - P302.append(TM.generate('P3-Crystal',10),1-0.1,'relative') - P302.append(TM.generate('AFSC',100,{'angle':0,'design_angle':0,'e1':0.5,'e2':0.5}),0.09,'relative') - P302.append(TM.generate('P3-Target',110),3-0.1,'absolute') - P302.append(TM.generate('WFAMD',120),3.-0.1-0.35,'absolute') - P302.append(TM.generate('P3-RF-ACC',200), 3.25-0.1,'absolute') - P302.append(TM.generate('WFP3',210),3.25-0.1,'absolute') - P302.append(TM.generate('WFP3',220),3.95-0.1,'absolute') - P302.append(TM.generate('P3-RF-ACC',300), 4.65-0.1,'absolute') - P302.append(TM.generate('WFP3',310),4.65-0.1,'absolute') - P302.append(TM.generate('WFP3',320),5.35-0.1,'absolute') - P302.append(TM.generate('DBPM-P3',330),6.1-0.1-0.15,'absolute') - P302.append(TM.generate('SHA-P3',400,{'angle':0,'design_angle':0,'e1':0.5,'e2':0.5}),6.5-0.1-0.25,'absolute') - P302.append(TM.generate('FC-P3',410),7.5-0.1,'absolute') - P302.append(TM.generate('Beam-Dump-P3',420),7.5-0.1,'absolute') - - - - - elif self.alt >1: # rest of porthos extraction - SY03=OMType.LineContainer('SY03',11.4) - SY03.append(TM.generate('QFM',20),0.1,'relative') - SY03.append(TM.generate('SFQFM',30),0.,'relative') - SY03.append(TM.generate('QFM',120),2.4,'relative') - SY03.append(TM.generate('SFQFM',130),0.,'relative') - SY03.append(TM.generate('DBPM-C16',210),2.2,'relative') - SY03.append(TM.generate('QFM',220),.1,'relative') - SY03.append(TM.generate('SFQFM',230),0.1,'relative') - SY03.append(TM.generate('QFM',320),2.4,'relative') - SY03.append(TM.generate('SFQFM',330),0.,'relative') - - SY04=OMType.LineContainer('SY04',0) - angR56=0.71 - dL=2.3750 - - SY04.append(TM.generate('AFSLS1',100,{'angle':angR56,'design_angle':angR56,'e1':3.4,'e2':3.4}),0.2,'relative') - SY04.append(TM.generate('QFD',110),0.5+dL,'relative') - SY04.append(TM.generate('AFSLS1',200,{'angle':-angR56,'design_angle':-angR56,'e1':-3.4,'e2':-3.4}),0.25,'relative') - SY04.append(TM.generate('AFSLS1',300,{'angle':-angR56,'design_angle':-angR56,'e1':-3.4,'e2':-3.4}),0.2,'relative') - SY04.append(TM.generate('QFD',310),0.25,'relative') - SY04.append(TM.generate('AFSLS1',400,{'angle':angR56,'design_angle':angR56,'e1':3.4,'e2':3.4}),0.5+dL,'relative') - - SY05=OMType.LineContainer('SY05',12.3) - SY05.append(TM.generate('DBPM-C16',10),0.2,'relative') - SY05.append(TM.generate('QFM',20),0.1,'relative') - SY05.append(TM.generate('SFQFM',30),0.,'relative') - - SY05.append(TM.generate('QFM',120),2.4,'relative') - SY05.append(TM.generate('SFQFM',130),0.,'relative') - - SY05.append(TM.generate('DBPM-C16',210),2.2,'relative') - SY05.append(TM.generate('QFM',220),0.1,'relative') - SY05.append(TM.generate('SFQFM',230),0.,'relative') - - SY05.append(TM.generate('DSCR-HR16',310),2.4-0.1-0.137,'relative') - SY05.append(TM.generate('QFM',320),.1,'relative') - SY05.append(TM.generate('SFQFM',330),0.,'relative') - - CL01=OMType.LineContainer('CL01', 0) - CL01.append(TM.generate('AFSLS1',100,{'angle':2.55,'design_angle':2.55,'e1':3.4,'e2':3.4}),0.2,'relative') - CL01.append(TM.generate('DBPM-C16',110),d1+0.2-0.7+0.3,'relative') - CL01.append(TM.generate('QFM',120),0.1,'relative') - CL01.append(TM.generate('SFQFM',130),0,'relative') - CL01.append(TM.generate('HFB',140),0.1,'relative') - CL01.append(TM.generate('QFBS',150),0.1,'relative') - - CL01.append(TM.generate('QFM',160),d2+0.1-0.3-0.2+.1+0.8+0.1,'relative') - CL01.append(TM.generate('SFQFM',170),0.,'relative') - CL01.append(TM.generate('DBPM-C16',180),0.3,'relative') - CL01.append(TM.generate('DSCR-HR16',190),0.1,'relative') - CL01.append(TM.generate('QFM',200),0.5-0.1-0.137,'relative') - CL01.append(TM.generate('SFQFM',210),0.,'relative') - - CL01.append(TM.generate('COL-Energy',220),d2-0.1-0.5-0.3+1+0.1,'relative') - CL01.append(TM.generate('HFB',230),0.1,'relative') - CL01.append(TM.generate('QFM',240),0.1,'relative') - CL01.append(TM.generate('SFQFM',250),0.,'relative') - CL01.append(TM.generate('QFBS',260),0.1,'relative') - CL01.append(TM.generate('AFSLS1',300,{'angle':2.55,'design_angle':2.55,'e1':3.4,'e2':3.4}),d1-0.2-0.7+0.4,'relative') - - - - - - - - # straight layout constraints: - # total length frm straight ahead to dump dipole: 160 m - # distance between end of undulator to dump dipole: 25 m - - - - PoLine=[] - if self.alt > 1: - PoLine=[SY01,SY02,SY03,SY04,SY05,CL01] - elif self.alt is 1: - PoLine=[SY01,SY02,SY03,P301,P302] - - Porthos=OMType.LineContainer('PO') - Porthos.append(PoLine) - - - - # construct final layout - - Linac=OMType.LineContainer('') - Linac.append(Linac10,0,'relative') - Linac.append(Linac20,0,'relative') - Linac.append(Linac30,0,'relative') - - - SwissFEL=OMType.LineContainer('S') - - - - - # [BeamlineInstance, ParentIndex, BranchIndex, Remark] - # BranchIndex=-1 -> added to the end of the parent line - # BranchIndex=0 -> Beamline is the root element - - if self.alt < 10: - PartsList=[[Injector, -1, 0,'SwissFEL Injector'], #0 - [Linac, 0,-1,'SwissFEL Linac'], #1 - [Aramis, 1,-1,'Aramis beamline'], #2 - [Athos, 1, 2,'Athos beamline'], #3 - [InjectorDump,0, 1,'SwissFEL Injector beam dump'], #4 - [Linac1Dump, 1, 1,'Linac1 beam dump'], #5 - [AramisDump, 2, 1,'Aramis beam dump'], #6 - [AthosDump, 3, 1,'Athos beam dump'], #7 - [Porthos, 1, 3,'Porthos beamline']] #8 - else: - PartsList=[[Injector, -1, 0,'SwissFEL Injector'], #0 - [Linac, 0,-1,'SwissFEL Linac'], #1 - [Aramis, 1,-1,'Aramis beamline'], #2 - [Athos, 1, 2,'Athos beamline'], #3 - [InjectorDump,0, 1,'SwissFEL Injector beam dump'], #4 - [Linac1Dump, 1, 1,'Linac1 beam dump'], #5 - [AramisDump, 2, 1,'Aramis beam dump'], #6 - [AthosDump, 3, 1,'Athos beam dump'], #7 - [Porthos, 1, 3,'Porthos beamline']] #8 - - return PartsList - - - def initialize(self,ElementDB): - - - Parameters={} - Parameters['SINLH01.MQUA020']={'k1':-0.1248942891} - Parameters['SINLH01.MQUA030']={'k1':0.0} - Parameters['SINLH01.MQUA040']={'k1':-2.364010703} - Parameters['SINLH01.MQUA050']={'k1':1.534012211} - Parameters['SINLH01.MQUA070']={'k1':1.469465702} - Parameters['SINLH02.MQUA010']={'k1':-0.2172694024} - Parameters['SINLH02.MQUA410']={'k1':0.6302004521} - Parameters['SINLH03.MQUA030']={'k1':0.8650676221} - Parameters['SINLH03.MQUA040']={'k1':-2.9998} - Parameters['SINLH03.MQUA060']={'k1':2.172457874} - Parameters['SINLH03.MQUA080']={'k1':-2.364503759} - Parameters['SINSB03.MQUA130']={'k1':-1.152661876} - Parameters['SINSB03.MQUA230']={'k1':1.009887168} - Parameters['SINSB04.MQUA130']={'k1':-0.18310469} - Parameters['SINSB04.MQUA230']={'k1':0.1684242647} - Parameters['SINSB05.MQUA130']={'k1':-0.3827305491} - Parameters['SINSB05.MQUA230']={'k1':0.3827305491} - Parameters['SINBC01.MQUA020']={'k1':-0.6549527404} - Parameters['SINBC01.MQUA050']={'k1':-0.09954807193} - Parameters['SINBC01.MQUA070']={'k1':-0.1297472191} - Parameters['SINBC01.MQUA090']={'k1':-0.3698583224} - Parameters['SINBC01.MQUA110']={'k1':1.214785876} - Parameters['SINBC02.MQUA110']={'k1':0.0} - Parameters['SINBC02.MQUA120']={'k1':0.0} - Parameters['SINBC02.MQUA340']={'k1':0.0} - Parameters['SINBC02.MQUA350']={'k1':0.0} - Parameters['SINDI01.MQUA020']={'k1':-1.056924525} - Parameters['SINDI01.MQUA030']={'k1':0.0} - Parameters['SINDI01.MQUA070']={'k1':-0.6132129554} - Parameters['SINDI02.MQUA020']={'k1':1.307728839} - Parameters['SINDI02.MQUA030']={'k1':0.9162121288} - Parameters['SINDI02.MQUA050']={'k1':-0.1300784429} - Parameters['SINDI02.MQUA060']={'k1':-0.9839853251} - Parameters['SINDI02.MQUA070']={'k1':0.0} - Parameters['SINDI02.MQUA090']={'k1':0.5816436339} - Parameters['S10CB01.MQUA230']={'k1':-1.490399943} - Parameters['S10CB01.MQUA430']={'k1':1.489935064} - Parameters['S10CB02.MQUA230']={'k1':-1.490399943} - Parameters['S10CB02.MQUA430']={'k1':1.489935064} - Parameters['S10DI01.MQUA030']={'k1':0.0} - Parameters['S10DI01.MQUA120']={'k1':-1.490399943} - Parameters['S10CB03.MQUA230']={'k1':1.489935064} - Parameters['S10CB03.MQUA430']={'k1':-1.490399943} - Parameters['S10CB04.MQUA230']={'k1':1.489935064} - Parameters['S10CB04.MQUA430']={'k1':-1.490399943} - Parameters['S10CB05.MQUA230']={'k1':1.489935064} - Parameters['S10CB05.MQUA430']={'k1':-1.490399943} - Parameters['S10CB06.MQUA230']={'k1':1.489935064} - Parameters['S10CB06.MQUA430']={'k1':-1.490399943} - Parameters['S10CB07.MQUA230']={'k1':1.489935064} - Parameters['S10CB07.MQUA430']={'k1':-1.490399943} - Parameters['S10CB08.MQUA230']={'k1':1.489935064} - Parameters['S10CB08.MQUA430']={'k1':-1.490399943} - Parameters['S10CB09.MQUA230']={'k1':1.489935064} - Parameters['S10BC01.MQUA020']={'k1':1.823377711} - Parameters['S10BC01.MQUA040']={'k1':-1.480799442} - Parameters['S10BC01.MQUA060']={'k1':-0.4468464966} - Parameters['S10BC01.MQUA080']={'k1':-1.143231693} - Parameters['S10BC01.MQUA100']={'k1':1.906209865} - Parameters['S10BC02.MQUA110']={'k1':0.0} - Parameters['S10BC02.MQUA120']={'k1':0.0} - Parameters['S10BC02.MQUA340']={'k1':0.0} - Parameters['S10BC02.MQUA350']={'k1':0.0} - Parameters['S10MA01.MQUA020']={'k1':-1.064109773} - Parameters['S10MA01.MQUA050']={'k1':-0.07795876948} - Parameters['S10MA01.MQUA070']={'k1':0.499548722} - Parameters['S10MA01.MQUA110']={'k1':1.098939773} - Parameters['S10MA01.MQUA130']={'k1':-0.4817341425} - Parameters['S20CB01.MQUA430']={'k1':-0.8156482483} - Parameters['S20CB02.MQUA430']={'k1':0.8156420722} - Parameters['S20CB03.MQUA430']={'k1':-0.8156482483} - Parameters['S20SY01.MQUA020']={'k1':1.07467527} - Parameters['S20SY01.MQUA030']={'k1':-1.711922083} - Parameters['S20SY01.MQUA050']={'k1':0.2355252484} - Parameters['S20SY01.MQUA080']={'k1':1.093857674} - Parameters['S20SY02.MQUA070']={'k1':0.05766263385} - Parameters['S20SY02.MQUA100']={'k1':-1.402835963} - Parameters['S20SY02.MQUA140']={'k1':0.6480723563} - Parameters['S20SY02.MQUA180']={'k1':-0.8067664079} - Parameters['S20SY03.MQUA020']={'k1':1.299900815} - Parameters['S20SY03.MQUA030']={'k1':-1.251360079} - Parameters['S20SY03.MQUA050']={'k1':0.310416242} - Parameters['S20SY03.MQUA060']={'k1':0.8960587177} - Parameters['S20SY03.MQUA100']={'k1':-1.169393907} - Parameters['S30CB01.MQUA430']={'k1':0.8168945173} - Parameters['S30CB02.MQUA430']={'k1':-0.8168918323} - Parameters['S30CB03.MQUA430']={'k1':0.8168945173} - Parameters['S30CB04.MQUA430']={'k1':-0.8168918323} - Parameters['S30CB05.MQUA430']={'k1':0.8168945173} - Parameters['S30CB06.MQUA430']={'k1':-0.8168918323} - Parameters['S30CB07.MQUA430']={'k1':0.8168945173} - Parameters['S30CB08.MQUA430']={'k1':-0.8168918323} - Parameters['S30CB09.MQUA430']={'k1':0.8168945173} - Parameters['S30CB10.MQUA430']={'k1':-0.8168918323} - Parameters['S30CB11.MQUA430']={'k1':0.8168945173} - Parameters['S30CB12.MQUA430']={'k1':-0.8168918323} - Parameters['S30CB13.MQUA430']={'k1':0.8168945173} - Parameters['S30CB14.MQUA430']={'k1':-0.8168918323} - Parameters['S30CB15.MQUA430']={'k1':0.8168945173} - Parameters['SARCL01.MQUA020']={'k1':-0.4926461486} - Parameters['SARCL01.MQUA050']={'k1':-0.04101806243} - Parameters['SARCL01.MQUA080']={'k1':-0.2492246765} - Parameters['SARCL01.MQUA100']={'k1':0.2476931921} - Parameters['SARCL01.MQUA140']={'k1':1.296780549} - Parameters['SARCL01.MQUA190']={'k1':-1.506460951} - Parameters['SARCL02.MQUA130']={'k1':2.47047} - Parameters['SARCL02.MQUA150']={'k1':0.0} - Parameters['SARCL02.MQUA160']={'k1':0.0} - Parameters['SARCL02.MQUA210']={'k1':-1.857} - Parameters['SARCL02.MQUA250']={'k1':1.45623} - Parameters['SARCL02.MQUA300']={'k1':0.0} - Parameters['SARCL02.MQUA310']={'k1':1.45623} - Parameters['SARCL02.MQUA350']={'k1':-1.857} - Parameters['SARCL02.MQUA420']={'k1':0.0} - Parameters['SARCL02.MQUA430']={'k1':0.0} - Parameters['SARCL02.MQUA460']={'k1':2.47047} - Parameters['SARMA01.MQUA010']={'k1':-1.373019157} - Parameters['SARMA01.MQUA060']={'k1':1.324308916} - Parameters['SARMA01.MQUA080']={'k1':-0.5164976308} - Parameters['SARMA01.MQUA120']={'k1':0.08774327505} - Parameters['SARMA01.MQUA140']={'k1':0.2419885346} - Parameters['SARMA02.MQUA050']={'k1':-1.789186727} - Parameters['SARMA02.MQUA120']={'k1':1.814590494} - Parameters['SARUN01.MQUA080']={'k1':-1.787193844} - Parameters['SARUN02.MQUA080']={'k1':1.745376027} - Parameters['SARUN03.MQUA080']={'k1':-1.699574707} - Parameters['SARUN04.MQUA080']={'k1':1.746023863} - Parameters['SARUN05.MQUA080']={'k1':-1.751681566} - Parameters['SARUN06.MQUA080']={'k1':1.715113815} - Parameters['SARUN07.MQUA080']={'k1':-1.59306807} - Parameters['SARUN08.MQUA420']={'k1':1.672694319} -# Parameters['SARUN08.MQUA080']={'k1':1.672694319} - Parameters['SARUN09.MQUA080']={'k1':-1.699574707} - Parameters['SARUN10.MQUA080']={'k1':1.746023863} - Parameters['SARUN11.MQUA080']={'k1':-1.699574707} - Parameters['SARUN12.MQUA080']={'k1':1.746023863} - Parameters['SARUN13.MQUA080']={'k1':-1.699574707} - Parameters['SARUN14.MQUA080']={'k1':1.746023863} - Parameters['SARUN15.MQUA080']={'k1':-1.699574707} - Parameters['SARUN16.MQUA080']={'k1':1.746023863} - Parameters['SARUN17.MQUA080']={'k1':-1.699574707} - Parameters['SARUN18.MQUA080']={'k1':1.746023863} - Parameters['SARUN19.MQUA080']={'k1':-1.699574707} - Parameters['SARUN20.MQUA080']={'k1':-0.781522606} - Parameters['SARBD01.MQUA020']={'k1':-0.7159533104} - Parameters['SATSY01.MQUA020']={'k1':-0.5} - Parameters['SATSY01.MQUA030']={'k1':0} - Parameters['SATSY01.MQUA040']={'k1':2.16} - Parameters['SATSY01.MQUA070']={'k1':-2.07} - Parameters['SATSY01.MQUA090']={'k1':0.53} - Parameters['SATSY01.MQUA210']={'k1':0.53} - Parameters['SATSY01.MQUA230']={'k1':-2.07} - Parameters['SATSY01.MQUA260']={'k1':2.16} - Parameters['SATSY01.MQUA270']={'k1':0} - Parameters['SATSY01.MQUA280']={'k1':-0.68} - Parameters['SATSY01.MQUA300']={'k1':0.37} - Parameters['SATSY02.MQUA010']={'k1':-1.87} - Parameters['SATSY02.MQUA110']={'k1':1.47} - Parameters['SATSY02.MQUA120']={'k1':1.77} - Parameters['SATSY02.MQUA230']={'k1':0.12} - Parameters['SATSY03.MQUA010']={'k1':-1.89} - Parameters['SATSY03.MQUA040']={'k1':0.64} - Parameters['SATSY03.MQUA070']={'k1':0.81} - Parameters['SATSY03.MQUA100']={'k1':1.83} - Parameters['SATSY03.MQUA130']={'k1':-1.63} - Parameters['SATCL01.MQUA120']={'k1':-0.54} - Parameters['SATCL01.MQUA130']={'k1':1.68} - Parameters['SATCL01.MQUA180']={'k1':1.68} - Parameters['SATCL01.MQUA190']={'k1':-0.54} - - - for idx in range(3,16): - ele='SARUN%2.2d.UIND030' % (idx) - if idx!=8: - Parameters[ele]={'K':1.2} - - Parameters['SINEG01.MBND300']={'angle':30} - Parameters['SINLH02.UIND230']={'K':2.34} - Parameters['SINLH02.MBND100']={'angle':-4.1} - Parameters['SINLH02.MBND200']={'angle':4.1} - Parameters['SINLH02.MBND300']={'angle':4.1} - Parameters['SINLH02.MBND400']={'angle':-4.1} - Parameters['SINBC02.MBND100']={'angle':-3.82} - Parameters['SINBC02.MBND200']={'angle':3.82} - Parameters['SINBC02.MBND300']={'angle':3.82} - Parameters['SINBC02.MBND400']={'angle':-3.82} - Parameters['S10DI01.MBND100']={'angle':-20} - Parameters['S10BC02.MBND100']={'angle':-2.15} - Parameters['S10BC02.MBND200']={'angle':2.15} - Parameters['S10BC02.MBND300']={'angle':2.15} - Parameters['S10BC02.MBND400']={'angle':-2.15} - Parameters['S10MA01.MBND100']={'angle':0} - Parameters['S20SY02.MBND200']={'angle':2} ## - Parameters['SARCL02.MBND100']={'angle':-1} - Parameters['SARCL02.MBND200']={'angle':1} - Parameters['SARCL02.MBND400']={'angle':1} - Parameters['SARCL02.MBND500']={'angle':-1} - Parameters['SARMA02.MBND100']={'angle':0} - Parameters['SARUN08.MBND100']={'angle':-0.22} - Parameters['SARUN08.MBND200']={'angle':0.22} - Parameters['SARUN08.MBND300']={'angle':0.22} - Parameters['SARUN08.MBND400']={'angle':-0.22} - Parameters['SARBD01.MBND100']={'angle':8} - Parameters['SARBD01.MBND200']={'angle':0} - Parameters['SATSY01.MBND200']={'angle':1} - Parameters['SATSY01.MBND400']={'angle':2} - Parameters['SATSY02.MBND100']={'angle':0.108} - Parameters['SATSY02.MBND200']={'angle':-0.108} - Parameters['SATCL01.MBND100']={'angle':-2.5} - Parameters['SATCL01.MBND300']={'angle':-2.5} - Parameters['SATUN10.MBND100']={'angle':0.0} - Parameters['SATUN10.MBND200']={'angle':0.0} - Parameters['SATUN10.MBND300']={'angle':0.0} - Parameters['SATUN10.MBND400']={'angle':0.0} - Parameters['SATBD01.MBND100']={'angle':8.0} - Parameters['SATBD01.MBND200']={'angle':0} - Parameters['SATMA01.MBND100']={'angle':0} # Missing? - - # standard RF - - Parameters['SINEG01.RGUN100']={'Gradient':33.0e6,'Phase':90.0} # Gun is added - Parameters['SINSB01.RACC100']={'Gradient':18.e6,'Phase':90} - Parameters['SINSB02.RACC100']={'Gradient':17.54e6,'Phase':90} - Parameters['SINSB03.RACC100']={'Gradient':16.32e6,'Phase':66.41} - Parameters['SINSB03.RACC200']={'Gradient':16.32e6,'Phase':66.41} - Parameters['SINSB04.RACC100']={'Gradient':16.32e6,'Phase':66.41} - Parameters['SINSB04.RACC200']={'Gradient':16.32e6,'Phase':66.41} - Parameters['SINXB01.RACC100']={'Gradient':18.96e6,'Phase':265.93} - Parameters['SINXB01.RACC200']={'Gradient':18.96e6,'Phase':265.93} - - - for idx in (1,2,3,4,5,6,7,8,9): - for cell in (100,200,300,400): - ele='S10CB%2.2d.RACC%3.3d' % (idx,cell) - Parameters[ele]={'Gradient':28.14e6,'Phase':68.55} - - for idx in (1,2,3,4): - for cell in range (1,5): - ele='S20CB%2.2d.RACC%3.3d' % (idx,cell*100) - Parameters[ele]={'Gradient':27e6,'Phase':90} - - for idx in (1,2,3,4,5,6,7,8,9,10,11,12,13): - for cell in range (1,5): - ele='S30CB%2.2d.RACC%3.3d' % (idx,cell*100) - Parameters[ele]={'Gradient':28e6,'Phase':90} - - - - for e in ElementDB.keys(): - ele=ElementDB[e] - if ele.Name in Parameters.keys(): - inputData=Parameters[ele.Name] - for k in inputData.keys(): -# if k=='angle': -# print k,'cccccccc',ele.Name - ele.__dict__.update({k:inputData[k]}) diff --git a/Python_Code/Old OnlineModel/OMType.py b/Python_Code/Old OnlineModel/OMType.py deleted file mode 100644 index bc088ed..0000000 --- a/Python_Code/Old OnlineModel/OMType.py +++ /dev/null @@ -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=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 - -# ------- diff --git a/README.md b/README.md index 6807da8..4442820 100644 --- a/README.md +++ b/README.md @@ -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:57:36)_ +- Planned: [11.0.1](Release/HolyList-Latest-Phase-Planned.xlsx) _(Released: 18/08/2025 - 14:57:36)_ +- Final: [11.0.1](Release/HolyList-Latest-Phase-Final.xlsx) _(Released: 18/08/2025 - 14:57:36)_ ### Optical Beamlines diff --git a/Release/HolyList-Latest-Phase-Current.xlsx b/Release/HolyList-Latest-Phase-Current.xlsx index 30a1968..1577f61 100644 Binary files a/Release/HolyList-Latest-Phase-Current.xlsx and b/Release/HolyList-Latest-Phase-Current.xlsx differ diff --git a/Release/HolyList-Latest-Phase-Final.xlsx b/Release/HolyList-Latest-Phase-Final.xlsx index 7a655d6..cb9431d 100644 Binary files a/Release/HolyList-Latest-Phase-Final.xlsx and b/Release/HolyList-Latest-Phase-Final.xlsx differ diff --git a/Release/HolyList-Latest-Phase-Planned.xlsx b/Release/HolyList-Latest-Phase-Planned.xlsx index 5034590..ce7aa32 100644 Binary files a/Release/HolyList-Latest-Phase-Planned.xlsx and b/Release/HolyList-Latest-Phase-Planned.xlsx differ diff --git a/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Current.xlsx b/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Current.xlsx index 30a1968..1577f61 100644 Binary files a/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Current.xlsx and b/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Current.xlsx differ diff --git a/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Final.xlsx b/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Final.xlsx index 7a655d6..cb9431d 100644 Binary files a/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Final.xlsx and b/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Final.xlsx differ diff --git a/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Planned.xlsx b/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Planned.xlsx index 5034590..ce7aa32 100644 Binary files a/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Planned.xlsx and b/Release/Lattice_11.0.1/HolyList-Lat11.0.1-Phase-Planned.xlsx differ diff --git a/Release/Temp/HolyList-Latest-Phase-Current.xlsx b/Release/Temp/HolyList-Latest-Phase-Current.xlsx deleted file mode 100644 index 9efc1f9..0000000 Binary files a/Release/Temp/HolyList-Latest-Phase-Current.xlsx and /dev/null differ diff --git a/Release/Temp/HolyList-Latest-Phase-Final.xlsx b/Release/Temp/HolyList-Latest-Phase-Final.xlsx deleted file mode 100644 index 61028f9..0000000 Binary files a/Release/Temp/HolyList-Latest-Phase-Final.xlsx and /dev/null differ diff --git a/Release/Temp/HolyList-Latest-Phase-Planned.xlsx b/Release/Temp/HolyList-Latest-Phase-Planned.xlsx deleted file mode 100644 index 27ababc..0000000 Binary files a/Release/Temp/HolyList-Latest-Phase-Planned.xlsx and /dev/null differ