1 | |
---|
2 | function [merit,CorConsEye,BpmRes,offs,OffsCor,center,ze,ord1,ord2,BpmEyeRes,CorDevListRes,iniCor,rmsFit,NameFile,NameFilePNG]=bba_last(RepRes,QuadFam,QuadDev,Plane,Method,nbDeltaCor,DeltaCor,offsetCor,retard,DeltaQp0,CorNumber) |
---|
3 | %% INPUTS |
---|
4 | %QuadFam = famille du quadrupole, |
---|
5 | %QuadDev = [cell element] qu quadrupole |
---|
6 | %Plane = 1 ou 2 ; horizontal ou vertical |
---|
7 | %Method = MEC (Most Effective Corrector) ou BMP4CM (Bump 4 cor), |
---|
8 | %nbDeltaCor = nb de pas du correcteur, |
---|
9 | %DeltaCor = Delta I d'un pas de correcteur, |
---|
10 | %offsetCor = offset en courant du correcteur pour recentrer la "parabole", |
---|
11 | %retard = délai en secondes pemettant d'attendre la fin de la montée en courant du correcteurs ou du quadrupole, |
---|
12 | %DeltaQp0 = Delta I pour un pas de quadrupole, |
---|
13 | %CorNumber = classement du correcteur en fonction de son efficacité (1=le plus efficace) |
---|
14 | |
---|
15 | %% EXEMPLE pour BBA M.E.C. |
---|
16 | % nbDeltaCor=13; |
---|
17 | % DeltaCor=0.1;% amps |
---|
18 | % offsetCor=0.7; %amps |
---|
19 | % retard=4;%20; sec |
---|
20 | % DeltaQp0=1.75; |
---|
21 | |
---|
22 | %% OUTPUTS |
---|
23 | % merit = tableau de 2 colonnes: colonne 1 -> courants dans le correcteur |
---|
24 | % colonne 2 -> valeur de la fonction de mérite |
---|
25 | %CorConsEye = relevé des valeur des consignes dans le correcteur -> dimension 1*nbDeltaCor |
---|
26 | %BpmRes = Valeur dans le BPM choisi (le plus proche) |
---|
27 | %OffsCor = offset à appliquer dans le correcteur pour centrer la parabole calculée |
---|
28 | %center = courant dans le correcteur pour lequel la parabole est minimale, |
---|
29 | %ze = abscisses calculées pour les fit (parabole et droite, 40 points), |
---|
30 | %ord1= ordonnées de la parabole évaluée en ze(i), |
---|
31 | %ord2= ordonnées de la droite évaluée en ze(i) -> pour le BPM choisi, |
---|
32 | %BpmEyeRes = [cell, element] du BPM choisi voir fonction "mec3", |
---|
33 | %CorDevListRes = [cell, element] Correcteur choisi voir fonction "mec3", |
---|
34 | %iniCor = valeur initiale du correcteur |
---|
35 | %OffsetBpm = offset BPM en mm |
---|
36 | %rmsFit = variable permettant de qualifier le fit de la parabole: écart-type des distances entre le fit et les points mesurés |
---|
37 | %NameFile = nom du fichier dans lequel sont stockées toutes les données |
---|
38 | %NameFilePNG = nom du du fichier .PNG de la copie d'écran de l'interface graphique |
---|
39 | |
---|
40 | %BMP4COR |
---|
41 | DeltaPosMax=1; %mm for BMP4CM Method |
---|
42 | |
---|
43 | |
---|
44 | condTune=0; % permet la correction du point de fonctionnement QP pour revenir au nombre d'onde initial apres le BBA |
---|
45 | condQp=0; % calcul automatique du DeltaQ -> 1 ou non -> 0 % pas disponible |
---|
46 | condBPMsigma=0; % prise en compte ou non du sigma des Bpm -> 1 ou 0 |
---|
47 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
48 | |
---|
49 | %switch2sim |
---|
50 | |
---|
51 | %setsp('HCOR',0) |
---|
52 | %setsp('VCOR',0) |
---|
53 | |
---|
54 | |
---|
55 | %Dx(s)=(-Dk(sQp) x(sQp))*[1/{1-k(sQp)*l Bet(sQp)/(2 tan(Pi nux))}]* |
---|
56 | %[rac(Bet(sBpm))*rac(Bet(sQp))]/(2 sin(pi nux))* |
---|
57 | %cos(fix(sBpm)-fix(sQp)-pi nux) |
---|
58 | % clear |
---|
59 | % famQ='Q1'; |
---|
60 | % locQ=[4 1]; |
---|
61 | % famB='BPMx'; |
---|
62 | % |
---|
63 | % %position longitudinale du quadrupole considéré |
---|
64 | % sQp=getspos(famQ,locQ); |
---|
65 | % [famresB,locB,sBpm]=proche(famB,famQ,locQ); |
---|
66 | % |
---|
67 | % %extration du nombre d'onde |
---|
68 | % tune=gettune; |
---|
69 | % nux=tune(1); |
---|
70 | % nuz=tune(2); |
---|
71 | % |
---|
72 | % %extraction des fonctions bᅵta au Qp considéré: |
---|
73 | % [bxQ,bzQ]=modelbeta(famQ,locQ); |
---|
74 | % %extraction des fonctions bᅵta au BPM considéré: |
---|
75 | % [bxB,bzB]=modelbeta(famB,locB); |
---|
76 | % |
---|
77 | % %extraction des phases au Qp considéré: |
---|
78 | % [fixQ,fizQ]=modelphase(famQ,locQ); |
---|
79 | % %extraction des phases au BPM considéré: |
---|
80 | % [fixB,fizB]=modelphase(famB,locB); |
---|
81 | %% %%%%%% |
---|
82 | |
---|
83 | %switch2sim |
---|
84 | |
---|
85 | %setsp('HCOR',0) |
---|
86 | %setsp('VCOR',0) |
---|
87 | |
---|
88 | % % %% TEST DES VARIABLES D'ENTREES |
---|
89 | % % if ~iscellstr(QuadFam) |
---|
90 | % % error('la famille entree n''est pas au format cell') |
---|
91 | % % end |
---|
92 | % % |
---|
93 | % % tailleQDev=size(QuadDev(1,:)) |
---|
94 | % % |
---|
95 | % % if isempty(QuadDev) |
---|
96 | % % error('Veuillez entrer le device du quadripole à étudier au format QuadDev=[cell elt]') |
---|
97 | % % elseif tailleQDev(2)~=2 |
---|
98 | % % error('Trop d''elements pour 1 device de QP: QuadDev=[cell elt]') |
---|
99 | % % end |
---|
100 | % % |
---|
101 | % % if Plane<1 || Plane>2 |
---|
102 | % % error('Veuillez entrer le plan étudié: Horizontal: Plane=1 ; Vertical:Plane=2') |
---|
103 | % % end |
---|
104 | % % |
---|
105 | % % %ne fonctionne pas |
---|
106 | % % if ~ischar(Method) |
---|
107 | % % error('Methodes disponibles au format string: ''MEC''') |
---|
108 | % % end |
---|
109 | % % % |
---|
110 | % % |
---|
111 | % % |
---|
112 | % % %% Mémorisation du répertoire de travail |
---|
113 | % % Rep = getfamilydata('Directory','BBA'); |
---|
114 | % % |
---|
115 | % % Annuncment = strcat(' *** Registration Directory ***'); |
---|
116 | % % disp(' ****************************************************************************'); |
---|
117 | % % disp(Annuncment); |
---|
118 | % % disp(' ** **'); |
---|
119 | % % disp(' ****************************************************************************'); |
---|
120 | % % disp(' ') |
---|
121 | % % disp(' ****************************************************************************'); |
---|
122 | % % disp(' ** WARNING **'); |
---|
123 | % % disp(' ** New directory has to be defined after an offset application **'); |
---|
124 | % % disp(' ** **'); |
---|
125 | % % disp(' ****************************************************************************'); |
---|
126 | % % |
---|
127 | % % button = questdlg('Is the Registration Directory already existing ?','Registration Directory','yes','no','yes') ; |
---|
128 | % % if isequal(button,'yes') % la directory existe déjà |
---|
129 | % % RepRes = uigetdir(Rep); % choix de la directory |
---|
130 | % % else |
---|
131 | % % tmp2 = questdlg('Create directory ?','BBA','Yes','No','Yes'); |
---|
132 | % % if strcmpi(tmp2,'Yes') % create a new directory |
---|
133 | % % prompt = {'Enter new directory name:'}; |
---|
134 | % % dlg_title = 'Input for Directory Name'; |
---|
135 | % % num_lines = 1; |
---|
136 | % % def = {'work_december06'}; |
---|
137 | % % answer = inputdlg(prompt,dlg_title,num_lines,def); |
---|
138 | % % RepRes = answer{1}; |
---|
139 | % % cd(Rep) % on se place dans la directory amont /BBA |
---|
140 | % % mkdir(RepRes) |
---|
141 | % % RepRes = [Rep RepRes] % Nom complet de la directory |
---|
142 | % % else % alors on ne sait pas ce qu'on veut ?? |
---|
143 | % % disp('** BBA cancelled **') |
---|
144 | % % return |
---|
145 | % % end |
---|
146 | % % end |
---|
147 | % % disp(' ** BBA starting **') |
---|
148 | |
---|
149 | varfig=10; % utilité ?????? |
---|
150 | tic; |
---|
151 | |
---|
152 | disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%') |
---|
153 | %$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$% |
---|
154 | |
---|
155 | QuadFamilyList=QuadFam; |
---|
156 | QuadDevList=QuadDev; |
---|
157 | |
---|
158 | % Results are stored in a "dynamic' structure called BBA: |
---|
159 | % level1: BBA.(QuadFam) |
---|
160 | |
---|
161 | % Rappel du dernier fichier résultats de BBA |
---|
162 | [BBAnumb0, BBAnumbText0, NomText0]=SaveName(RepRes,0); |
---|
163 | |
---|
164 | |
---|
165 | %Chargement des fichiers nécessaire |
---|
166 | % A MODIFIER pour etre plus generique et prendre toujours la bonne matrice |
---|
167 | % reponse. |
---|
168 | load('respcor.mat') %réponse des correcteurs |
---|
169 | danow= datestr(now); |
---|
170 | texdat=danow(1:11); |
---|
171 | |
---|
172 | |
---|
173 | if BBAnumb0>0 |
---|
174 | %NameFile=[RepRes '/ResBBA_' BBAnumbText0 '.mat']; |
---|
175 | NameFile=[RepRes '/' NomText0]; % dernier fichier BBA |
---|
176 | %NameFile=[RepRes '/ResBBA_' BBAnumbText0 '_' texdat '.mat']; |
---|
177 | load(NameFile); |
---|
178 | end |
---|
179 | %BBA; |
---|
180 | %définition du nom du nouveau fichier résultat BBA |
---|
181 | [BBAnumb1,BBAnumbText1,NomText1] = SaveName(RepRes,1); %NomText1 n'est pas utulisé dans ce cas |
---|
182 | %NameFile=[RepRes '/ResBBA_' BBAnumbText1 '.mat']; |
---|
183 | NameFile=[RepRes '/ResBBA_' BBAnumbText1 '_' texdat '.mat']; % nom du nouveau fichier BBA |
---|
184 | NameFilePNG=[RepRes '/SnapBBA_' BBAnumbText1 '_' texdat '.png']; |
---|
185 | %BBAnumb=BBAnumb+1; |
---|
186 | |
---|
187 | |
---|
188 | %[Reper '/DirBBA/resBBA_' BBAnumb '.mat'] |
---|
189 | |
---|
190 | |
---|
191 | % recherche du tableau contenant l'écart type des BPM |
---|
192 | %rep='/home/matlabML/measdata/Ringdata/BPM' |
---|
193 | |
---|
194 | % NON UTILISE POUR L'INSTANT |
---|
195 | % rep = getfamilydata('Directory','BPMData') |
---|
196 | % col=dir(rep) |
---|
197 | % |
---|
198 | % for i=1:length(col) |
---|
199 | % nom = col(i).name; |
---|
200 | % Lnom0= size(nom); |
---|
201 | % Lnom = Lnom0(2); |
---|
202 | % if Lnom>30 & strcmpi(nom(Lnom-2:Lnom),'mat') & strcmpi(nom(1:7),'BPMData') |
---|
203 | % nom2 = nom; |
---|
204 | % end |
---|
205 | % |
---|
206 | % end |
---|
207 | % repBPM=char([rep '/' nom2]); |
---|
208 | % BPMdata=load(repBPM); |
---|
209 | %%%%%%%%%%%%%%%%%%%%%%%%% |
---|
210 | %%%%%%%%%%%%%%%%%%%%%%%%% |
---|
211 | |
---|
212 | |
---|
213 | |
---|
214 | %Plane=1;NameFilePNG |
---|
215 | %if Plane==0 |
---|
216 | % loop=2; |
---|
217 | % Plane=1; |
---|
218 | %else |
---|
219 | % loop=1; |
---|
220 | %end |
---|
221 | %% |
---|
222 | %$$$$$$$$$$$ |
---|
223 | %for m=1:loop |
---|
224 | %$$$$$$$$$$$ |
---|
225 | |
---|
226 | |
---|
227 | |
---|
228 | if Plane==1 |
---|
229 | BpmFam='BPMx'; |
---|
230 | CorFam='HCOR'; |
---|
231 | NamePlane='HPlane'; |
---|
232 | CorBpmResp=efficacy.HPlane; % matrice d'efficacité correcteur/BPM |
---|
233 | %BpmMax=37; %non utilisé |
---|
234 | % BpmSigma1=BPMdata.BPMxData.Sigma; |
---|
235 | elseif Plane==2 |
---|
236 | BpmFam='BPMz'; |
---|
237 | CorFam='VCOR'; |
---|
238 | NamePlane='VPlane'; |
---|
239 | CorBpmResp=efficacy.VPlane; |
---|
240 | %BpmMax=4.5; %non utilisé |
---|
241 | % BpmSigma1=BPMdata.BPMyData.Sigma; |
---|
242 | else |
---|
243 | error('input must "1" for horizontal plane or "2" for vertical plane'); |
---|
244 | end |
---|
245 | |
---|
246 | %if Method=='MEC' |
---|
247 | %% UTILISATION du MEC: |
---|
248 | % |
---|
249 | %mec(QuadFamilyList,QuadDev,Plane,CorBpmResp) |
---|
250 | %Demander si le fichier respcor.m convient |
---|
251 | %sinon [effic]=respcor(Plane) |
---|
252 | %$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$% |
---|
253 | % PREPARATION DES LISTES DE DEVICES % |
---|
254 | %$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$% |
---|
255 | |
---|
256 | BpmDevList = getlist(BpmFam); |
---|
257 | CorDevList = getlist(CorFam); |
---|
258 | |
---|
259 | for i=1:length(CorDevList) |
---|
260 | CorDevListCell(i)=mat2cell(CorDevList(i,:),1,2); |
---|
261 | end |
---|
262 | |
---|
263 | |
---|
264 | |
---|
265 | %disp('poc'); |
---|
266 | %getam('BPMx',[1 2]) |
---|
267 | |
---|
268 | %$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$% |
---|
269 | % MEMORISATION DES VALEURS INITIALES % |
---|
270 | %$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$% |
---|
271 | |
---|
272 | % for i=1:length(BpmDevList) % voir peut ï¿œtre seulement Bpm Dispo??? |
---|
273 | % BpmDevList(i,:); |
---|
274 | % InitValBpm(i)=getam(BpmFam,BpmDevList(i,:)); % MAT c'est long !! A modifier: pas trÚs performant |
---|
275 | % BpmSigma0(i)=1; |
---|
276 | % end |
---|
277 | |
---|
278 | InitValBpm(1:length(BpmDevList))=getam(BpmFam,BpmDevList); |
---|
279 | BpmSigma0(1:120)=ones(1,120); |
---|
280 | |
---|
281 | if condBPMsigma==0 |
---|
282 | BpmSigma=BpmSigma0; |
---|
283 | else |
---|
284 | BpmSigma=BpmSigma1; % attention à définir |
---|
285 | end |
---|
286 | |
---|
287 | %BpmSigma; |
---|
288 | %InitValBpm; |
---|
289 | |
---|
290 | % for i=1:length(CorDevList) % voir peut ï¿œtre seulement COR Dispo??? |
---|
291 | % InitValCor(i)=getsp(CorFam,CorDevList(i,:)); % MAT c'est long ! A modifier: pas trÚs performant |
---|
292 | % end |
---|
293 | InitValCor(1:length(CorDevList))=getsp(CorFam,CorDevList); % MAT c'est long ! A modifier: pas trÚs performant |
---|
294 | |
---|
295 | |
---|
296 | % MODIFIER LA GESTION DES ERREURS: STATUS |
---|
297 | BPMStatus =family2status(BpmFam); |
---|
298 | CorStatus =family2status(CorFam); |
---|
299 | %BpmFam; |
---|
300 | %CorFam; |
---|
301 | |
---|
302 | if sum(BPMStatus)~=120 |
---|
303 | disp('Il y a des BPM qui ont un mauvais status') |
---|
304 | end |
---|
305 | |
---|
306 | if sum(CorStatus)~=56 |
---|
307 | disp('Il y a des COR qui ont un mauvais status') |
---|
308 | end |
---|
309 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
310 | |
---|
311 | |
---|
312 | |
---|
313 | |
---|
314 | taille=size(QuadFamilyList); |
---|
315 | |
---|
316 | disp('$$$$$$$$$$$$$$$$$$$$$$$$') |
---|
317 | for j=1:taille(1) |
---|
318 | |
---|
319 | %% Choix de la variation minimale du courant dans le correcteur requise pour obtenir un bon BBA |
---|
320 | QuadStatus=family2status(char(QuadFamilyList(j)),QuadDevList(j,:)); |
---|
321 | |
---|
322 | if QuadStatus~=1 |
---|
323 | disp('BBA impossible mauvais statut du QP') |
---|
324 | end |
---|
325 | InitValQp =getsp(char(QuadFamilyList(j)),QuadDevList(j,:)); |
---|
326 | %RECHERCHE DES ELEMENTS POUR LE BBA: BPM, CORRECTEURS |
---|
327 | if strcmpi(Method,'MEC') |
---|
328 | %CorNumb=1; |
---|
329 | [CorFamRes,CorDevListRes,CorElemRes,EffRes,BpmFamRes,BpmEyeRes]=mec3(QuadFamilyList(j),QuadDevList(j,:),Plane,CorBpmResp,CorNumber); |
---|
330 | CorStatus1 =family2status(CorFam,CorDevListRes); |
---|
331 | BPMStatus1 =family2status(BpmFam,BpmEyeRes); |
---|
332 | |
---|
333 | if CorStatus1~=1 |
---|
334 | disp('BBA impossible mauvais statut du COR') |
---|
335 | end |
---|
336 | |
---|
337 | if BPMStatus1~=1 |
---|
338 | disp('BBA impossible mauvais statut du BPM') |
---|
339 | end |
---|
340 | elseif strcmpi(Method,'BMP4CM') |
---|
341 | [CorFamRes,CorDevListRes,BpmFamRes,BpmDevListRes,BpmEyeRes,ConsRes]=bmp4Cor(QuadFamilyList(j),QuadDevList(j,:),Plane); |
---|
342 | tailleBp=size(BpmDevListRes); |
---|
343 | end |
---|
344 | |
---|
345 | tailleCor=size(CorDevListRes); |
---|
346 | %CorDevListRes; |
---|
347 | for b=1:tailleCor(1) |
---|
348 | InitValcorUsed(b)=getsp(CorFam,CorDevListRes(b,:)); % a modifier: peu performant |
---|
349 | end |
---|
350 | %% |
---|
351 | %DETERMINATION DES TABLES DE VALEURS POUR LES COR,QP... |
---|
352 | % deltaCor à ressortir de CorCurRange.m (pas encore programmé) |
---|
353 | % nombre de deltaCor aussi à connaitre |
---|
354 | clear CorCons CorSp BpmRes BpmVal QpCons QpSp |
---|
355 | %nbDeltaCor=7; |
---|
356 | %DeltaCor=0.75;%amps for MEC Method |
---|
357 | % DeltaPosMax=1; %mm for BMP4CM Method |
---|
358 | %retard=20; |
---|
359 | var=0; |
---|
360 | %stepsp(CorFam ,-nbDeltaCor*DeltaCor/2,CorDevListRes); |
---|
361 | %stepsp(QuadFam,-nbDeltaQp*DeltaQp/4 ,QuadDev); |
---|
362 | if strcmpi(Method,'MEC') |
---|
363 | iniCor=InitValCor(CorElemRes); |
---|
364 | elseif strcmpi(Method,'BMP4CM') |
---|
365 | for i=1:4 |
---|
366 | inicorrect(i)=getam(CorFam,CorDevListRes(i,:)); |
---|
367 | end |
---|
368 | end |
---|
369 | |
---|
370 | for nbc=1:nbDeltaCor |
---|
371 | if strcmpi(Method,'MEC') |
---|
372 | CorTab(nbc)=InitValCor(CorElemRes)-((nbDeltaCor-1)*DeltaCor)/2+(nbc-1)*DeltaCor+offsetCor; %amps tableau ayant nbDeltaCor colonnes |
---|
373 | % peut etre amélioré (sans boucle) |
---|
374 | elseif strcmpi(Method,'BMP4CM') |
---|
375 | %CorTab(nbc)=-DeltaPosMax/2+(nbc-1)*DeltaPosMax/(nbDeltaCor-1); |
---|
376 | |
---|
377 | DeltaPos=DeltaPosMax/(nbDeltaCor-1); |
---|
378 | CorTab(1)=-DeltaPosMax/2+offsetCor; |
---|
379 | for valC=1:nbDeltaCor-1 |
---|
380 | CorTab(valC+1)=CorTab(1)+valC*DeltaPos; |
---|
381 | end |
---|
382 | %CorTab(3)=0.1; |
---|
383 | % CorTab(4)=0.1; |
---|
384 | %CorTab(5)=0.1; |
---|
385 | end%mm BMP4CM |
---|
386 | end |
---|
387 | CorTab; |
---|
388 | % Calcul du deltaK pour obtenir une variation de DeltaPos |
---|
389 | %DeltaQp=2; |
---|
390 | nbDeltaQp=2; |
---|
391 | % DeltaPos=1.5e-3; % A revoir |
---|
392 | % DeltaQp=CalcDK(char(QuadFamilyList(j)),QuadDevList(j,:),BpmFamRes,BpmEyeRes,DeltaPos,Plane)*InitValQp |
---|
393 | |
---|
394 | %% Choix du Delta I en fonction du DeltaNu MAX et du Delta I/I Max |
---|
395 | % DeltaNu=0.01;BpmEyeRes |
---|
396 | % DeltaI_I=0.01; |
---|
397 | % |
---|
398 | % TuneTot=[-3.7e-3 9.37e-3 -2.33e-3 -8e-4 3.13e-3 -1.18e-3 6.75e-3 -1.88e-3 -7.95e-4 3.74e-3; ... |
---|
399 | % 2.91e-3 -2.74e-3 2.91e-3 3.74e-3 -1.68e-3 3.14e-3 -2.07e-3 2.14e-3 3.98e-3 -1.18e-3]; |
---|
400 | % |
---|
401 | % current=[125.72 161.32 75.63 147.71 202.58 118.45 213 180.55 179.35 210.48]*0.04; |
---|
402 | % %[DK]=CalcDK(char(QuadFamilyList(j)),QuadDevList(j,:),BpmFamRes,BpmEyeRes,Plane) |
---|
403 | % |
---|
404 | % for o=1:2 |
---|
405 | % for p=1:10 |
---|
406 | % TuneTot1(o,p)=DeltaNu/TuneTot(o,p); |
---|
407 | % Dcourant(o,p)=min([abs(TuneTot1(o,p)) abs(current(p))]); |
---|
408 | % end |
---|
409 | % end |
---|
410 | % |
---|
411 | % |
---|
412 | % numFamQ=char(QuadFamilyList(j)); |
---|
413 | % numQ=str2num(numFamQ(2:length(numFamQ))); |
---|
414 | % DeltaQp=Dcourant(Plane,numQ); |
---|
415 | % %DeltaQp=0.75; |
---|
416 | % if condQp==1 |
---|
417 | % [DK]=CalcDK(char(QuadFamilyList(j)),QuadDevList(j,:),BpmFamRes,BpmEyeRes,Plane); |
---|
418 | % DeltaQp=getsp(char(QuadFamilyList(j)),QuadDevList(j,:))*abs(DK); |
---|
419 | % else |
---|
420 | DeltaQp=DeltaQp0; |
---|
421 | % end |
---|
422 | %% |
---|
423 | |
---|
424 | % Création des tableau de consignes pour les quadrupoles |
---|
425 | % idée: toujours commencer "en haut" du cycle d'hystérésis |
---|
426 | if InitValQp>0 |
---|
427 | QpTab(1)=InitValQp-DeltaQp; |
---|
428 | QpTab(2)=InitValQp+DeltaQp; |
---|
429 | elseif InitValQp<0 |
---|
430 | QpTab(1)=InitValQp+DeltaQp; |
---|
431 | QpTab(2)=InitValQp-DeltaQp; |
---|
432 | else |
---|
433 | error('il y a un problÚme pour le calcul du DeltaK') |
---|
434 | end |
---|
435 | |
---|
436 | %% |
---|
437 | % |
---|
438 | |
---|
439 | %sauvegarde des valeurs |
---|
440 | NameQuadDev=char(['dev' num2str(QuadDevList(j,1)) '_' num2str(QuadDevList(j,2))]); |
---|
441 | |
---|
442 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).CorDev=CorDevListRes; |
---|
443 | if strcmpi(Method,'MEC') |
---|
444 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Eff =EffRes; |
---|
445 | end |
---|
446 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).BpmDev=BpmEyeRes; |
---|
447 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Date =datestr(now); |
---|
448 | |
---|
449 | |
---|
450 | %sauvegarde des valeurs initiales |
---|
451 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Init.Qp =InitValQp; |
---|
452 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Init.Cor=InitValCor; |
---|
453 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Init.Bpm=InitValBpm; |
---|
454 | |
---|
455 | save(NameFile,'BBA'); |
---|
456 | load(NameFile); |
---|
457 | %init=init+length(listfamQ); |
---|
458 | |
---|
459 | toc; |
---|
460 | |
---|
461 | %% $$ Début du BBA $$ %% |
---|
462 | if strcmpi(Method,'MEC') |
---|
463 | |
---|
464 | %% DEBUT: boucle sur Qp (excursion +/- Dk) |
---|
465 | vartext=0; |
---|
466 | for v=1:nbDeltaQp |
---|
467 | disp('Qp'); |
---|
468 | tuneNumber(v,:)=gettune; |
---|
469 | current(v)=getdcct; |
---|
470 | setsp(QuadFam,QpTab(v),QuadDev,-2); |
---|
471 | %pause(3); % modif 9 septembre de 6 Ã 3 s |
---|
472 | pause(6); % modif 23 juin 08 de 3 Ã 6 s |
---|
473 | %% Debut: boucle sur COR (excursions nbDeltaCor) |
---|
474 | clear CorCons CorSp |
---|
475 | for u=1:nbDeltaCor |
---|
476 | vartext=vartext+1; |
---|
477 | %setsp(char(QuadFamilyList(j)),InitValQp,QuadDevList(j,:)); |
---|
478 | texto=char([num2str(vartext) '/' num2str(2*nbDeltaCor)]); |
---|
479 | disp(texto); |
---|
480 | drawnow; |
---|
481 | |
---|
482 | setsp(CorFam,CorTab(u),CorDevListRes,-2); |
---|
483 | pause(retard); % valeur définie par le programme en mode auto : valeur par défaut=2.5 sec |
---|
484 | %en mode manuel:valeur par défaut 4 sec |
---|
485 | if u==1 |
---|
486 | %pause(4); % défini par l'expérience - modification 9 septembre passage de 9s à 4s |
---|
487 | pause(9); % défini par l'expérience - modification 23 juin 08 passage de 9s à 4s |
---|
488 | end |
---|
489 | %CorCons(u)=getsp(CorFam,CorDevListRes); |
---|
490 | CorCons(u)=CorTab(u); % tentative 29 janvier |
---|
491 | CorConsEye(u)=CorCons(u); |
---|
492 | %CorSp(u) =getsp(CorFam,CorDevListRes); |
---|
493 | |
---|
494 | if v==1 |
---|
495 | BpmRes(u)=getam(BpmFam,BpmEyeRes); %Mermorisation du BPM Eye |
---|
496 | end |
---|
497 | |
---|
498 | QpCons(u,v)=getsp(char(QuadFamilyList(j)),QuadDevList(j,:)); |
---|
499 | %QpSp(u,v) =getsp(char(QuadFamilyList(j)),QuadDevList(j,:)); |
---|
500 | %tempo |
---|
501 | |
---|
502 | |
---|
503 | %Modifier, boucle inutile !!! |
---|
504 | %%tic |
---|
505 | BpmVal(1:120,v,u)=getam(BpmFam,BpmDevList); |
---|
506 | %for w=1:length(BpmDevList) |
---|
507 | %BpmVal(w,v,u)=getam(BpmFam,BpmDevList(w,:)); %BpmVal(Bpm,Quad,Cor) |
---|
508 | %end |
---|
509 | %%toc |
---|
510 | %%%%%%%%%%%%%%%%%%%%% test si l'orbite dépasse l'interlock en V MAT 9 septembre 07 |
---|
511 | A = BpmVal(1:120,v,u) ; |
---|
512 | I = find(abs(A)>0.6); % critÚre du test = 0.7 mm en absolu |
---|
513 | if ~isempty(I)&Plane==2 |
---|
514 | disp(strcat('Quadrupole :',QuadFam{1},' * ',num2str(QuadDev))); % nom du quad et valeur du deltaQ |
---|
515 | fprintf('delta I sur ce quad : %6.2f A\n',DeltaQp); |
---|
516 | disp( strcat('Correcteur :',CorFam,' * ',num2str(CorDevListRes))); % nom du correcteur et valeur du deltacor |
---|
517 | fprintf('delta I sur ce corr : %6.2f A\n',DeltaCor); |
---|
518 | fprintf('valeurs max de l''orbite %6.2f %6.2f mm\n',max(A(I)),min(A(I))); |
---|
519 | disp('****************************'); |
---|
520 | end |
---|
521 | %%%%%%%%%%%%%%%%%%%%% |
---|
522 | |
---|
523 | |
---|
524 | |
---|
525 | end |
---|
526 | %% FIN:boucle sur COR (excursions nbDeltaCor) |
---|
527 | %CorCons; |
---|
528 | %BpmRes; |
---|
529 | %QpCons; |
---|
530 | %QpSp; |
---|
531 | %length(BpmVal); |
---|
532 | end |
---|
533 | |
---|
534 | |
---|
535 | %% |
---|
536 | |
---|
537 | elseif strcmpi(Method,'BMP4CM') |
---|
538 | iniCor=getam(BpmFam,BpmEyeRes); |
---|
539 | %test du bump proposé |
---|
540 | ocsi=setorbitbump(BpmFam,BpmDevListRes,ConsRes*CorTab(1),CorFam,[-2 -1 1 2],'Incremental','NoSetSP'); |
---|
541 | indCorRes=ocsi.CM.DeviceList; %doit etre le meme que CorDevListRes |
---|
542 | test=sum(indCorRes-CorDevListRes); |
---|
543 | if abs(test)~=0 |
---|
544 | error('bump impossible') |
---|
545 | else |
---|
546 | for u2=1:nbDeltaCor |
---|
547 | ocsi=setorbitbump(BpmFam,BpmDevListRes,ConsRes*CorTab(u2),CorFam,[-2 -1 1 2],'Incremental','NoSetSP'); |
---|
548 | CorVal(:,u2)=ocsi.CM.Delta |
---|
549 | end |
---|
550 | end |
---|
551 | |
---|
552 | vartext=0; |
---|
553 | for v=1:nbDeltaQp |
---|
554 | setsp(QuadFam,QpTab(v),QuadDev,-2); |
---|
555 | tuneNumber(v,:)=gettune |
---|
556 | current(v)=getdcct |
---|
557 | pause(6); |
---|
558 | disp('Qp'); |
---|
559 | %setsp(QuadFam,QpTab(v),QuadDev); |
---|
560 | %% Debut: boucle sur COR (excursions nbDeltaCor) |
---|
561 | for u=1:nbDeltaCor |
---|
562 | vartext=vartext+1; |
---|
563 | texto=char([num2str(vartext) '/' num2str(2*nbDeltaCor)]); |
---|
564 | disp(texto) |
---|
565 | %setsp(char(QuadFamilyList(j)),InitValQp,QuadDevList(j,:)); |
---|
566 | for u1=1:4 |
---|
567 | setsp(char(CorFam),CorVal(u1,u),CorDevListRes(u1,:),-2); |
---|
568 | end |
---|
569 | if u==1 |
---|
570 | pause(6) |
---|
571 | end |
---|
572 | pause(retard); |
---|
573 | |
---|
574 | getsp('HCOR'); |
---|
575 | |
---|
576 | drawnow; |
---|
577 | clear CorCons CorSp |
---|
578 | %ocsi=setorbitbump(BpmFam,BpmDevListRes,ConsRes*CorTab(u),CorFam,[-2 -1 1 2],'Incremental','NoSetSP'); |
---|
579 | %indCorRes=ocsi.CM.DeviceList; %doit etre le meme que CorDevListRes |
---|
580 | %test=sum(indCorRes-CorDevLisRes) |
---|
581 | if abs(test)~=0 |
---|
582 | error('bump impossible') |
---|
583 | end |
---|
584 | tailleCorRes=size(indCorRes); |
---|
585 | for c=1:tailleCorRes(1) |
---|
586 | CorCons(u,c)=getsp(CorFam,indCorRes(c,:)); |
---|
587 | %CorSp(u,c) =getsp(CorFam,indCorRes(c,:)); |
---|
588 | end |
---|
589 | if v==1 |
---|
590 | BpmRes(u)=getam(BpmFam,BpmEyeRes); %Mermorisation du BPM Eye |
---|
591 | end |
---|
592 | QpCons(u,v)=getsp(char(QuadFamilyList(j)),QuadDevList(j,:)); |
---|
593 | %QpSp(u,v) =getsp(char(QuadFamilyList(j)),QuadDevList(j,:)); |
---|
594 | %tempo |
---|
595 | |
---|
596 | CorConsEye(u)=BpmRes(u); |
---|
597 | tailleBList=size(BpmDevListRes); |
---|
598 | ind1=dev2elem(BpmFam,BpmDevListRes(1,:)); |
---|
599 | ind2=dev2elem(BpmFam,tailleBList(1)); |
---|
600 | for w=1:ind1-1 |
---|
601 | BpmVal(w,v,u)=getam(BpmFam,BpmDevList(w,:)); %BpmVal(Bpm,Quad,Cor) |
---|
602 | end |
---|
603 | for w=ind2+1:120 |
---|
604 | BpmVal(w-tailleBList(1),v,u)=getam(BpmFam,BpmDevList(w,:)); |
---|
605 | end |
---|
606 | %tempo |
---|
607 | end |
---|
608 | end |
---|
609 | end |
---|
610 | |
---|
611 | |
---|
612 | |
---|
613 | %% Sauvegarde |
---|
614 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.BpmData =BpmVal; |
---|
615 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.BpmRes =BpmRes; |
---|
616 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.QuadCons=QpCons; |
---|
617 | %BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.QuadSetp=QpSp; |
---|
618 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.CorCons =CorCons; |
---|
619 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.CorCons =CorCons; |
---|
620 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.Current =current; |
---|
621 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.Tune =tuneNumber; |
---|
622 | %BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.CorSetp =CorSp; |
---|
623 | save(NameFile,'BBA'); |
---|
624 | %% |
---|
625 | %% Retour aux Valeurs initiales Qp et COR |
---|
626 | setsp(char(QuadFamilyList(j)),InitValQp,QuadDevList(j,:),-2); % Init Qp |
---|
627 | for b=1:tailleCor(1) |
---|
628 | setsp(CorFam,InitValcorUsed(b),CorDevListRes(b,:),-2); % Init Cor |
---|
629 | end |
---|
630 | pause(retard); |
---|
631 | tuneNumber(3,:)=gettune; |
---|
632 | %% Fin:boucle sur Qp (excursion +/- Dk) |
---|
633 | if Plane==1 |
---|
634 | tuneWatch=tuneNumber(1,1); |
---|
635 | tuneEnd =tuneNumber(3,1); |
---|
636 | elseif Plane==2 |
---|
637 | tuneWatch=tuneNumber(1,2); |
---|
638 | tuneEnd =tuneNumber(3,2); |
---|
639 | end |
---|
640 | |
---|
641 | %% boucle de correction du nombre d'onde |
---|
642 | %Dnu0=tuneWatch-tuneEnd; |
---|
643 | tuneEnd=gettune |
---|
644 | |
---|
645 | |
---|
646 | % par défaut non utilisé: condTune=0 |
---|
647 | % revoir pause |
---|
648 | % revoir Delta I quad |
---|
649 | if condTune==1 |
---|
650 | stepQp=signDQ*0.0005; |
---|
651 | signDQ=sign(QpCons(1,1)); |
---|
652 | while abs(tuneWatch-tuneEnd)>1e-5 |
---|
653 | stepsp(char(QuadFamilyList(j)),stepQp,QuadDevList(j,:)); |
---|
654 | pause(0.5); |
---|
655 | tuneEnd1=gettune; |
---|
656 | |
---|
657 | if Plane==1 |
---|
658 | tuneEnd=tuneEnd1(1); |
---|
659 | elseif Plane==2 |
---|
660 | tuneEnd=tuneEnd1(2); |
---|
661 | end |
---|
662 | |
---|
663 | end |
---|
664 | end |
---|
665 | disp('ole') |
---|
666 | |
---|
667 | %% |
---|
668 | %% Recherche du minimum de la fonction de mérite |
---|
669 | %load('resBBA.mat') |
---|
670 | %data=BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).MEC.Results.BpmData; |
---|
671 | data=BpmVal; |
---|
672 | datSize=size(data); |
---|
673 | %BpmSigma; |
---|
674 | |
---|
675 | for r=1:datSize(3) %itération sur les valeurs de correcteurs |
---|
676 | point=0; |
---|
677 | for t=1:datSize(1) %itération sur les valeurs des BPMs |
---|
678 | |
---|
679 | point=point+1*((data(t,1,r)-data(t,2,r))/BpmSigma(t))^2; |
---|
680 | end |
---|
681 | |
---|
682 | merit(r,1)=CorConsEye(r); |
---|
683 | merit(r,2)=1/datSize(1)*point; |
---|
684 | end |
---|
685 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.FitData =merit; |
---|
686 | save(NameFile,'BBA'); |
---|
687 | |
---|
688 | %coef=polyfit(merit(:,1), merit(:,2),2); % calcul des coef de la parabole de la fonction de mï¿œrite |
---|
689 | droite=polyfit(CorConsEye,BpmRes,1); % calcul des coef de la droite du Bpm observé |
---|
690 | |
---|
691 | |
---|
692 | %% Verif |
---|
693 | |
---|
694 | %init:Moindres carrés |
---|
695 | %%% A ALLEGER !!!! |
---|
696 | |
---|
697 | VectB=merit(:,2); |
---|
698 | for q=1:length(merit) |
---|
699 | MatFunc(q,1)=merit(q,1)^2; MatFunc(q,2)=merit(q,1); MatFunc(q,3)=1; |
---|
700 | M1(1,q)=MatFunc(q,1);% M1(1,2)=1; M1(1,3)=1; |
---|
701 | M2(1,q)=MatFunc(q,2);%; M2(2,q)=1; M2(3,q)=0; |
---|
702 | M3(1,q)=MatFunc(q,3);%; M3(2,q)=0; M3(3,q)=1; |
---|
703 | end |
---|
704 | M1; |
---|
705 | ResVect(1,1)=M1*VectB;ResVect(2,1)=M2*VectB;ResVect(3,1)=M3*VectB; |
---|
706 | ResMat(1,1)=M1*MatFunc*[1;0;0];ResMat(1,2)=M1*MatFunc*[0;1;0];ResMat(1,3)=M1*MatFunc*[0;0;1]; |
---|
707 | ResMat(2,1)=M2*MatFunc*[1;0;0];ResMat(2,2)=M2*MatFunc*[0;1;0];ResMat(2,3)=M2*MatFunc*[0;0;1]; |
---|
708 | ResMat(3,1)=M3*MatFunc*[1;0;0];ResMat(3,2)=M3*MatFunc*[0;1;0];ResMat(3,3)=M3*MatFunc*[0;0;1]; |
---|
709 | ResMat; |
---|
710 | coef=inv(ResMat)*ResVect; |
---|
711 | |
---|
712 | %% |
---|
713 | |
---|
714 | center=-coef(2)/(2*coef(1)); % abscisse de l'offset BBA (amps) |
---|
715 | offs=droite(1)*center+droite(2); % ordonnï¿œe de l'offset BBA (mm) |
---|
716 | %% Fin de Recherche du minimum |
---|
717 | |
---|
718 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.OffsetBpm =offs; |
---|
719 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.CorCenter =center; |
---|
720 | |
---|
721 | save(NameFile,'BBA'); |
---|
722 | |
---|
723 | |
---|
724 | |
---|
725 | for e=1:41 |
---|
726 | %ze(e)=min(BpmRes)+(e-1)*(max(BpmRes)-min(BpmRes))/40; |
---|
727 | ze(e)=CorTab(1)+(e-1)*(CorTab(nbDeltaCor)-CorTab(1))/40; |
---|
728 | %ze(e)=-2.5+(e-1)*5/40; |
---|
729 | ord1(e)=parabole(ze(e),coef); |
---|
730 | %ordco(e)=parabole(ze(e),valco); |
---|
731 | ord2(e)=ligne(ze(e),droite); |
---|
732 | end |
---|
733 | toc; |
---|
734 | |
---|
735 | for varTest=1:nbDeltaCor |
---|
736 | ecart(varTest)=merit(varTest,2)-parabole(CorTab(varTest),coef); |
---|
737 | end |
---|
738 | rmsFit=qualFit(merit(:,1),merit(:,2),coef); % valeur affichée |
---|
739 | |
---|
740 | BBA.(char(QuadFamilyList(j))).(NameQuadDev).(char(NamePlane)).(Method).Results.EcartFit =ecart; |
---|
741 | |
---|
742 | end |
---|
743 | |
---|
744 | |
---|
745 | |
---|
746 | |
---|
747 | % |
---|
748 | %Plane=2; % For running the prog on both Plane |
---|
749 | %% %$$$$$$$$$$$$$$$ |
---|
750 | %end |
---|
751 | %NameFile; |
---|
752 | %BpmRes; |
---|
753 | %CorCons; |
---|
754 | %droite=polyfit(CorCons,BpmRes,1) |
---|
755 | %iniCor; |
---|
756 | %offs; |
---|
757 | |
---|
758 | %ecart; |
---|
759 | %CorDevListRes; |
---|
760 | if strcmpi(Method,'MEC') |
---|
761 | %CorElemRes; |
---|
762 | %EffRes; |
---|
763 | end |
---|
764 | disp('OffsCor'); |
---|
765 | OffsCor=center-iniCor; |
---|
766 | |
---|
767 | |
---|
768 | % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
769 | % % Verif moindres carrés |
---|
770 | % xi=merit(:,1) |
---|
771 | % yi=merit(:,2) |
---|
772 | % xi0=0; |
---|
773 | % xi2=0; |
---|
774 | % xi3=0; |
---|
775 | % xi4=0; |
---|
776 | % mesur1=0; |
---|
777 | % mesur2=0; |
---|
778 | % mesur3=0; |
---|
779 | % for i=1:length(CorCons) |
---|
780 | % xi4=xi4+xi(i)^4; |
---|
781 | % xi3=xi3+xi(i)^3; |
---|
782 | % xi2=xi2+xi(i)^2; |
---|
783 | % xi0=xi0+1; |
---|
784 | % mesur1=mesur1+yi(i)*xi(i)^2; |
---|
785 | % mesur2=mesur2+yi(i)*xi(i); |
---|
786 | % mesur3=mesur3+yi(i); |
---|
787 | % end |
---|
788 | % |
---|
789 | % mato(1,1)= sum(xi4); mato(1,2)=sum(xi3); mato(1,3)= sum(xi2); |
---|
790 | % mato(2,1)= sum(xi3); mato(2,2)=sum(xi2); mato(2,3)= sum(xi); |
---|
791 | % mato(3,1)= sum(xi2); mato(3,2)=sum(xi); mato(3,3)= sum(xi0); |
---|
792 | % |
---|
793 | % mesur=[mesur1;mesur2;mesur3]/6 |
---|
794 | % |
---|
795 | % mato=mato/6 |
---|
796 | % valco=inv(mato)*mesur |
---|
797 | % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
798 | % |
---|
799 | % |
---|
800 | % |
---|
801 | % |
---|
802 | % for e=1:41 |
---|
803 | % ze(e)=CorTab(1)+(e-1)*(CorTab(nbDeltaCor)-CorTab(1))/40; |
---|
804 | % %ze(e)=-2.5+(e-1)*5/40; |
---|
805 | % ord1(e)=parabole(ze(e),coef); |
---|
806 | % ordco(e)=parabole(ze(e),valco); |
---|
807 | % ord2(e)=ligne(ze(e),droite); |
---|
808 | % end |
---|
809 | % |
---|
810 | % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
811 | % |
---|
812 | % y1=[min(BpmRes)-0.5 max(BpmRes)+0.5]; |
---|
813 | % y2=[min(merit(:,2))-0.01 max(merit(:,2))+0.01]; |
---|
814 | % |
---|
815 | % figure(1) |
---|
816 | % hold all |
---|
817 | % [Bx1,Hb1,Hb2]=plotyy(ze,ord2,ze,ord1,'plot') |
---|
818 | % %,'LineStyle','-.') |
---|
819 | % %textval=char([offs ' mm']); |
---|
820 | % %text(center,offs,textval,'HorizontalAlignment','left') |
---|
821 | % set(Hb1,'Color','black','LineStyle','-.');%,'LineStyle','--') |
---|
822 | % set(Hb2,'Color','black','LineStyle','-.'); |
---|
823 | % |
---|
824 | % |
---|
825 | % |
---|
826 | % |
---|
827 | % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
828 | % %figure(2) |
---|
829 | % |
---|
830 | % [Ax1,Ha1,Ha2]=plotyy(CorCons,BpmRes,merit(:,1),merit(:,2) ,'plot');%,'Marker','x','Color','red') |
---|
831 | % |
---|
832 | % set(Ha1,'Marker','x','Color','blue');%,'LineStyle','--') |
---|
833 | % set(Ha2,'Marker','x','Color','red'); |
---|
834 | % |
---|
835 | % x1=get(Ax1(1),'XLim') |
---|
836 | % set(Ax1,'Visible','off') |
---|
837 | % set(Ax1(1),'YLim',y1) |
---|
838 | % set(Ax1(2),'YLim',y2) |
---|
839 | % |
---|
840 | % pl1=plot([center center],[y1(1) offs]) |
---|
841 | % |
---|
842 | % pl2=plot([x1(1) center],[offs offs]) |
---|
843 | % pl3=plot(center,offs,'Marker','o','Color','black')%,text(center,offs,'\leftarrow ',... |
---|
844 | % %'HorizontalAlignment','left')) |
---|
845 | % |
---|
846 | % set([pl1 pl2],'Color','black','LineStyle','-.'); |
---|
847 | % |
---|
848 | % |
---|
849 | % set(Bx1,'Visible','on') |
---|
850 | % set(Bx1(1),'YLim',y1,'YColor','blue') |
---|
851 | % set(Bx1(2),'YLim',y2,'YColor','red') |
---|
852 | % xlabel('COR Value (amps)') |
---|
853 | % ylabel(Bx1(1),'(mm)') |
---|
854 | % ylabel(Bx1(2),'(merit)') |
---|
855 | % |
---|
856 | |
---|
857 | |
---|
858 | |
---|
859 | save('resu.mat','merit','ze','ord1','ord2','droite','coef','CorCons','BpmRes','coef','center','offs') |
---|
860 | |
---|
861 | %% Tout est enregistré dans une structure |
---|
862 | % BBA.(QuadFam).(['dev' QuadDev]).(Plane).(Method).CorDev |
---|
863 | % .eff |
---|
864 | % .BpmDev |
---|
865 | % .Date |
---|
866 | % .Results |
---|
867 | %... |
---|
868 | |
---|
869 | %example: |
---|
870 | % >> BBA.Q1.dev1_1.HPlane.MEC.CordeV |
---|
871 | % ans = |
---|
872 | % >> 5 1 |
---|