1 | function 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 | |
---|
63 | if nargin < 1 |
---|
64 | OperationalMode = 1; |
---|
65 | end |
---|
66 | |
---|
67 | global GLOBVAL THERING |
---|
68 | |
---|
69 | Mode = 'online'; |
---|
70 | setad([]); %clear AcceleratorData memory |
---|
71 | AD.SubMachine = 'LT1'; % Will already be defined if setpathmml was used |
---|
72 | AD.Energy = 0.110; % Energy in GeV |
---|
73 | |
---|
74 | setad(AD); %load AcceleratorData |
---|
75 | |
---|
76 | %%%%%%%%%%%%%%%%%%%% |
---|
77 | % ACCELERATOR OBJECT |
---|
78 | %%%%%%%%%%%%%%%%%%%% |
---|
79 | |
---|
80 | setao([]); %clear previous AcceleratorObjects |
---|
81 | |
---|
82 | %% Dipole |
---|
83 | ifam = 'BEND'; |
---|
84 | |
---|
85 | AO.(ifam).FamilyName = 'BEND'; |
---|
86 | AO.(ifam).MemberOf = {'MachineConfig'; 'Magnet'; 'BEND'; 'Archivable'}; |
---|
87 | AO.(ifam).Mode = Mode; |
---|
88 | AO.(ifam).DeviceName{1} = 'LT1/AE/D.1'; |
---|
89 | AO.(ifam).CommonNames{1} = 'DIP'; |
---|
90 | AO.(ifam).DeviceList(1,:) = [1 1]; |
---|
91 | AO.(ifam).ElementList = 1; |
---|
92 | AO.(ifam).Status = 1; |
---|
93 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/current'); |
---|
94 | AO.(ifam).Monitor.ModelVal = 0; |
---|
95 | AO.(ifam).Monitor.TangoVal = 0; |
---|
96 | AO.(ifam).Monitor.Mode = Mode; |
---|
97 | AO.(ifam).Monitor.Handles(:,1) = NaN; |
---|
98 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
99 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
100 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
101 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
102 | AO.(ifam).Monitor.HW2PhysicsFcn = @bend2gev; |
---|
103 | AO.(ifam).Monitor.Physics2HWFcn = @gev2bend; |
---|
104 | setao(AO); |
---|
105 | [C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName ); |
---|
106 | AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients; |
---|
107 | AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams; |
---|
108 | |
---|
109 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
110 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
111 | |
---|
112 | %% Quadrupoles |
---|
113 | ifam = 'QP'; |
---|
114 | |
---|
115 | AO.(ifam).FamilyName = 'QP'; |
---|
116 | AO.(ifam).MemberOf = {'MachineConfig'; 'Magnet'; 'QP'; 'Archivable'}; |
---|
117 | AO.(ifam).Mode = Mode; |
---|
118 | for 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]; |
---|
122 | end |
---|
123 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
124 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
125 | |
---|
126 | nb = length(AO.(ifam).DeviceName); |
---|
127 | AO.(ifam).Monitor.Range(:,:) = repmat([-10 10],nb,1); |
---|
128 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/current'); |
---|
129 | AO.(ifam).Status = ones(nb,1); |
---|
130 | AO.(ifam).Monitor.ModelVal = zeros(1,nb); |
---|
131 | AO.(ifam).Monitor.TangoVal = AO.(ifam).Monitor.ModelVal; |
---|
132 | AO.(ifam).ElementList = 1:nb; |
---|
133 | |
---|
134 | AO.(ifam).Monitor.Mode = Mode; |
---|
135 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
136 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
137 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
138 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
139 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
140 | AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k; |
---|
141 | AO.(ifam).Monitor.Physics2HWFcn = @k2amp; |
---|
142 | |
---|
143 | %C = magnetcoefficients4LT1(AO.(ifam).FamilyName); |
---|
144 | C = magnetcoefficients(AO.(ifam).FamilyName); |
---|
145 | |
---|
146 | for 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 |
---|
156 | end |
---|
157 | |
---|
158 | %AO.(ifam).Monitor.Range(:,:) = repmat([-5 5],nb,1); % 10 A for 0.8 mrad |
---|
159 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
160 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
161 | |
---|
162 | |
---|
163 | |
---|
164 | %% Horizontal Correctors |
---|
165 | ifam = 'CH'; |
---|
166 | AO.(ifam).FamilyName = 'CH'; |
---|
167 | AO.(ifam).MemberOf = {'MachineConfig'; 'HCM'; 'Magnet'; 'CH'; 'Archivable'}; |
---|
168 | |
---|
169 | for 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]; |
---|
173 | end |
---|
174 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
175 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
176 | |
---|
177 | nb = length(AO.(ifam).DeviceName); |
---|
178 | AO.(ifam).Monitor.Range(:,:) = repmat([-1.5 1.5],nb,1); |
---|
179 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/current'); |
---|
180 | AO.(ifam).Status = ones(nb,1); |
---|
181 | AO.(ifam).Monitor.ModelVal = zeros(1,nb); |
---|
182 | AO.(ifam).Monitor.TangoVal = AO.(ifam).Monitor.ModelVal; |
---|
183 | AO.(ifam).ElementList = 1:nb; |
---|
184 | |
---|
185 | AO.(ifam).Monitor.Mode = Mode; |
---|
186 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
187 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
188 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
189 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
190 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
191 | AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k; |
---|
192 | AO.(ifam).Monitor.Physics2HWFcn = @k2amp; |
---|
193 | [C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName ); |
---|
194 | AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients; |
---|
195 | AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams; |
---|
196 | |
---|
197 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
198 | |
---|
199 | |
---|
200 | %% Vertical Correctors |
---|
201 | ifam = 'CV'; |
---|
202 | |
---|
203 | AO.(ifam).FamilyName = 'CV'; |
---|
204 | AO.(ifam).MemberOf = {'MachineConfig'; 'Magnet'; 'VCM'; 'CV'; 'Archivable'}; |
---|
205 | AO.(ifam).Mode = Mode; |
---|
206 | |
---|
207 | for 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]; |
---|
211 | end |
---|
212 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
213 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
214 | |
---|
215 | nb = length(AO.(ifam).DeviceName); |
---|
216 | AO.(ifam).Monitor.Range(:,:) = repmat([-1.5 1.5],nb,1); |
---|
217 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/current'); |
---|
218 | AO.(ifam).Status = ones(nb,1); |
---|
219 | AO.(ifam).Monitor.ModelVal = zeros(1,nb); |
---|
220 | AO.(ifam).Monitor.TangoVal = AO.(ifam).Monitor.ModelVal; |
---|
221 | AO.(ifam).ElementList = 1:nb; |
---|
222 | |
---|
223 | AO.(ifam).Monitor.Mode = Mode; |
---|
224 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
225 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
226 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
227 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
228 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
229 | AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k; |
---|
230 | AO.(ifam).Monitor.Physics2HWFcn = @k2amp; |
---|
231 | [C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName ); |
---|
232 | AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients; |
---|
233 | AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams; |
---|
234 | |
---|
235 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
236 | |
---|
237 | %%%%%%%%%%%%%%%%%% |
---|
238 | %% cycleramp |
---|
239 | %%%%%%%%%%%%%%%%% |
---|
240 | |
---|
241 | %% cycleramp For dipole magnet |
---|
242 | ifam = 'CycleBEND'; |
---|
243 | |
---|
244 | AO.(ifam).FamilyName = 'CycleBEND'; |
---|
245 | AO.(ifam).MemberOf = {'CycleBEND'; 'Cyclage'}; |
---|
246 | AO.(ifam).Mode = Mode; |
---|
247 | AO.(ifam).GroupId = tango_group_create('Dipole'); |
---|
248 | AO.(ifam).DeviceName = 'LT1/AE/cycleD.1'; |
---|
249 | %add devices to group |
---|
250 | tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName); |
---|
251 | AO.(ifam).Inom = 180; |
---|
252 | AO.(ifam).Imax = 250; |
---|
253 | AO.(ifam).Status = 1; |
---|
254 | |
---|
255 | %% cycleramp For H-corrector magnets |
---|
256 | ifam = 'CycleCH'; |
---|
257 | |
---|
258 | AO.(ifam).FamilyName = ifam; |
---|
259 | AO.(ifam).MemberOf = {'CycleCOR'; 'CycleCH'; 'Cyclage'}; |
---|
260 | AO.(ifam).Mode = Mode; |
---|
261 | AO.(ifam).GroupId = tango_group_create('COR'); |
---|
262 | AO.(ifam).DeviceName = {'LT1/AE/cycleCH.1'; 'LT1/AE/cycleCH.2'; 'LT1/AE/cycleCH.3'}; |
---|
263 | AO.(ifam).DeviceList = [1 1; 1 2; 1 3]; |
---|
264 | AO.(ifam).ElementList = (1:3)'; |
---|
265 | tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName'); |
---|
266 | AO.(ifam).Inom = [1 2 3]; |
---|
267 | AO.(ifam).Imax = 1.5*ones(1,3); |
---|
268 | AO.(ifam).Status = ones(3,1); |
---|
269 | AO.(ifam).Monitor.Mode = Mode; |
---|
270 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(3,1); |
---|
271 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
272 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
273 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
274 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
275 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/totalProgression'); |
---|
276 | |
---|
277 | %% cycleramp For V-corrector magnets |
---|
278 | ifam = 'CycleCV'; |
---|
279 | |
---|
280 | AO.(ifam).FamilyName = ifam; |
---|
281 | AO.(ifam).MemberOf = {'CycleCOR'; 'CycleCV'; 'Cyclage'}; |
---|
282 | AO.(ifam).Mode = Mode; |
---|
283 | AO.(ifam).GroupId = tango_group_create('COR'); |
---|
284 | AO.(ifam).DeviceName = {'LT1/AE/cycleCV.1'; 'LT1/AE/cycleCV.2'; 'LT1/AE/cycleCV.3'}; |
---|
285 | AO.(ifam).DeviceList = [1 1; 1 2; 1 3]; |
---|
286 | AO.(ifam).ElementList = [1 2 3]'; |
---|
287 | %add devices to group |
---|
288 | tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName'); |
---|
289 | AO.(ifam).Inom = [1 2 3]; |
---|
290 | AO.(ifam).Imax = 1.5*ones(1,3); |
---|
291 | AO.(ifam).Status = ones(3,1); |
---|
292 | AO.(ifam).Monitor.Mode = Mode; |
---|
293 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(3,1); |
---|
294 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
295 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
296 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
297 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
298 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/totalProgression'); |
---|
299 | |
---|
300 | %% cycleramp For quadrupoles magnets |
---|
301 | ifam = 'CycleQP'; |
---|
302 | |
---|
303 | AO.(ifam).FamilyName = ifam; |
---|
304 | AO.(ifam).MemberOf = {'CycleQP'; 'Cyclage'}; |
---|
305 | AO.(ifam).Mode = Mode; |
---|
306 | AO.(ifam).GroupId = tango_group_create('Quadrupole'); |
---|
307 | AO.(ifam).DeviceList = [1 1; 1 2; 1 3; 1 4; 1 5; 1 6; 1 7]; |
---|
308 | AO.(ifam).ElementList = (1:7)'; |
---|
309 | AO.(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 |
---|
314 | tango_group_add(AO.(ifam).GroupId, AO.(ifam).DeviceName'); |
---|
315 | %AO.(ifam).Imax = 8*ones(1,7); |
---|
316 | % modification mars 2006 |
---|
317 | AO.(ifam).Imax = [8 -8 -8 8 8 -8 8 ]; |
---|
318 | AO.(ifam).Status = ones(7,1); |
---|
319 | AO.(ifam).Monitor.Mode = Mode; |
---|
320 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(7,1); |
---|
321 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
322 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
323 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
324 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
325 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/totalProgression'); |
---|
326 | |
---|
327 | %%%%%%%%%%%%%%%%%% |
---|
328 | %%% Diagnostics |
---|
329 | %%%%%%%%%%%%%%%%%% |
---|
330 | |
---|
331 | %% Charge Monitor - Moniteur de charge |
---|
332 | ifam = 'MC'; |
---|
333 | |
---|
334 | AO.(ifam).FamilyName = 'MC'; |
---|
335 | AO.(ifam).MemberOf = {'Diag'; 'MC'; 'Archivable'}; |
---|
336 | AO.(ifam).Mode = Mode; |
---|
337 | AO.(ifam).DeviceName = {'LT1/DG/MC'; 'LT1/DG/MC'}; |
---|
338 | AO.(ifam).CommonNames = ['mc1';'mc2';]; |
---|
339 | AO.(ifam).DeviceList(:,:) = [1 1; 1 2]; |
---|
340 | AO.(ifam).ElementList = [1 2]'; |
---|
341 | AO.(ifam).Status = [1 1]'; |
---|
342 | AO.(ifam).Monitor.TangoNames = [strcat(AO.(ifam).DeviceName(1,:), '/qIct1'); ... |
---|
343 | strcat(AO.(ifam).DeviceName(2,:), '/qIct2')]; |
---|
344 | AO.(ifam).Monitor.Mode = Mode; |
---|
345 | AO.(ifam).Monitor.Handles(:,1) = [NaN; NaN]'; |
---|
346 | AO.(ifam).Monitor.DataType = 'Vector'; |
---|
347 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
348 | AO.(ifam).Monitor.HWUnits = 'nC'; |
---|
349 | AO.(ifam).Monitor.PhysicsUnits = 'nC'; |
---|
350 | AO.(ifam).Monitor.HW2PhysicsParams = 1.0; |
---|
351 | AO.(ifam).Monitor.Physics2HWParams = 1.0; |
---|
352 | |
---|
353 | %%%%%%%%%%%%%%%%%% |
---|
354 | %% Vacuum system |
---|
355 | %%%%%%%%%%%%%%%%%% |
---|
356 | |
---|
357 | %% IonPump |
---|
358 | ifam = 'PI'; |
---|
359 | AO.(ifam).FamilyName = 'PI'; |
---|
360 | AO.(ifam).MemberOf = {'PlotFamily'; 'IonPump'; 'Pressure'; 'Archivable'}; |
---|
361 | AO.(ifam).Monitor.Mode = Mode; |
---|
362 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
363 | |
---|
364 | for 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 |
---|
371 | end |
---|
372 | nb = size(AO.(ifam).DeviceList,1); |
---|
373 | AO.(ifam).Status = ones(nb,1); |
---|
374 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
375 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
376 | AO.(ifam).ElementList = (1:nb)'; |
---|
377 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
378 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
379 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
380 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
381 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
382 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
383 | AO.(ifam).Monitor.PhysicsUnits = 'mBar'; |
---|
384 | |
---|
385 | %% PenningGauge |
---|
386 | ifam = 'JPEN'; |
---|
387 | AO.(ifam).FamilyName = 'JPEN'; |
---|
388 | AO.(ifam).MemberOf = {'PlotFamily'; 'PenningGauge'; 'Pressure'; 'Archivable'}; |
---|
389 | AO.(ifam).Monitor.Mode = Mode; |
---|
390 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
391 | |
---|
392 | for 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]; |
---|
396 | end |
---|
397 | |
---|
398 | nb = size(AO.(ifam).DeviceList,1); |
---|
399 | AO.(ifam).Status = ones(nb,1); |
---|
400 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
401 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
402 | AO.(ifam).ElementList = (1:nb)'; |
---|
403 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
404 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
405 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
406 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
407 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
408 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
409 | AO.(ifam).Monitor.PhysicsUnits = 'mBar'; |
---|
410 | |
---|
411 | %% PenningGauge |
---|
412 | ifam = 'JPIR'; |
---|
413 | AO.(ifam).FamilyName = 'JPIR'; |
---|
414 | AO.(ifam).MemberOf = {'PlotFamily'; 'PiraniGauge'; 'Pressure'; 'Archivable'}; |
---|
415 | AO.(ifam).Monitor.Mode = Mode; |
---|
416 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
417 | |
---|
418 | for 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]; |
---|
422 | end |
---|
423 | |
---|
424 | nb = size(AO.(ifam).DeviceList,1); |
---|
425 | AO.(ifam).Status = ones(nb,1); |
---|
426 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
427 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
428 | AO.(ifam).ElementList = (1:nb)'; |
---|
429 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
430 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
431 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
432 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
433 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
434 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
435 | AO.(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 | |
---|
448 | setao(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 | |
---|
454 | setoperationalmode(OperationalMode); |
---|
455 | |
---|
456 | %====================================================================== |
---|
457 | %====================================================================== |
---|
458 | %% Append Accelerator Toolbox information |
---|
459 | %====================================================================== |
---|
460 | %====================================================================== |
---|
461 | disp('** Initializing Accelerator Toolbox information'); |
---|
462 | |
---|
463 | AO = getao; |
---|
464 | |
---|
465 | ATindx = atindex(THERING); %structure with fields containing indices |
---|
466 | |
---|
467 | s = findspos(THERING,1:length(THERING)+1)'; |
---|
468 | |
---|
469 | %% HORIZONTAL CORRECTORS |
---|
470 | ifam = 'CH'; |
---|
471 | AO.(ifam).AT.ATType = ifam; |
---|
472 | AO.(ifam).AT.ATIndex = ATindx.(ifam)(:); |
---|
473 | AO.(ifam).AT.ATIndex = AO.(ifam).AT.ATIndex(AO.(ifam).ElementList); %not all correctors used |
---|
474 | AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
475 | |
---|
476 | %% VERTICAL CORRECTORS |
---|
477 | ifam = 'CV'; |
---|
478 | AO.(ifam).AT.ATType = ifam; |
---|
479 | AO.(ifam).AT.ATIndex = ATindx.(ifam)(:); |
---|
480 | AO.(ifam).AT.ATIndex = AO.(ifam).AT.ATIndex(AO.(ifam).ElementList); %not all correctors used |
---|
481 | AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
482 | |
---|
483 | %% BENDING magnets |
---|
484 | ifam = 'BEND'; |
---|
485 | AO.(ifam).AT.ATType = ifam; |
---|
486 | AO.(ifam).AT.ATIndex = ATindx.(ifam)(:); |
---|
487 | AO.(ifam).Position = reshape(s(AO.(ifam).AT.ATIndex),1,2); |
---|
488 | |
---|
489 | %% QUADRUPOLES |
---|
490 | ifam = 'QP'; |
---|
491 | AO.(ifam).AT.ATType = 'QUAD'; |
---|
492 | AO.(ifam).AT.ATIndex = eval(['ATindx.' ifam '(:)']); |
---|
493 | AO.(ifam).AT.ATIndex = reshape(AO.(ifam).AT.ATIndex,2,7)'; |
---|
494 | AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
495 | |
---|
496 | % Save AO |
---|
497 | setao(AO); |
---|
498 | |
---|
499 | if iscontrolroom |
---|
500 | switch2online; |
---|
501 | else |
---|
502 | switch2sim; |
---|
503 | end |
---|
504 | |
---|