source: MML/trunk/machine/SOLEIL/Booster/applications/orbitX.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 11 years ago

Initial import--MML version from SOLEIL@2013

File size: 4.8 KB
Line 
1% Correction orbite horizontale
2
3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4ncell=44;
5betax=11.5;
6b2   =11.5;
7b1   =1.7;
8nux=6.8*2*pi;    % avance de phase
9dnux=nux/ncell;  % avance de phase par maille
10ds=3.5595;       % longueur maille
11ncorrx=22;
12nbpmx=22;
13%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14step=0.5;         % correction progressive
15maxvp=4;           % valeur propre
16istart = 27;     % depart lecture BPM
17iend = 200;      % fin lecture BPM
18
19% table BPM
20clear loc
21loc(1) =01;loc(2) =04;loc(3) =05;loc(4) =08;loc(5) =09;loc(6)=11;
22loc(7) =13;loc(8) =14;loc(9) =17;loc(10)=18;loc(11)=21;
23loc(12)=23;loc(13)=26;loc(14)=27;loc(15)=30;loc(16)=31;loc(17)=33;
24loc(18)=35;loc(19)=36;loc(20)=39;loc(21)=40;loc(22)=43;
25clear bet
26bet(1) =b1;bet(2) =b2;bet(3) =b1;bet(4) =b2;bet(5) =b1;bet(6)=b1;
27bet(7) =b1;bet(8) =b2;bet(9) =b1;bet(10)=b2;bet(11)=b1;
28bet(12)=b1;bet(13)=b2;bet(14)=b1;bet(15)=b2;bet(16)=b1;bet(17)=b1;
29bet(18)=b1;bet(19)=b2;bet(20)=b1;bet(21)=b2;bet(22)=b1;
30
31% table on BPM et correcteurs
32clear 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
35hs1= [   1         1   1         1   1      1      1   1         1   1         1];
36%          12        13  14        15  16     17     18  19        20  21        22   
37hs2= [   1         1   1         1   1      1      1   1         1   1         1];
38hs=[hs1 hs2];
39
40clear on1 on2 on
41%     1      2      3      4      5      6      7      8      9      10     11       
42on1= [1      1      1      1      1      1      1      1      1      1      1 ];
43%     12     13     14     15     16     17     18     19     20     21     22     
44on2= [1      1      1      1      1      1      1      1      1      1      1 ];
45on=[on1 on2];
46
47clear beta_corrx phi_corrx s_corrx
48clear s_bx bx s_cx cx
49for i=1:nbpmx,
50    s_bx(i)=ds*loc(i)   ; bx(i)=0;
51    s_cx(i)=(2*ds)*(i-1); cx(i)=0;
52end
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)
58i=0;
59clear beta_bpmx  phi_bpmx s_bpmx
60for 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   
67end
68nbpmxr=i;
69% cotᅵ correcteurs sur chaque qp def% setsp('VCOR',0.4,[1 1])oc, on commence sur un qd (inj booster)
70i=0;
71clear beta_corrx phi_corrx s_corrx
72for 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   
79end
80ncorrxr=i;
81% matrice Cc cas fermᅵ cyclique
82clear Cc
83c3=2*sin(nux/2);
84for 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
90end
91sprintf(' Nombre de BPM : %g ', nbpmxr);
92sprintf(' Nombre de COR : %g ', ncorrxr);
93
94
95%  cotï¿œ vecteur X repesentant les defaut d'orbites mesurï¿œ en mm
96%  bloc = offset a retrancher
97clear Zm Xm
98for 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   
114end
115i=0;
116clear Xr Xr2
117Xr2=0;
118for 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   
124end
125Xr2=Xr2/i;   % ecart type orbite
126
127% Rï¿œsolution par SVD matrice Cc cyclique sur X
128clear Xcorr Cci K
129[U,S,V] = svds(Cc,ncorrxr);
130diag(S)
131for 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   
137end   
138Cci=V*S*U';
139K=-Cci*transpose(Xr);                % en mrad
140Xcorr= transpose(Xr) + Cc*K*step;
141sprintf(' Ecart type orbite : %g ', Xr2)
142
143clear nb K0 K1 K2
144j=0;
145for i=1:ncorrx,
146    nb(i)=i;
147end
148j=0;
149sumcorr=0;
150for 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   
160end
161
162K2=getam('HCOR');
163for i=1:ncorrx,
164    if (K1(i)<1.5)
165       stepsp('HCOR',K1(i),[i 1]);
166    end   
167end
168
169
170
171% plot
172figure(1);
173subplot(2,1,1);
174plot(s_bx, bx, 'sr' , s_bpmx,Xr,'-ok',s_bpmx,Xcorr,'--ok');
175grid on
176title('Correction horizontale mode anneau');
177suptitle(['BPM= ' num2str(nbpmxr) '    CORR= ' num2str(ncorrxr)])
178%legend('BPM','X','X corrigï¿œe',2);
179xlim([0 156]); ylim([-4 4]);
180ylabel('Orbite');
181subplot(2,1,2);
182%bar(s_cx , K2 ,0.1);xlim([0 156]); ylim([-1. 1.]);
183KB=[K2 K1'];
184bar(s_cx ,KB , 0.8);xlim([0 156]); ylim([-1. 1.]);
185ylabel('I (A)');xlabel('Position S');
186grid on
Note: See TracBrowser for help on using the repository browser.