source: MML/trunk/machine/SOLEIL/StorageRing/quad/getrespquad_tune.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: 6.9 KB
Line 
1function Meffquad = getrespquad_tune(varargin)
2% getrespquad - Calculates from the model the response matrix of quadrupole relatively to the
3% beta function in every other quadrupole
4%
5
6%  INPUTS
7%  1. Quadrupole family name {Default : All}
8%  Optional
9%  'Archive', 'Display'
10%
11%  OUPUTS
12%  Meffquad
13%
14%  ALGORITHM
15%  Meffquad( i , j ) = delta beta dans quadrupole n° i / delta courant dans
16%  quadrupole j
17
18%
19%  Written by Mat husalem
20
21%%%%%%%%%%%%%%%%%%%%%%%
22switch2sim
23%%%%%%%%%%%%%%%%%%%%%%%
24
25DisplayFlag = 1;
26ArchiveFlag = 0;
27% % % FileName = '';
28
29
30for i = length(varargin):-1:1
31    if isstruct(varargin{i})
32        % Ignore structures
33    elseif iscell(varargin{i})
34        % Ignore cells
35    elseif strcmpi(varargin{i},'Display')
36        DisplayFlag = 1;
37        varargin(i) = [];
38    elseif strcmpi(varargin{i},'NoDisplay')
39        DisplayFlag = O;
40        varargin(i) = [];
41    elseif strcmpi(varargin{i},'NoArchive')
42        ArchiveFlag = O;
43        varargin(i) = [];
44    elseif strcmpi(varargin{i},'Archive')
45        ArchiveFlag = 1;
46        varargin(i) = [];
47    end
48end
49
50% Input parsing
51if isempty(varargin)
52    QuadFam = findmemberof('QUAD');
53elseif ischar(varargin{1}) 
54    QuadFam = {varargin{:}};
55else
56    QuadFam = varargin{:}
57end
58
59
60Indexquad = family2atindex({'Q1','Q2','Q3','Q4','Q5','Q6','Q7','Q8','Q9','Q10'});% Index of quadrupoles
61Meffquad = zeros(160,160);
62DeviceNumber = 0;
63
64%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65% mesure de beta comme sur la machine theorique
66%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67
68% beta_tune = mesure_beta(QuadFam);
69% betatheorX = beta_tune(1,:);
70% betatheorZ = beta_tune(2,:);
71% DirStart = pwd;
72% DirectoryName = '/home/matlabML/measdata/Ringdata/QUAD/';
73% [DirectoryName, DirectoryErrorFlag] = gotodirectory(DirectoryName);
74% try
75%     Nomfichier = 'Sauvegarde_beta_theorique_0_2_0_3';
76%     save(Nomfichier,'betatheorX','betatheorZ');
77% catch
78%     cd(DirStart);
79%     return
80% end
81% cd(DirStart);
82
83%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84% mesure de la matrice d'effcicaité par rapport aux nombre d'onde comme sur la machine
85%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86
87for k1 = 1:length(QuadFam),
88    numero_famille_en_cours = k1 % affichage ecran
89    if ~isfamily(QuadFam{k1})
90        error('%s is not a valid Family \n', QuadFam{k1});
91        return;
92    end   
93    DeviceList = family2dev(QuadFam{k1}); 
94    for k2 = 1:length(DeviceList),
95       
96       
97        %betaX0= [];betaZ0 = [];betaX1= [];betaZ1 = [];betaX2= [];betaZ2 = [];
98        DeviceNumber = DeviceNumber + 1;
99        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% State before current change
100        Ic = getam(QuadFam{k1}, DeviceList(k2,:)) ;% get the actual current
101        %K0 = hw2physics(QuadFam{k1}, 'Setpoint', Ic, DeviceList(k2,:));
102
103        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + deltaI
104        DeltaI = getfamilydata(QuadFam{k1},'Setpoint','DeltaKBeta')*2; % Amp
105        %fprintf('Current increment of %d A\n', DeltaI);
106        stepsp(QuadFam{k1}, DeltaI, DeviceList(k2,:),'Model'); % Step value in Amps
107 
108        % mesure de tune comme sur la machine delta I
109        tune1 = gettune('Model')
110       
111        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -2 *deltaI
112        %fprintf('Current increment of %d A\n', -2*DeltaI);
113        stepsp(QuadFam{k1}, -2*DeltaI, DeviceList(k2,:),'Model'); %
114
115
116        % mesure de tune comme sur la machine delta I
117        tune2 = gettune('Model')
118       
119        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% go back to initial values
120        %fprintf('Current increment of %d A\n', DeltaI);
121        stepsp(QuadFam{k1}, DeltaI, DeviceList(k2,:),'Model'); % go back to initial values
122       
123        gettune('Model') % vérification que la machine est bien "revenue"
124       
125        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
126%         MeffquadH(:,DeviceNumber) = (betaX2 - betaX1)'/(-2*DeltaI) ;% coefficient deltabeta / deltaI in each quad
127%         MeffquadV(:,DeviceNumber) = (betaZ2 - betaZ1)'/(-2*DeltaI) ;
128%         Meffquad = [MeffquadH ; MeffquadV];
129        %betaX1
130        %betaX2
131        %Meffquad(:,DeviceNumber)
132        Meffquad_tune(:,DeviceNumber) = (tune2-tune1)./(-2*DeltaI)
133       
134    end
135    disp('he oui')
136   
137end
138
139if ArchiveFlag
140% enregistrement   
141    directory = /home/matlabML/mml/machine/Soleil/StorageRing/quad/;
142    directory_actuelle = pwd;
143    cd(directory)
144    %Name = 'Meffquad_Qnoncoupe_4_3_H_V';
145    %Name = 'Meffquad_Qnoncoupe_2_3_H_V';
146%     Name = 'Meffquad_beta_tune_2_3_H_V';
147    Name = 'Meffquad_beta_tune-tune_2_3_H_V';
148    save(Name,'Meffquad_tune','-mat');
149    cd(directory_actuelle);
150end
151
152if DisplayFlag
153    Meffquad
154end
155disp('c''est fini')
156
157%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
158
159function beta_tune = mesure_beta(QuadFam)
160
161Indexquad = family2atindex({'Q1','Q2','Q3','Q4','Q5','Q6','Q7','Q8','Q9','Q10'});% Index of quadrupoles
162DeviceNumber = 0;
163beta_tune = [] ; % Initialisation des vecteurs betas X (premiÚre ligne)
164                 % et Z (deuxiÚme ligne) dans tous les quad (toutes les colonnes)
165                 
166for k1 = 1:length(QuadFam),
167   
168    if ~isfamily(QuadFam{k1})
169        error('%s is not a valid Family \n', QuadFam{k1});
170        return;
171    end   
172    DeviceList = family2dev(QuadFam{k1});
173   
174    % initialize data to zero
175    tune1 = zeros(length(DeviceList),2);
176    tune2 = zeros(length(DeviceList),2);
177    dtune = zeros(length(DeviceList),2);
178    beta =  zeros(length(DeviceList),2);
179    k3 = 0;
180   
181    for k2 = 1:length(DeviceList),
182       
183        k3 = k3 +1;
184        betaX0= [];betaZ0 = [];betaX1= [];betaZ1 = [];betaX2= [];betaZ2 = [];
185        DeviceNumber = DeviceNumber + 1;
186        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% State before current change
187        Ic = getam(QuadFam{k1}, DeviceList(k2,:)) ;% get the actual current
188        K = hw2physics(QuadFam{k1}, 'Setpoint', Ic, DeviceList(k2,:)) ;% Calcul du gradient nominal
189       
190        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + deltaI
191        DeltaI = getfamilydata(QuadFam{k1},'Setpoint','DeltaKBeta')*4; % Amp
192        stepsp(QuadFam{k1}, DeltaI, DeviceList(k2,:),'Model'); % Step value in Amps
193        tune1(k3,:) = gettune('Model'); % get new tunes
194
195        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -2 *deltaI
196        stepsp(QuadFam{k1}, -2*DeltaI, DeviceList(k2,:),'Model'); %
197        tune2(k3,:) = gettune('Model') ;% get new tunes
198       
199        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% go back to initial values
200        stepsp(QuadFam{k1}, DeltaI, DeviceList(k2,:),'Model'); % go back to initial values
201       
202        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
203        dtune(k3,:) = tune1(k3,:) - tune2(k3,:);
204        Leff = getleff(QuadFam{k1}, DeviceList(k2,:)); % Get effective length
205        DeltaKL =  2*DeltaI/Ic*K*Leff;
206        beta(k3,:) = 4*pi*dtune(k3,:)./DeltaKL.*[1 -1]    ;
207       
208        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
209
210    end
211    beta0 = beta';
212    beta_tune = [beta_tune beta0]; % beta en ligne mesurés par la méthode des tunes
213   
214end
Note: See TracBrowser for help on using the repository browser.