1 | function boosterinit(OperationalMode) |
---|
2 | %BOOSTERINIT - Initializes parameters for SOLEIL Booster control in MATLAB |
---|
3 | % |
---|
4 | % Written by Laurent S. Nadolski, Synchrotron SOLEIL |
---|
5 | % |
---|
6 | %========================== |
---|
7 | % Accelerator Family Fields |
---|
8 | %========================== |
---|
9 | % FamilyName BPMx, HCOR, etc |
---|
10 | % CommonNames Shortcut name for each element |
---|
11 | % DeviceList [Sector, Number] |
---|
12 | % ElementList number in list |
---|
13 | % Position m, if thick, it is not the magnet center |
---|
14 | % |
---|
15 | % MONITOR FIELD |
---|
16 | % Mode online/manual/special/simulator |
---|
17 | % TangoNames Device Tango Names |
---|
18 | % Units Physics or HW |
---|
19 | % HW2PhysicsFcn function handle used to convert from hardware to physics units ==> inline will not compile, see below |
---|
20 | % HW2PhysicsParams parameters used for conversion function |
---|
21 | % Physics2HWFcn function handle used to convert from physics to hardware units |
---|
22 | % Physics2HWParams parameters used for conversion function |
---|
23 | % HWUnits units for Hardware 'A'; |
---|
24 | % PhysicsUnits units for physics 'Rad'; |
---|
25 | % Handles monitor handle |
---|
26 | % |
---|
27 | % SETPOINT FIELDS |
---|
28 | % Mode online/manual/special/simulator |
---|
29 | % TangoNames Devices tango names |
---|
30 | % Units hardware or physics |
---|
31 | % HW2PhysicsFcn function handle used to convert from hardware to physics units |
---|
32 | % HW2PhysicsParams parameters used for conversion function |
---|
33 | % Physics2HWFcn function handle used to convert from physics to hardware units |
---|
34 | % Physics2HWParams parameters used for conversion function |
---|
35 | % HWUnits units for Hardware 'A'; |
---|
36 | % PhysicsUnits units for physics 'Rad'; |
---|
37 | % Range minsetpoint, maxsetpoint; |
---|
38 | % Tolerance setpoint-monitor |
---|
39 | % Handles setpoint handle |
---|
40 | % |
---|
41 | %============================================= |
---|
42 | % Accelerator Toolbox Simulation Fields |
---|
43 | %============================================= |
---|
44 | % ATType Quad, Sext, etc |
---|
45 | % ATIndex index in THERING |
---|
46 | % ATParameterGroup parameter group |
---|
47 | % |
---|
48 | %============ |
---|
49 | % Family List |
---|
50 | %============ |
---|
51 | % BPMx |
---|
52 | % BPMz |
---|
53 | % HCOR |
---|
54 | % VCOR |
---|
55 | % BEND |
---|
56 | % QF and QD |
---|
57 | % SF and SD |
---|
58 | % RF |
---|
59 | % TUNE |
---|
60 | % DCCT |
---|
61 | % Machine Parameters |
---|
62 | |
---|
63 | %============================== |
---|
64 | %load AcceleratorData structure |
---|
65 | %============================== |
---|
66 | |
---|
67 | if nargin < 1 |
---|
68 | OperationalMode = 1; |
---|
69 | end |
---|
70 | |
---|
71 | global GLOBVAL THERING |
---|
72 | |
---|
73 | |
---|
74 | Mode = 'Online'; |
---|
75 | setad([]); %clear AcceleratorData memory |
---|
76 | AD.SubMachine = 'Booster'; % Machine Name |
---|
77 | AD.Energy = 2.75; % Energy in GeV |
---|
78 | |
---|
79 | |
---|
80 | setad(AD); %load AcceleratorData |
---|
81 | |
---|
82 | %%%%%%%%%%%%%%%%%%%% |
---|
83 | % ACCELERATOR OBJECT |
---|
84 | %%%%%%%%%%%%%%%%%%%% |
---|
85 | |
---|
86 | setao([]); %clear previous AcceleratorObjects |
---|
87 | |
---|
88 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
89 | %% BPMx data: status field designates if BPM in use |
---|
90 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
91 | AO{1}.FamilyName = 'BPMx'; |
---|
92 | AO{1}.FamilyType = 'BPM'; |
---|
93 | AO{1}.MemberOf = {'BPM'; 'HBPM'; 'Diagnostics'}; |
---|
94 | AO{1}.Monitor.Mode = Mode; |
---|
95 | AO{1}.Monitor.Units = 'Hardware'; |
---|
96 | AO{1}.Monitor.HWUnits = 'mm'; |
---|
97 | AO{1}.Monitor.PhysicsUnits = 'm'; |
---|
98 | |
---|
99 | % Get mapping from TANGO static database |
---|
100 | map = tango_get_db_property('booster','tracy_bpm_mapping'); |
---|
101 | |
---|
102 | cellindex = cell2mat(regexpi(map,'C[0-9]','once'))+1; |
---|
103 | numindex = cell2mat(regexpi(map,'\.[0-9]','once'))+1; |
---|
104 | elemindex = cell2mat(regexpi(map,'BPM[0-9]','once'))+3; |
---|
105 | sep = cell2mat(regexpi(map,'::','once'))-1; |
---|
106 | % dev = deblank(regexprep(char(map),'^BPM\d*::','')); |
---|
107 | dev = regexprep(map,'^BPM\d*::','')'; |
---|
108 | |
---|
109 | nb = size(map,2); |
---|
110 | ik = 1; |
---|
111 | prev0 = 0; |
---|
112 | for k = 1:nb |
---|
113 | prev = str2num(map{k}(cellindex(k):cellindex(k)+1)); |
---|
114 | if prev == prev0 |
---|
115 | ik = ik + 1; |
---|
116 | else |
---|
117 | ik = 1; |
---|
118 | end |
---|
119 | AO{1}.DeviceList(k,:) = [prev ik]; |
---|
120 | AO{1}.ElementList(k,:)= str2num(map{k}(elemindex(k):sep(k))); |
---|
121 | prev0 = prev; |
---|
122 | end |
---|
123 | |
---|
124 | AO{1}.DeviceName(:,:) = dev; |
---|
125 | AO{1}.Monitor.TangoNames(:,:) = strcat(dev, '/XPosDD'); |
---|
126 | AO{1}.CommonNames(:,:) = [repmat('BPMx',nb,1) num2str((1:nb)','%02d')]; |
---|
127 | |
---|
128 | AO{1}.Status = ones(nb,1); |
---|
129 | % AO{1}.Status([5:22]) = 0; |
---|
130 | AO{1}.Monitor.HW2PhysicsParams(:,:) = 1e-3*ones(nb,1); |
---|
131 | AO{1}.Monitor.Physics2HWParams(:,:) = 1e3*ones(nb,1); |
---|
132 | |
---|
133 | % 2 lignes ajoutes pour test debug bpm versus le reste du monde |
---|
134 | AO{1}.Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
135 | AO{1}.Monitor.DataType = 'Vector'; |
---|
136 | |
---|
137 | % Group |
---|
138 | AO{1}.GroupId = tango_group_create2('BPM'); |
---|
139 | tango_group_add(AO{1}.GroupId,AO{1}.DeviceName'); |
---|
140 | |
---|
141 | AO{1}.Status = AO{1}.Status(:); |
---|
142 | AO{1}.Monitor.Mode = Mode; %'Special'; |
---|
143 | AO{1}.Monitor.SpecialFunction = 'get_horbit_boo'; |
---|
144 | |
---|
145 | % BPM with 0 status |
---|
146 | %AO{1}.Status([3 5 8 12]) = 0; |
---|
147 | |
---|
148 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
149 | %% BPMz data: status field designates if BPM in use |
---|
150 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
151 | |
---|
152 | % Vertical plane |
---|
153 | AO{2} = AO{1}; |
---|
154 | AO{2}.FamilyName = 'BPMz'; |
---|
155 | AO{2}.MemberOf = {'BPM'; 'VBPM'; 'Diagnostics'}; |
---|
156 | AO{2}.Monitor.TangoNames(:,:) = strcat(dev,'/ZPosDD'); |
---|
157 | AO{2}.CommonNames(:,:) = [repmat('BPMz',nb,1) num2str((1:nb)','%02d')]; |
---|
158 | |
---|
159 | % 2 lignes ajoutes pour test debug bpm versus le reste du monde |
---|
160 | AO{2}.Monitor.DataType = 'Vector'; |
---|
161 | AO{2}.Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
162 | |
---|
163 | AO{2}.Status = AO{2}.Status(:); |
---|
164 | |
---|
165 | AO{2}.Monitor.Mode = Mode; %'Special'; |
---|
166 | AO{2}.Monitor.SpecialFunction = 'get_vorbit_boo'; |
---|
167 | |
---|
168 | % BPM with 0 status |
---|
169 | %AO{1}.Status([3 5 8 12]) = 0; |
---|
170 | |
---|
171 | % %=========================================================== |
---|
172 | % %Corrector data: status field designates if corrector in use |
---|
173 | % %=========================================================== |
---|
174 | % |
---|
175 | setao(cell2field(AO)); |
---|
176 | |
---|
177 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
178 | %% SLOW HORIZONTAL CORRECTORS |
---|
179 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
180 | ifam = 3; |
---|
181 | AO{ifam}.FamilyName = 'HCOR'; |
---|
182 | AO{ifam}.FamilyType = 'COR'; |
---|
183 | AO{ifam}.MemberOf = {'MachineConfig'; 'COR'; 'MCOR'; 'HCOR'; 'Magnet'}; |
---|
184 | |
---|
185 | AO{ifam}.Monitor.Mode = Mode; |
---|
186 | AO{ifam}.Monitor.DataType = 'Scalar'; |
---|
187 | AO{ifam}.Monitor.Units = 'Hardware'; |
---|
188 | AO{ifam}.Monitor.HWUnits = 'A'; |
---|
189 | AO{ifam}.Monitor.PhysicsUnits = 'rad'; |
---|
190 | AO{ifam}.Monitor.HW2PhysicsFcn = @amp2k; |
---|
191 | AO{ifam}.Monitor.Physics2HWFcn = @k2amp; |
---|
192 | |
---|
193 | % Get mapping from TANGO static database |
---|
194 | map = tango_get_db_property('booster','tracy_correctorH_mapping'); |
---|
195 | dev = regexprep(map,'^HCOR\d*::','')'; |
---|
196 | cellindex = cell2mat(regexpi(map,'C[0-9]','once'))+1; |
---|
197 | numindex = cell2mat(regexpi(map,'\.[0-9]','once'))+1; |
---|
198 | elemindex = cell2mat(regexpi(map,'HCOR[0-9]','once'))+4; |
---|
199 | sep = cell2mat(regexpi(map,'::','once'))-1; |
---|
200 | |
---|
201 | nb = size(map,2); |
---|
202 | for k = 1:nb |
---|
203 | AO{ifam}.DeviceList(k,:) = [str2num(map{k}(cellindex(k):cellindex(k)+1)) 1]; |
---|
204 | AO{ifam}.ElementList(k,:) = str2num(map{k}(elemindex(k):sep(k))); |
---|
205 | end |
---|
206 | |
---|
207 | AO{ifam}.DeviceName(:,:) = dev; |
---|
208 | AO{ifam}.CommonNames(:,:) = [repmat(AO{ifam}.FamilyName,nb,1) num2str((1:nb)','%03d')]; |
---|
209 | AO{ifam}.Status = ones(nb,1); |
---|
210 | AO{ifam}.Monitor.TangoNames(:,:) = strcat(dev,'/current'); |
---|
211 | AO{ifam}.Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
212 | |
---|
213 | %Load fields from datablock |
---|
214 | % AT use the "A-coefficients" for correctors plus an offset |
---|
215 | [C, Leff, MagnetType, coefficients] = magnetcoefficients(AO{ifam}.FamilyName); |
---|
216 | |
---|
217 | for ii=1:nb |
---|
218 | AO{ifam}.Monitor.HW2PhysicsParams{1}(ii,:) = coefficients; |
---|
219 | AO{ifam}.Monitor.Physics2HWParams{1}(ii,:) = coefficients; |
---|
220 | end |
---|
221 | |
---|
222 | AO{ifam}.Setpoint = AO{ifam}.Monitor; |
---|
223 | AO{ifam}.Desired = AO{ifam}.Monitor; |
---|
224 | |
---|
225 | AO{ifam}.Setpoint.Range(:,:) = repmat([-1.5 1.5],nb,1); % 1 A for ??? |
---|
226 | AO{ifam}.Setpoint.Tolerance(:,:) = 1000*ones(nb,1); |
---|
227 | AO{ifam}.Setpoint.DeltaRespMat(:,:) = ones(nb,1)*2e-5; % ??? |
---|
228 | |
---|
229 | AO{ifam}.Status = AO{ifam}.Status(:); |
---|
230 | %convert response matrix kicks to HWUnits (after AO is loaded to AppData) |
---|
231 | setao(cell2field(AO)); %required to make physics2hw function |
---|
232 | AO{ifam}.Setpoint.DeltaRespMat = physics2hw(AO{ifam}.FamilyName,'Setpoint', ... |
---|
233 | AO{ifam}.Setpoint.DeltaRespMat, AO{ifam}.DeviceList); |
---|
234 | |
---|
235 | |
---|
236 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
237 | %% SLOW VERTICAL CORRECTORS |
---|
238 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
239 | ifam = ifam +1; |
---|
240 | AO{ifam}.FamilyName = 'VCOR'; |
---|
241 | AO{ifam}.FamilyType = 'COR'; |
---|
242 | AO{ifam}.MemberOf = {'MachineConfig'; 'COR'; AO{ifam}.FamilyName; 'Magnet'}; |
---|
243 | |
---|
244 | AO{ifam}.Monitor.Mode = Mode; |
---|
245 | AO{ifam}.Monitor.DataType = 'Scalar'; |
---|
246 | AO{ifam}.Monitor.Units = 'Hardware'; |
---|
247 | AO{ifam}.Monitor.HWUnits = 'A'; |
---|
248 | AO{ifam}.Monitor.PhysicsUnits = 'rad'; |
---|
249 | AO{ifam}.Monitor.HW2PhysicsFcn = @amp2k; |
---|
250 | AO{ifam}.Monitor.Physics2HWFcn = @k2amp; |
---|
251 | |
---|
252 | % Get mapping from TANGO static database |
---|
253 | map = tango_get_db_property('booster','tracy_correctorV_mapping'); |
---|
254 | dev = regexprep(map,'^VCOR\d*::','')'; |
---|
255 | cellindex = cell2mat(regexpi(map,'C[0-9]','once'))+1; |
---|
256 | numindex = cell2mat(regexpi(map,'\.[0-9]','once'))+1; |
---|
257 | elemindex = cell2mat(regexpi(map,'VCOR[0-9]','once'))+4; |
---|
258 | sep = cell2mat(regexpi(map,'::','once'))-1; |
---|
259 | |
---|
260 | nb = size(map,2); |
---|
261 | for k = 1:nb |
---|
262 | AO{ifam}.DeviceList(k,:) = [str2num(map{k}(cellindex(k):cellindex(k)+1)) 1]; |
---|
263 | AO{ifam}.ElementList(k,:) = str2num(map{k}(elemindex(k):sep(k))); |
---|
264 | end |
---|
265 | |
---|
266 | AO{ifam}.DeviceName(:,:) = dev; |
---|
267 | AO{ifam}.Status = ones(nb,1); |
---|
268 | AO{ifam}.CommonNames(:,:) = [repmat(AO{ifam}.FamilyName,nb,1) num2str((1:nb)','%03d')]; |
---|
269 | AO{ifam}.Monitor.TangoNames(:,:) = strcat(dev,'/current'); |
---|
270 | |
---|
271 | AO{ifam}.Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
272 | |
---|
273 | %Load fields from datablock |
---|
274 | % AT use the "A-coefficients" for correctors plus an offset |
---|
275 | [C, Leff, MagnetType, coefficients] = magnetcoefficients(AO{ifam}.FamilyName); |
---|
276 | |
---|
277 | for ii = 1:nb |
---|
278 | AO{ifam}.Monitor.HW2PhysicsParams{1}(ii,:) = coefficients; |
---|
279 | AO{ifam}.Monitor.Physics2HWParams{1}(ii,:) = coefficients; |
---|
280 | end |
---|
281 | |
---|
282 | AO{ifam}.Setpoint = AO{ifam}.Monitor; |
---|
283 | AO{ifam}.Desired = AO{ifam}.Monitor; |
---|
284 | |
---|
285 | AO{ifam}.Setpoint.Range(:,:) = repmat([-1.5 1.5],nb,1); % 1 A for ??? |
---|
286 | AO{ifam}.Setpoint.Tolerance(:,:) = 1000*ones(nb,1); |
---|
287 | AO{ifam}.Setpoint.DeltaRespMat(:,:) = ones(nb,1)*4e-5; % ??? |
---|
288 | |
---|
289 | %convert response matrix kicks to HWUnits (after AO is loaded to AppData) |
---|
290 | setao(cell2field(AO)); %required to make physics2hw function |
---|
291 | AO{ifam}.Setpoint.DeltaRespMat = physics2hw(AO{ifam}.FamilyName,'Setpoint', ... |
---|
292 | AO{ifam}.Setpoint.DeltaRespMat, AO{ifam}.DeviceList); |
---|
293 | |
---|
294 | %============================= |
---|
295 | % MAIN MAGNETS |
---|
296 | %============================= |
---|
297 | |
---|
298 | %=========== |
---|
299 | %% Dipole data |
---|
300 | %=========== |
---|
301 | |
---|
302 | % *** BEND *** |
---|
303 | ifam = ifam+1; |
---|
304 | AO{ifam}.FamilyName = 'BEND'; |
---|
305 | AO{ifam}.FamilyType = 'BEND'; |
---|
306 | AO{ifam}.MemberOf = {'MachineConfig'; 'BEND'; 'Magnet';}; |
---|
307 | HW2PhysicsParams = magnetcoefficients('BEND'); |
---|
308 | Physics2HWParams = HW2PhysicsParams; |
---|
309 | |
---|
310 | AO{ifam}.Monitor.Mode = Mode; |
---|
311 | AO{ifam}.Monitor.DataType = 'Scalar'; |
---|
312 | AO{ifam}.Monitor.Units = 'Hardware'; |
---|
313 | AO{ifam}.Monitor.HW2PhysicsFcn = @bend2gev; |
---|
314 | AO{ifam}.Monitor.Physics2HWFcn = @gev2bend; |
---|
315 | AO{ifam}.Monitor.HWUnits = 'A'; |
---|
316 | AO{ifam}.Monitor.PhysicsUnits = 'energy'; |
---|
317 | |
---|
318 | |
---|
319 | % nb = size(map,2); |
---|
320 | nb = 1; |
---|
321 | |
---|
322 | AO{ifam}.DeviceList(:,:) = [1 1]; |
---|
323 | AO{ifam}.ElementList(:,:) = 1; |
---|
324 | AO{ifam}.DeviceName(:,:) = 'BOO/AE/Dipole'; |
---|
325 | AO{ifam}.Monitor.TangoNames(:,:) = strcat(AO{ifam}.DeviceName,'/d1current'); |
---|
326 | AO{ifam}.OffsetR.TangoNames(:,:) = strcat(AO{ifam}.DeviceName,'/d1waveformOffset'); |
---|
327 | |
---|
328 | AO{ifam}.Status = 1; |
---|
329 | AO{ifam}.Monitor.Handles = NaN; |
---|
330 | |
---|
331 | val = 1.0; |
---|
332 | AO{ifam}.Monitor.HW2PhysicsParams{1}(1,:) = HW2PhysicsParams; |
---|
333 | AO{ifam}.Monitor.HW2PhysicsParams{2}(1,:) = val; |
---|
334 | AO{ifam}.Monitor.Physics2HWParams{1}(1,:) = Physics2HWParams; |
---|
335 | AO{ifam}.Monitor.Physics2HWParams{2}(1,:) = val; |
---|
336 | |
---|
337 | % When using bend2gev / gev2bend don't use Params |
---|
338 | AO{ifam}.Monitor = rmfield(AO{ifam}.Monitor,'HW2PhysicsParams'); |
---|
339 | AO{ifam}.Monitor = rmfield(AO{ifam}.Monitor,'Physics2HWParams'); |
---|
340 | |
---|
341 | AO{ifam}.Setpoint = AO{ifam}.Monitor; |
---|
342 | AO{ifam}.Desired = AO{ifam}.Monitor; |
---|
343 | AO{ifam}.OffsetR = AO{ifam}.Monitor; |
---|
344 | AO{ifam}.OffsetW = AO{ifam}.Monitor; |
---|
345 | AO{ifam}.Setpoint.TangoNames = strcat(AO{ifam}.DeviceName,'/current'); |
---|
346 | AO{ifam}.OffsetW.TangoNames = strcat(AO{ifam}.DeviceName,'/waveformOffset'); |
---|
347 | |
---|
348 | AO{ifam}.Setpoint.Range(:,:) = [0 560]; % 525 A for 1.71T |
---|
349 | AO{ifam}.Setpoint.Tolerance(:,:) = 0.05; |
---|
350 | AO{ifam}.Setpoint.DeltaRespMat(:,:) = 0.05; |
---|
351 | |
---|
352 | %convert response matrix kicks to HWUnits (after AO is loaded to AppData) |
---|
353 | %setao(cell2field(AO)); %required to make physics2hw function |
---|
354 | %AO{ifam}.Setpoint.DeltaRespMat=physics2hw(AO{ifam}.FamilyName,'Setpoint',AO{ifam}.Setpoint.DeltaRespMat,AO{ifam}.DeviceList); |
---|
355 | |
---|
356 | |
---|
357 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
358 | %% QUADRUPOLE MAGNETS |
---|
359 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
360 | |
---|
361 | map = tango_get_db_property('booster','tracy_quadrupole_mapping'); |
---|
362 | iifam = cell2mat(regexpi(map,'/Q','once'))+2; |
---|
363 | ifound = regexpi(map,'/QF'); |
---|
364 | |
---|
365 | %%% build mapping for the two families |
---|
366 | %%% cleanup |
---|
367 | mapQF = []; mapQD = []; |
---|
368 | for k = 1:length(ifound) |
---|
369 | if isempty(ifound{k}) |
---|
370 | mapQD = [mapQD map(k)]; |
---|
371 | else |
---|
372 | mapQF = [mapQF map(k)]; |
---|
373 | end |
---|
374 | end |
---|
375 | |
---|
376 | |
---|
377 | mapQP = {mapQF,mapQD}; |
---|
378 | nameQP = {'QF', 'QD'}; |
---|
379 | |
---|
380 | % for both family |
---|
381 | for k = 1:2 |
---|
382 | sep = cell2mat(regexprep(mapQP{k},'::','once'))-1; |
---|
383 | dev = regexprep(mapQP{k},'^Q[F,D]\d*::','')'; |
---|
384 | ifam = ifam + 1; |
---|
385 | |
---|
386 | AO{ifam}.FamilyName = nameQP{k}; |
---|
387 | AO{ifam}.FamilyType = 'QUAD'; |
---|
388 | AO{ifam}.MemberOf = {'MachineConfig'; 'QUAD'; 'Magnet';}; |
---|
389 | HW2PhysicsParams = magnetcoefficients(AO{ifam}.FamilyName); |
---|
390 | Physics2HWParams = magnetcoefficients(AO{ifam}.FamilyName); |
---|
391 | |
---|
392 | AO{ifam}.Monitor.Mode = Mode; |
---|
393 | AO{ifam}.Monitor.DataType = 'Scalar'; |
---|
394 | AO{ifam}.Monitor.Units = 'Hardware'; |
---|
395 | AO{ifam}.Monitor.HWUnits = 'A'; |
---|
396 | AO{ifam}.Monitor.PhysicsUnits = 'meter^-2'; |
---|
397 | AO{ifam}.Monitor.HW2PhysicsFcn = @amp2k; |
---|
398 | AO{ifam}.Monitor.Physics2HWFcn = @k2amp; |
---|
399 | |
---|
400 | AO{ifam}.DeviceList(1,:) = [1 1]; |
---|
401 | AO{ifam}.ElementList(1,:)= 1; |
---|
402 | |
---|
403 | prev0 = prev; |
---|
404 | |
---|
405 | AO{ifam}.DeviceName(:,:) = dev; |
---|
406 | |
---|
407 | %% Build common names |
---|
408 | AO{ifam}.CommonNames(:,:) = AO{ifam}.FamilyName; |
---|
409 | |
---|
410 | AO{ifam}.Monitor.TangoNames(:,:) = strcat(dev,'/current'); |
---|
411 | |
---|
412 | AO{ifam}.Status = 1; |
---|
413 | AO{ifam}.Monitor.Handles(:,1) = NaN; |
---|
414 | |
---|
415 | AO{ifam}.Monitor.HW2PhysicsParams{1}(1,:) = HW2PhysicsParams; |
---|
416 | AO{ifam}.Monitor.HW2PhysicsParams{2}(1,:) = val; |
---|
417 | AO{ifam}.Monitor.Physics2HWParams{1}(1,:) = Physics2HWParams; |
---|
418 | AO{ifam}.Monitor.Physics2HWParams{2}(1,:) = val; |
---|
419 | |
---|
420 | AO{ifam}.Setpoint = AO{ifam}.Monitor; |
---|
421 | AO{ifam}.Desired = AO{ifam}.Monitor; |
---|
422 | |
---|
423 | AO{ifam}.Setpoint.Range(:,:) = [0 300]; %260 A for 19.7Tm-1 |
---|
424 | AO{ifam}.Setpoint.Tolerance(:,:) = 0.05; |
---|
425 | AO{ifam}.Setpoint.DeltaRespMat(:,:) = 0.02; |
---|
426 | |
---|
427 | %convert response matrix kicks to HWUnits (after AO is loaded to AppData) |
---|
428 | setao(cell2field(AO)); %required to make physics2hw function |
---|
429 | % AO{ifam}.Setpoint.DeltaRespMat = physics2hw(AO{ifam}.FamilyName, ... |
---|
430 | % 'Setpoint',AO{ifam}.Setpoint.DeltaRespMat,AO{ifam}.DeviceList); |
---|
431 | end |
---|
432 | |
---|
433 | |
---|
434 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
435 | %% SEXTUPOLE MAGNETS |
---|
436 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
437 | |
---|
438 | map=tango_get_db_property('booster','tracy_sextupole_mapping'); |
---|
439 | iifam = cell2mat(regexpi(map,'/S','once'))+2; |
---|
440 | ifound = regexpi(map,'/SF'); |
---|
441 | |
---|
442 | %%% build mapping for the ten families |
---|
443 | %%% cleanup |
---|
444 | mapSF = []; mapSD = []; |
---|
445 | for k = 1:length(ifound) |
---|
446 | if isempty(ifound{k}) |
---|
447 | mapSD = [mapSD map(k)]; |
---|
448 | else |
---|
449 | mapSF = [mapSF map(k)]; |
---|
450 | end |
---|
451 | end |
---|
452 | |
---|
453 | |
---|
454 | mapS = {mapSF,mapSD}; |
---|
455 | nameS = {'SF', 'SD'}; |
---|
456 | |
---|
457 | % For both families |
---|
458 | for k = 1:2 |
---|
459 | sep = cell2mat(regexpi(mapS{k},'::','once'))-1; |
---|
460 | dev = regexprep(mapS{k},'^S[F,D]\d*::','')'; |
---|
461 | |
---|
462 | ifam=ifam+1; |
---|
463 | |
---|
464 | AO{ifam}.FamilyName = nameS{k}; |
---|
465 | AO{ifam}.FamilyType = 'SEXT'; |
---|
466 | AO{ifam}.MemberOf = {'MachineConfig'; 'SEXT'; 'Magnet';}; |
---|
467 | HW2PhysicsParams = magnetcoefficients(AO{ifam}.FamilyName); |
---|
468 | Physics2HWParams = magnetcoefficients(AO{ifam}.FamilyName); |
---|
469 | |
---|
470 | AO{ifam}.Monitor.Mode = Mode; |
---|
471 | AO{ifam}.Monitor.DataType = 'Scalar'; |
---|
472 | AO{ifam}.Monitor.Units = 'Hardware'; |
---|
473 | AO{ifam}.Monitor.HW2PhysicsFcn = @amp2k; |
---|
474 | AO{ifam}.Monitor.Physics2HWFcn = @k2amp; |
---|
475 | AO{ifam}.Monitor.HWUnits = 'A'; |
---|
476 | AO{ifam}.Monitor.PhysicsUnits = 'meter^-3'; |
---|
477 | |
---|
478 | AO{ifam}.DeviceList(:,:) = [1 1]; |
---|
479 | AO{ifam}.ElementList(:,:)= 1; |
---|
480 | |
---|
481 | AO{ifam}.DeviceName(:,:) = dev; |
---|
482 | %% Build common names |
---|
483 | AO{ifam}.CommonNames(:,:) = AO{ifam}.FamilyName; |
---|
484 | AO{ifam}.Monitor.TangoNames(:,:) = strcat(dev,'/current'); |
---|
485 | |
---|
486 | |
---|
487 | AO{ifam}.Status = 1; |
---|
488 | AO{ifam}.Monitor.Handles(:,1) = NaN; |
---|
489 | |
---|
490 | val = 1.0; |
---|
491 | AO{ifam}.Monitor.HW2PhysicsParams{1}(1,:) = HW2PhysicsParams; |
---|
492 | AO{ifam}.Monitor.HW2PhysicsParams{2}(1,:) = val; |
---|
493 | AO{ifam}.Monitor.Physics2HWParams{1}(1,:) = Physics2HWParams; |
---|
494 | AO{ifam}.Monitor.Physics2HWParams{2}(1,:) = val; |
---|
495 | |
---|
496 | AO{ifam}.Setpoint = AO{ifam}.Monitor; |
---|
497 | AO{ifam}.Desired = AO{ifam}.Monitor; |
---|
498 | |
---|
499 | AO{ifam}.Setpoint.Range(:,:) = [0 400]; % 343 A for 320 Tm-2 |
---|
500 | AO{ifam}.Setpoint.Tolerance(:,:) = 0.05; |
---|
501 | AO{ifam}.Setpoint.DeltaRespMat(:,:) = 0.05; |
---|
502 | |
---|
503 | %convert response matrix kicks to HWUnits (after AO is loaded to AppData) |
---|
504 | setao(cell2field(AO)); %required to make physics2hw function |
---|
505 | % AO{ifam}.Setpoint.DeltaRespMat=physics2hw(AO{ifam}.FamilyName,'Setpoint',AO{ifam}.Setpoint.DeltaRespMat,AO{ifam}.DeviceList); |
---|
506 | end |
---|
507 | |
---|
508 | % Convert to new format |
---|
509 | AO = cell2field(AO); |
---|
510 | |
---|
511 | |
---|
512 | %======= |
---|
513 | %% TUNE |
---|
514 | %======= |
---|
515 | ifam = 'TUNE'; |
---|
516 | AO.(ifam).FamilyName = ifam; |
---|
517 | AO.(ifam).FamilyType = 'Diagnostic'; |
---|
518 | AO.(ifam).MemberOf = {'Diagnostics'}; |
---|
519 | AO.(ifam).CommonNames = ['nux';'nuz';'nus']; |
---|
520 | AO.(ifam).DeviceList = [1 1; 1 2; 1 3]; |
---|
521 | AO.(ifam).ElementList = [1 2 3]'; |
---|
522 | AO.(ifam).Status = [1 1 1]'; |
---|
523 | |
---|
524 | AO.(ifam).Monitor.Mode = Mode; %'Simulator'; % Mode; |
---|
525 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
526 | AO.(ifam).Monitor.DataTypeIndex = [1 2]; |
---|
527 | AO.(ifam).Monitor.TangoNames = ['BOO/DG/BPM-TUNEX/Nu'; ... |
---|
528 | 'BOO/DG/BPM-TUNEZ/Nu'; 'BOO/DG/BPM-TUNEX/Nu']; |
---|
529 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
530 | AO.(ifam).Monitor.Handles = NaN; |
---|
531 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
532 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
533 | AO.(ifam).Monitor.HWUnits = 'fractional tune'; |
---|
534 | AO.(ifam).Monitor.PhysicsUnits = 'fractional tune'; |
---|
535 | |
---|
536 | %%%%%%%%%%%%%%%%%% |
---|
537 | %% Pulsed Magnet |
---|
538 | %%%%%%%%%%%%%%%%%% |
---|
539 | |
---|
540 | %% Injection kicker |
---|
541 | ifam = 'K_Inj'; |
---|
542 | AO.(ifam).FamilyName = 'K_Inj'; |
---|
543 | AO.(ifam).MemberOf = {'Injection';'Archivable';'EP'}; |
---|
544 | AO.(ifam).Monitor.Mode = Mode; |
---|
545 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
546 | |
---|
547 | AO.(ifam).Status = 1; |
---|
548 | AO.(ifam).DeviceName = cellstr('BOO-C01/EP/AL_K.Inj'); |
---|
549 | AO.(ifam).CommonNames = 'K_Inj'; |
---|
550 | AO.(ifam).ElementList = 1; |
---|
551 | AO.(ifam).DeviceList(:,:) = [1 1]; |
---|
552 | AO.(ifam).Monitor.Handles(:,1) = NaN; |
---|
553 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/voltage'); |
---|
554 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
555 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
556 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
557 | AO.(ifam).Monitor.HWUnits = 'V'; |
---|
558 | AO.(ifam).Monitor.PhysicsUnits = 'mrad'; |
---|
559 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
560 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
561 | |
---|
562 | %% Injection Septum |
---|
563 | ifam = 'SEP_Inj'; |
---|
564 | AO.(ifam).FamilyName = 'SEP_Inj'; |
---|
565 | AO.(ifam).MemberOf = {'Injection';'Archivable';'EP'}; |
---|
566 | AO.(ifam).Monitor.Mode = Mode; |
---|
567 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
568 | |
---|
569 | AO.(ifam).Status = 1; |
---|
570 | AO.(ifam).DeviceName = cellstr('BOO-C22/EP/AL_SEP_P.Inj'); |
---|
571 | AO.(ifam).CommonNames = 'SEP_P'; |
---|
572 | AO.(ifam).ElementList = 1; |
---|
573 | AO.(ifam).DeviceList(:,:) = [1 1]; |
---|
574 | AO.(ifam).Monitor.Handles(:,1) = NaN; |
---|
575 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/voltage'); |
---|
576 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
577 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
578 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
579 | AO.(ifam).Monitor.HWUnits = 'V'; |
---|
580 | AO.(ifam).Monitor.PhysicsUnits = 'mrad'; |
---|
581 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
582 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
583 | |
---|
584 | %% Injection Septum |
---|
585 | ifam = 'SEPA_EXT'; |
---|
586 | AO.(ifam).FamilyName = ifam; |
---|
587 | AO.(ifam).MemberOf = {'Injection';'Archivable';'EP'}; |
---|
588 | AO.(ifam).Monitor.Mode = Mode; |
---|
589 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
590 | |
---|
591 | AO.(ifam).Status = 0; |
---|
592 | AO.(ifam).DeviceName = cellstr('BOO-C22/EP/AL_SEP_P.Inj'); |
---|
593 | AO.(ifam).CommonNames = 'SEP_P'; |
---|
594 | AO.(ifam).ElementList = 1; |
---|
595 | AO.(ifam).DeviceList(:,:) = [1 1]; |
---|
596 | AO.(ifam).Monitor.Handles(:,1) = NaN; |
---|
597 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/voltage'); |
---|
598 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
599 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
600 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
601 | AO.(ifam).Monitor.HWUnits = 'V'; |
---|
602 | AO.(ifam).Monitor.PhysicsUnits = 'mrad'; |
---|
603 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
604 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
605 | |
---|
606 | %% Injection Septum |
---|
607 | ifam = 'SEP_P_EXT'; |
---|
608 | AO.(ifam).FamilyName = ifam; |
---|
609 | AO.(ifam).MemberOf = {'Injection';'Archivable';'EP'}; |
---|
610 | AO.(ifam).Monitor.Mode = Mode; |
---|
611 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
612 | |
---|
613 | AO.(ifam).Status = 0; |
---|
614 | AO.(ifam).DeviceName = cellstr('BOO-C11/EP/AL_SEP_P.Ext'); |
---|
615 | AO.(ifam).CommonNames = 'SEP_P_EXT'; |
---|
616 | AO.(ifam).ElementList = 1; |
---|
617 | AO.(ifam).DeviceList(:,:) = [1 1]; |
---|
618 | AO.(ifam).Monitor.Handles(:,1) = NaN; |
---|
619 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/voltage'); |
---|
620 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
621 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
622 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
623 | AO.(ifam).Monitor.HWUnits = 'V'; |
---|
624 | AO.(ifam).Monitor.PhysicsUnits = 'mrad'; |
---|
625 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
626 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
627 | |
---|
628 | %%%%%%%%%%%%%%%%%% |
---|
629 | %% VACUUM SYSTEM |
---|
630 | %%%%%%%%%%%%%%%%%% |
---|
631 | |
---|
632 | %% IonPump |
---|
633 | ifam = 'PI'; |
---|
634 | AO.(ifam).FamilyName = 'PI'; |
---|
635 | AO.(ifam).FamilyType = 'PI'; |
---|
636 | AO.(ifam).MemberOf = {'PlotFamily'; 'IonPump'; 'Pressure'; 'Archivable'}; |
---|
637 | AO.(ifam).Monitor.Mode = Mode; |
---|
638 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
639 | |
---|
640 | map = tango_get_db_property('booster','pompe_ionique'); |
---|
641 | numindex = cell2mat(regexpi(map,'\.[0-9]','once'))+1; |
---|
642 | |
---|
643 | nb = size(map,2); |
---|
644 | for k = 1:nb, |
---|
645 | switch map{k}(1:6) |
---|
646 | case 'BOO-B1' |
---|
647 | k1 = 1; |
---|
648 | case 'BOO-Bi' |
---|
649 | k1 = 2; |
---|
650 | case 'BOO-B2' |
---|
651 | k1 = 3; |
---|
652 | case 'BOO-Be' |
---|
653 | k1 = 4; |
---|
654 | case 'BOO-B3' |
---|
655 | k1 = 5; |
---|
656 | case 'BOO-B4' |
---|
657 | k1 = 6; |
---|
658 | end |
---|
659 | AO.(ifam).DeviceList(k,:) = [k1 str2double(map{k}(numindex(k)))]; |
---|
660 | AO.(ifam).ElementList(k,:) = k; |
---|
661 | AO.(ifam).CommonNames(k,:) = ['PI' num2str(ik)]; |
---|
662 | end |
---|
663 | |
---|
664 | AO.(ifam).Status = ones(nb,1); |
---|
665 | %AO.(ifam).Status(26) = 0;% BOO-Bext/VI/PI300.3 |
---|
666 | AO.(ifam).DeviceName = map'; |
---|
667 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
668 | AO.(ifam).ElementList = (1:nb)'; |
---|
669 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
670 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
671 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
672 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
673 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
674 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
675 | AO.(ifam).Monitor.PhysicsUnits = 'mBar'; |
---|
676 | |
---|
677 | %% Penning Gauges |
---|
678 | ifam = 'JPEN'; |
---|
679 | AO.(ifam).FamilyName = 'JPEN'; |
---|
680 | AO.(ifam).MemberOf = {'PlotFamily'; 'PenningGauge'; 'Pressure'; 'Archivable'}; |
---|
681 | AO.(ifam).Monitor.Mode = Mode; |
---|
682 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
683 | |
---|
684 | map = tango_get_db_property('booster','jauge_penning'); |
---|
685 | numindex = cell2mat(regexpi(map,'\.[0-9]','once'))+1; |
---|
686 | |
---|
687 | nb = size(map,2); |
---|
688 | for k = 1:nb, |
---|
689 | switch map{k}(1:6) |
---|
690 | case 'BOO-B1' |
---|
691 | k1 = 1; |
---|
692 | case 'BOO-Bi' |
---|
693 | k1 = 2; |
---|
694 | case 'BOO-B2' |
---|
695 | k1 = 3; |
---|
696 | case 'BOO-Be' |
---|
697 | k1 = 4; |
---|
698 | case 'BOO-B3' |
---|
699 | k1 = 5; |
---|
700 | case 'BOO-B4' |
---|
701 | k1 = 6; |
---|
702 | end |
---|
703 | AO.(ifam).DeviceList(k,:) = [k1 str2double(map{k}(numindex(k)))]; |
---|
704 | AO.(ifam).ElementList(k,:) = k; |
---|
705 | AO.(ifam).CommonNames(k,:) = ['JPEN' num2str(ik)]; |
---|
706 | end |
---|
707 | |
---|
708 | AO.(ifam).Status = ones(nb,1); |
---|
709 | AO.(ifam).DeviceName = map'; |
---|
710 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
711 | AO.(ifam).ElementList = (1:nb)'; |
---|
712 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
713 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
714 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
715 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
716 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
717 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
718 | AO.(ifam).Monitor.PhysicsUnits = 'mBar'; |
---|
719 | |
---|
720 | %% Pirani Gauges |
---|
721 | ifam = 'JPIR'; |
---|
722 | AO.(ifam).FamilyName = 'JPIR'; |
---|
723 | AO.(ifam).MemberOf = {'PlotFamily'; 'PiraniGauge'; 'Pressure'; 'Archivable'}; |
---|
724 | AO.(ifam).Monitor.Mode = Mode; |
---|
725 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
726 | |
---|
727 | map = tango_get_db_property('booster','jauge_pirani'); |
---|
728 | numindex = cell2mat(regexpi(map,'\.[0-9]','once'))+1; |
---|
729 | |
---|
730 | nb = size(map,2); |
---|
731 | for k = 1:nb, |
---|
732 | switch map{k}(1:6) |
---|
733 | case 'BOO-B1' |
---|
734 | k1 = 1; |
---|
735 | case 'BOO-Bi' |
---|
736 | k1 = 2; |
---|
737 | case 'BOO-B2' |
---|
738 | k1 = 3; |
---|
739 | case 'BOO-Be' |
---|
740 | k1 = 4; |
---|
741 | case 'BOO-B3' |
---|
742 | k1 = 5; |
---|
743 | case 'BOO-B4' |
---|
744 | k1 = 6; |
---|
745 | end |
---|
746 | AO.(ifam).DeviceList(k,:) = [k1 str2double(map{k}(numindex(k)))]; |
---|
747 | AO.(ifam).ElementList(k,:) = k; |
---|
748 | AO.(ifam).CommonNames(k,:) = ['JPIR' num2str(ik)]; |
---|
749 | end |
---|
750 | |
---|
751 | AO.(ifam).Status = ones(nb,1); |
---|
752 | AO.(ifam).DeviceName = map'; |
---|
753 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
754 | AO.(ifam).ElementList = (1:nb)'; |
---|
755 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
756 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
757 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
758 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
759 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
760 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
761 | AO.(ifam).Monitor.PhysicsUnits = 'mBar'; |
---|
762 | |
---|
763 | %==== |
---|
764 | %% DCCT |
---|
765 | %==== |
---|
766 | ifam=ifam+1; |
---|
767 | AO.DCCT.FamilyName = 'DCCT'; |
---|
768 | AO.DCCT.FamilyType = 'Diagnostic'; |
---|
769 | AO.DCCT.MemberOf = {'Diagnostics','Archivable','Plotfamily'}; |
---|
770 | AO.DCCT.CommonNames = 'DCCT'; |
---|
771 | AO.DCCT.DeviceList = [1 1; 1 2]; |
---|
772 | AO.DCCT.ElementList = (1:2)'; |
---|
773 | AO.DCCT.Status = AO.DCCT.ElementList; |
---|
774 | |
---|
775 | AO.DCCT.Monitor.Mode = Mode; |
---|
776 | AO.DCCT.FamilyName = 'DCCT'; |
---|
777 | AO.DCCT.deviceName = 'BOO-C01/DG/DCCT'; |
---|
778 | AO.DCCT.Monitor.DataType = 'Scalar'; |
---|
779 | AO.DCCT.Monitor.TangoNames = ['BOO-C01/DG/DCCT/iInj'; 'BOO-C01/DG/DCCT/iExt']; %afin de ne pas avoir de bug |
---|
780 | AO.DCCT.Monitor.Units = 'Hardware'; |
---|
781 | AO.DCCT.Monitor.Handles = NaN; |
---|
782 | AO.DCCT.Monitor.HWUnits = 'milli-ampere'; |
---|
783 | AO.DCCT.Monitor.PhysicsUnits = 'A'; |
---|
784 | AO.DCCT.Monitor.HW2PhysicsParams = 1; |
---|
785 | AO.DCCT.Monitor.Physics2HWParams = 1; |
---|
786 | |
---|
787 | %============ |
---|
788 | %% RF System |
---|
789 | %============ |
---|
790 | ifam = 'RF'; |
---|
791 | AO.(ifam).FamilyName = ifam; |
---|
792 | AO.(ifam).FamilyType = 'RF'; |
---|
793 | AO.(ifam).MemberOf = {'RF','RFSystem'}; |
---|
794 | AO.(ifam).Status = 1; |
---|
795 | AO.(ifam).CommonNames = 'RF'; |
---|
796 | AO.(ifam).DeviceList = [1 1]; |
---|
797 | AO.(ifam).ElementList = 1; |
---|
798 | AO.(ifam).DeviceName(:,:) = {'BOO/RF/MasterClock/'}; |
---|
799 | |
---|
800 | %Frequency Readback |
---|
801 | AO.(ifam).Monitor.Mode = Mode; |
---|
802 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
803 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
804 | AO.(ifam).Monitor.HW2PhysicsParams = 1e+6; %no hw2physics function necessary |
---|
805 | AO.(ifam).Monitor.Physics2HWParams = 1e-6; |
---|
806 | AO.(ifam).Monitor.HWUnits = 'MHz'; |
---|
807 | AO.(ifam).Monitor.PhysicsUnits = 'Hz'; |
---|
808 | AO.(ifam).Monitor.TangoNames = {'ANS/RF/MasterClock/frequency'}; |
---|
809 | AO.(ifam).Monitor.Handles = NaN; |
---|
810 | AO.(ifam).Monitor.Range = [350e6 360e6]; |
---|
811 | |
---|
812 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
813 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
814 | |
---|
815 | |
---|
816 | %===================== |
---|
817 | %% Gamma Monitors DOSE |
---|
818 | %==================== |
---|
819 | ifam = ifam+1; |
---|
820 | AO.CIGdose.FamilyName = 'CIGdose'; |
---|
821 | AO.CIGdose.FamilyType = 'Radioprotection'; |
---|
822 | AO.CIGdose.MemberOf = {'Radioprotection','Archivable','Plotfamily'}; |
---|
823 | AO.CIGdose.CommonNames = 'CIG'; |
---|
824 | |
---|
825 | map = tango_get_db_property('anneau','gammamonitor_mapping'); |
---|
826 | AO.CIGdose.DeviceName = map'; |
---|
827 | |
---|
828 | AO.CIGdose.Monitor.Mode = Mode; |
---|
829 | AO.CIGdose.FamilyName = 'CIGdose'; |
---|
830 | AO.CIGdose.Monitor.DataType = 'Scalar'; |
---|
831 | |
---|
832 | nb = length(AO.CIGdose.DeviceName); |
---|
833 | AO.CIGdose.DeviceList = [ones(1,nb); (1:nb)]'; |
---|
834 | AO.CIGdose.ElementList = (1:nb)'; |
---|
835 | AO.CIGdose.Status = ones(nb,1); |
---|
836 | |
---|
837 | AO.CIGdose.Monitor.TangoNames = strcat(AO.CIGdose.DeviceName,'/dose'); |
---|
838 | |
---|
839 | ;%afin de ne pas avoir de bug |
---|
840 | AO.CIGdose.Monitor.Units = 'Hardware'; |
---|
841 | AO.CIGdose.Monitor.Handles = NaN; |
---|
842 | AO.CIGdose.Monitor.HWUnits = 'uGy'; |
---|
843 | AO.CIGdose.Monitor.PhysicsUnits = 'uGy'; |
---|
844 | AO.CIGdose.Monitor.HW2PhysicsParams = 1; |
---|
845 | AO.CIGdose.Monitor.Physics2HWParams = 1; |
---|
846 | |
---|
847 | %========================= |
---|
848 | %% Gamma Monitors DOSErate |
---|
849 | %========================= |
---|
850 | |
---|
851 | ifam = ifam+1; |
---|
852 | |
---|
853 | AO.CIGrate = AO.CIGdose; |
---|
854 | AO.CIGrate.FamilyName = 'CIGrate'; |
---|
855 | AO.CIGrate.CommonNames = 'CIGrate'; |
---|
856 | AO.CIGrate.FamilyName = 'CIGrate'; |
---|
857 | |
---|
858 | nb = length(AO.CIGrate.DeviceName); |
---|
859 | AO.CIGrate.Status = ones(nb,1); |
---|
860 | |
---|
861 | AO.CIGrate.Monitor.TangoNames = strcat(AO.CIGrate.DeviceName,'/doseRate'); |
---|
862 | |
---|
863 | %afin de ne pas avoir de bug |
---|
864 | AO.CIG.Monitor.HWUnits = 'uGy/h'; |
---|
865 | AO.CIG.Monitor.PhysicsUnits = 'uGy/h'; |
---|
866 | |
---|
867 | %================== |
---|
868 | %Machine Parameters |
---|
869 | %================== |
---|
870 | AO.MachineParameters.FamilyName = 'MachineParameters'; |
---|
871 | AO.MachineParameters.FamilyType = 'Parameter'; |
---|
872 | AO.MachineParameters.MemberOf = {'Diagnostics'}; |
---|
873 | AO.MachineParameters.Status = [1 1 1 1]'; |
---|
874 | |
---|
875 | AO.MachineParameters.Monitor.Mode = Mode; |
---|
876 | AO.MachineParameters.Monitor.DataType = 'Scalar'; |
---|
877 | AO.MachineParameters.Monitor.Units = 'Hardware'; |
---|
878 | |
---|
879 | %use spear2 process variable names |
---|
880 | mp={ |
---|
881 | 'mode ' 'SPEAR:BeamStatus ' [1 1] 1; ... |
---|
882 | 'energy ' 'SPEAR:Energy ' [1 2] 2; ... |
---|
883 | 'current ' 'SPEAR:BeamCurrAvg ' [1 3] 3; ... |
---|
884 | 'lifetime' 'SPEAR:BeamLifetime' [1 4] 4; ... |
---|
885 | }; |
---|
886 | AO.MachineParameters.Monitor.HWUnits = ' '; |
---|
887 | AO.MachineParameters.Monitor.PhysicsUnits = ' '; |
---|
888 | |
---|
889 | AO.MachineParameters.Setpoint.HWUnits = ' '; |
---|
890 | AO.MachineParameters.Setpoint.PhysicsUnits = ' '; |
---|
891 | |
---|
892 | for ii=1:size(mp,1) |
---|
893 | name =mp(ii,1); AO.MachineParameters.CommonNames(ii,:) = char(name{1}); |
---|
894 | % name =mp(ii,2); AO.MachineParameters.Monitor.ChannelNames(ii,:) = char(name{1}); |
---|
895 | % name =mp(ii,2); AO.MachineParameters.Setpoint.ChannelNames(ii,:) = char(name{1}); |
---|
896 | val =mp(ii,3); AO.MachineParameters.DeviceList(ii,:) = val{1}; |
---|
897 | val =mp(ii,4); AO.MachineParameters.ElementList(ii,:) = val{1}; |
---|
898 | |
---|
899 | AO.MachineParameters.Monitor.HW2PhysicsParams(ii,:) = 1; |
---|
900 | AO.MachineParameters.Monitor.Physics2HWParams(ii,:) = 1; |
---|
901 | AO.MachineParameters.Monitor.Handles(ii,1) = NaN; |
---|
902 | AO.MachineParameters.Setpoint.HW2PhysicsParams(ii,:) = 1; |
---|
903 | AO.MachineParameters.Setpoint.Physics2HWParams(ii,:) = 1; |
---|
904 | AO.MachineParameters.Setpoint.Handles(ii,1) = NaN; |
---|
905 | end |
---|
906 | |
---|
907 | % Save AO |
---|
908 | setao(AO); |
---|
909 | |
---|
910 | % The operational mode sets the path, filenames, and other important params |
---|
911 | % Run setoperationalmode after most of the AO is built so that the Units and Mode fields |
---|
912 | % can be set in setoperationalmode |
---|
913 | |
---|
914 | setoperationalmode(OperationalMode); |
---|
915 | |
---|
916 | %====================================================================== |
---|
917 | %====================================================================== |
---|
918 | %% Append Accelerator Toolbox information |
---|
919 | %====================================================================== |
---|
920 | %====================================================================== |
---|
921 | disp('** Initializing Accelerator Toolbox information'); |
---|
922 | |
---|
923 | AT = getao; |
---|
924 | |
---|
925 | ATindx = atindex(THERING); %structure with fields containing indices |
---|
926 | |
---|
927 | s = findspos(THERING,1:length(THERING)+1)'; |
---|
928 | |
---|
929 | % % Horizontal BPMS |
---|
930 | % % WARNING: BPM1 is the one before the injection straigth section |
---|
931 | % % since a cell begins from begin of Straigths |
---|
932 | % % CELL1 BPM1 to BPM7 |
---|
933 | % ifam = ('BPMx'); |
---|
934 | % AO.(ifam).AT.ATType = ifam; |
---|
935 | % AO.(ifam).AT.ATIndex = ATindx.BPM(:); |
---|
936 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
937 | % |
---|
938 | % % Vertical BPMS |
---|
939 | % ifam = ('BPMz'); |
---|
940 | % AO.(ifam).AT.ATType = ifam; |
---|
941 | % AO.(ifam).AT.ATIndex = ATindx.BPM(:); |
---|
942 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
943 | % |
---|
944 | % % SLOW HORIZONTAL CORRECTORS |
---|
945 | % ifam = ('HCOR'); |
---|
946 | % AO.(ifam).AT.ATType = ifam; |
---|
947 | % AO.(ifam).AT.ATIndex = ATindx.HCOR(:); |
---|
948 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
949 | % |
---|
950 | % % SLOW VERTICAL CORRECTORS |
---|
951 | % ifam = ('VCOR'); |
---|
952 | % AO.(ifam).AT.ATType = ifam; |
---|
953 | % AO.(ifam).AT.ATIndex = ATindx.VCOR(:); |
---|
954 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
955 | % |
---|
956 | % %% BENDING magnets |
---|
957 | % ifam = ('BEND'); |
---|
958 | % AO.(ifam).AT.ATType = ifam; |
---|
959 | % AO.(ifam).AT.ATIndex = ATindx.BEND(:); |
---|
960 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
961 | % |
---|
962 | % %% QF magnets |
---|
963 | % ifam = ('QF'); |
---|
964 | % AO.(ifam).AT.ATType = 'QUAD'; |
---|
965 | % AO.(ifam).AT.ATIndex = ATindx.QPF(:); |
---|
966 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
967 | % AO.(ifam).AT.ATParameterGroup = mkparamgroup(THERING,AO.(ifam).AT.ATIndex,'K'); |
---|
968 | % |
---|
969 | % %% QD magnets |
---|
970 | % ifam = ('QD'); |
---|
971 | % AO.(ifam).AT.ATType = 'QUAD'; |
---|
972 | % AO.(ifam).AT.ATIndex = ATindx.QPD(:); |
---|
973 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
974 | % AO.(ifam).AT.ATParameterGroup = mkparamgroup(THERING,AO.(ifam).AT.ATIndex,'K'); |
---|
975 | % |
---|
976 | % %% SF magnets |
---|
977 | % ifam = ('SF'); |
---|
978 | % AO.(ifam).AT.ATType = 'SEXT'; |
---|
979 | % AO.(ifam).AT.ATIndex = ATindx.SXF(:); |
---|
980 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
981 | % AO.(ifam).AT.ATParameterGroup = mkparamgroup(THERING,AO.(ifam).AT.ATIndex,'K2'); |
---|
982 | % |
---|
983 | % %% SD magnets |
---|
984 | % ifam = ('SD'); |
---|
985 | % AO.(ifam).AT.ATType = 'SEXT'; |
---|
986 | % AO.(ifam).AT.ATIndex = ATindx.SXD(:); |
---|
987 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
988 | % AO.(ifam).AT.ATParameterGroup = mkparamgroup(THERING,AO.(ifam).AT.ATIndex,'S'); |
---|
989 | % |
---|
990 | % % RF Cavity |
---|
991 | % ifam = ('RF'); |
---|
992 | % AO.(ifam).AT.ATType = 'RF Cavity'; |
---|
993 | % AO.(ifam).AT.ATIndex = findcells(THERING,'Frequency')'; |
---|
994 | % AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
995 | setao(AO); |
---|
996 | updateatindex; |
---|
997 | |
---|
998 | if iscontrolroom |
---|
999 | switch2online; |
---|
1000 | else |
---|
1001 | switch2sim; |
---|
1002 | end |
---|