Skip to content

Commit df9d184

Browse files
committed
Some more routines.
1 parent 77da0db commit df9d184

10 files changed

+947
-4
lines changed

FineCouplingCorrection.madx

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
! Fine tuning of coupling correction
2+
! S.Fartoukh March 2009
3+
! 2011/11/21 From SLHCV3.0 R. De Maria
4+
! 2016/04/27 R. De Maria & F.F Van der Veken
5+
! work around mad-x bug on integer part of the tune in presence of coupling for ctap calculation
6+
7+
if(mylhcbeam==1)
8+
{kqtf=kqtf.b1;kqtf0=kqtf.b1;
9+
kqtd=kqtd.b1;kqtd0=kqtd.b1;
10+
kqtf.b1:=kqtf;
11+
kqtd.b1:=kqtd;};
12+
13+
if(mylhcbeam > 1)
14+
{kqtf=kqtf.b2;kqtf0=kqtf.b2;
15+
kqtd=kqtd.b2;kqtd0=kqtd.b2;
16+
kqtf.b2:=kqtf;
17+
kqtd.b2:=kqtd;};
18+
19+
20+
! closest tune
21+
qmid=(qx0-qx00+qy0-qy00)*0.5;
22+
23+
match;
24+
global, q1=qx00+qmid,q2=qy00+qmid;
25+
vary, name=kqtf, step=1.E-9;
26+
vary, name=kqtd, step=1.E-9;
27+
lmdif, calls=50, tolerance=1.E-10;
28+
endmatch;
29+
30+
31+
32+
! Quick minimization based on linear machine
33+
cmrskew0 = cmrskew;
34+
cmiskew0 = cmiskew;
35+
twiss; qx=table(summ,q1); qy=table(summ,q2);
36+
cta0 = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
37+
closest0 = cta0;
38+
!value,closest0;
39+
40+
cmrskew = cmrskew0+cta0/2.;
41+
twiss; qx=table(summ,q1); qy=table(summ,q2);
42+
ctap = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
43+
!value,ctap;
44+
45+
cmrskew = cmrskew0-cta0/2.;
46+
twiss; qx=table(summ,q1); qy=table(summ,q2);
47+
ctam = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
48+
!value,ctam;
49+
50+
cmrskew = cmrskew0+(ctam^2-ctap^2)/2./cta0;
51+
twiss; qx=table(summ,q1); qy=table(summ,q2);
52+
cta0 = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
53+
!value,cta0;
54+
55+
cmiskew = cmiskew0+cta0/2.;
56+
twiss; qx=table(summ,q1); qy=table(summ,q2);
57+
ctap = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
58+
!value,ctap;
59+
60+
cmiskew = cmiskew0-cta0/2.;
61+
twiss; qx=table(summ,q1); qy=table(summ,q2);
62+
ctam = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
63+
!value,ctam;
64+
65+
cmiskew = cmiskew0+(ctam^2-ctap^2)/2./cta0;
66+
twiss; qx=table(summ,q1); qy=table(summ,q2);
67+
68+
closest1 =abs(2*(qx-qy)-round(2*(qx-qy)))/2;
69+
!value,closest1;
70+
71+
!Empirical minimisation
72+
match;
73+
global, q1=qx00+qmid, q2=qy00+qmid;
74+
vary, name=kqtf, step=1.E-9;
75+
vary, name=kqtd, step=1.E-9;
76+
lmdif, calls=100,tolerance=1.E-6;
77+
endmatch;
78+
79+
match;
80+
global, q1=qx00+qmid, q2=qy00+qmid;
81+
vary, name=cmrskew, step=1.E-9;
82+
vary, name=cmiskew, step=1.E-9;
83+
lmdif, calls=150, tolerance=2.E-6;
84+
endmatch;
85+
86+
match;
87+
global, q1=qx00+qmid, q2=qy00+qmid;
88+
vary, name=kqtf, step=1.E-9;
89+
vary, name=kqtd, step=1.E-9;
90+
lmdif, calls=100, tolerance=1.E-7;
91+
endmatch;
92+
93+
match;
94+
global, q1=qx00+qmid, q2=qy00+qmid;
95+
vary, name=cmrskew, step=1.E-9;
96+
vary, name=cmiskew, step=1.E-9;
97+
lmdif, calls=150, tolerance=2.E-7;
98+
endmatch;
99+
100+
match;
101+
global, q1=qx00+qmid, q2=qy00+qmid;
102+
vary, name=kqtf, step=1.E-9;
103+
vary, name=kqtd, step=1.E-9;
104+
lmdif, calls=100, tolerance=1.E-7;
105+
endmatch;
106+
107+
twiss; qx=table(summ,q1); qy=table(summ,q2);
108+
closest2=abs(2*(qx-qy)-round(2*(qx-qy)))/2;
109+
value, closest0, closest1, closest2, cmrskew, cmiskew;
110+
111+
if(mylhcbeam==1)
112+
{kqtf.b1=kqtf0;
113+
kqtd.b1=kqtd0;};
114+
115+
if(mylhcbeam > 1)
116+
{kqtf.b2=kqtf0;
117+
kqtd.b2=kqtd0;};
118+
119+
return;

FineCouplingCorrectionSimplex.madx

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
! Fine tuning of coupling correction
2+
! S.Fartoukh March 2009
3+
! 2011/11/21 From SLHCV3.0 R. De Maria
4+
! 2016/04/27 R. De Maria & F.F Van der Veken
5+
! work around mad-x bug on integer part of the tune in presence of coupling for ctap calculation
6+
7+
if(mylhcbeam==1)
8+
{kqtf=kqtf.b1;kqtf0=kqtf.b1;
9+
kqtd=kqtd.b1;kqtd0=kqtd.b1;
10+
kqtf.b1:=kqtf;
11+
kqtd.b1:=kqtd;};
12+
13+
if(mylhcbeam > 1)
14+
{kqtf=kqtf.b2;kqtf0=kqtf.b2;
15+
kqtd=kqtd.b2;kqtd0=kqtd.b2;
16+
kqtf.b2:=kqtf;
17+
kqtd.b2:=kqtd;};
18+
19+
20+
! closest tune
21+
qmid=(qx0-qx00+qy0-qy00)*0.5;
22+
23+
match;
24+
global, q1=qx00+qmid,q2=qy00+qmid;
25+
vary, name=kqtf, step=1.E-9;
26+
vary, name=kqtd, step=1.E-9;
27+
lmdif, calls=50, tolerance=1.E-10;
28+
endmatch;
29+
30+
31+
32+
! Quick minimization based on linear machine
33+
cmrskew0 = cmrskew;
34+
cmiskew0 = cmiskew;
35+
twiss; qx=table(summ,q1); qy=table(summ,q2);
36+
cta0 = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
37+
closest0 = cta0;
38+
!value,closest0;
39+
40+
cmrskew = cmrskew0+cta0/2.;
41+
twiss; qx=table(summ,q1); qy=table(summ,q2);
42+
ctap = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
43+
!value,ctap;
44+
45+
cmrskew = cmrskew0-cta0/2.;
46+
twiss; qx=table(summ,q1); qy=table(summ,q2);
47+
ctam = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
48+
!value,ctam;
49+
50+
cmrskew = cmrskew0+(ctam^2-ctap^2)/2./cta0;
51+
twiss; qx=table(summ,q1); qy=table(summ,q2);
52+
cta0 = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
53+
!value,cta0;
54+
55+
cmiskew = cmiskew0+cta0/2.;
56+
twiss; qx=table(summ,q1); qy=table(summ,q2);
57+
ctap = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
58+
!value,ctap;
59+
60+
cmiskew = cmiskew0-cta0/2.;
61+
twiss; qx=table(summ,q1); qy=table(summ,q2);
62+
ctam = abs(2*(qx-qy)-round(2*(qx-qy)))/2;
63+
!value,ctam;
64+
65+
cmiskew = cmiskew0+(ctam^2-ctap^2)/2./cta0;
66+
twiss; qx=table(summ,q1); qy=table(summ,q2);
67+
68+
closest1 =abs(2*(qx-qy)-round(2*(qx-qy)))/2;
69+
!value,closest1;
70+
71+
!Empirical minimisation
72+
match;
73+
global, q1=qx00+qmid, q2=qy00+qmid;
74+
vary, name=kqtf, step=1.E-9;
75+
vary, name=kqtd, step=1.E-9;
76+
lmdif, calls=200,tolerance=1.E-6;
77+
endmatch;
78+
79+
match;
80+
global, q1=qx00+qmid, q2=qy00+qmid;
81+
vary, name=cmrskew, step=1.E-9;
82+
vary, name=cmiskew, step=1.E-9;
83+
simplex, calls=300, tolerance=2.E-6;
84+
endmatch;
85+
86+
match;
87+
global, q1=qx00+qmid, q2=qy00+qmid;
88+
vary, name=kqtf, step=1.E-9;
89+
vary, name=kqtd, step=1.E-9;
90+
lmdif, calls=200, tolerance=1.E-7;
91+
endmatch;
92+
93+
match;
94+
global, q1=qx00+qmid, q2=qy00+qmid;
95+
vary, name=cmrskew, step=1.E-9;
96+
vary, name=cmiskew, step=1.E-9;
97+
simplex, calls=300, tolerance=2.E-7;
98+
endmatch;
99+
100+
match;
101+
global, q1=qx00+qmid, q2=qy00+qmid;
102+
vary, name=kqtf, step=1.E-9;
103+
vary, name=kqtd, step=1.E-9;
104+
lmdif, calls=200, tolerance=1.E-7;
105+
endmatch;
106+
107+
twiss; qx=table(summ,q1); qy=table(summ,q2);
108+
closest2=abs(2*(qx-qy)-round(2*(qx-qy)))/2;
109+
value, closest0, closest1, closest2, cmrskew, cmiskew;
110+
111+
if(mylhcbeam==1)
112+
{kqtf.b1=kqtf0;
113+
kqtd.b1=kqtd0;};
114+
115+
if(mylhcbeam > 1)
116+
{kqtf.b2=kqtf0;
117+
kqtd.b2=kqtd0;};
118+
119+
return;

Orbit_Routines.madx

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
! routines to be used in the orbit correction process
2+
! requires "twiss, table=nominal;" to be run previously
3+
4+
! saved on 13/10/08 15:41:45 by T.Risselada
5+
6+
7+
! preliminary correction with recovery from Twiss failure (unstable machine)
8+
initial_micado(n_iter) : macro = { twiss;
9+
mytunes = table(summ,q1)*table(summ,q2);
10+
value, mytunes;
11+
12+
if (mytunes > 1) {
13+
correct, plane=x, mode=micado, ncorr=n_iter, model=nominal;
14+
correct, plane=y, mode=micado, ncorr=n_iter, model=nominal;
15+
};
16+
17+
if (mytunes < 1) {
18+
twiss, betx=beta.ip1, bety=beta.ip1;
19+
correct, plane=x, mode=micado, ncorr=n_iter, model=nominal, flag=line;
20+
correct, plane=y, mode=micado, ncorr=n_iter, model=nominal, flag=line;
21+
};
22+
};
23+
24+
25+
26+
! final correction aiming at peak orbit amplitudes < target
27+
final_micado (target) : macro = { niter = 1;
28+
while (niter < 20) { value, niter; twiss;
29+
30+
xpeak = table(summ, xcomax); value, xpeak;
31+
ypeak = table(summ, ycomax); value, ypeak;
32+
33+
if (xpeak > target) {correct, plane=x, mode=micado, ncorr=10, model=nominal;}
34+
if (ypeak > target) {correct, plane=y, mode=micado, ncorr=10, model=nominal;}
35+
36+
if (xpeak < target && ypeak < target){niter = 1000;}
37+
niter = niter + 1;
38+
}
39+
};
40+
41+
42+
return;

SelectLHCMonCor_v1.madx

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
! Select monitors and correctors required for LHC orbit correction
2+
! to be used with THIN sequence of V6.500
3+
4+
! saved on 28/06/07 10:49:19 by T.Risselada
5+
6+
if ( ver_lhc_run==0) {
7+
print, text="Fatal error: SelectLHCMonCor_v1 is only compatible with LHC.";
8+
stop;
9+
};
10+
11+
usemonitor, status=off;
12+
13+
! enable all monitors for required beam
14+
if (mylhcbeam < 2) { usemonitor, status=on, pattern=^bpm.*b1$;}
15+
if (mylhcbeam > 1) { usemonitor, status=on, pattern=^bpm.*b2$;}
16+
17+
usemonitor, status=off, class=bpmwa;
18+
usemonitor, status=off, class=bpmwb;
19+
usemonitor, status=off, class=bpmse;
20+
usemonitor, status=off, class=bpmsd;
21+
22+
23+
usekick, status=off;
24+
25+
usekick, status=on, class=mcbh ;
26+
usekick, status=on, class=mcbch;
27+
usekick, status=on, class=mcbwh;
28+
usekick, status=on, class=mcbyh;
29+
30+
usekick, status=on, class=mcbv ;
31+
usekick, status=on, class=mcbcv;
32+
usekick, status=on, class=mcbwv;
33+
usekick, status=on, class=mcbyv;
34+
35+
36+
! disable correctors reserved for crossing schemes
37+
38+
if (mylhcbeam < 2) {
39+
usekick, status=off, range=mcbch.5r2.b1;
40+
usekick, status=off, range=mcbch.b5l8.b1;
41+
usekick, status=off, range=mcbyh.4l2.b1;
42+
usekick, status=off, range=mcbyh.4l8.b1;
43+
usekick, status=off, range=mcbyh.4r1.b1;
44+
usekick, status=off, range=mcbyh.4r5.b1;
45+
usekick, status=off, range=mcbyh.5r8.b1;
46+
usekick, status=off, range=mcbyh.a4l1.b1;
47+
usekick, status=off, range=mcbyh.a4l5.b1;
48+
usekick, status=off, range=mcbyh.a4r2.b1;
49+
usekick, status=off, range=mcbyh.a4r8.b1;
50+
usekick, status=off, range=mcbyh.b5l2.b1;
51+
52+
usekick, status=off, range=mcbcv.5l8.b1;
53+
usekick, status=off, range=mcbcv.a5r2.b1;
54+
usekick, status=off, range=mcbyv.4l1.b1;
55+
usekick, status=off, range=mcbyv.4l5.b1;
56+
usekick, status=off, range=mcbyv.4r2.b1;
57+
usekick, status=off, range=mcbyv.4r8.b1;
58+
usekick, status=off, range=mcbyv.5l2.b1;
59+
usekick, status=off, range=mcbyv.a4l2.b1;
60+
usekick, status=off, range=mcbyv.a4l8.b1;
61+
usekick, status=off, range=mcbyv.a4r1.b1;
62+
usekick, status=off, range=mcbyv.a4r5.b1;
63+
usekick, status=off, range=mcbyv.b5r8.b1;
64+
}
65+
66+
if (mylhcbeam > 1) {
67+
usekick, status=off, range=mcbch.5l8.b2;
68+
usekick, status=off, range=mcbch.a5r2.b2;
69+
usekick, status=off, range=mcbyh.4l1.b2;
70+
usekick, status=off, range=mcbyh.4l5.b2;
71+
usekick, status=off, range=mcbyh.4r2.b2;
72+
usekick, status=off, range=mcbyh.4r8.b2;
73+
usekick, status=off, range=mcbyh.5l2.b2;
74+
usekick, status=off, range=mcbyh.a4l2.b2;
75+
usekick, status=off, range=mcbyh.a4l8.b2;
76+
usekick, status=off, range=mcbyh.a4r1.b2;
77+
usekick, status=off, range=mcbyh.a4r5.b2;
78+
usekick, status=off, range=mcbyh.b5r8.b2;
79+
80+
usekick, status=off, range=mcbcv.5r2.b2;
81+
usekick, status=off, range=mcbcv.b5l8.b2;
82+
usekick, status=off, range=mcbyv.4l2.b2;
83+
usekick, status=off, range=mcbyv.4l8.b2;
84+
usekick, status=off, range=mcbyv.4r1.b2;
85+
usekick, status=off, range=mcbyv.4r5.b2;
86+
usekick, status=off, range=mcbyv.5r8.b2;
87+
usekick, status=off, range=mcbyv.a4l1.b2;
88+
usekick, status=off, range=mcbyv.a4l5.b2;
89+
usekick, status=off, range=mcbyv.a4r2.b2;
90+
usekick, status=off, range=mcbyv.a4r8.b2;
91+
usekick, status=off, range=mcbyv.b5l2.b2;
92+
}
93+
94+
return;

0 commit comments

Comments
 (0)