source: MML/trunk/machine/SOLEIL/LT2/LT2init.m @ 5

Last change on this file since 5 was 5, checked in by zhangj, 10 years ago

ThomX MML version on the LAL server @ 17/12/2013

File size: 25.2 KB
Line 
1function LT2init(OperationalMode)
2% LT2INIT - Contructs an accelerator Object describing LT2
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    = 'LT2'; % Machine Name
72AD.Energy        = 2.75 ; % Energy in GeV
73
74
75setad(AD);   %load AcceleratorData
76
77%%%%%%%%%%%%%%%%%%%%
78% ACCELERATOR OBJECT
79%%%%%%%%%%%%%%%%%%%%
80
81setao([]);   %clear previous AcceleratorObjects
82
83
84%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85%% BPM data
86% status field designates if BPM in use
87%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
88ifam = 'BPMx';
89AO.(ifam).FamilyName               = ifam;
90AO.(ifam).FamilyType               = 'BPM';
91AO.(ifam).MemberOf                 = {'BPM'; 'HBPM'; 'PlotFamily'; 'Archivable'};
92AO.(ifam).Monitor.Mode             = Mode;
93AO.(ifam).Monitor.Units            = 'Hardware';
94AO.(ifam).Monitor.HWUnits          = 'mm';
95AO.(ifam).Monitor.PhysicsUnits     = 'meter';
96
97nb = 3;
98AO.(ifam).DeviceList =[1 1; 1 2; 1 3];
99AO.(ifam).ElementList = (1:nb)';
100AO.(ifam).DeviceName(:,:)               = {'LT2/DG/BPM.1'; 'LT2/DG/BPM.2'; 'LT2/DG/BPM.3'};
101AO.(ifam).Monitor.TangoNames(:,:)       = strcat(AO.(ifam).DeviceName, '/XPosSA');
102AO.(ifam).CommonNames(:,:)              = [repmat('BPMx',nb,1) num2str((1:nb)','%03d')];
103
104AO.(ifam).Status                        = ones(nb,1);
105AO.(ifam).Monitor.HW2PhysicsParams(:,:) = 1e-3*ones(nb,1);
106AO.(ifam).Monitor.Physics2HWParams(:,:) = 1e3*ones(nb,1);
107
108% 2 lignes ajoutes pour test debug bpm versus le reste du monde
109AO.(ifam).Monitor.Handles(:,1)       = NaN*ones(nb,1);
110AO.(ifam).Monitor.DataType         = 'Scalar';
111
112
113% Vertical plane
114ifam = 'BPMz';
115AO.(ifam) = AO.BPMx; % the same as BPMx
116% except those fields
117AO.(ifam).MemberOf                 = {'BPM'; 'VBPM'; 'PlotFamily'; 'Archivable'};
118AO.(ifam).FamilyName              = ifam;
119AO.(ifam).Monitor.TangoNames(:,:)  = strcat(AO.(ifam).DeviceName,'/ZPosSA');
120AO.(ifam).CommonNames(:,:) = [repmat('BPMz',nb,1) num2str((1:nb)','%03d')];
121
122% 2 lignes ajoutes pour test debug bpm versus le reste du monde
123AO.(ifam).Monitor.DataType         = 'Scalar';
124AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
125
126AO.(ifam).Status = AO.(ifam).Status(:);
127AO.(ifam).Status = AO.(ifam).Status(:);
128
129
130setao(AO); % mandatory to avoid empty AO message with magnetcoefficients
131
132%% Dipole
133ifam = 'BEND';
134
135AO.(ifam).FamilyName             = 'BEND';
136AO.(ifam).MemberOf               = {'MachineConfig'; 'Magnet'; 'BEND'; 'Archivable'};
137AO.(ifam).Mode                   = Mode;
138AO.(ifam).DeviceName{1}          = 'LT2/AE/D.1';
139AO.(ifam).CommonNames{1}         = 'DIP';
140AO.(ifam).Monitor.Range(:,:)     = [0 580];
141AO.(ifam).DeviceList(1,:)        = [1 1];
142AO.(ifam).ElementList            = 1;
143AO.(ifam).Status                 = 1;
144AO.(ifam).Monitor.TangoNames     = strcat(AO.(ifam).DeviceName, '/currentPM');
145AO.(ifam).Monitor.ModelVal       = 0;
146AO.(ifam).Monitor.TangoVal       = 0;
147AO.(ifam).Monitor.Mode           = Mode;
148AO.(ifam).Monitor.Handles(:,1)   = NaN;
149AO.(ifam).Monitor.DataType       = 'Scalar';
150AO.(ifam).Monitor.Units          = 'Hardware';
151AO.(ifam).Monitor.HWUnits        = 'ampere';
152AO.(ifam).Monitor.PhysicsUnits   = 'radian';
153AO.(ifam).Monitor.HW2PhysicsFcn  = @bend2gev;
154AO.(ifam).Monitor.Physics2HWFcn  = @gev2bend;
155setao(AO);
156
157[C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName );
158AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients;
159AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams;
160
161AO.(ifam).Setpoint = AO.(ifam).Monitor;
162AO.(ifam).Desired  = AO.(ifam).Monitor;
163
164%% Quadrupoles QP
165ifam = 'QP';
166
167AO.(ifam).FamilyName             = ifam;
168AO.(ifam).MemberOf               = {'MachineConfig'; 'Magnet'; 'QUAD'; 'Archivable'};
169AO.(ifam).Mode                   = Mode;
170
171for ik = 1:7   
172    AO.(ifam).DeviceName{ik}  = ['LT2/AE/Q.' num2str(ik)];
173    AO.(ifam).CommonNames{ik} = [ifam num2str(ik)];
174    AO.(ifam).DeviceList(ik,:) = [1 ik];
175end
176AO.(ifam).DeviceName             = AO.(ifam).DeviceName';
177AO.(ifam).CommonNames            = AO.(ifam).CommonNames';
178AO.(ifam).Monitor.Range(:,:)     = [0 270;-270 0;-270 0;0 270;0 270;-270 0;0 270]; %
179nb                               = length(AO.(ifam).DeviceName);
180AO.(ifam).Monitor.TangoNames     = strcat(AO.(ifam).DeviceName, '/current');
181
182AO.(ifam).Status                 = ones(nb,1);
183AO.(ifam).Monitor.ModelVal       = zeros(1,nb);
184AO.(ifam).Monitor.TangoVal       = AO.(ifam).Monitor.ModelVal;
185AO.(ifam).ElementList            = 1:nb;
186
187AO.(ifam).Monitor.Mode           = Mode;
188AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(nb,1);
189AO.(ifam).Monitor.DataType       = 'Scalar';
190AO.(ifam).Monitor.Units          = 'Hardware';
191AO.(ifam).Monitor.HWUnits        = 'ampere';
192AO.(ifam).Monitor.PhysicsUnits   = 'radian';
193AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k;
194AO.(ifam).Monitor.Physics2HWFcn = @k2amp;
195
196C = magnetcoefficients(AO.(ifam).FamilyName);
197
198for ii=1:nb,
199    if ii == 2 || ii == 3 || ii == 6
200        % Defocusing quads
201        AO.(ifam).Monitor.HW2PhysicsParams{1}(ii,:)  = C.*[1 -1 1 -1 1 -1 1 -1];
202        AO.(ifam).Monitor.Physics2HWParams{1}(ii,:)  = C.*[1 -1 1 -1 1 -1 1 -1];
203    else
204        % Focusing quad
205        AO.(ifam).Monitor.HW2PhysicsParams{1}(ii,:)  = C;
206        AO.(ifam).Monitor.Physics2HWParams{1}(ii,:)  = C;
207    end
208end
209
210%AO.(ifam).Monitor.Range(:,:) = repmat([-5 5],nb,1); % 10 A for 0.8 mrad
211AO.(ifam).Setpoint = AO.(ifam).Monitor;
212AO.(ifam).Desired = AO.(ifam).Monitor;
213AO.(ifam).Setpoint.TangoNames(:,:)  = strcat(AO.(ifam).DeviceName,'/currentPM');
214
215
216% %% Quadrupoles QF
217% ifam = 'QF';
218%
219% AO.(ifam).FamilyName             = ifam;
220% AO.(ifam).MemberOf               = {'MachineConfig'; 'Magnet'; 'QP'; 'Archivable'};
221% AO.(ifam).Mode                   = Mode;
222%
223% for ik = 1:7   
224%     AO.(ifam).DeviceName{ik}  = ['LT2/AE/Q.' num2str(ik)];
225%     AO.(ifam).CommonNames{ik} = [ifam num2str(ik)];
226%     AO.(ifam).DeviceList(ik,:) = [1 ik];
227% end
228% AO.(ifam).DeviceName             = AO.(ifam).DeviceName';
229% AO.(ifam).CommonNames            = AO.(ifam).CommonNames';
230%
231% nb                               = length(AO.(ifam).DeviceName);
232% AO.(ifam).Monitor.TangoNames     = strcat(AO.(ifam).DeviceName, '/current');
233% AO.(ifam).Status                 = ones(nb,1);
234% AO.(ifam).Monitor.ModelVal       = zeros(1,nb);
235% AO.(ifam).Monitor.TangoVal       = AO.(ifam).Monitor.ModelVal;
236% AO.(ifam).ElementList            = 1:nb;
237%
238% AO.(ifam).Monitor.Mode           = Mode;
239% AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(nb,1);
240% AO.(ifam).Monitor.DataType       = 'Scalar';
241% AO.(ifam).Monitor.Units          = 'Hardware';
242% AO.(ifam).Monitor.HWUnits        = 'ampere';
243% AO.(ifam).Monitor.PhysicsUnits   = 'radian';
244% AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k;
245% AO.(ifam).Monitor.Physics2HWFcn = @k2amp;
246%
247% C = magnetcoefficients(AO.(ifam).FamilyName);
248%
249% for ii=1:nb,
250%     if ii == 2 || ii == 3 || ii == 6
251%         % Defocusing quads
252%         AO.(ifam).Monitor.HW2PhysicsParams{1}(ii,:)  = C.*[1 -1 1 -1 1 -1 1 -1];
253%         AO.(ifam).Monitor.Physics2HWParams{1}(ii,:)  = C.*[1 -1 1 -1 1 -1 1 -1];
254%     else
255%         % Focusing quad
256%         AO.(ifam).Monitor.HW2PhysicsParams{1}(ii,:)  = C;
257%         AO.(ifam).Monitor.Physics2HWParams{1}(ii,:)  = C;
258%     end
259% end
260%
261% %AO.(ifam).Monitor.Range(:,:) = repmat([-5 5],nb,1); % 10 A for 0.8 mrad
262% AO.(ifam).Setpoint = AO.(ifam).Monitor;
263% AO.(ifam).Desired = AO.(ifam).Monitor;
264%
265%
266% %% Quadrupoles QD
267% ifam = 'QD';
268%
269% AO.(ifam).FamilyName             = ifam;
270% AO.(ifam).MemberOf               = {'MachineConfig'; 'Magnet'; 'QP'; 'Archivable'};
271% AO.(ifam).Mode                   = Mode;
272%
273% for ik = 1:7   
274%     AO.(ifam).DeviceName{ik}  = ['LT2/AE/Q.' num2str(ik)];
275%     AO.(ifam).CommonNames{ik} = [ifam num2str(ik)];
276%     AO.(ifam).DeviceList(ik,:) = [1 ik];
277% end
278% AO.(ifam).DeviceName             = AO.(ifam).DeviceName';
279% AO.(ifam).CommonNames            = AO.(ifam).CommonNames';
280%
281% nb                               = length(AO.(ifam).DeviceName);
282% AO.(ifam).Monitor.TangoNames     = strcat(AO.(ifam).DeviceName, '/current');
283% AO.(ifam).Status                 = ones(nb,1);
284% AO.(ifam).Monitor.ModelVal       = zeros(1,nb);
285% AO.(ifam).Monitor.TangoVal       = AO.(ifam).Monitor.ModelVal;
286% AO.(ifam).ElementList            = 1:nb;
287%
288% AO.(ifam).Monitor.Mode           = Mode;
289% AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(nb,1);
290% AO.(ifam).Monitor.DataType       = 'Scalar';
291% AO.(ifam).Monitor.Units          = 'Hardware';
292% AO.(ifam).Monitor.HWUnits        = 'ampere';
293% AO.(ifam).Monitor.PhysicsUnits   = 'radian';
294% AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k;
295% AO.(ifam).Monitor.Physics2HWFcn = @k2amp;
296%
297% C = magnetcoefficients(AO.(ifam).FamilyName);
298%
299% for ii=1:nb,
300%     if ii == 2 || ii == 3 || ii == 6
301%         % Defocusing quads
302%         AO.(ifam).Monitor.HW2PhysicsParams{1}(ii,:)  = C.*[1 -1 1 -1 1 -1 1 -1];
303%         AO.(ifam).Monitor.Physics2HWParams{1}(ii,:)  = C.*[1 -1 1 -1 1 -1 1 -1];
304%     else
305%         % Focusing quad
306%         AO.(ifam).Monitor.HW2PhysicsParams{1}(ii,:)  = C;
307%         AO.(ifam).Monitor.Physics2HWParams{1}(ii,:)  = C;
308%     end
309% end
310%
311% %AO.(ifam).Monitor.Range(:,:) = repmat([-5 5],nb,1); % 10 A for 0.8 mrad
312% AO.(ifam).Setpoint = AO.(ifam).Monitor;
313% AO.(ifam).Desired = AO.(ifam).Monitor;
314%
315
316
317%% Horizontal Correctors
318ifam = 'CH';
319AO.(ifam).FamilyName           = ifam;
320AO.(ifam).MemberOf             = {'MachineConfig'; 'Magnet'; 'HCM'; 'CH'; 'Archivable'};
321
322for ik = 1:3   
323    AO.(ifam).DeviceName{ik}  = ['LT2/AE/CH.' num2str(ik)];
324    AO.(ifam).CommonNames{ik} = [ifam num2str(ik)];
325    AO.(ifam).DeviceList(ik,:) = [1 ik];
326end
327AO.(ifam).DeviceName             = AO.(ifam).DeviceName';
328AO.(ifam).CommonNames            = AO.(ifam).CommonNames';
329
330
331nb                         = length(AO.(ifam).DeviceName);
332AO.(ifam).Monitor.Range(:,:)     = repmat([-8 8],nb,1);
333AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/current');
334AO.(ifam).Status               = ones(nb,1);
335AO.(ifam).Monitor.ModelVal     = zeros(1,nb);
336AO.(ifam).Monitor.TangoVal     = AO.(ifam).Monitor.ModelVal;
337AO.(ifam).ElementList           = 1:nb;
338
339AO.(ifam).Monitor.Mode           = Mode;
340AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(nb,1);
341AO.(ifam).Monitor.DataType       = 'Scalar';
342AO.(ifam).Monitor.Units          = 'Hardware';
343AO.(ifam).Monitor.HWUnits        = 'ampere';
344AO.(ifam).Monitor.PhysicsUnits   = 'radian';
345AO.(ifam).Monitor.HW2PhysicsFcn  = @amp2k;
346AO.(ifam).Monitor.Physics2HWFcn  = @k2amp;
347[C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName );
348AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients;
349AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams;
350
351AO.(ifam).Setpoint = AO.(ifam).Monitor;
352%AO.(ifam).Monitor.TangoNames     = strcat(AO.(ifam).DeviceName, '/currentPM');
353
354%% Vertical Correctors
355ifam = 'CV';
356
357AO.(ifam).FamilyName           = ifam;
358AO.(ifam).MemberOf             = {'MachineConfig'; 'Magnet'; 'VCM'; 'CV'; 'Archivable'};
359AO.(ifam).Mode                 = Mode;
360
361for ik = 1:5,
362    AO.(ifam).DeviceName{ik}  = ['LT2/AE/CV.' num2str(ik)];
363    AO.(ifam).CommonNames{ik} = [ifam num2str(ik)];
364    AO.(ifam).DeviceList(ik,:) = [1 ik];
365end
366AO.(ifam).DeviceName             = AO.(ifam).DeviceName';
367AO.(ifam).CommonNames            = AO.(ifam).CommonNames';
368
369nb                             = length(AO.(ifam).DeviceName);
370AO.(ifam).Monitor.Range(:,:)     = repmat([-8 8
371    ],nb,1);
372AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/current');
373AO.(ifam).Status               = ones(nb,1);
374AO.(ifam).Monitor.ModelVal     = zeros(1,nb);
375AO.(ifam).Monitor.TangoVal     = AO.(ifam).Monitor.ModelVal;
376AO.(ifam).ElementList          = 1:nb;
377
378AO.(ifam).Monitor.Mode           = Mode;
379AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(nb,1);
380AO.(ifam).Monitor.DataType       = 'Scalar';
381AO.(ifam).Monitor.Units          = 'Hardware';
382AO.(ifam).Monitor.HWUnits        = 'ampere';
383AO.(ifam).Monitor.PhysicsUnits   = 'radian';
384AO.(ifam).Monitor.HW2PhysicsFcn  = @amp2k;
385AO.(ifam).Monitor.Physics2HWFcn  = @k2amp;
386[C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName );
387AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients;
388AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams;
389
390AO.(ifam).Setpoint = AO.(ifam).Monitor;
391%AO.(ifam).Monitor.TangoNames     = strcat(AO.(ifam).DeviceName, '/currentPM');
392setao(AO);
393
394%%%%%%%%%%%%%%%%%%
395%% CYCLAGE
396%%%%%%%%%%%%%%%%%
397
398%% cycleramp For dipole magnet
399ifam = 'CycleBEND';
400ifamQ = 'BEND';
401
402AO.(ifam).FamilyName             = 'CycleBEND';
403AO.(ifam).MemberOf               = {'CycleBEND'; 'Cyclage'};
404AO.(ifam).Mode                   = Mode;
405dev = getfamilydata(ifamQ,'DeviceName');
406AO.(ifam).DeviceName             = regexprep(dev,'/D','/cycleD');
407AO.(ifam).DeviceList             = family2dev(ifamQ);
408AO.(ifam).ElementList            = family2elem(ifamQ);
409%AO.(ifam).GroupId                = tango_group_create('Dipole');
410AO.(ifam).DeviceName             = 'LT2/AE/cycleD.1';
411%add devices to group
412%tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName);
413%AO.(ifam).Inom = 180;
414AO.(ifam).Imax = 580;
415AO.(ifam).Status = 1;
416AO.(ifam).Monitor.Mode           = Mode;
417AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(7,1);
418AO.(ifam).Monitor.DataType       = 'Scalar';
419AO.(ifam).Monitor.Units          = 'Hardware';
420AO.(ifam).Monitor.HWUnits        = 'ampere';
421AO.(ifam).Monitor.PhysicsUnits   = 'radian';
422AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/totalProgression');
423
424
425
426%% cycleramp For H-corrector magnets
427ifam = 'CycleCH';
428ifamQ = 'CH';
429
430AO.(ifam).FamilyName             = ifam;
431AO.(ifam).MemberOf               = {'CycleCOR'; 'CycleCH'; 'Cyclage'};
432AO.(ifam).Mode                   = Mode;
433dev = getfamilydata(ifamQ,'DeviceName');
434AO.(ifam).DeviceName             = regexprep(dev,'/C','/cycleC');
435AO.(ifam).DeviceList             = family2dev(ifamQ);
436AO.(ifam).ElementList            = family2elem(ifamQ);
437%add devices to group
438%AO.(ifam).GroupId                = tango_group_create('COR');
439%tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName');
440AO.(ifam).Inom = [1 2 3];
441AO.(ifam).Imax = 7.9*ones(1,3);
442AO.(ifam).Status = ones(3,1);
443AO.(ifam).Monitor.Mode           = Mode;
444AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(3,1);
445AO.(ifam).Monitor.DataType       = 'Scalar';
446AO.(ifam).Monitor.Units          = 'Hardware';
447AO.(ifam).Monitor.HWUnits        = 'ampere';
448AO.(ifam).Monitor.PhysicsUnits   = 'radian';
449AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/totalProgression');
450
451%% cycleramp For V-corrector magnets
452ifam = 'CycleCV';
453ifamQ = 'CV';
454
455AO.(ifam).FamilyName             = ifam;
456AO.(ifam).MemberOf               = {'CycleCOR'; 'CycleCV'; 'Cyclage'};
457AO.(ifam).Mode                   = Mode;
458dev = getfamilydata(ifamQ,'DeviceName');
459AO.(ifam).DeviceName             = regexprep(dev,'/C','/cycleC');
460AO.(ifam).DeviceList             = family2dev(ifamQ);
461AO.(ifam).ElementList            = family2elem(ifamQ);
462%add devices to group
463%AO.(ifam).GroupId                = tango_group_create('COR');
464%tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName');
465%AO.(ifam).Inom = [1 2 3];
466AO.(ifam).Imax = 7.9*ones(1,5);
467AO.(ifam).Status = ones(5,1);
468AO.(ifam).Monitor.Mode           = Mode;
469AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(5,1);
470AO.(ifam).Monitor.DataType       = 'Scalar';
471AO.(ifam).Monitor.Units          = 'Hardware';
472AO.(ifam).Monitor.HWUnits        = 'ampere';
473AO.(ifam).Monitor.PhysicsUnits   = 'radian';
474AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/totalProgression');
475
476%% cycleramp For quadrupoles magnets
477ifam = 'CycleQP';
478ifamQ = 'QP';
479
480AO.(ifam).FamilyName             = ifam;
481AO.(ifam).MemberOf               = {'CycleQP'; 'Cyclage'};
482AO.(ifam).Mode                   = Mode;
483dev = getfamilydata(ifamQ,'DeviceName');
484AO.(ifam).DeviceName             = regexprep(dev,'/Q','/cycleQ');
485AO.(ifam).DeviceList             = family2dev(ifamQ);
486AO.(ifam).ElementList            = family2elem(ifamQ);
487%add devices to group
488%AO.(ifam).GroupId                = tango_group_create('Quadrupole');
489%tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName');
490nb = length(AO.(ifam).ElementList);
491AO.(ifam).Imax = [274  -349  -274  274  274  -274  274 ];
492AO.(ifam).Status = ones(7,1);
493AO.(ifam).Monitor.Mode           = Mode;
494AO.(ifam).Monitor.Handles(:,1)   = NaN*ones(7,1);
495AO.(ifam).Monitor.DataType       = 'Scalar';
496AO.(ifam).Monitor.Units          = 'Hardware';
497AO.(ifam).Monitor.HWUnits        = 'ampere';
498AO.(ifam).Monitor.PhysicsUnits   = 'radian';
499AO.(ifam).Monitor.TangoNames   = strcat(AO.(ifam).DeviceName, '/totalProgression');
500
501% %%%%%%%%%%%%%%%%%%
502% %%% Diagnostics
503% %%%%%%%%%%%%%%%%%%
504%
505% %% Charge Monitor - Moniteur de charge
506% ifam = 'MC';
507%
508% AO.(ifam).FamilyName             = 'MC';
509% AO.(ifam).MemberOf               = {'Diag'; 'MC'; 'Archivable'};
510% AO.(ifam).Mode                   = Mode;
511% AO.(ifam).DeviceName             = {'LT2/DG/MC'; 'LT2/DG/MC'};
512% AO.(ifam).CommonNames            = ['mc1';'mc2';];
513% AO.(ifam).DeviceList(:,:)        = [1 1; 1 2];
514% AO.(ifam).ElementList            = [1 2]';
515% AO.(ifam).Status                 = [1 1]';
516% AO.(ifam).Monitor.TangoNames     = [strcat(AO.(ifam).DeviceName(1,:), '/qIct1'); ...
517%                                     strcat(AO.(ifam).DeviceName(2,:), '/qIct2')];
518% AO.(ifam).Monitor.Mode           = Mode;
519% AO.(ifam).Monitor.Handles(:,1)   = [NaN; NaN]';
520% AO.(ifam).Monitor.DataType       = 'Vector';
521% AO.(ifam).Monitor.Units          = 'Hardware';
522% AO.(ifam).Monitor.HWUnits        = 'nC';
523% AO.(ifam).Monitor.PhysicsUnits   = 'nC';
524% AO.(ifam).Monitor.HW2PhysicsParams = 1.0;
525% AO.(ifam).Monitor.Physics2HWParams = 1.0;
526
527%%%%%%%%%%%%%%%%%%
528%% Vacuum system
529%%%%%%%%%%%%%%%%%%
530
531%% IonPump
532ifam = 'PI';
533AO.(ifam).FamilyName           = 'PI';
534AO.(ifam).MemberOf             = {'PlotFamily'; 'IonPump'; 'Pressure'; 'Archivable'};
535AO.(ifam).Monitor.Mode         = Mode;
536AO.(ifam).Monitor.DataType     = 'Scalar';
537
538for ik = 1:15   
539    if ik >= 10
540        AO.(ifam).DeviceName{ik}  = ['LT2/VI/PI.' num2str(ik)];
541    else
542        AO.(ifam).DeviceName{ik}  = ['LT2/VI/PI.0' num2str(ik)];
543    end
544    AO.(ifam).CommonNames{ik} = ['PI' num2str(ik)];
545    AO.(ifam).DeviceList(ik,:) = [1 ik];
546end
547
548nb = size(AO.(ifam).DeviceList,1);
549AO.(ifam).Status                   = ones(nb,1);
550AO.(ifam).DeviceName               = AO.(ifam).DeviceName';
551AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
552AO.(ifam).ElementList              = (1:nb)';
553AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
554AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
555AO.(ifam).Monitor.HW2PhysicsParams = 1;
556AO.(ifam).Monitor.Physics2HWParams = 1;
557AO.(ifam).Monitor.Units            = 'Hardware';   
558AO.(ifam).Monitor.HWUnits          = 'mBar';
559AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
560
561%% PenningGauge
562ifam = 'JPEN';
563AO.(ifam).FamilyName           = 'JPEN';
564AO.(ifam).MemberOf             = {'PlotFamily'; 'PenningGauge'; 'Pressure'; 'Archivable'};
565AO.(ifam).Monitor.Mode         = Mode;
566AO.(ifam).Monitor.DataType     = 'Scalar';
567
568for ik = 1:3
569    AO.(ifam).DeviceName{ik}  = ['LT2/VI/JPEN.' num2str(ik)];
570    AO.(ifam).CommonNames{ik} = ['JPEN' num2str(ik)];
571    AO.(ifam).DeviceList(ik,:) = [1 ik];
572end
573
574nb = size(AO.(ifam).DeviceList,1);
575AO.(ifam).Status                   = ones(nb,1);
576AO.(ifam).DeviceName               = AO.(ifam).DeviceName';
577AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
578AO.(ifam).ElementList              = (1:nb)';
579AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
580AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
581AO.(ifam).Monitor.HW2PhysicsParams = 1;
582AO.(ifam).Monitor.Physics2HWParams = 1;
583AO.(ifam).Monitor.Units            = 'Hardware';   
584AO.(ifam).Monitor.HWUnits          = 'mBar';
585AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
586
587%% PenningGauge
588ifam = 'JPIR';
589AO.(ifam).FamilyName           = 'JPIR';
590AO.(ifam).MemberOf             = {'PlotFamily'; 'PiraniGauge'; 'Pressure'; 'Archivable'};
591AO.(ifam).Monitor.Mode         = Mode;
592AO.(ifam).Monitor.DataType     = 'Scalar';
593
594for ik = 1:3   
595    AO.(ifam).DeviceName{ik}  = ['LT2/VI/JPIR.' num2str(ik)];
596    AO.(ifam).CommonNames{ik} = ['JPIR' num2str(ik)];
597    AO.(ifam).DeviceList(ik,:) = [1 ik];
598end
599
600nb = size(AO.(ifam).DeviceList,1);
601AO.(ifam).Status                   = ones(nb,1);
602AO.(ifam).DeviceName               = AO.(ifam).DeviceName';
603AO.(ifam).CommonNames              = AO.(ifam).CommonNames';
604AO.(ifam).ElementList              = (1:nb)';
605AO.(ifam).Monitor.Handles(:,1)     = NaN*ones(nb,1);
606AO.(ifam).Monitor.TangoNames       = strcat(AO.(ifam).DeviceName, '/pressure');
607AO.(ifam).Monitor.HW2PhysicsParams = 1;
608AO.(ifam).Monitor.Physics2HWParams = 1;
609AO.(ifam).Monitor.Units            = 'Hardware';   
610AO.(ifam).Monitor.HWUnits          = 'mBar';
611AO.(ifam).Monitor.PhysicsUnits     = 'mBar';
612
613%% Synchronisation
614% ifam = 'SYNC'
615% AO.(ifam).FamilyName           = 'SYNC';
616% AO.(ifam).MemberOf             = {'Timing'};
617% AO.(ifam).Monitor.Mode         = Mode;
618% AO.(ifam).Monitor.DataType     = 'Scalar';
619%
620% AO.(ifam).DeviceName{ik}  = ['LT2/VI/JPIR.' num2str(ik)];
621%
622% AO.(ifam).Monitor.HWUnits      = 's';
623
624setao(AO);
625
626% The operational mode sets the path, filenames, and other important params
627% Run setoperationalmode after most of the AO is built so that the Units and Mode fields
628% can be set in setoperationalmode
629
630setoperationalmode(OperationalMode);
631
632
633%======================================================================
634%======================================================================
635%% Append Accelerator Toolbox information
636%======================================================================
637%======================================================================
638disp('** Initializing Accelerator Toolbox information');
639
640AO = getao;
641
642ATindx = atindex(THERING);  %structure with fields containing indices
643
644s = findspos(THERING,1:length(THERING)+1)';
645
646%% HORIZONTAL CORRECTORS
647ifam = ('CH');
648AO.(ifam).AT.ATType  = ifam;
649AO.(ifam).AT.ATIndex = ATindx.(ifam)(:);
650AO.(ifam).AT.ATIndex = AO.(ifam).AT.ATIndex(AO.(ifam).ElementList);   %not all correctors used
651AO.(ifam).Position   = s(AO.(ifam).AT.ATIndex);
652
653%% VERTICAL CORRECTORS
654ifam = ('CV');
655AO.(ifam).AT.ATType  = ifam;
656AO.(ifam).AT.ATIndex = ATindx.(ifam)(:);
657AO.(ifam).AT.ATIndex = AO.(ifam).AT.ATIndex(AO.(ifam).ElementList);   %not all correctors used
658AO.(ifam).Position   = s(AO.(ifam).AT.ATIndex);
659
660%% BENDING magnets
661ifam = ('BEND');
662AO.(ifam).AT.ATType  = ifam;
663AO.(ifam).AT.ATIndex = ATindx.(ifam)(:);
664AO.(ifam).Position   = reshape(s(AO.(ifam).AT.ATIndex),1,4);
665
666%% QUADRUPOLES
667ifam = 'QP';
668AO.(ifam).AT.ATType  = 'QUAD';
669AO.(ifam).AT.ATIndex = eval(['ATindx.' ifam '(:)']);
670AO.(ifam).AT.ATIndex = reshape(AO.(ifam).AT.ATIndex,1,7)';
671AO.(ifam).Position   = s(AO.(ifam).AT.ATIndex);
672
673
674% %% QUADRUPOLES
675% ifam = 'QF';
676% AT.(ifam).AT.ATType  = 'QUAD';
677% AT.(ifam).AT.ATIndex = eval(['ATindx.' ifam '(:)']);
678% AT.(ifam).AT.ATIndex = reshape(AT.(ifam).AT.ATIndex,1,4)';
679% AT.(ifam).Position   = s(AT.(ifam).AT.ATIndex);
680%
681% %% QUADRUPOLES
682% ifam = 'QD';
683% AT.(ifam).AT.ATType  = 'QUAD';
684% AT.(ifam).AT.ATIndex = eval(['ATindx.' ifam '(:)']);
685% AT.(ifam).AT.ATIndex = reshape(AT.(ifam).AT.ATIndex,1,3)';
686% AT.(ifam).Position   = s(AT.(ifam).AT.ATIndex);
687
688% Save AO
689setao(AO);
690
691if iscontrolroom
692    switch2online;
693else
694    switch2sim;
695end
Note: See TracBrowser for help on using the repository browser.