1 | % Correction orbite horizontale |
---|
2 | |
---|
3 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
4 | ncell=44; |
---|
5 | betax=11.5; |
---|
6 | b2 =11.5; |
---|
7 | b1 =1.7; |
---|
8 | nux=6.8*2*pi; % avance de phase |
---|
9 | dnux=nux/ncell; % avance de phase par maille |
---|
10 | ds=3.5595; % longueur maille |
---|
11 | ncorrx=22; |
---|
12 | nbpmx=22; |
---|
13 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
14 | step=0.5; % correction progressive |
---|
15 | maxvp=4; % valeur propre |
---|
16 | istart = 27; % depart lecture BPM |
---|
17 | iend = 200; % fin lecture BPM |
---|
18 | |
---|
19 | % table BPM |
---|
20 | clear loc |
---|
21 | loc(1) =01;loc(2) =04;loc(3) =05;loc(4) =08;loc(5) =09;loc(6)=11; |
---|
22 | loc(7) =13;loc(8) =14;loc(9) =17;loc(10)=18;loc(11)=21; |
---|
23 | loc(12)=23;loc(13)=26;loc(14)=27;loc(15)=30;loc(16)=31;loc(17)=33; |
---|
24 | loc(18)=35;loc(19)=36;loc(20)=39;loc(21)=40;loc(22)=43; |
---|
25 | clear bet |
---|
26 | bet(1) =b1;bet(2) =b2;bet(3) =b1;bet(4) =b2;bet(5) =b1;bet(6)=b1; |
---|
27 | bet(7) =b1;bet(8) =b2;bet(9) =b1;bet(10)=b2;bet(11)=b1; |
---|
28 | bet(12)=b1;bet(13)=b2;bet(14)=b1;bet(15)=b2;bet(16)=b1;bet(17)=b1; |
---|
29 | bet(18)=b1;bet(19)=b2;bet(20)=b1;bet(21)=b2;bet(22)=b1; |
---|
30 | |
---|
31 | % table on BPM et correcteurs |
---|
32 | clear hs1 hs2 hs |
---|
33 | % H V H V H H H V H V H |
---|
34 | % 1 2 3 4 5 6 7 8 9 10 11 |
---|
35 | hs1= [ 1 1 1 1 1 1 1 1 1 1 1]; |
---|
36 | % 12 13 14 15 16 17 18 19 20 21 22 |
---|
37 | hs2= [ 1 1 1 1 1 1 1 1 1 1 1]; |
---|
38 | hs=[hs1 hs2]; |
---|
39 | |
---|
40 | clear on1 on2 on |
---|
41 | % 1 2 3 4 5 6 7 8 9 10 11 |
---|
42 | on1= [1 1 1 1 1 1 1 1 1 1 1 ]; |
---|
43 | % 12 13 14 15 16 17 18 19 20 21 22 |
---|
44 | on2= [1 1 1 1 1 1 1 1 1 1 1 ]; |
---|
45 | on=[on1 on2]; |
---|
46 | |
---|
47 | clear beta_corrx phi_corrx s_corrx |
---|
48 | clear s_bx bx s_cx cx |
---|
49 | for i=1:nbpmx, |
---|
50 | s_bx(i)=ds*loc(i) ; bx(i)=0; |
---|
51 | s_cx(i)=(2*ds)*(i-1); cx(i)=0; |
---|
52 | end |
---|
53 | |
---|
54 | |
---|
55 | |
---|
56 | % on rempli la matrice C tel que X=C.K |
---|
57 | % cotᅵ bpm sur chaque qp foc, on commence sur un qd (inj booster) |
---|
58 | i=0; |
---|
59 | clear beta_bpmx phi_bpmx s_bpmx |
---|
60 | for j=1:nbpmx |
---|
61 | if (hs(j)==1) |
---|
62 | i=i+1; |
---|
63 | beta_bpmx(i)=bet(j); |
---|
64 | phi_bpmx(i)=dnux*loc(j); |
---|
65 | s_bpmx(i)=ds*loc(j); |
---|
66 | end |
---|
67 | end |
---|
68 | nbpmxr=i; |
---|
69 | % cotᅵ correcteurs sur chaque qp def% setsp('VCOR',0.4,[1 1])oc, on commence sur un qd (inj booster) |
---|
70 | i=0; |
---|
71 | clear beta_corrx phi_corrx s_corrx |
---|
72 | for j=1:ncorrx, |
---|
73 | if (on(j)==1) |
---|
74 | i=i+1; |
---|
75 | beta_corrx(i)=betax; |
---|
76 | phi_corrx(i)=(2*dnux)*(j-0.5); |
---|
77 | s_corrx(i)=(2*ds)*(j-0.5); |
---|
78 | end |
---|
79 | end |
---|
80 | ncorrxr=i; |
---|
81 | % matrice Cc cas fermᅵ cyclique |
---|
82 | clear Cc |
---|
83 | c3=2*sin(nux/2); |
---|
84 | for i = 1:nbpmxr, |
---|
85 | for j = 1:ncorrxr |
---|
86 | c1=sqrt(beta_bpmx(i)*beta_corrx(j)); |
---|
87 | c2=cos(nux/2-abs(phi_bpmx(i)-phi_corrx(j))); |
---|
88 | Cc(i,j) = c1*c2/c3; |
---|
89 | end |
---|
90 | end |
---|
91 | sprintf(' Nombre de BPM : %g ', nbpmxr); |
---|
92 | sprintf(' Nombre de COR : %g ', ncorrxr); |
---|
93 | |
---|
94 | |
---|
95 | % cotᅵ vecteur X repesentant les defaut d'orbites mesurᅵ en mm |
---|
96 | % bloc = offset a retrancher |
---|
97 | clear Zm Xm |
---|
98 | for i=1:22 |
---|
99 | xm=0; |
---|
100 | zm=0; |
---|
101 | if (hs(i)==0) % cas de BPM HS |
---|
102 | Xm(i)=0;Zm(i)=0; |
---|
103 | else |
---|
104 | % a=getbpmrawdata(i,'nodisplay','struct'); |
---|
105 | % for j=istart:iend, |
---|
106 | % xm=xm+a.Data.X(j); % en mm |
---|
107 | % zm=zm+a.Data.Z(j); |
---|
108 | % end |
---|
109 | % Xm(i)=xm/(iend-istart+1); |
---|
110 | % Zm(i)=zm/(iend-istart+1); |
---|
111 | Xm(i)=(1-2*rand(1))*3; |
---|
112 | Zm(i)=(1-2*rand(1))*3; |
---|
113 | end |
---|
114 | end |
---|
115 | i=0; |
---|
116 | clear Xr Xr2 |
---|
117 | Xr2=0; |
---|
118 | for j=1:nbpmx, |
---|
119 | if (hs(j)==1) |
---|
120 | i=i+1; |
---|
121 | Xr(i)=Xm(j); |
---|
122 | Xr2 = Xr2 + Xr(i)*Xr(i); |
---|
123 | end |
---|
124 | end |
---|
125 | Xr2=Xr2/i; % ecart type orbite |
---|
126 | |
---|
127 | % Rï¿œsolution par SVD matrice Cc cyclique sur X |
---|
128 | clear Xcorr Cci K |
---|
129 | [U,S,V] = svds(Cc,ncorrxr); |
---|
130 | diag(S) |
---|
131 | for i=1:min(nbpmxr,ncorrxr) |
---|
132 | if(S(i,i)<maxvp) |
---|
133 | S(i,i)=0; |
---|
134 | else |
---|
135 | S(i,i)=1/S(i,i); |
---|
136 | end |
---|
137 | end |
---|
138 | Cci=V*S*U'; |
---|
139 | K=-Cci*transpose(Xr); % en mrad |
---|
140 | Xcorr= transpose(Xr) + Cc*K*step; |
---|
141 | sprintf(' Ecart type orbite : %g ', Xr2) |
---|
142 | |
---|
143 | clear nb K0 K1 K2 |
---|
144 | j=0; |
---|
145 | for i=1:ncorrx, |
---|
146 | nb(i)=i; |
---|
147 | end |
---|
148 | j=0; |
---|
149 | sumcorr=0; |
---|
150 | for i=1:ncorrx |
---|
151 | if(on(i)==0) |
---|
152 | K1(i)=0; |
---|
153 | K2(i)=0; |
---|
154 | else |
---|
155 | j=j+1; |
---|
156 | K1(i)=K(j)/1.2*step; % en Ampere |
---|
157 | K2(i)=K(j)/1.2; |
---|
158 | sumcorr =sumcorr + K1(i); |
---|
159 | end |
---|
160 | end |
---|
161 | |
---|
162 | K2=getam('HCOR'); |
---|
163 | for i=1:ncorrx, |
---|
164 | if (K1(i)<1.5) |
---|
165 | stepsp('HCOR',K1(i),[i 1]); |
---|
166 | end |
---|
167 | end |
---|
168 | |
---|
169 | |
---|
170 | |
---|
171 | % plot |
---|
172 | figure(1); |
---|
173 | subplot(2,1,1); |
---|
174 | plot(s_bx, bx, 'sr' , s_bpmx,Xr,'-ok',s_bpmx,Xcorr,'--ok'); |
---|
175 | grid on |
---|
176 | title('Correction horizontale mode anneau'); |
---|
177 | suptitle(['BPM= ' num2str(nbpmxr) ' CORR= ' num2str(ncorrxr)]) |
---|
178 | %legend('BPM','X','X corrigï¿œe',2); |
---|
179 | xlim([0 156]); ylim([-4 4]); |
---|
180 | ylabel('Orbite'); |
---|
181 | subplot(2,1,2); |
---|
182 | %bar(s_cx , K2 ,0.1);xlim([0 156]); ylim([-1. 1.]); |
---|
183 | KB=[K2 K1']; |
---|
184 | bar(s_cx ,KB , 0.8);xlim([0 156]); ylim([-1. 1.]); |
---|
185 | ylabel('I (A)');xlabel('Position S'); |
---|
186 | grid on |
---|