source: MML/trunk/machine/SOLEIL/StorageRing/BBA/mec2.m @ 17

Last change on this file since 17 was 17, checked in by zhangj, 10 years ago

To have a stable version on the server.

  • Property svn:executable set to *
File size: 3.3 KB
Line 
1function [CorFamRes,CorDevRes,CorElemRes,MaxEffRes,BpmFamRes,BpmDevRes]= mec(QuadFamily,QuadDev,Plane,CorNumb)
2% MEC
3% function [CorFam,CorDev,MaxEff]= mec(QuadFamily,QuadDev,Plane,CorBpmResp)
4%
5% INPUTS                                                             -> VALUES
6%
7% 1. QuadFamily: Family of the quadrupole studied                    -> 'Q2'
8% 2. QuadDev:    [cell elt] of the quadrupole studied                -> [1 1]
9% 3. Plane:      Plane=1 horizontal only
10%                     =2 vertical only         
11% 4. CorBpmResp: Response matrix of correctors obtained from "respcor(plane)"
12%
13%
14% OUPUTS
15%
16% 1. CorFamRes: Family of the Most Effective Corrector found
17% 2. CorDevRes: [cell elt] of the MEC found
18% 3. MaxEffRes: Efficacity of the MEC in mm/A
19%
20%
21% if ~iscellstr(QuadFamily)
22%  error('la famille entree n est pas au format cell')
23% end
24%
25% tailleQDev=size(QuadDev(1,:));
26% tailleCorBpm=size(CorBpmResp);
27%
28% if isempty(QuadDev)
29%     error('Veuillez entrer le device du quadripole à étudier au format QuadDev=[cell elt]')
30% elseif tailleQDev(2)~=2
31%     error('Trop d''elements pour 1 device de QP:  QuadDev=[cell elt]')
32% end
33%
34% if Plane<0 || Plane>2
35%     error('Veuillez entrer le plan étudié: Horizontal: Plane=1 ; Vertical:Plane=2 ; Both:Plane=0')
36% end
37%
38% if tailleCorBpm(1)~=56 & tailleCorBpm(2)~=120
39%   error('Veuillez vérifier la matrice réponse correcteurs/BPM')
40% end
41%
42%
43
44
45
46load('respcor.mat')
47
48if    Plane==1
49        BpmFam='BPMx';
50        CorFam='HCOR';
51        %CorBpmResp=efficacy.HPLane; %effic(Cor,Bpm)
52elseif Plane==2
53        BpmFam='BPMz';
54        CorFam='VCOR';
55        %CorBpmResp=efficacy.VPlane;
56else
57    error('input must "1" for horizontal plane or "2" for vertical plane');
58end
59   
60
61
62%Most Effective Corrector
63
64%BPM le plus proche du Qp (QuadFamily,[QuadDev]);
65[BpmFam2,BpmDev2,BpmPos2]=proche2(BpmFam,QuadFamily,QuadDev,-1)
66[BpmFam3,BpmDev3,BpmPos3]=proche2(BpmFam,QuadFamily,QuadDev,1)
67
68[QFam2,QDev2,QPos2]=proche2(QuadFamily,BpmFam2,BpmDev2,-1);
69[QFam3,QDev3,QPos3]=proche2(QuadFamily,BpmFam3,BpmDev3,1);
70QPos=getspos(QuadFamily,QuadDev)
71if strcmpi(char(QFam2),char(QFam3))
72    [QFam41,QDev41,QPos41]=proche2('Q',BpmFam2,BpmDev2,-1)
73    [QFam42,QDev42,QPos42]=proche2('Q',BpmFam2,BpmDev2,1)
74    [QFam51,QDev51,QPos51]=proche2('Q',BpmFam3,BpmDev3,-1)
75    [QFam52,QDev52,QPos52]=proche2('Q',BpmFam3,BpmDev3,1)
76    col=cell2num([QPos41 QPos42 QPos51 QPos52])-QPos;
77   [minQ,indQ]=max(abs(col))
78   devtotBpm=[BpmDev2 BpmDev2 BpmDev3 BpmDev3];
79   devtotBpm(indQ)
80end
81   
82   
83   
84
85indBpm=dev2elem(BpmFam,BpmDev);
86% Faire un tri sur EffCor de maniÚre ᅵ pouvoir choisir par exemple le 2Úme correcteurs le plus
87% efficace si le premier ne convient pas... 
88EffCor=CorBpmResp(:,indBpm);        % vecteur colonne de longueur nb HCOR ou nb VCOR
89[posEff,indEff]=sort(abs(EffCor),'descend');
90
91%MaxEff=max(abs(EffCor));            % extraction de l'efficacité max
92MaxEff=posEff(CorNumb);
93%indCor=find(abs(EffCor)==MaxEff);   % recherche de l'indice de l'efficacité max dans "EffCor"
94indCor=indEff(CorNumb);
95CorDevList=getlist(CorFam);
96
97%Rï¿œsultats
98CorFamRes=CorFam;
99CorDevRes=CorDevList(indCor,:);
100CorElemRes=indCor; % Recherche du correcteur dᅵlivrant l'efficacitᅵ prᅵcᅵdente
101MaxEffRes=MaxEff;
102BpmFamRes=BpmFam;
103BpmDevRes=BpmDev;
104
105
106
107
108%**************************************************************************
109
110
Note: See TracBrowser for help on using the repository browser.