1 | ! 2011/11/22 R. De Maria Generate optimized triplet layouts |
---|
2 | |
---|
3 | Option, -warn,-info,-echo; |
---|
4 | |
---|
5 | lq1=0.50; |
---|
6 | lq2=0.50; |
---|
7 | endseq=165; |
---|
8 | ffocus: sequence,refer = CENTRE, L := endseq; |
---|
9 | q11 :quadrupole,l:=l1/2,k1:= k1,at:=lstar+l1/4; |
---|
10 | q12 :quadrupole,l:=l1/2,k1:= k1,at:=lstar+l1*3/4+lq1; |
---|
11 | q2a1:quadrupole,l:=l2/2,k1:=-k2,at:=lstar+l1+lq1+d12+l2/4; |
---|
12 | q2a2:quadrupole,l:=l2/2,k1:=-k2,at:=lstar+l1+lq1+lq2+d12+l2*3/4; |
---|
13 | q2b1:quadrupole,l:=l2/2,k1:=-k2,at:=lstar+l1+lq1+lq2+d12+d22+l2*5/4; |
---|
14 | q2b2:quadrupole,l:=l2/2,k1:=-k2,at:=lstar+l1+lq1+2*lq2+d12+d22+l2*7/4; |
---|
15 | q31 :quadrupole,l:=l3/2,k1:= k3,at:=lstar+l1+lq1+2*lq2+d12+2*l2+d22+d23+l3/4; |
---|
16 | q32 :quadrupole,l:=l3/2,k1:= k3,at:=lstar+l1+2*lq1+2*lq2+d12+2*l2+d22+d23+l3*3/4; |
---|
17 | endsequence; |
---|
18 | beam; |
---|
19 | |
---|
20 | r_tol_IT=0.0006; |
---|
21 | h_tol_IT=0.0010; |
---|
22 | v_tol_IT=0.0010; |
---|
23 | |
---|
24 | calc_triplet(bxs,bys): macro= { |
---|
25 | use,sequence=ffocus; |
---|
26 | twiss,betx=bxs,bety=bys; |
---|
27 | bq2a1=table(twiss,q2a1,betymax); |
---|
28 | bq2a2=table(twiss,q2a2,betymax); |
---|
29 | bq2b1=table(twiss,q2b1,betymax); |
---|
30 | bq2b2=table(twiss,q2b2,betymax); |
---|
31 | bq31=table(twiss,q31,betxmax); |
---|
32 | bq32=table(twiss,q32,betxmax); |
---|
33 | bq2max=bq2a1; |
---|
34 | if (bq2a2>bq2max){ bq2max=bq2a2;}; |
---|
35 | if (bq2b1>bq2max){ bq2max=bq2b1;}; |
---|
36 | if (bq2b2>bq2max){ bq2max=bq2b2;}; |
---|
37 | bq3max=bq32; |
---|
38 | alfxend=table(twiss,FFOCUS$END,alfx); |
---|
39 | alfyend=table(twiss,FFOCUS$END,alfy); |
---|
40 | betxend=table(twiss,FFOCUS$END,betx); |
---|
41 | betyend=table(twiss,FFOCUS$END,bety); |
---|
42 | }; |
---|
43 | |
---|
44 | mk_triplet(bxs,bys,grad,posq4,betxq4,betyq4): macro={ |
---|
45 | imbmax=1; |
---|
46 | endseq=posq4; |
---|
47 | |
---|
48 | tbetx:=table(twiss,betx); tbety:=table(twiss,bety); |
---|
49 | talfx:=table(twiss,alfx); talfy:=table(twiss,alfy); |
---|
50 | tk1l :=table(twiss,k1l); tl:=table(twiss,l); |
---|
51 | betxmax:=tbetx+talfx^2/tbetx/abs(tk1l/tl); |
---|
52 | betymax:=tbety+talfy^2/tbety/abs(tk1l/tl); |
---|
53 | select,flag=twiss,clear; |
---|
54 | select,flag=twiss,column=name,s,l,angle,k1l,hkick,vkick,kick,betx,bety,alfx,alfy,dx,dpx,dy,dpy,mux,muy,x,y,px,py,betxmax,betymax; |
---|
55 | |
---|
56 | brho=7e12/clight; k=grad/brho; |
---|
57 | |
---|
58 | lstar=23; |
---|
59 | |
---|
60 | l1=7.145; l2=6.735; |
---|
61 | if (grad<120 ) { l1=9.145; l2=7.735; }; |
---|
62 | d12:=d23; l3:=l1; |
---|
63 | |
---|
64 | k1:=k; k2:=k; k3:=k; |
---|
65 | match,use_macro; |
---|
66 | vary,name=l1; |
---|
67 | vary,name=l2; |
---|
68 | vary,name=k3; |
---|
69 | use_macro,name=calc_triplet(bxs,bys); |
---|
70 | constraint, expr= bq3max = imbmax*bq2max; |
---|
71 | constraint, expr= betxend =betxq4; |
---|
72 | constraint, expr= betyend =betyq4; |
---|
73 | constraint, expr= 1e5*alfxend >2e5; |
---|
74 | constraint, expr= 1e5*alfyend >2e5; |
---|
75 | jacobian,calls=60,tolerance=1e-14,bisec=9; |
---|
76 | endmatch; |
---|
77 | |
---|
78 | if (k3>k) { |
---|
79 | k1:=k; k2=k; k3=k; |
---|
80 | match,use_macro; |
---|
81 | vary,name=l1; |
---|
82 | vary,name=l2; |
---|
83 | vary,name=k1; |
---|
84 | use_macro,name=calc_triplet(bxs,bys); |
---|
85 | constraint, expr= bq3max = imbmax*bq2max; |
---|
86 | constraint, expr= betxend =betxq4; |
---|
87 | constraint, expr= betyend =betyq4; |
---|
88 | constraint, expr= 1e5*alfxend >2e5; |
---|
89 | constraint, expr= 1e5*alfyend >2e5; |
---|
90 | jacobian,calls=60,tolerance=1e-14,bisec=9; |
---|
91 | endmatch; |
---|
92 | }; |
---|
93 | |
---|
94 | if (tar>1e-10){stop;}; |
---|
95 | |
---|
96 | bq3orig=bq3max; |
---|
97 | |
---|
98 | exec,round(l1,1000); |
---|
99 | exec,round(l2,1000); |
---|
100 | exec,round(l3,1000); |
---|
101 | exec,round(d12,1000); |
---|
102 | exec,round(d22,1000); |
---|
103 | exec,round(d23,1000); |
---|
104 | |
---|
105 | match,use_macro; |
---|
106 | vary,name=k1; |
---|
107 | vary,name=k2; |
---|
108 | vary,name=k3; |
---|
109 | use_macro,name=calc_triplet(bxs,bys); |
---|
110 | constraint, expr= bq3max = imbmax*bq2max; |
---|
111 | constraint, expr= betxend =betxq4; |
---|
112 | constraint, expr= betyend =betyq4; |
---|
113 | constraint, expr= 1e5*alfxend >2e5; |
---|
114 | constraint, expr= 1e5*alfyend >2e5; |
---|
115 | jacobian,calls=60,tolerance=1e-14,bisec=9; |
---|
116 | endmatch; |
---|
117 | |
---|
118 | l.mqxl:=l1;l.mqx:=l2; |
---|
119 | dq1q2a:=d12;dq2aq2b:=d22;dq2bq3:=d23;dq1aq1b=d11; |
---|
120 | kqx1.l1 =-k1; kqx1.r1=k1; kqx1.l5=-k1; kqx1.r5=k1; |
---|
121 | kqx2a.l1=-k2; kqx2a.r1=k2; kqx2a.l5=-k2; kqx2a.r5=k2; |
---|
122 | kqx2b.l1=-k2; kqx2b.r1=k2; kqx2b.l5=-k2; kqx2b.r5=k2; |
---|
123 | kqx3.l1 =-k3; kqx3.r1=k3; kqx3.l5=-k3; kqx3.r5=k3; |
---|
124 | exec,calc_triplet(bxs,bys); |
---|
125 | g1=kqx1.r1*brho;g2=kqx2a.r1*brho; g3=kqx3.r5*brho; |
---|
126 | value,g1,g2,g3; |
---|
127 | totlen:=lstar+l1+d12+2*l2+d22+d23+l3+4*lqq; |
---|
128 | show,l.mqxl,l.mqx,totlen; |
---|
129 | value,l.mqxl,l.mqx,dq1q2a,dq2aq2b,dq2bq3,lqq,totlen; |
---|
130 | value,bq3orig,bq3max; |
---|
131 | value,bq2a1,bq2a2,bq2b1,bq2b2,bq31,bq32; |
---|
132 | value,alfxend; |
---|
133 | value,alfyend; |
---|
134 | value,bq3max*bxs; |
---|
135 | }; |
---|
136 | |
---|
137 | __round(xv,xn): macro={ if ( xv-xn > 0.5) { xv=xn+1; } else { xv=xn; }; }; |
---|
138 | round(xv,digits): macro={ |
---|
139 | xtmp=xv*digits; |
---|
140 | exec,__round(xtmp,$xtmp); |
---|
141 | xv=xtmp/digits; |
---|
142 | }; |
---|
143 | |
---|
144 | exec,mk_triplet(0.60,0.60,150,120,1913,1234); |
---|
145 | |
---|