1 | function 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 | |
---|
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 = 'LT2'; % Machine Name |
---|
72 | AD.Energy = 2.75 ; % Energy in GeV |
---|
73 | |
---|
74 | |
---|
75 | setad(AD); %load AcceleratorData |
---|
76 | |
---|
77 | %%%%%%%%%%%%%%%%%%%% |
---|
78 | % ACCELERATOR OBJECT |
---|
79 | %%%%%%%%%%%%%%%%%%%% |
---|
80 | |
---|
81 | setao([]); %clear previous AcceleratorObjects |
---|
82 | |
---|
83 | |
---|
84 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
85 | %% BPM data |
---|
86 | % status field designates if BPM in use |
---|
87 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
88 | ifam = 'BPMx'; |
---|
89 | AO.(ifam).FamilyName = ifam; |
---|
90 | AO.(ifam).FamilyType = 'BPM'; |
---|
91 | AO.(ifam).MemberOf = {'BPM'; 'HBPM'; 'PlotFamily'; 'Archivable'}; |
---|
92 | AO.(ifam).Monitor.Mode = Mode; |
---|
93 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
94 | AO.(ifam).Monitor.HWUnits = 'mm'; |
---|
95 | AO.(ifam).Monitor.PhysicsUnits = 'meter'; |
---|
96 | |
---|
97 | nb = 3; |
---|
98 | AO.(ifam).DeviceList =[1 1; 1 2; 1 3]; |
---|
99 | AO.(ifam).ElementList = (1:nb)'; |
---|
100 | AO.(ifam).DeviceName(:,:) = {'LT2/DG/BPM.1'; 'LT2/DG/BPM.2'; 'LT2/DG/BPM.3'}; |
---|
101 | AO.(ifam).Monitor.TangoNames(:,:) = strcat(AO.(ifam).DeviceName, '/XPosSA'); |
---|
102 | AO.(ifam).CommonNames(:,:) = [repmat('BPMx',nb,1) num2str((1:nb)','%03d')]; |
---|
103 | |
---|
104 | AO.(ifam).Status = ones(nb,1); |
---|
105 | AO.(ifam).Monitor.HW2PhysicsParams(:,:) = 1e-3*ones(nb,1); |
---|
106 | AO.(ifam).Monitor.Physics2HWParams(:,:) = 1e3*ones(nb,1); |
---|
107 | |
---|
108 | % 2 lignes ajoutes pour test debug bpm versus le reste du monde |
---|
109 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
110 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
111 | |
---|
112 | |
---|
113 | % Vertical plane |
---|
114 | ifam = 'BPMz'; |
---|
115 | AO.(ifam) = AO.BPMx; % the same as BPMx |
---|
116 | % except those fields |
---|
117 | AO.(ifam).MemberOf = {'BPM'; 'VBPM'; 'PlotFamily'; 'Archivable'}; |
---|
118 | AO.(ifam).FamilyName = ifam; |
---|
119 | AO.(ifam).Monitor.TangoNames(:,:) = strcat(AO.(ifam).DeviceName,'/ZPosSA'); |
---|
120 | AO.(ifam).CommonNames(:,:) = [repmat('BPMz',nb,1) num2str((1:nb)','%03d')]; |
---|
121 | |
---|
122 | % 2 lignes ajoutes pour test debug bpm versus le reste du monde |
---|
123 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
124 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
125 | |
---|
126 | AO.(ifam).Status = AO.(ifam).Status(:); |
---|
127 | AO.(ifam).Status = AO.(ifam).Status(:); |
---|
128 | |
---|
129 | |
---|
130 | setao(AO); % mandatory to avoid empty AO message with magnetcoefficients |
---|
131 | |
---|
132 | %% Dipole |
---|
133 | ifam = 'BEND'; |
---|
134 | |
---|
135 | AO.(ifam).FamilyName = 'BEND'; |
---|
136 | AO.(ifam).MemberOf = {'MachineConfig'; 'Magnet'; 'BEND'; 'Archivable'}; |
---|
137 | AO.(ifam).Mode = Mode; |
---|
138 | AO.(ifam).DeviceName{1} = 'LT2/AE/D.1'; |
---|
139 | AO.(ifam).CommonNames{1} = 'DIP'; |
---|
140 | AO.(ifam).Monitor.Range(:,:) = [0 580]; |
---|
141 | AO.(ifam).DeviceList(1,:) = [1 1]; |
---|
142 | AO.(ifam).ElementList = 1; |
---|
143 | AO.(ifam).Status = 1; |
---|
144 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/currentPM'); |
---|
145 | AO.(ifam).Monitor.ModelVal = 0; |
---|
146 | AO.(ifam).Monitor.TangoVal = 0; |
---|
147 | AO.(ifam).Monitor.Mode = Mode; |
---|
148 | AO.(ifam).Monitor.Handles(:,1) = NaN; |
---|
149 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
150 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
151 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
152 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
153 | AO.(ifam).Monitor.HW2PhysicsFcn = @bend2gev; |
---|
154 | AO.(ifam).Monitor.Physics2HWFcn = @gev2bend; |
---|
155 | setao(AO); |
---|
156 | |
---|
157 | [C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName ); |
---|
158 | AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients; |
---|
159 | AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams; |
---|
160 | |
---|
161 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
162 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
163 | |
---|
164 | %% Quadrupoles QP |
---|
165 | ifam = 'QP'; |
---|
166 | |
---|
167 | AO.(ifam).FamilyName = ifam; |
---|
168 | AO.(ifam).MemberOf = {'MachineConfig'; 'Magnet'; 'QUAD'; 'Archivable'}; |
---|
169 | AO.(ifam).Mode = Mode; |
---|
170 | |
---|
171 | for 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]; |
---|
175 | end |
---|
176 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
177 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
178 | AO.(ifam).Monitor.Range(:,:) = [0 270;-270 0;-270 0;0 270;0 270;-270 0;0 270]; % |
---|
179 | nb = length(AO.(ifam).DeviceName); |
---|
180 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/current'); |
---|
181 | |
---|
182 | AO.(ifam).Status = ones(nb,1); |
---|
183 | AO.(ifam).Monitor.ModelVal = zeros(1,nb); |
---|
184 | AO.(ifam).Monitor.TangoVal = AO.(ifam).Monitor.ModelVal; |
---|
185 | AO.(ifam).ElementList = 1:nb; |
---|
186 | |
---|
187 | AO.(ifam).Monitor.Mode = Mode; |
---|
188 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
189 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
190 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
191 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
192 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
193 | AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k; |
---|
194 | AO.(ifam).Monitor.Physics2HWFcn = @k2amp; |
---|
195 | |
---|
196 | C = magnetcoefficients(AO.(ifam).FamilyName); |
---|
197 | |
---|
198 | for 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 |
---|
208 | end |
---|
209 | |
---|
210 | %AO.(ifam).Monitor.Range(:,:) = repmat([-5 5],nb,1); % 10 A for 0.8 mrad |
---|
211 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
212 | AO.(ifam).Desired = AO.(ifam).Monitor; |
---|
213 | AO.(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 |
---|
318 | ifam = 'CH'; |
---|
319 | AO.(ifam).FamilyName = ifam; |
---|
320 | AO.(ifam).MemberOf = {'MachineConfig'; 'Magnet'; 'HCM'; 'CH'; 'Archivable'}; |
---|
321 | |
---|
322 | for 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]; |
---|
326 | end |
---|
327 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
328 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
329 | |
---|
330 | |
---|
331 | nb = length(AO.(ifam).DeviceName); |
---|
332 | AO.(ifam).Monitor.Range(:,:) = repmat([-8 8],nb,1); |
---|
333 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/current'); |
---|
334 | AO.(ifam).Status = ones(nb,1); |
---|
335 | AO.(ifam).Monitor.ModelVal = zeros(1,nb); |
---|
336 | AO.(ifam).Monitor.TangoVal = AO.(ifam).Monitor.ModelVal; |
---|
337 | AO.(ifam).ElementList = 1:nb; |
---|
338 | |
---|
339 | AO.(ifam).Monitor.Mode = Mode; |
---|
340 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
341 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
342 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
343 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
344 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
345 | AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k; |
---|
346 | AO.(ifam).Monitor.Physics2HWFcn = @k2amp; |
---|
347 | [C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName ); |
---|
348 | AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients; |
---|
349 | AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams; |
---|
350 | |
---|
351 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
352 | %AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/currentPM'); |
---|
353 | |
---|
354 | %% Vertical Correctors |
---|
355 | ifam = 'CV'; |
---|
356 | |
---|
357 | AO.(ifam).FamilyName = ifam; |
---|
358 | AO.(ifam).MemberOf = {'MachineConfig'; 'Magnet'; 'VCM'; 'CV'; 'Archivable'}; |
---|
359 | AO.(ifam).Mode = Mode; |
---|
360 | |
---|
361 | for 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]; |
---|
365 | end |
---|
366 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
367 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
368 | |
---|
369 | nb = length(AO.(ifam).DeviceName); |
---|
370 | AO.(ifam).Monitor.Range(:,:) = repmat([-8 8 |
---|
371 | ],nb,1); |
---|
372 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/current'); |
---|
373 | AO.(ifam).Status = ones(nb,1); |
---|
374 | AO.(ifam).Monitor.ModelVal = zeros(1,nb); |
---|
375 | AO.(ifam).Monitor.TangoVal = AO.(ifam).Monitor.ModelVal; |
---|
376 | AO.(ifam).ElementList = 1:nb; |
---|
377 | |
---|
378 | AO.(ifam).Monitor.Mode = Mode; |
---|
379 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
380 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
381 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
382 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
383 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
384 | AO.(ifam).Monitor.HW2PhysicsFcn = @amp2k; |
---|
385 | AO.(ifam).Monitor.Physics2HWFcn = @k2amp; |
---|
386 | [C Leff Type coefficients] = magnetcoefficients(AO.(ifam).FamilyName ); |
---|
387 | AO.(ifam).Monitor.HW2PhysicsParams{1}(1,:) = coefficients; |
---|
388 | AO.(ifam).Monitor.Physics2HWParams = AO.(ifam).Monitor.HW2PhysicsParams; |
---|
389 | |
---|
390 | AO.(ifam).Setpoint = AO.(ifam).Monitor; |
---|
391 | %AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/currentPM'); |
---|
392 | setao(AO); |
---|
393 | |
---|
394 | %%%%%%%%%%%%%%%%%% |
---|
395 | %% CYCLAGE |
---|
396 | %%%%%%%%%%%%%%%%% |
---|
397 | |
---|
398 | %% cycleramp For dipole magnet |
---|
399 | ifam = 'CycleBEND'; |
---|
400 | ifamQ = 'BEND'; |
---|
401 | |
---|
402 | AO.(ifam).FamilyName = 'CycleBEND'; |
---|
403 | AO.(ifam).MemberOf = {'CycleBEND'; 'Cyclage'}; |
---|
404 | AO.(ifam).Mode = Mode; |
---|
405 | dev = getfamilydata(ifamQ,'DeviceName'); |
---|
406 | AO.(ifam).DeviceName = regexprep(dev,'/D','/cycleD'); |
---|
407 | AO.(ifam).DeviceList = family2dev(ifamQ); |
---|
408 | AO.(ifam).ElementList = family2elem(ifamQ); |
---|
409 | AO.(ifam).GroupId = tango_group_create('Dipole'); |
---|
410 | AO.(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; |
---|
414 | AO.(ifam).Imax = 580; |
---|
415 | AO.(ifam).Status = 1; |
---|
416 | AO.(ifam).Monitor.Mode = Mode; |
---|
417 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(7,1); |
---|
418 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
419 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
420 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
421 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
422 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/totalProgression'); |
---|
423 | |
---|
424 | |
---|
425 | |
---|
426 | %% cycleramp For H-corrector magnets |
---|
427 | ifam = 'CycleCH'; |
---|
428 | ifamQ = 'CH'; |
---|
429 | |
---|
430 | AO.(ifam).FamilyName = ifam; |
---|
431 | AO.(ifam).MemberOf = {'CycleCOR'; 'CycleCH'; 'Cyclage'}; |
---|
432 | AO.(ifam).Mode = Mode; |
---|
433 | dev = getfamilydata(ifamQ,'DeviceName'); |
---|
434 | AO.(ifam).DeviceName = regexprep(dev,'/C','/cycleC'); |
---|
435 | AO.(ifam).DeviceList = family2dev(ifamQ); |
---|
436 | AO.(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'); |
---|
440 | AO.(ifam).Inom = [1 2 3]; |
---|
441 | AO.(ifam).Imax = 7.9*ones(1,3); |
---|
442 | AO.(ifam).Status = ones(3,1); |
---|
443 | AO.(ifam).Monitor.Mode = Mode; |
---|
444 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(3,1); |
---|
445 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
446 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
447 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
448 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
449 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/totalProgression'); |
---|
450 | |
---|
451 | %% cycleramp For V-corrector magnets |
---|
452 | ifam = 'CycleCV'; |
---|
453 | ifamQ = 'CV'; |
---|
454 | |
---|
455 | AO.(ifam).FamilyName = ifam; |
---|
456 | AO.(ifam).MemberOf = {'CycleCOR'; 'CycleCV'; 'Cyclage'}; |
---|
457 | AO.(ifam).Mode = Mode; |
---|
458 | dev = getfamilydata(ifamQ,'DeviceName'); |
---|
459 | AO.(ifam).DeviceName = regexprep(dev,'/C','/cycleC'); |
---|
460 | AO.(ifam).DeviceList = family2dev(ifamQ); |
---|
461 | AO.(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]; |
---|
466 | AO.(ifam).Imax = 7.9*ones(1,5); |
---|
467 | AO.(ifam).Status = ones(5,1); |
---|
468 | AO.(ifam).Monitor.Mode = Mode; |
---|
469 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(5,1); |
---|
470 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
471 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
472 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
473 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
474 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/totalProgression'); |
---|
475 | |
---|
476 | %% cycleramp For quadrupoles magnets |
---|
477 | ifam = 'CycleQP'; |
---|
478 | ifamQ = 'QP'; |
---|
479 | |
---|
480 | AO.(ifam).FamilyName = ifam; |
---|
481 | AO.(ifam).MemberOf = {'CycleQP'; 'Cyclage'}; |
---|
482 | AO.(ifam).Mode = Mode; |
---|
483 | dev = getfamilydata(ifamQ,'DeviceName'); |
---|
484 | AO.(ifam).DeviceName = regexprep(dev,'/Q','/cycleQ'); |
---|
485 | AO.(ifam).DeviceList = family2dev(ifamQ); |
---|
486 | AO.(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'); |
---|
490 | nb = length(AO.(ifam).ElementList); |
---|
491 | AO.(ifam).Imax = [274 -349 -274 274 274 -274 274 ]; |
---|
492 | AO.(ifam).Status = ones(7,1); |
---|
493 | AO.(ifam).Monitor.Mode = Mode; |
---|
494 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(7,1); |
---|
495 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
496 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
497 | AO.(ifam).Monitor.HWUnits = 'ampere'; |
---|
498 | AO.(ifam).Monitor.PhysicsUnits = 'radian'; |
---|
499 | AO.(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 |
---|
532 | ifam = 'PI'; |
---|
533 | AO.(ifam).FamilyName = 'PI'; |
---|
534 | AO.(ifam).MemberOf = {'PlotFamily'; 'IonPump'; 'Pressure'; 'Archivable'}; |
---|
535 | AO.(ifam).Monitor.Mode = Mode; |
---|
536 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
537 | |
---|
538 | for 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]; |
---|
546 | end |
---|
547 | |
---|
548 | nb = size(AO.(ifam).DeviceList,1); |
---|
549 | AO.(ifam).Status = ones(nb,1); |
---|
550 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
551 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
552 | AO.(ifam).ElementList = (1:nb)'; |
---|
553 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
554 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
555 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
556 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
557 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
558 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
559 | AO.(ifam).Monitor.PhysicsUnits = 'mBar'; |
---|
560 | |
---|
561 | %% PenningGauge |
---|
562 | ifam = 'JPEN'; |
---|
563 | AO.(ifam).FamilyName = 'JPEN'; |
---|
564 | AO.(ifam).MemberOf = {'PlotFamily'; 'PenningGauge'; 'Pressure'; 'Archivable'}; |
---|
565 | AO.(ifam).Monitor.Mode = Mode; |
---|
566 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
567 | |
---|
568 | for 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]; |
---|
572 | end |
---|
573 | |
---|
574 | nb = size(AO.(ifam).DeviceList,1); |
---|
575 | AO.(ifam).Status = ones(nb,1); |
---|
576 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
577 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
578 | AO.(ifam).ElementList = (1:nb)'; |
---|
579 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
580 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
581 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
582 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
583 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
584 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
585 | AO.(ifam).Monitor.PhysicsUnits = 'mBar'; |
---|
586 | |
---|
587 | %% PenningGauge |
---|
588 | ifam = 'JPIR'; |
---|
589 | AO.(ifam).FamilyName = 'JPIR'; |
---|
590 | AO.(ifam).MemberOf = {'PlotFamily'; 'PiraniGauge'; 'Pressure'; 'Archivable'}; |
---|
591 | AO.(ifam).Monitor.Mode = Mode; |
---|
592 | AO.(ifam).Monitor.DataType = 'Scalar'; |
---|
593 | |
---|
594 | for 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]; |
---|
598 | end |
---|
599 | |
---|
600 | nb = size(AO.(ifam).DeviceList,1); |
---|
601 | AO.(ifam).Status = ones(nb,1); |
---|
602 | AO.(ifam).DeviceName = AO.(ifam).DeviceName'; |
---|
603 | AO.(ifam).CommonNames = AO.(ifam).CommonNames'; |
---|
604 | AO.(ifam).ElementList = (1:nb)'; |
---|
605 | AO.(ifam).Monitor.Handles(:,1) = NaN*ones(nb,1); |
---|
606 | AO.(ifam).Monitor.TangoNames = strcat(AO.(ifam).DeviceName, '/pressure'); |
---|
607 | AO.(ifam).Monitor.HW2PhysicsParams = 1; |
---|
608 | AO.(ifam).Monitor.Physics2HWParams = 1; |
---|
609 | AO.(ifam).Monitor.Units = 'Hardware'; |
---|
610 | AO.(ifam).Monitor.HWUnits = 'mBar'; |
---|
611 | AO.(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 | |
---|
624 | setao(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 | |
---|
630 | setoperationalmode(OperationalMode); |
---|
631 | |
---|
632 | |
---|
633 | %====================================================================== |
---|
634 | %====================================================================== |
---|
635 | %% Append Accelerator Toolbox information |
---|
636 | %====================================================================== |
---|
637 | %====================================================================== |
---|
638 | disp('** Initializing Accelerator Toolbox information'); |
---|
639 | |
---|
640 | AO = getao; |
---|
641 | |
---|
642 | ATindx = atindex(THERING); %structure with fields containing indices |
---|
643 | |
---|
644 | s = findspos(THERING,1:length(THERING)+1)'; |
---|
645 | |
---|
646 | %% HORIZONTAL CORRECTORS |
---|
647 | ifam = ('CH'); |
---|
648 | AO.(ifam).AT.ATType = ifam; |
---|
649 | AO.(ifam).AT.ATIndex = ATindx.(ifam)(:); |
---|
650 | AO.(ifam).AT.ATIndex = AO.(ifam).AT.ATIndex(AO.(ifam).ElementList); %not all correctors used |
---|
651 | AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
652 | |
---|
653 | %% VERTICAL CORRECTORS |
---|
654 | ifam = ('CV'); |
---|
655 | AO.(ifam).AT.ATType = ifam; |
---|
656 | AO.(ifam).AT.ATIndex = ATindx.(ifam)(:); |
---|
657 | AO.(ifam).AT.ATIndex = AO.(ifam).AT.ATIndex(AO.(ifam).ElementList); %not all correctors used |
---|
658 | AO.(ifam).Position = s(AO.(ifam).AT.ATIndex); |
---|
659 | |
---|
660 | %% BENDING magnets |
---|
661 | ifam = ('BEND'); |
---|
662 | AO.(ifam).AT.ATType = ifam; |
---|
663 | AO.(ifam).AT.ATIndex = ATindx.(ifam)(:); |
---|
664 | AO.(ifam).Position = reshape(s(AO.(ifam).AT.ATIndex),1,4); |
---|
665 | |
---|
666 | %% QUADRUPOLES |
---|
667 | ifam = 'QP'; |
---|
668 | AO.(ifam).AT.ATType = 'QUAD'; |
---|
669 | AO.(ifam).AT.ATIndex = eval(['ATindx.' ifam '(:)']); |
---|
670 | AO.(ifam).AT.ATIndex = reshape(AO.(ifam).AT.ATIndex,1,7)'; |
---|
671 | AO.(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 |
---|
689 | setao(AO); |
---|
690 | |
---|
691 | if iscontrolroom |
---|
692 | switch2online; |
---|
693 | else |
---|
694 | switch2sim; |
---|
695 | end |
---|