source: MML/trunk/machine/SOLEIL/StorageRing/BBA/mec3.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: 3.5 KB
Line 
1function [CorFamRes,CorDevRes,CorElemRes,MaxEffRes,BpmFamRes,BpmDevRes]= mec3(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. CorElemRes : numero element du correcteur (equivalent à getlist)
19% 4. MaxEffRes: Efficiency of the MEC in mm/A
20% 5. BpmFamRes : Famille du bpm choisi
21% 6. BpmDevRes : nomenclature [cell element] du bpm choisi
22
23if ~iscellstr(QuadFamily)
24 error('la famille entree n est pas au format cell')
25end
26
27tailleQDev=size(QuadDev(1,:));
28tailleCorBpm=size(CorBpmResp);
29
30if isempty(QuadDev)
31    error('Veuillez entrer le device du quadripole à étudier au format QuadDev=[cell elt]')
32elseif tailleQDev(2)~=2
33    error('Trop d''elements pour 1 device de QP:  QuadDev=[cell elt]')
34end
35
36if Plane<0 || Plane>2
37    error('Veuillez entrer le plan étudié: Horizontal: Plane=1 ; Vertical:Plane=2 ; Both:Plane=0')
38end
39
40if tailleCorBpm(1)~=56 & tailleCorBpm(2)~=120
41  error('Veuillez vérifier la matrice réponse correcteurs/BPM')
42end
43
44
45
46
47
48%load('respcor.mat') 
49
50if    Plane==1
51        BpmFam='BPMx';
52        CorFam='HCOR';
53        %CorBpmResp=efficacy.HPLane; %effic(Cor,Bpm)
54elseif Plane==2
55        BpmFam='BPMz';
56        CorFam='VCOR';
57        %CorBpmResp=efficacy.VPlane;
58else
59    error('input must "1" for horizontal plane or "2" for vertical plane');
60end
61   
62% debugage des BPM non pris en compte! pour Q10.1, Q10.2 et Q5.1 dans cell 4, 8, 12, 16
63
64if strcmpi(char(QuadFamily),'Q5') && (QuadDev(1,1)==4 || QuadDev(1,1)==8 || QuadDev(1,1)==12 || QuadDev(1,1)==16)
65    %Q5.1 dans cell 4, 8, 12, 16
66    [BpmFam2,BpmDev,BpmPos]=proche2(BpmFam,QuadFamily,QuadDev,1);
67elseif strcmpi(char(QuadFamily),'Q10') && (QuadDev(1,1)==2 || QuadDev(1,1)==6 || QuadDev(1,1)==10 || QuadDev(1,1)==14 ||...
68        QuadDev(1,1)==3 || QuadDev(1,1)==7 || QuadDev(1,1)==11 || QuadDev(1,1)==15)
69    if QuadDev(1,2)==1
70        %Q10.1
71        [BpmFam2,BpmDev,BpmPos]=proche2(BpmFam,QuadFamily,QuadDev,1);
72    elseif  QuadDev(1,2)==2
73        %Q10.2
74        [BpmFam2,BpmDev,BpmPos]=proche2(BpmFam,QuadFamily,QuadDev,-1);
75    end
76else % calcul normal!
77   
78
79    %BPM le plus proche du Qp (QuadFamily,[QuadDev]);
80    [BpmFam2,BpmDev,BpmPos]=proche2(BpmFam,QuadFamily,QuadDev,0);
81end
82indBpm=dev2elem(BpmFam,BpmDev);
83% Faire un tri sur EffCor de maniÚre ᅵ pouvoir choisir par exemple le 2Úme correcteurs le plus
84% efficace si le premier ne convient pas... 
85EffCor=CorBpmResp(:,indBpm);        % vecteur colonne de longueur nb HCOR ou nb VCOR
86[posEff,indEff]=sort(abs(EffCor),'descend');
87
88%MaxEff=max(abs(EffCor));            % extraction de l'efficacité max
89MaxEff=posEff(CorNumb);
90%indCor=find(abs(EffCor)==MaxEff);   % recherche de l'indice de l'efficacité max dans "EffCor"
91indCor=indEff(CorNumb);
92CorDevList=getlist(CorFam);
93
94%Rï¿œsultats
95CorFamRes=CorFam;
96CorDevRes=CorDevList(indCor,:);
97CorElemRes=indCor; % Recherche du correcteur dᅵlivrant l'efficacitᅵ prᅵcᅵdente
98MaxEffRes=MaxEff;
99BpmFamRes=BpmFam;
100BpmDevRes=BpmDev;
101
102
103
104
105%**************************************************************************
106
107
Note: See TracBrowser for help on using the repository browser.