source: MML/trunk/machine/SOLEIL/StorageRing/BBA/mec.m @ 4

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

Initial import--MML version from SOLEIL@2013

File size: 2.6 KB
Line 
1function [CorFamRes,CorDevRes,CorElemRes,MaxEffRes,BpmFamRes,BpmDevRes]= mec(QuadFamily,QuadDev,Plane,CorBpmResp,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
21if ~iscellstr(QuadFamily)
22 error('la famille entree n est pas au format cell')
23end
24
25tailleQDev=size(QuadDev(1,:));
26tailleCorBpm=size(CorBpmResp);
27
28if isempty(QuadDev)
29    error('Veuillez entrer le device du quadripole à étudier au format QuadDev=[cell elt]')
30elseif tailleQDev(2)~=2
31    error('Trop d''elements pour 1 device de QP:  QuadDev=[cell elt]')
32end
33
34if Plane<0 || Plane>2
35    error('Veuillez entrer le plan étudié: Horizontal: Plane=1 ; Vertical:Plane=2 ; Both:Plane=0')
36end
37
38if tailleCorBpm(1)~=56 & tailleCorBpm(2)~=120
39  error('Veuillez vérifier la matrice réponse correcteurs/BPM')
40end
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,BpmDev,BpmPos]=proche2(BpmFam,QuadFamily,QuadDev,0);
66
67indBpm=dev2elem(BpmFam,BpmDev);
68% Faire un tri sur EffCor de maniÚre ᅵ pouvoir choisir par exemple le 2Úme correcteurs le plus
69% efficace si le premier ne convient pas... 
70EffCor=CorBpmResp(:,indBpm);        % vecteur colonne de longueur nb HCOR ou nb VCOR
71[posEff,indEff]=sort(abs(EffCor),'descend');
72
73%MaxEff=max(abs(EffCor));            % extraction de l'efficacité max
74MaxEff=posEff(CorNumb);
75%indCor=find(abs(EffCor)==MaxEff);   % recherche de l'indice de l'efficacité max dans "EffCor"
76indCor=indEff(CorNumb);
77CorDevList=getlist(CorFam);
78
79%Rï¿œsultats
80CorFamRes=CorFam;
81CorDevRes=CorDevList(indCor,:);
82CorElemRes=indCor; % Recherche du correcteur dᅵlivrant l'efficacitᅵ prᅵcᅵdente
83MaxEffRes=MaxEff;
84BpmFamRes=BpmFam;
85BpmDevRes=BpmDev;
86
87
88
89
90%**************************************************************************
91
92
Note: See TracBrowser for help on using the repository browser.