1 | function 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 | %%%%%%%%%%%%%%%%%%%%%%% |
---|
22 | switch2sim |
---|
23 | %%%%%%%%%%%%%%%%%%%%%%% |
---|
24 | |
---|
25 | DisplayFlag = 1; |
---|
26 | ArchiveFlag = 0; |
---|
27 | % % % FileName = ''; |
---|
28 | |
---|
29 | |
---|
30 | for 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 |
---|
48 | end |
---|
49 | |
---|
50 | % Input parsing |
---|
51 | if isempty(varargin) |
---|
52 | QuadFam = findmemberof('QUAD'); |
---|
53 | elseif ischar(varargin{1}) |
---|
54 | QuadFam = {varargin{:}}; |
---|
55 | else |
---|
56 | QuadFam = varargin{:} |
---|
57 | end |
---|
58 | |
---|
59 | |
---|
60 | Indexquad = family2atindex({'Q1','Q2','Q3','Q4','Q5','Q6','Q7','Q8','Q9','Q10'});% Index of quadrupoles |
---|
61 | Meffquad = zeros(160,160); |
---|
62 | DeviceNumber = 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 | |
---|
87 | for 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 | |
---|
137 | end |
---|
138 | |
---|
139 | if 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); |
---|
150 | end |
---|
151 | |
---|
152 | if DisplayFlag |
---|
153 | Meffquad |
---|
154 | end |
---|
155 | disp('c''est fini') |
---|
156 | |
---|
157 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
158 | |
---|
159 | function beta_tune = mesure_beta(QuadFam) |
---|
160 | |
---|
161 | Indexquad = family2atindex({'Q1','Q2','Q3','Q4','Q5','Q6','Q7','Q8','Q9','Q10'});% Index of quadrupoles |
---|
162 | DeviceNumber = 0; |
---|
163 | beta_tune = [] ; % Initialisation des vecteurs betas X (premiÚre ligne) |
---|
164 | % et Z (deuxiÚme ligne) dans tous les quad (toutes les colonnes) |
---|
165 | |
---|
166 | for 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 | |
---|
214 | end |
---|