source: MML/trunk/machine/SOLEIL/Booster/boosterinit.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: 34.9 KB
Line 
1function 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
67if nargin < 1
68    OperationalMode = 1;
69end
70
71global GLOBVAL THERING
72
73
74Mode             = 'Online';
75setad([]);       %clear AcceleratorData memory
76AD.SubMachine       = 'Booster'; % Machine Name
77AD.Energy        = 2.75; % Energy in GeV
78
79
80setad(AD);   %load AcceleratorData
81
82%%%%%%%%%%%%%%%%%%%%
83% ACCELERATOR OBJECT
84%%%%%%%%%%%%%%%%%%%%
85
86setao([]);   %clear previous AcceleratorObjects
87
88%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
89%% BPMx data: status field designates if BPM in use
90%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
91AO{1}.FamilyName               = 'BPMx';
92AO{1}.FamilyType               = 'BPM';
93AO{1}.MemberOf                 = {'BPM'; 'HBPM'; 'Diagnostics'};
94AO{1}.Monitor.Mode             = Mode;
95AO{1}.Monitor.Units            = 'Hardware';
96AO{1}.Monitor.HWUnits          = 'mm';
97AO{1}.Monitor.PhysicsUnits     = 'm';
98
99% Get mapping from TANGO static database
100map = tango_get_db_property('booster','tracy_bpm_mapping');
101
102cellindex = cell2mat(regexpi(map,'C[0-9]','once'))+1;
103numindex  = cell2mat(regexpi(map,'\.[0-9]','once'))+1;
104elemindex = cell2mat(regexpi(map,'BPM[0-9]','once'))+3;
105sep       = cell2mat(regexpi(map,'::','once'))-1;
106% dev       = deblank(regexprep(char(map),'^BPM\d*::',''));
107dev       = regexprep(map,'^BPM\d*::','')';
108
109nb = size(map,2);
110ik = 1;
111prev0 = 0;
112for 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;
122end
123
124AO{1}.DeviceName(:,:)               = dev;
125AO{1}.Monitor.TangoNames(:,:)       = strcat(dev, '/XPosDD');
126AO{1}.CommonNames(:,:)              = [repmat('BPMx',nb,1) num2str((1:nb)','%02d')];
127
128AO{1}.Status                        = ones(nb,1);
129% AO{1}.Status([5:22]) = 0;
130AO{1}.Monitor.HW2PhysicsParams(:,:) = 1e-3*ones(nb,1);
131AO{1}.Monitor.Physics2HWParams(:,:) = 1e3*ones(nb,1);
132
133% 2 lignes ajoutes pour test debug bpm versus le reste du monde
134AO{1}.Monitor.Handles(:,1)       = NaN*ones(nb,1);
135AO{1}.Monitor.DataType         = 'Vector';
136
137% Group
138AO{1}.GroupId = tango_group_create2('BPM');
139tango_group_add(AO{1}.GroupId,AO{1}.DeviceName');
140
141AO{1}.Status = AO{1}.Status(:);
142AO{1}.Monitor.Mode            = Mode; %'Special';
143AO{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
153AO{2} = AO{1};
154AO{2}.FamilyName              = 'BPMz';
155AO{2}.MemberOf                 = {'BPM'; 'VBPM'; 'Diagnostics'};
156AO{2}.Monitor.TangoNames(:,:) = strcat(dev,'/ZPosDD');
157AO{2}.CommonNames(:,:) = [repmat('BPMz',nb,1) num2str((1:nb)','%02d')];
158
159% 2 lignes ajoutes pour test debug bpm versus le reste du monde
160AO{2}.Monitor.DataType         = 'Vector';
161AO{2}.Monitor.Handles(:,1)       = NaN*ones(nb,1);
162
163AO{2}.Status = AO{2}.Status(:);
164
165AO{2}.Monitor.Mode            = Mode; %'Special';
166AO{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%
175setao(cell2field(AO));
176
177%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
178%% SLOW HORIZONTAL CORRECTORS
179%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
180ifam = 3;
181AO{ifam}.FamilyName               = 'HCOR';
182AO{ifam}.FamilyType               = 'COR';
183AO{ifam}.MemberOf                 = {'MachineConfig'; 'COR'; 'MCOR'; 'HCOR'; 'Magnet'};
184
185AO{ifam}.Monitor.Mode             = Mode;
186AO{ifam}.Monitor.DataType         = 'Scalar';
187AO{ifam}.Monitor.Units            = 'Hardware';
188AO{ifam}.Monitor.HWUnits          = 'A';
189AO{ifam}.Monitor.PhysicsUnits     = 'rad';
190AO{ifam}.Monitor.HW2PhysicsFcn    = @amp2k;
191AO{ifam}.Monitor.Physics2HWFcn    = @k2amp;
192
193% Get mapping from TANGO static database
194map = tango_get_db_property('booster','tracy_correctorH_mapping');
195dev = regexprep(map,'^HCOR\d*::','')';
196cellindex = cell2mat(regexpi(map,'C[0-9]','once'))+1;
197numindex  = cell2mat(regexpi(map,'\.[0-9]','once'))+1;
198elemindex = cell2mat(regexpi(map,'HCOR[0-9]','once'))+4;
199sep       = cell2mat(regexpi(map,'::','once'))-1;
200
201nb = size(map,2);
202for 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)));
205end
206
207AO{ifam}.DeviceName(:,:)            = dev;
208AO{ifam}.CommonNames(:,:)           = [repmat(AO{ifam}.FamilyName,nb,1) num2str((1:nb)','%03d')];
209AO{ifam}.Status                     = ones(nb,1);
210AO{ifam}.Monitor.TangoNames(:,:)    = strcat(dev,'/current');
211AO{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
217for ii=1:nb
218    AO{ifam}.Monitor.HW2PhysicsParams{1}(ii,:)  = coefficients;
219    AO{ifam}.Monitor.Physics2HWParams{1}(ii,:)  = coefficients;
220end
221
222AO{ifam}.Setpoint = AO{ifam}.Monitor;
223AO{ifam}.Desired  = AO{ifam}.Monitor;
224
225AO{ifam}.Setpoint.Range(:,:)        = repmat([-1.5 1.5],nb,1); % 1 A for ???
226AO{ifam}.Setpoint.Tolerance(:,:)    = 1000*ones(nb,1);
227AO{ifam}.Setpoint.DeltaRespMat(:,:) = ones(nb,1)*2e-5; % ???
228
229AO{ifam}.Status = AO{ifam}.Status(:);
230%convert response matrix kicks to HWUnits (after AO is loaded to AppData)
231setao(cell2field(AO));   %required to make physics2hw function
232AO{ifam}.Setpoint.DeltaRespMat = physics2hw(AO{ifam}.FamilyName,'Setpoint', ...
233    AO{ifam}.Setpoint.DeltaRespMat, AO{ifam}.DeviceList);
234
235
236%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
237%% SLOW VERTICAL CORRECTORS
238%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
239ifam = ifam +1;
240AO{ifam}.FamilyName               = 'VCOR';
241AO{ifam}.FamilyType               = 'COR';
242AO{ifam}.MemberOf                 = {'MachineConfig'; 'COR'; AO{ifam}.FamilyName; 'Magnet'};
243
244AO{ifam}.Monitor.Mode             = Mode;
245AO{ifam}.Monitor.DataType         = 'Scalar';
246AO{ifam}.Monitor.Units            = 'Hardware';
247AO{ifam}.Monitor.HWUnits          = 'A';
248AO{ifam}.Monitor.PhysicsUnits     = 'rad';
249AO{ifam}.Monitor.HW2PhysicsFcn = @amp2k;
250AO{ifam}.Monitor.Physics2HWFcn = @k2amp;
251
252% Get mapping from TANGO static database
253map = tango_get_db_property('booster','tracy_correctorV_mapping');
254dev = regexprep(map,'^VCOR\d*::','')';
255cellindex = cell2mat(regexpi(map,'C[0-9]','once'))+1;
256numindex  = cell2mat(regexpi(map,'\.[0-9]','once'))+1;
257elemindex = cell2mat(regexpi(map,'VCOR[0-9]','once'))+4;
258sep       = cell2mat(regexpi(map,'::','once'))-1;
259
260nb = size(map,2);
261for 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)));
264end
265
266AO{ifam}.DeviceName(:,:)            = dev;
267AO{ifam}.Status                     = ones(nb,1);
268AO{ifam}.CommonNames(:,:)           = [repmat(AO{ifam}.FamilyName,nb,1) num2str((1:nb)','%03d')];
269AO{ifam}.Monitor.TangoNames(:,:)    = strcat(dev,'/current');
270
271AO{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
277for ii = 1:nb
278    AO{ifam}.Monitor.HW2PhysicsParams{1}(ii,:)  = coefficients;
279    AO{ifam}.Monitor.Physics2HWParams{1}(ii,:)  = coefficients;
280end
281
282AO{ifam}.Setpoint = AO{ifam}.Monitor;
283AO{ifam}.Desired  = AO{ifam}.Monitor;
284
285AO{ifam}.Setpoint.Range(:,:) = repmat([-1.5 1.5],nb,1); %  1 A for ???
286AO{ifam}.Setpoint.Tolerance(:,:) = 1000*ones(nb,1);
287AO{ifam}.Setpoint.DeltaRespMat(:,:) = ones(nb,1)*4e-5; % ???
288
289%convert response matrix kicks to HWUnits (after AO is loaded to AppData)
290setao(cell2field(AO));   %required to make physics2hw function
291AO{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 ***
303ifam = ifam+1;
304AO{ifam}.FamilyName                 = 'BEND';
305AO{ifam}.FamilyType                 = 'BEND';
306AO{ifam}.MemberOf                   = {'MachineConfig'; 'BEND'; 'Magnet';};
307HW2PhysicsParams                    = magnetcoefficients('BEND');
308Physics2HWParams                    = HW2PhysicsParams;
309
310AO{ifam}.Monitor.Mode               = Mode;
311AO{ifam}.Monitor.DataType           = 'Scalar';
312AO{ifam}.Monitor.Units              = 'Hardware';
313AO{ifam}.Monitor.HW2PhysicsFcn      = @bend2gev;
314AO{ifam}.Monitor.Physics2HWFcn      = @gev2bend;
315AO{ifam}.Monitor.HWUnits            = 'A';
316AO{ifam}.Monitor.PhysicsUnits       = 'energy';
317
318
319% nb = size(map,2);
320nb = 1;
321
322AO{ifam}.DeviceList(:,:)   = [1 1];
323AO{ifam}.ElementList(:,:)  = 1;
324AO{ifam}.DeviceName(:,:)   = 'BOO/AE/Dipole';
325AO{ifam}.Monitor.TangoNames(:,:)  = strcat(AO{ifam}.DeviceName,'/d1current');
326AO{ifam}.OffsetR.TangoNames(:,:)  = strcat(AO{ifam}.DeviceName,'/d1waveformOffset');
327
328AO{ifam}.Status = 1;
329AO{ifam}.Monitor.Handles = NaN;
330
331val = 1.0;
332AO{ifam}.Monitor.HW2PhysicsParams{1}(1,:)                 = HW2PhysicsParams;
333AO{ifam}.Monitor.HW2PhysicsParams{2}(1,:)                 = val;
334AO{ifam}.Monitor.Physics2HWParams{1}(1,:)                 = Physics2HWParams;
335AO{ifam}.Monitor.Physics2HWParams{2}(1,:)                 = val;
336
337% When using bend2gev / gev2bend don't use Params
338AO{ifam}.Monitor = rmfield(AO{ifam}.Monitor,'HW2PhysicsParams');
339AO{ifam}.Monitor = rmfield(AO{ifam}.Monitor,'Physics2HWParams');
340
341AO{ifam}.Setpoint = AO{ifam}.Monitor;
342AO{ifam}.Desired  = AO{ifam}.Monitor;
343AO{ifam}.OffsetR  = AO{ifam}.Monitor;
344AO{ifam}.OffsetW  = AO{ifam}.Monitor;
345AO{ifam}.Setpoint.TangoNames = strcat(AO{ifam}.DeviceName,'/current');
346AO{ifam}.OffsetW.TangoNames = strcat(AO{ifam}.DeviceName,'/waveformOffset');
347
348AO{ifam}.Setpoint.Range(:,:) = [0 560]; % 525 A for 1.71T
349AO{ifam}.Setpoint.Tolerance(:,:) = 0.05;
350AO{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
361map     = tango_get_db_property('booster','tracy_quadrupole_mapping');
362iifam   = cell2mat(regexpi(map,'/Q','once'))+2;
363ifound  = regexpi(map,'/QF');
364
365%%% build mapping for the two families
366%%% cleanup
367mapQF = []; mapQD = [];
368for k = 1:length(ifound)
369    if isempty(ifound{k})
370        mapQD = [mapQD map(k)];
371    else
372        mapQF = [mapQF map(k)];
373    end
374end
375
376
377mapQP  = {mapQF,mapQD};
378nameQP = {'QF', 'QD'};
379
380% for both family
381for 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);
431end
432
433
434%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
435%% SEXTUPOLE MAGNETS
436%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
437
438map=tango_get_db_property('booster','tracy_sextupole_mapping');
439iifam = cell2mat(regexpi(map,'/S','once'))+2;
440ifound  = regexpi(map,'/SF');
441
442%%% build mapping for the ten families
443%%% cleanup
444mapSF = []; mapSD = [];
445for k = 1:length(ifound)
446    if isempty(ifound{k})
447        mapSD = [mapSD map(k)];
448    else
449        mapSF = [mapSF map(k)];
450    end
451end
452
453
454mapS  = {mapSF,mapSD};
455nameS = {'SF', 'SD'};
456
457% For both families
458for 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);
506end
507
508% Convert to new format
509AO = cell2field(AO);
510
511
512%=======
513%% TUNE
514%=======
515ifam = 'TUNE';
516AO.(ifam).FamilyName  = ifam;
517AO.(ifam).FamilyType  = 'Diagnostic';
518AO.(ifam).MemberOf    = {'Diagnostics'};
519AO.(ifam).CommonNames = ['nux';'nuz';'nus'];
520AO.(ifam).DeviceList  = [1 1; 1 2; 1 3];
521AO.(ifam).ElementList = [1 2 3]';
522AO.(ifam).Status      = [1 1 1]';
523
524AO.(ifam).Monitor.Mode                   = Mode; %'Simulator';  % Mode;
525AO.(ifam).Monitor.DataType               = 'Scalar';
526AO.(ifam).Monitor.DataTypeIndex          = [1 2];
527AO.(ifam).Monitor.TangoNames              = ['BOO/DG/BPM-TUNEX/Nu'; ...
528                                             'BOO/DG/BPM-TUNEZ/Nu'; 'BOO/DG/BPM-TUNEX/Nu'];
529AO.(ifam).Monitor.Units                  = 'Hardware';
530AO.(ifam).Monitor.Handles                = NaN;
531AO.(ifam).Monitor.HW2PhysicsParams       = 1;
532AO.(ifam).Monitor.Physics2HWParams       = 1;
533AO.(ifam).Monitor.HWUnits                = 'fractional tune';
534AO.(ifam).Monitor.PhysicsUnits           = 'fractional tune';
535
536%%%%%%%%%%%%%%%%%%
537%% Pulsed Magnet
538%%%%%%%%%%%%%%%%%%
539
540%% Injection kicker
541ifam = 'K_Inj';
542AO.(ifam).FamilyName           = 'K_Inj';
543AO.(ifam).MemberOf             = {'Injection';'Archivable';'EP'};
544AO.(ifam).Monitor.Mode         = Mode;
545AO.(ifam).Monitor.DataType     = 'Scalar';
546
547AO.(ifam).Status                   = 1;
548AO.(ifam).DeviceName               = cellstr('BOO-C01/EP/AL_K.Inj');
549AO.(ifam).CommonNames              = 'K_Inj';
550AO.(ifam).ElementList              = 1;
551AO.(ifam).DeviceList(:,:)          = [1 1];
552AO.(ifam).Monitor.Handles(:,1)     = NaN;
553AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/voltage');
554AO.(ifam).Monitor.HW2PhysicsParams = 1;
555AO.(ifam).Monitor.Physics2HWParams = 1;
556AO.(ifam).Monitor.Units            = 'Hardware';   
557AO.(ifam).Monitor.HWUnits          = 'V';
558AO.(ifam).Monitor.PhysicsUnits     = 'mrad';
559AO.(ifam).Setpoint = AO.(ifam).Monitor;
560AO.(ifam).Desired = AO.(ifam).Monitor;
561
562%% Injection Septum
563ifam = 'SEP_Inj';
564AO.(ifam).FamilyName           = 'SEP_Inj';
565AO.(ifam).MemberOf             = {'Injection';'Archivable';'EP'};
566AO.(ifam).Monitor.Mode         = Mode;
567AO.(ifam).Monitor.DataType     = 'Scalar';
568
569AO.(ifam).Status                   = 1;
570AO.(ifam).DeviceName               = cellstr('BOO-C22/EP/AL_SEP_P.Inj');
571AO.(ifam).CommonNames              = 'SEP_P';
572AO.(ifam).ElementList              = 1;
573AO.(ifam).DeviceList(:,:)           = [1 1];
574AO.(ifam).Monitor.Handles(:,1)     = NaN;
575AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/voltage');
576AO.(ifam).Monitor.HW2PhysicsParams = 1;
577AO.(ifam).Monitor.Physics2HWParams = 1;
578AO.(ifam).Monitor.Units            = 'Hardware';   
579AO.(ifam).Monitor.HWUnits          = 'V';
580AO.(ifam).Monitor.PhysicsUnits     = 'mrad';
581AO.(ifam).Setpoint = AO.(ifam).Monitor;
582AO.(ifam).Desired = AO.(ifam).Monitor;
583
584%% Injection Septum
585ifam = 'SEPA_EXT';
586AO.(ifam).FamilyName           = ifam;
587AO.(ifam).MemberOf             = {'Injection';'Archivable';'EP'};
588AO.(ifam).Monitor.Mode         = Mode;
589AO.(ifam).Monitor.DataType     = 'Scalar';
590
591AO.(ifam).Status                   = 0;
592AO.(ifam).DeviceName               = cellstr('BOO-C22/EP/AL_SEP_P.Inj');
593AO.(ifam).CommonNames              = 'SEP_P';
594AO.(ifam).ElementList              = 1;
595AO.(ifam).DeviceList(:,:)           = [1 1];
596AO.(ifam).Monitor.Handles(:,1)     = NaN;
597AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/voltage');
598AO.(ifam).Monitor.HW2PhysicsParams = 1;
599AO.(ifam).Monitor.Physics2HWParams = 1;
600AO.(ifam).Monitor.Units            = 'Hardware';   
601AO.(ifam).Monitor.HWUnits          = 'V';
602AO.(ifam).Monitor.PhysicsUnits     = 'mrad';
603AO.(ifam).Setpoint = AO.(ifam).Monitor;
604AO.(ifam).Desired = AO.(ifam).Monitor;
605
606%% Injection Septum
607ifam = 'SEP_P_EXT';
608AO.(ifam).FamilyName           = ifam;
609AO.(ifam).MemberOf             = {'Injection';'Archivable';'EP'};
610AO.(ifam).Monitor.Mode         = Mode;
611AO.(ifam).Monitor.DataType     = 'Scalar';
612
613AO.(ifam).Status                   = 0;
614AO.(ifam).DeviceName               = cellstr('BOO-C11/EP/AL_SEP_P.Ext');
615AO.(ifam).CommonNames              = 'SEP_P_EXT';
616AO.(ifam).ElementList              = 1;
617AO.(ifam).DeviceList(:,:)           = [1 1];
618AO.(ifam).Monitor.Handles(:,1)     = NaN;
619AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/voltage');
620AO.(ifam).Monitor.HW2PhysicsParams = 1;
621AO.(ifam).Monitor.Physics2HWParams = 1;
622AO.(ifam).Monitor.Units            = 'Hardware';   
623AO.(ifam).Monitor.HWUnits          = 'V';
624AO.(ifam).Monitor.PhysicsUnits     = 'mrad';
625AO.(ifam).Setpoint = AO.(ifam).Monitor;
626AO.(ifam).Desired = AO.(ifam).Monitor;
627
628%%%%%%%%%%%%%%%%%%
629%% VACUUM SYSTEM
630%%%%%%%%%%%%%%%%%%
631
632%% IonPump
633ifam = 'PI';
634AO.(ifam).FamilyName           = 'PI';
635AO.(ifam).FamilyType           = 'PI';
636AO.(ifam).MemberOf             = {'PlotFamily'; 'IonPump'; 'Pressure'; 'Archivable'};
637AO.(ifam).Monitor.Mode         = Mode;
638AO.(ifam).Monitor.DataType     = 'Scalar';
639
640map     = tango_get_db_property('booster','pompe_ionique');
641numindex  = cell2mat(regexpi(map,'\.[0-9]','once'))+1;
642
643nb = size(map,2);
644for 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)];
662end
663
664AO.(ifam).Status                   = ones(nb,1);
665%AO.(ifam).Status(26) = 0;% BOO-Bext/VI/PI300.3
666AO.(ifam).DeviceName               = map';
667AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
668AO.(ifam).ElementList              = (1:nb)';
669AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
670AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
671AO.(ifam).Monitor.HW2PhysicsParams = 1;
672AO.(ifam).Monitor.Physics2HWParams = 1;
673AO.(ifam).Monitor.Units            = 'Hardware';   
674AO.(ifam).Monitor.HWUnits          = 'mBar';
675AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
676
677%% Penning Gauges
678ifam = 'JPEN';
679AO.(ifam).FamilyName           = 'JPEN';
680AO.(ifam).MemberOf             = {'PlotFamily'; 'PenningGauge'; 'Pressure'; 'Archivable'};
681AO.(ifam).Monitor.Mode         = Mode;
682AO.(ifam).Monitor.DataType     = 'Scalar';
683
684map     = tango_get_db_property('booster','jauge_penning');
685numindex  = cell2mat(regexpi(map,'\.[0-9]','once'))+1;
686
687nb = size(map,2);
688for 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)];
706end
707
708AO.(ifam).Status                   = ones(nb,1);
709AO.(ifam).DeviceName               = map';
710AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
711AO.(ifam).ElementList              = (1:nb)';
712AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
713AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
714AO.(ifam).Monitor.HW2PhysicsParams = 1;
715AO.(ifam).Monitor.Physics2HWParams = 1;
716AO.(ifam).Monitor.Units            = 'Hardware';   
717AO.(ifam).Monitor.HWUnits          = 'mBar';
718AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
719
720%% Pirani Gauges
721ifam = 'JPIR';
722AO.(ifam).FamilyName           = 'JPIR';
723AO.(ifam).MemberOf             = {'PlotFamily'; 'PiraniGauge'; 'Pressure'; 'Archivable'};
724AO.(ifam).Monitor.Mode         = Mode;
725AO.(ifam).Monitor.DataType     = 'Scalar';
726
727map     = tango_get_db_property('booster','jauge_pirani');
728numindex  = cell2mat(regexpi(map,'\.[0-9]','once'))+1;
729
730nb = size(map,2);
731for 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)];
749end
750
751AO.(ifam).Status                   = ones(nb,1);
752AO.(ifam).DeviceName               = map';
753AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
754AO.(ifam).ElementList              = (1:nb)';
755AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
756AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
757AO.(ifam).Monitor.HW2PhysicsParams = 1;
758AO.(ifam).Monitor.Physics2HWParams = 1;
759AO.(ifam).Monitor.Units            = 'Hardware';   
760AO.(ifam).Monitor.HWUnits          = 'mBar';
761AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
762
763%====
764%% DCCT
765%====
766ifam=ifam+1;
767AO.DCCT.FamilyName                     = 'DCCT';
768AO.DCCT.FamilyType                     = 'Diagnostic';
769AO.DCCT.MemberOf                       = {'Diagnostics','Archivable','Plotfamily'};
770AO.DCCT.CommonNames                    = 'DCCT';
771AO.DCCT.DeviceList                     = [1 1; 1 2];
772AO.DCCT.ElementList                    = (1:2)';
773AO.DCCT.Status                         = AO.DCCT.ElementList;
774
775AO.DCCT.Monitor.Mode                   = Mode;
776AO.DCCT.FamilyName                     = 'DCCT';
777AO.DCCT.deviceName                     = 'BOO-C01/DG/DCCT';
778AO.DCCT.Monitor.DataType               = 'Scalar';
779AO.DCCT.Monitor.TangoNames             = ['BOO-C01/DG/DCCT/iInj'; 'BOO-C01/DG/DCCT/iExt']; %afin de ne pas avoir de bug
780AO.DCCT.Monitor.Units                  = 'Hardware';
781AO.DCCT.Monitor.Handles                = NaN;
782AO.DCCT.Monitor.HWUnits                = 'milli-ampere';
783AO.DCCT.Monitor.PhysicsUnits           = 'A';
784AO.DCCT.Monitor.HW2PhysicsParams       = 1;
785AO.DCCT.Monitor.Physics2HWParams       = 1;
786
787%============
788%% RF System
789%============
790ifam = 'RF';
791AO.(ifam).FamilyName                = ifam;
792AO.(ifam).FamilyType                = 'RF';
793AO.(ifam).MemberOf                  = {'RF','RFSystem'};
794AO.(ifam).Status                    = 1;
795AO.(ifam).CommonNames               = 'RF';
796AO.(ifam).DeviceList                = [1 1];
797AO.(ifam).ElementList               = 1;
798AO.(ifam).DeviceName(:,:)           = {'BOO/RF/MasterClock/'};
799
800%Frequency Readback
801AO.(ifam).Monitor.Mode                = Mode;
802AO.(ifam).Monitor.DataType            = 'Scalar';
803AO.(ifam).Monitor.Units               = 'Hardware';
804AO.(ifam).Monitor.HW2PhysicsParams    = 1e+6;       %no hw2physics function necessary
805AO.(ifam).Monitor.Physics2HWParams    = 1e-6;
806AO.(ifam).Monitor.HWUnits             = 'MHz';
807AO.(ifam).Monitor.PhysicsUnits        = 'Hz';
808AO.(ifam).Monitor.TangoNames          = {'ANS/RF/MasterClock/frequency'};
809AO.(ifam).Monitor.Handles             = NaN;
810AO.(ifam).Monitor.Range               = [350e6 360e6];
811
812AO.(ifam).Setpoint = AO.(ifam).Monitor;
813AO.(ifam).Desired  = AO.(ifam).Monitor;
814
815
816%=====================
817%% Gamma Monitors DOSE
818%====================
819ifam = ifam+1;
820AO.CIGdose.FamilyName                     = 'CIGdose';
821AO.CIGdose.FamilyType                     = 'Radioprotection';
822AO.CIGdose.MemberOf                       = {'Radioprotection','Archivable','Plotfamily'};
823AO.CIGdose.CommonNames                    = 'CIG';
824
825map = tango_get_db_property('anneau','gammamonitor_mapping');
826AO.CIGdose.DeviceName = map';
827
828AO.CIGdose.Monitor.Mode                   = Mode;
829AO.CIGdose.FamilyName                     = 'CIGdose';
830AO.CIGdose.Monitor.DataType               = 'Scalar';
831
832nb = length(AO.CIGdose.DeviceName);
833AO.CIGdose.DeviceList                     = [ones(1,nb); (1:nb)]';
834AO.CIGdose.ElementList                    = (1:nb)';
835AO.CIGdose.Status                         = ones(nb,1);
836
837AO.CIGdose.Monitor.TangoNames            = strcat(AO.CIGdose.DeviceName,'/dose');
838
839;%afin de ne pas avoir de bug
840AO.CIGdose.Monitor.Units                  = 'Hardware';
841AO.CIGdose.Monitor.Handles                = NaN;
842AO.CIGdose.Monitor.HWUnits                = 'uGy';
843AO.CIGdose.Monitor.PhysicsUnits           = 'uGy';
844AO.CIGdose.Monitor.HW2PhysicsParams       = 1;
845AO.CIGdose.Monitor.Physics2HWParams       = 1;
846
847%=========================
848%% Gamma Monitors DOSErate
849%=========================
850
851ifam = ifam+1;
852
853AO.CIGrate = AO.CIGdose;
854AO.CIGrate.FamilyName                     = 'CIGrate';
855AO.CIGrate.CommonNames                    = 'CIGrate';
856AO.CIGrate.FamilyName                     = 'CIGrate';
857
858nb = length(AO.CIGrate.DeviceName);
859AO.CIGrate.Status                         = ones(nb,1);
860
861AO.CIGrate.Monitor.TangoNames            = strcat(AO.CIGrate.DeviceName,'/doseRate');
862
863%afin de ne pas avoir de bug
864AO.CIG.Monitor.HWUnits                = 'uGy/h';
865AO.CIG.Monitor.PhysicsUnits           = 'uGy/h';
866
867%==================
868%Machine Parameters
869%==================
870AO.MachineParameters.FamilyName                = 'MachineParameters';
871AO.MachineParameters.FamilyType                = 'Parameter';
872AO.MachineParameters.MemberOf                  = {'Diagnostics'};
873AO.MachineParameters.Status                    = [1 1 1 1]';
874
875AO.MachineParameters.Monitor.Mode              = Mode;
876AO.MachineParameters.Monitor.DataType          = 'Scalar';
877AO.MachineParameters.Monitor.Units             = 'Hardware';
878
879%use spear2 process variable names
880mp={
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    };
886AO.MachineParameters.Monitor.HWUnits          = ' ';
887AO.MachineParameters.Monitor.PhysicsUnits     = ' ';
888
889AO.MachineParameters.Setpoint.HWUnits         = ' ';
890AO.MachineParameters.Setpoint.PhysicsUnits    = ' ';
891
892for 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;
905end
906
907% Save AO
908setao(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
914setoperationalmode(OperationalMode);
915
916%======================================================================
917%======================================================================
918%% Append Accelerator Toolbox information
919%======================================================================
920%======================================================================
921disp('** Initializing Accelerator Toolbox information');
922
923AT = getao;
924
925ATindx = atindex(THERING);  %structure with fields containing indices
926
927s = 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);
995setao(AO);
996updateatindex;
997
998if iscontrolroom
999    switch2online;
1000else
1001    switch2sim;
1002end
Note: See TracBrowser for help on using the repository browser.