source: MML/trunk/machine/SOLEIL/LT1/LT1init.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: 18.4 KB
Line 
1function LT1init(OperationalMode)
2% LT1INIT - Contructs an accelerator Object describing LT1
3%
4% Written by Laurent S. Nadolski, Synchrotron SOLEIL
5%
6%==========================
7% Accelerator Family Fields
8%==========================
9% FamilyName            CH, CV, QP, Bend
10% CommonNames           Shortcut name for each element
11% DeviceList            [Sector, Number]
12% ElementList           number in list
13% Position              m, magnet center
14%
15% MONITOR FIELD
16% Mode                  online/manual/special/simulator
17% TangoNames            Tango device name for monitor
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 'ampere';
24% PhysicsUnits          units for physics 'Rad';
25% Handles               monitor handle
26%
27% SETPOINT FIELDS
28% Mode                  online/manual/special/simulator
29% TangoNames            PV for monitor
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 'ampere';
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%    CH
52%    CV
53%    BEND
54%    QP
55%    Machine Parameters
56%
57%  See Also aoinit, setoperationalmode, updateatindex, setpathsoleil
58
59%==============================
60%load AcceleratorData structure
61%==============================
62
63if nargin < 1
64    OperationalMode = 1;
65end
66
67global GLOBVAL THERING
68
69Mode             = 'online';
70setad([]);       %clear AcceleratorData memory
71AD.SubMachine    = 'LT1'; % Will already be defined if setpathmml was used
72AD.Energy        = 0.110; % Energy in GeV
73
74setad(AD);   %load AcceleratorData
75
76%%%%%%%%%%%%%%%%%%%%
77% ACCELERATOR OBJECT
78%%%%%%%%%%%%%%%%%%%%
79
80setao([]);   %clear previous AcceleratorObjects
81
82%% Dipole
83ifam = 'BEND';
84
85AO.(ifam).FamilyName             = 'BEND';
86AO.(ifam).MemberOf               = {'MachineConfig'; 'Magnet'; 'BEND'; 'Archivable'};
87AO.(ifam).Mode                   = Mode;
88AO.(ifam).DeviceName{1}          = 'LT1/AE/D.1';
89AO.(ifam).CommonNames{1}         = 'DIP';
90AO.(ifam).DeviceList(1,:)        = [1 1];
91AO.(ifam).ElementList            = 1;
92AO.(ifam).Status                 = 1;
93AO.(ifam).Monitor.TangoNames     = strcat(AO.(ifam).DeviceName, '/current');
94AO.(ifam).Monitor.ModelVal       = 0;
95AO.(ifam).Monitor.TangoVal       = 0;
96AO.(ifam).Monitor.Mode           = Mode;
97AO.(ifam).Monitor.Handles(:,1)   = NaN;
98AO.(ifam).Monitor.DataType       = 'Scalar';
99AO.(ifam).Monitor.Units          = 'Hardware';
100AO.(ifam).Monitor.HWUnits        = 'ampere';
101AO.(ifam).Monitor.PhysicsUnits   = 'radian';
102AO.(ifam).Monitor.HW2PhysicsFcn  = @bend2gev;
103AO.(ifam).Monitor.Physics2HWFcn  = @gev2bend;
104setao(AO);
105[C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName );
106AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients;
107AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams;
108
109AO.(ifam).Setpoint = AO.(ifam).Monitor;
110AO.(ifam).Desired  = AO.(ifam).Monitor;
111
112%% Quadrupoles
113ifam = 'QP';
114
115AO.(ifam).FamilyName             = 'QP';
116AO.(ifam).MemberOf               = {'MachineConfig'; 'Magnet'; 'QP'; 'Archivable'};
117AO.(ifam).Mode                   = Mode;
118for ik = 1:7   
119    AO.(ifam).DeviceName{ik}  = ['LT1/AE/Q.' num2str(ik)];
120    AO.(ifam).CommonNames{ik} = ['QP' num2str(ik)];
121    AO.(ifam).DeviceList(ik,:) = [1 ik];
122end
123AO.(ifam).DeviceName             = AO.(ifam).DeviceName';
124AO.(ifam).CommonNames            = AO.(ifam).CommonNames';
125
126nb                               = length(AO.(ifam).DeviceName);
127AO.(ifam).Monitor.Range(:,:)     = repmat([-10 10],nb,1);
128AO.(ifam).Monitor.TangoNames     = strcat(AO.(ifam).DeviceName, '/current');
129AO.(ifam).Status                 = ones(nb,1);
130AO.(ifam).Monitor.ModelVal       = zeros(1,nb);
131AO.(ifam).Monitor.TangoVal       = AO.(ifam).Monitor.ModelVal;
132AO.(ifam).ElementList            = 1:nb;
133
134AO.(ifam).Monitor.Mode           = Mode;
135AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(nb,1);
136AO.(ifam).Monitor.DataType       = 'Scalar';
137AO.(ifam).Monitor.Units          = 'Hardware';
138AO.(ifam).Monitor.HWUnits        = 'ampere';
139AO.(ifam).Monitor.PhysicsUnits   = 'radian';
140AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k;
141AO.(ifam).Monitor.Physics2HWFcn = @k2amp;
142
143%C = magnetcoefficients4LT1(AO.(ifam).FamilyName);
144C = magnetcoefficients(AO.(ifam).FamilyName);
145
146for ii=1:nb,
147    if ii == 2 || ii == 3 || ii == 6
148        % Defocusing quads
149        AO.(ifam).Monitor.HW2PhysicsParams{1}(ii,:)  = C.*[1 -1 1 -1 1 -1 1 -1];
150        AO.(ifam).Monitor.Physics2HWParams{1}(ii,:)  = C.*[1 -1 1 -1 1 -1 1 -1];
151    else
152        % Focusing quad
153        AO.(ifam).Monitor.HW2PhysicsParams{1}(ii,:)  = C;
154        AO.(ifam).Monitor.Physics2HWParams{1}(ii,:)  = C;
155    end
156end
157
158%AO.(ifam).Monitor.Range(:,:) = repmat([-5 5],nb,1); % 10 A for 0.8 mrad
159AO.(ifam).Setpoint = AO.(ifam).Monitor;
160AO.(ifam).Desired = AO.(ifam).Monitor;
161
162
163
164%% Horizontal Correctors
165ifam = 'CH';
166AO.(ifam).FamilyName           = 'CH';
167AO.(ifam).MemberOf             = {'MachineConfig'; 'HCM'; 'Magnet'; 'CH'; 'Archivable'};
168
169for ik = 1:3   
170    AO.(ifam).DeviceName{ik}  = ['LT1/AE/CH.' num2str(ik)];
171    AO.(ifam).CommonNames{ik} = ['CH' num2str(ik)];
172    AO.(ifam).DeviceList(ik,:) = [1 ik];
173end
174AO.(ifam).DeviceName               = AO.(ifam).DeviceName';
175AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
176
177nb                         = length(AO.(ifam).DeviceName);
178AO.(ifam).Monitor.Range(:,:)     = repmat([-1.5 1.5],nb,1);
179AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/current');
180AO.(ifam).Status               = ones(nb,1);
181AO.(ifam).Monitor.ModelVal     = zeros(1,nb);
182AO.(ifam).Monitor.TangoVal     = AO.(ifam).Monitor.ModelVal;
183AO.(ifam).ElementList           = 1:nb;
184
185AO.(ifam).Monitor.Mode           = Mode;
186AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(nb,1);
187AO.(ifam).Monitor.DataType       = 'Scalar';
188AO.(ifam).Monitor.Units          = 'Hardware';
189AO.(ifam).Monitor.HWUnits        = 'ampere';
190AO.(ifam).Monitor.PhysicsUnits   = 'radian';
191AO.(ifam).Monitor.HW2PhysicsFcn  = @amp2k;
192AO.(ifam).Monitor.Physics2HWFcn  = @k2amp;
193[C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName );
194AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients;
195AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams;
196
197AO.(ifam).Setpoint = AO.(ifam).Monitor;
198
199
200%% Vertical Correctors
201ifam = 'CV';
202
203AO.(ifam).FamilyName           = 'CV';
204AO.(ifam).MemberOf             = {'MachineConfig'; 'Magnet'; 'VCM'; 'CV'; 'Archivable'};
205AO.(ifam).Mode                 = Mode;
206
207for ik = 1:3   
208    AO.(ifam).DeviceName{ik}  = ['LT1/AE/CV.' num2str(ik)];
209    AO.(ifam).CommonNames{ik} = ['CV' num2str(ik)];
210    AO.(ifam).DeviceList(ik,:) = [1 ik];
211end
212AO.(ifam).DeviceName               = AO.(ifam).DeviceName';
213AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
214
215nb                             = length(AO.(ifam).DeviceName);
216AO.(ifam).Monitor.Range(:,:)     = repmat([-1.5 1.5],nb,1);
217AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/current');
218AO.(ifam).Status               = ones(nb,1);
219AO.(ifam).Monitor.ModelVal     = zeros(1,nb);
220AO.(ifam).Monitor.TangoVal     = AO.(ifam).Monitor.ModelVal;
221AO.(ifam).ElementList          = 1:nb;
222
223AO.(ifam).Monitor.Mode           = Mode;
224AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(nb,1);
225AO.(ifam).Monitor.DataType       = 'Scalar';
226AO.(ifam).Monitor.Units          = 'Hardware';
227AO.(ifam).Monitor.HWUnits        = 'ampere';
228AO.(ifam).Monitor.PhysicsUnits   = 'radian';
229AO.(ifam).Monitor.HW2PhysicsFcn  = @amp2k;
230AO.(ifam).Monitor.Physics2HWFcn  = @k2amp;
231[C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName );
232AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients;
233AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams;
234
235AO.(ifam).Setpoint = AO.(ifam).Monitor;
236
237%%%%%%%%%%%%%%%%%%
238%% cycleramp
239%%%%%%%%%%%%%%%%%
240
241%% cycleramp For dipole magnet
242ifam = 'CycleBEND';
243
244AO.(ifam).FamilyName             = 'CycleBEND';
245AO.(ifam).MemberOf               = {'CycleBEND'; 'Cyclage'};
246AO.(ifam).Mode                   = Mode;
247AO.(ifam).GroupId                = tango_group_create('Dipole');
248AO.(ifam).DeviceName             = 'LT1/AE/cycleD.1';
249%add devices to group
250tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName);
251AO.(ifam).Inom = 180;
252AO.(ifam).Imax = 250;
253AO.(ifam).Status = 1;
254
255%% cycleramp For H-corrector magnets
256ifam = 'CycleCH';
257
258AO.(ifam).FamilyName             = ifam;
259AO.(ifam).MemberOf               = {'CycleCOR'; 'CycleCH'; 'Cyclage'};
260AO.(ifam).Mode                   = Mode;
261AO.(ifam).GroupId                = tango_group_create('COR');
262AO.(ifam).DeviceName             = {'LT1/AE/cycleCH.1'; 'LT1/AE/cycleCH.2'; 'LT1/AE/cycleCH.3'};
263AO.(ifam).DeviceList             = [1 1; 1 2; 1 3];
264AO.(ifam).ElementList            = (1:3)';
265tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName');
266AO.(ifam).Inom = [1 2 3];
267AO.(ifam).Imax = 1.5*ones(1,3);
268AO.(ifam).Status = ones(3,1);
269AO.(ifam).Monitor.Mode           = Mode;
270AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(3,1);
271AO.(ifam).Monitor.DataType       = 'Scalar';
272AO.(ifam).Monitor.Units          = 'Hardware';
273AO.(ifam).Monitor.HWUnits        = 'ampere';
274AO.(ifam).Monitor.PhysicsUnits   = 'radian';
275AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/totalProgression');
276
277%% cycleramp For V-corrector magnets
278ifam = 'CycleCV';
279
280AO.(ifam).FamilyName             = ifam;
281AO.(ifam).MemberOf               = {'CycleCOR'; 'CycleCV'; 'Cyclage'};
282AO.(ifam).Mode                   = Mode;
283AO.(ifam).GroupId                = tango_group_create('COR');
284AO.(ifam).DeviceName             = {'LT1/AE/cycleCV.1'; 'LT1/AE/cycleCV.2'; 'LT1/AE/cycleCV.3'};
285AO.(ifam).DeviceList             = [1 1; 1 2; 1 3];
286AO.(ifam).ElementList            = [1 2 3]';
287%add devices to group
288tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName');
289AO.(ifam).Inom = [1 2 3];
290AO.(ifam).Imax = 1.5*ones(1,3);
291AO.(ifam).Status = ones(3,1);
292AO.(ifam).Monitor.Mode           = Mode;
293AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(3,1);
294AO.(ifam).Monitor.DataType       = 'Scalar';
295AO.(ifam).Monitor.Units          = 'Hardware';
296AO.(ifam).Monitor.HWUnits        = 'ampere';
297AO.(ifam).Monitor.PhysicsUnits   = 'radian';
298AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/totalProgression');
299
300%% cycleramp For quadrupoles magnets
301ifam = 'CycleQP';
302
303AO.(ifam).FamilyName             = ifam;
304AO.(ifam).MemberOf               = {'CycleQP'; 'Cyclage'};
305AO.(ifam).Mode                   = Mode;
306AO.(ifam).GroupId                = tango_group_create('Quadrupole');
307AO.(ifam).DeviceList             = [1 1; 1 2; 1 3; 1 4; 1 5; 1 6; 1 7];
308AO.(ifam).ElementList            = (1:7)';
309AO.(ifam).DeviceName             = {'LT1/AE/cycleQ.1';'LT1/AE/cycleQ.2'; ...
310                                    'LT1/AE/cycleQ.3';'LT1/AE/cycleQ.4'; ...
311                                    'LT1/AE/cycleQ.5';'LT1/AE/cycleQ.6'; ...
312                                    'LT1/AE/cycleQ.7'};
313%add devices to group
314tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName');
315%AO.(ifam).Imax = 8*ones(1,7);
316% modification mars 2006
317AO.(ifam).Imax = [8  -8  -8  8  8  -8  8 ];
318AO.(ifam).Status = ones(7,1);
319AO.(ifam).Monitor.Mode           = Mode;
320AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(7,1);
321AO.(ifam).Monitor.DataType       = 'Scalar';
322AO.(ifam).Monitor.Units          = 'Hardware';
323AO.(ifam).Monitor.HWUnits        = 'ampere';
324AO.(ifam).Monitor.PhysicsUnits   = 'radian';
325AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/totalProgression');
326
327%%%%%%%%%%%%%%%%%%
328%%% Diagnostics
329%%%%%%%%%%%%%%%%%%
330
331%% Charge Monitor - Moniteur de charge
332ifam = 'MC';
333
334AO.(ifam).FamilyName             = 'MC';
335AO.(ifam).MemberOf               = {'Diag'; 'MC'; 'Archivable'};
336AO.(ifam).Mode                   = Mode;
337AO.(ifam).DeviceName             = {'LT1/DG/MC'; 'LT1/DG/MC'};
338AO.(ifam).CommonNames            = ['mc1';'mc2';];
339AO.(ifam).DeviceList(:,:)        = [1 1; 1 2];
340AO.(ifam).ElementList            = [1 2]';
341AO.(ifam).Status                 = [1 1]';
342AO.(ifam).Monitor.TangoNames     = [strcat(AO.(ifam).DeviceName(1,:), '/qIct1'); ...
343                                    strcat(AO.(ifam).DeviceName(2,:), '/qIct2')];
344AO.(ifam).Monitor.Mode           = Mode;
345AO.(ifam).Monitor.Handles(:,1)   = [NaN; NaN]';
346AO.(ifam).Monitor.DataType       = 'Vector';
347AO.(ifam).Monitor.Units          = 'Hardware';
348AO.(ifam).Monitor.HWUnits        = 'nC';
349AO.(ifam).Monitor.PhysicsUnits   = 'nC';
350AO.(ifam).Monitor.HW2PhysicsParams = 1.0;
351AO.(ifam).Monitor.Physics2HWParams = 1.0;
352
353%%%%%%%%%%%%%%%%%%
354%% Vacuum system
355%%%%%%%%%%%%%%%%%%
356
357%% IonPump
358ifam = 'PI';
359AO.(ifam).FamilyName           = 'PI';
360AO.(ifam).MemberOf             = {'PlotFamily'; 'IonPump'; 'Pressure'; 'Archivable'};
361AO.(ifam).Monitor.Mode         = Mode;
362AO.(ifam).Monitor.DataType     = 'Scalar';
363
364for ik = 1:9   
365    AO.(ifam).DeviceName{ik}  = ['LT1/VI/PI55.' num2str(ik)];
366    AO.(ifam).CommonNames{ik} = ['PI' num2str(ik)];
367    AO.(ifam).DeviceList(ik,:) = [1 ik];
368    if (ik == 8)
369        AO.(ifam).DeviceName{ik} = ['LT1/VI/PI150.' num2str(ik)];
370    end
371end
372nb = size(AO.(ifam).DeviceList,1);
373AO.(ifam).Status                   = ones(nb,1);
374AO.(ifam).DeviceName               = AO.(ifam).DeviceName';
375AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
376AO.(ifam).ElementList              = (1:nb)';
377AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
378AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
379AO.(ifam).Monitor.HW2PhysicsParams = 1;
380AO.(ifam).Monitor.Physics2HWParams = 1;
381AO.(ifam).Monitor.Units            = 'Hardware';   
382AO.(ifam).Monitor.HWUnits          = 'mBar';
383AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
384
385%% PenningGauge
386ifam = 'JPEN';
387AO.(ifam).FamilyName           = 'JPEN';
388AO.(ifam).MemberOf             = {'PlotFamily'; 'PenningGauge'; 'Pressure'; 'Archivable'};
389AO.(ifam).Monitor.Mode         = Mode;
390AO.(ifam).Monitor.DataType     = 'Scalar';
391
392for ik = 1:2   
393    AO.(ifam).DeviceName{ik}  = ['LT1/VI/JPEN.' num2str(ik)];
394    AO.(ifam).CommonNames{ik} = ['JPEN' num2str(ik)];
395    AO.(ifam).DeviceList(ik,:) = [1 ik];
396end
397
398nb = size(AO.(ifam).DeviceList,1);
399AO.(ifam).Status                   = ones(nb,1);
400AO.(ifam).DeviceName               = AO.(ifam).DeviceName';
401AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
402AO.(ifam).ElementList              = (1:nb)';
403AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
404AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
405AO.(ifam).Monitor.HW2PhysicsParams = 1;
406AO.(ifam).Monitor.Physics2HWParams = 1;
407AO.(ifam).Monitor.Units            = 'Hardware';   
408AO.(ifam).Monitor.HWUnits          = 'mBar';
409AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
410
411%% PenningGauge
412ifam = 'JPIR';
413AO.(ifam).FamilyName           = 'JPIR';
414AO.(ifam).MemberOf             = {'PlotFamily'; 'PiraniGauge'; 'Pressure'; 'Archivable'};
415AO.(ifam).Monitor.Mode         = Mode;
416AO.(ifam).Monitor.DataType     = 'Scalar';
417
418for ik = 1:2   
419    AO.(ifam).DeviceName{ik}  = ['LT1/VI/JPIR.' num2str(ik)];
420    AO.(ifam).CommonNames{ik} = ['JPIR' num2str(ik)];
421    AO.(ifam).DeviceList(ik,:) = [1 ik];
422end
423
424nb = size(AO.(ifam).DeviceList,1);
425AO.(ifam).Status                   = ones(nb,1);
426AO.(ifam).DeviceName               = AO.(ifam).DeviceName';
427AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
428AO.(ifam).ElementList              = (1:nb)';
429AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
430AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
431AO.(ifam).Monitor.HW2PhysicsParams = 1;
432AO.(ifam).Monitor.Physics2HWParams = 1;
433AO.(ifam).Monitor.Units            = 'Hardware';   
434AO.(ifam).Monitor.HWUnits          = 'mBar';
435AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
436
437%% Synchronisation
438% ifam = 'SYNC'
439% AO.(ifam).FamilyName           = 'SYNC';
440% AO.(ifam).MemberOf             = {'Timing'};
441% AO.(ifam).Monitor.Mode         = Mode;
442% AO.(ifam).Monitor.DataType     = 'Scalar';
443%
444% AO.(ifam).DeviceName{ik}  = ['LT1/VI/JPIR.' num2str(ik)];
445%
446% AO.(ifam).Monitor.HWUnits      = 's';
447
448setao(AO);
449
450% The operational mode sets the path, filenames, and other important params
451% Run setoperationalmode after most of the AO is built so that the Units and Mode fields
452% can be set in setoperationalmode
453
454setoperationalmode(OperationalMode);
455
456%======================================================================
457%======================================================================
458%% Append Accelerator Toolbox information
459%======================================================================
460%======================================================================
461disp('** Initializing Accelerator Toolbox information');
462
463AO = getao;
464
465ATindx = atindex(THERING);  %structure with fields containing indices
466
467s = findspos(THERING,1:length(THERING)+1)';
468
469%% HORIZONTAL CORRECTORS
470ifam = 'CH';
471AO.(ifam).AT.ATType  = ifam;
472AO.(ifam).AT.ATIndex = ATindx.(ifam)(:);
473AO.(ifam).AT.ATIndex = AO.(ifam).AT.ATIndex(AO.(ifam).ElementList);   %not all correctors used
474AO.(ifam).Position   = s(AO.(ifam).AT.ATIndex);
475
476%% VERTICAL CORRECTORS
477ifam = 'CV';
478AO.(ifam).AT.ATType  = ifam;
479AO.(ifam).AT.ATIndex = ATindx.(ifam)(:);
480AO.(ifam).AT.ATIndex = AO.(ifam).AT.ATIndex(AO.(ifam).ElementList);   %not all correctors used
481AO.(ifam).Position   = s(AO.(ifam).AT.ATIndex);
482
483%% BENDING magnets
484ifam = 'BEND';
485AO.(ifam).AT.ATType  = ifam;
486AO.(ifam).AT.ATIndex = ATindx.(ifam)(:);
487AO.(ifam).Position   = reshape(s(AO.(ifam).AT.ATIndex),1,2);
488
489%% QUADRUPOLES
490ifam = 'QP';
491AO.(ifam).AT.ATType  = 'QUAD';
492AO.(ifam).AT.ATIndex = eval(['ATindx.' ifam '(:)']);
493AO.(ifam).AT.ATIndex = reshape(AO.(ifam).AT.ATIndex,2,7)';
494AO.(ifam).Position   = s(AO.(ifam).AT.ATIndex);
495
496% Save AO
497setao(AO);
498
499if iscontrolroom
500    switch2online;
501else
502    switch2sim;
503end
504
Note: See TracBrowser for help on using the repository browser.