source: MML/trunk/machine/SOLEIL/StorageRing/BBA/compteurBBA_vArnaud_oct06.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: 9.9 KB
Line 
1
2% Working directory for BBA data
3cd('/home/matlabML/measdata/Ringdata/BBA/work2')
4%/home/diag/diag/Matlab/DserverBPM/Set_BBA_Offsets_planH.m
5
6% Load Last data file
7%load('ResBBA_0826_07-Sep-2006.mat')
8%load('ResBBA_1505_25-Sep-2006.mat')
9load('ResBBA_1535_11-Oct-2006.mat')
10%FileName = uigetfile('*.mat')
11%load(FileName);
12%load('ResBBA_1505_25-Sep-2006.mat')
13
14%%
15l = 0;
16m = 0;
17
18
19% Get quad familynames
20famQ=fieldnames(BBA);
21%famQ=cellstr('Q10')
22
23lfamQ = size(famQ,1);
24
25for ik = 1:lfamQ, % loop on families
26   
27    famQ{ik};
28
29    devQ = fieldnames(BBA.(famQ{ik}));
30    ldevQ = size(devQ,1);
31
32    for j = 1:ldevQ, % loop on quads
33       
34        planeQ  = fieldnames(BBA.(famQ{ik}).(devQ{j}));
35        lplaneQ = size(planeQ);
36
37        for k = 1:lplaneQ, % loop on planes
38            famQ{ik};
39            devQ{j};
40
41            tabpla = planeQ(k); %plane
42            tabda  = BBA.(famQ{ik}).(devQ{j}).(planeQ{k}).MEC.Date; %date of measure
43            taboff = BBA.(famQ{ik}).(devQ{j}).(planeQ{k}).MEC.Results.OffsetBpm; %BBA offset
44            tabDevBpm=BBA.(famQ{ik}).(devQ{j}).(planeQ{k}).MEC.BpmDev; % BPM deviceliste
45
46            %switchyard on plane
47            if strcmpi(planeQ{k}, 'HPlane') % H-plane
48               
49                %search since a given date and store in arrays
50                % TO BE IMPROVED
51                if strcmpi(tabda(4:6),'Sep')
52                    l = l+1;
53                    tabdateH(l) = cellstr(tabda); % date
54                    tabfamQH(l) = famQ(ik); % Quad family
55                    tabdevQH(l) = devQ(j);  % Quad deviceliste 
56                    tabplaneQH(l) = planeQ(k); % utility ?
57                    taboffsetH(l,1)=taboff; %% BBA BPM offset
58                    taboffsetH(l,2)=getspos('BPMx',tabDevBpm); % BPM s-position
59                    tabDevBH(l,:)=tabDevBpm; % BPM devicelist
60                end
61               
62            elseif strcmpi(planeQ{k}, 'VPlane') % V-plane
63
64                %search since a given date
65                % TO BE IMPROVED
66                if strcmpi(tabda(4:6),'Sep')
67                    m=m+1;
68                    tabdateV(m)=cellstr(tabda);
69                    tabfamQV(m)=famQ(ik);
70                    tabdevQV(m)=devQ(j);
71                    tabplaneQV(m)=planeQ(k);
72                    taboffsetV(m,1)=taboff;
73                    taboffsetV(m,2)=getspos('BPMz',tabDevBpm);
74                    tabDevBV(m,:)=tabDevBpm;
75
76                end
77
78            end
79
80        end
81    end
82end
83
84%cd '/home/matlabML/measdata/Ringdata/BBA/debug'
85%save('donne.mat','tabdateH','tabfamQH','tabdevQH','tabplaneQH','tabdateV','tabfamQV','tabdevQV','tabplaneQV')
86
87
88% Redundant to be compressed and improved
89for i = 1:length(tabfamQV),
90    recaV(i,1)=tabfamQV(i);
91    recaV(i,2)=tabdevQV(i);
92    recaV(i,3)=cellstr(num2str(tabDevBV(i,:)));
93    recaV(i,4)=cellstr(num2str(taboffsetV(i,1)));
94    sortieV(i,1)=dev2tangodev('BPMz',tabDevBV(i,:));
95    sortieV(i,2)=cellstr(num2str(taboffsetV(i,1)));
96end
97
98for i=1:length(tabfamQH)
99
100    recaH(i,1)=tabfamQH(i);
101    recaH(i,2)=tabdevQH(i);
102    recaH(i,3)=cellstr(num2str(tabDevBH(i,:)));
103    recaH(i,4)=cellstr(num2str(taboffsetH(i,1)));
104   
105    sortieH(i,1)=dev2tangodev('BPMx',tabDevBH(i,:));
106    sortieH(i,2)=cellstr(num2str(taboffsetH(i,1)));
107end
108
109disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ù')
110disp('VPLANE')
111% TO DO in an external file
112disp(recaV);
113
114% sorting on BPM s-position
115[resV, indV] = sort(taboffsetV(:,2),1,'ascend');
116
117% resort everything along the ring position
118for i = 1:length(resV),
119    ordonneV(i)=taboffsetV(indV(i));
120    SortV(i,1)=sortieV(indV(i),1); % BPM devicelist
121    SortV(i,2)=sortieV(indV(i),2); % BPM offset
122    SortV(i,3)=tabfamQV(indV(i));  % quad family
123    SortV(i,4)=tabdevQV(indV(i));  % quad deviceliste
124    nom=char(tabdevQV(indV(i)));
125    in2=findstr(nom,'_');
126    in1=findstr(nom,'v');
127    SortV(i,5) = cellstr(dev2tango(char(tabfamQV(indV(i))),[str2num(nom(in1:in2-1)) str2num(nom(in2+1:length(nom)))]));
128end
129
130% V-plane
131figure(1)
132
133plot(resV(:,1),ordonneV,'marker','o')
134xlabel('s [m]')
135ylabel('Zoffset (mm)')
136grid on
137fprintf('Nombre de BBA: %d\n', length(tabfamQV))
138fprintf('ecart type: %4.1f um rms\n', std(ordonneV)*1e3)
139fprintf('moyenne: %4.1f um \n\n', mean(ordonneV)*1e3)
140
141figure(2)
142hist(ordonneV,20)
143xlabel('Zoffset [mm]');
144ylabel('Nb de BPM');
145
146disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
147disp('HPLANE')
148disp(recaH);
149
150taboffsetH;
151% sorting on BPM s-position
152[resH,indH] = sort(taboffsetH(:,2),1,'ascend');
153
154%disp(recaH(:,4));
155% resort everything along the ring position
156for i=1:length(resH),
157    ordonneH(i)=taboffsetH(indH(i));
158    SortH(i,1)=sortieH(indH(i),1);
159    SortH(i,2)=sortieH(indH(i),2);
160    SortH(i,3)=tabfamQH(indH(i));
161    SortH(i,4)=tabdevQH(indH(i));
162    nom=char(tabdevQH(indH(i)));
163    in2=findstr(nom,'_');
164    in1=findstr(nom,'v');
165    SortH(i,5)=cellstr(dev2tango(char(tabfamQH(indH(i))),[str2num(nom(in1:in2-1)) str2num(nom(in2+1:length(nom)))]));
166end
167
168figure(3)
169plot(resH(:,1),ordonneH,'marker','o')
170xlabel('s [m]')
171ylabel('Xoffset (mm)')
172grid on
173
174fprintf('Nombre de BBA: %d\n', length(tabfamQH))
175fprintf('ecart type: %4.1f um rms\n', std(ordonneH)*1e3)
176fprintf('moyenne: %4.1f um \n\n', mean(ordonneH)*1e3)
177
178figure(4)
179hist(ordonneH)
180xlabel('Xoffset [mm]');
181ylabel('Nb de BPM');
182
183%cd '/home/matlabML/mmlcontrol/Ringspecific/fonction_test/'%Sauvegarde_beta_sept06 (betameasX,betameasZ)
184
185% Load betafunctions given by MAT
186% TO BE IMPROVED for a bit wrong and not generic
187cd('/home/matlabML/measdata/Ringdata/QUAD');
188load('Sauvegarde_beta_sept06')
189betameasX;
190betameasZ;
191
192% Build up quad list
193for i=1:10,
194    FamQpTri{i} = ['Q' num2str(i)];
195end
196
197
198k=0;
199for i=1:10, % loop on family
200    devtri = getlist(FamQpTri{i}); % Get devicelist for vali QUAD
201    for j=1:length(devtri) % loop on devices
202        k=k+1;
203        FamTriTot(k) =  FamQpTri(i);
204        devTriQp(k,:) = devtri(j,:);
205    end
206end
207
208
209for i=1:length(FamTriTot),
210    tabBetaX(i,1)=FamTriTot(i); % Family
211    tabBetaX(i,2)=cellstr(num2str(devTriQp(i,:))); %Device
212    tabBetaX(i,3)=cellstr(dev2tango(char(FamTriTot(i)),devTriQp(i,:))); % Tango names
213    tabBetaX(i,4)=cellstr(num2str(betameasX(i))); % betafunction
214    tabBetaZ(i,1)=FamTriTot(i);
215    tabBetaZ(i,2)=cellstr(num2str(devTriQp(i,:)));
216    tabBetaZ(i,3)=cellstr(dev2tango(char(FamTriTot(i)),devTriQp(i,:)));
217    tabBetaZ(i,4)=cellstr(num2str(betameasZ(i)));
218    %tabBetaZ(i,5)=cellstr(num2str(betameasX(i)));
219end
220
221%%
222cd('/home/matlabML/measdata/Ringdata/BBA/debug');
223%save('tabBe.mat','tabBetaX','SortH')
224%load('tabBe.mat')
225tabBetaX;
226
227l=1;
228i=1;
229
230% plan H
231length(SortH);
232%compute final offset with weigthed avarage when several quads for same BPM
233% TO BE IMPROVE
234while i < length(SortH)+1
235    l;
236    i;
237    if i < length(SortH) && strcmpi(char(SortH(i,1)),char(SortH(i+1,1))) ; %si j'ai deux meme BPM
238
239        for j = 1:length(tabBetaX),
240           
241            if strcmpi(char(SortH(i,5)),char(tabBetaX(j,3))), %je resort le premier quad correspondant
242                l;
243               
244                %disp('first')
245                char(SortH(i,3));
246                betaQ1 = str2double(char(tabBetaX(j,4)));
247                kQ1    = getkleff(char(SortH(i,3)),1); % BEWARE !! Theory only and depend on lattice
248                oQ1    = str2double(char(SortH(i,2))); % Offset BPM
249            end
250
251            if strcmpi(char(SortH(i+1,5)),char(tabBetaX(j,3)))      %et le deuxiÚme
252                %disp('second');
253                char(SortH(i+1,3));
254                betaQ2=str2double(char(tabBetaX(j,4)));
255                kQ2=getkleff(char(SortH(i+1,3)),1);
256                oQ2=str2double(char(SortH(i+1,2)));
257            end
258        end
259       
260        %je calcule l'offset
261         l;
262        char(SortH(i+1,3));
263        char(SortH(i,3));
264        oQ1;
265        kQ1;
266        betaQ1;
267        oQ2;
268        kQ2;
269        betaQ2;
270        % weighted avarage using betafunction and K values
271        newoff = (sqrt(betaQ1)*abs(kQ1)*oQ1 + sqrt(betaQ2)*abs(kQ2)*oQ2)/(sqrt(betaQ1)*abs(kQ1)+sqrt(betaQ2)*abs(kQ2));
272
273        offH(l,1) = SortH(i,1); %devBPM
274        offH(l,2) = cellstr(num2str(newoff));
275        l = l+1;
276        i = i+2;
277        % elseif i>1 && strcmpi(char(SortH(i,1)),char(SortH(i-1,1)))
278        %     disp('ola2')
279        %     i=i+1;
280    else % if unique, just keep value given by BBA measurement programme
281
282        offH(l,1)=SortH(i,1);
283        offH(l,2)=SortH(i,2);
284        l=l+1;
285        i=i+1;
286    end
287end
288
289% final results
290tableBBAH = offH;
291
292
293%plan V
294length(SortV);
295l=1;
296i=1;
297while i<length(SortV)+1
298
299    l;
300    i;
301    if i<length(SortV) && strcmpi(char(SortV(i,1)),char(SortV(i+1,1))) ; %si j'ai deux meme BPM
302
303        for j=1:length(tabBetaZ)
304            if strcmpi(char(SortV(i,5)),char(tabBetaZ(j,3))) %je resort le premier quad correspondant
305                betaQ1=str2num(char(tabBetaZ(j,4)));
306                kQ1=getkleff(char(SortV(i,3)));
307                kQ1=kQ1(1);
308                oQ1=str2num(char(SortV(i,2)));
309            end
310
311            if strcmpi(char(SortV(i+1,5)),char(tabBetaZ(j,3)))      %et le deuxiÚme
312                betaQ2=str2num(char(tabBetaZ(j,4)));
313                kQ2=getkleff(char(SortV(i+1,3)));
314                kQ2=kQ2(1);
315                oQ2=str2num(char(SortV(i+1,2)));
316            end
317        end
318        %je calcule l'offset
319        l;
320        oQ1;
321        kQ1;
322        betaQ1;
323        oQ2;
324        kQ2;
325        betaQ2;
326
327        newoff=(sqrt(betaQ1)*abs(kQ1)*oQ1 + sqrt(betaQ2)*abs(kQ2)*oQ2)/(sqrt(betaQ1)*abs(kQ1)+sqrt(betaQ2)*abs(kQ2));
328        offV(l,1)=SortV(i,1); %devBPM
329        offV(l,2)=cellstr(num2str(newoff));
330        l=l+1;
331        i=i+2;
332        % elseif i>1 && strcmpi(char(SortV(i,1)),char(SortV(i-1,1)))
333        %     disp('ola2')
334        %     i=i+1;
335    else
336
337        offV(l,1)=SortV(i,1);
338        offV(l,2)=SortV(i,2);
339        l=l+1;
340        i=i+1;
341    end
342end
343
344%final results
345tableBBAV=offV;
346
347
348
349cd '/home/matlabML/measdata/Ringdata/BBA/work2'
350
351% Save everything for diags
352% Be carefull if files already exist !!!!
353%save('tableBBAH.mat','tableBBAH') %dans work 2, tableBBA
354%save('tableBBAV.mat','tableBBAV')
355
356%offH
Note: See TracBrowser for help on using the repository browser.