1 | function varargout = getbpmrawdata(varargin) |
---|
2 | % GETBPMRAWDATA - Get turn by turn data for BPM |
---|
3 | % |
---|
4 | % INPUTS |
---|
5 | % 1. Device List bpm number (scalar or vector) list ([] means all valid BPM) |
---|
6 | % |
---|
7 | % Optional input arguments |
---|
8 | % 2. Optional display {Default} |
---|
9 | % 'Display' - Plot BPM data X,Z, Sum, Q |
---|
10 | % {'NoDisplay'} - No plotting |
---|
11 | % 3. 'NoArchive' - No file archive {Default} |
---|
12 | % 'Archive' - Save a BPM data structure to \<Directory.BPMData>\<DispArchiveFile><Date><Time>.mat |
---|
13 | % To change the filename, included the filename after the 'Archive', '' to browse |
---|
14 | % Structure output is forced |
---|
15 | % 4. 'Struct' - Return out as a structure |
---|
16 | % 5. 'Freezing' - Buffer freezing mechanism |
---|
17 | % 'NoFreezing' |
---|
18 | % 6. 'Group' - TAngo group mecanism |
---|
19 | % 'NoGroup' |
---|
20 | % 7. {'XZSum'} - Select only X Z and Sum signals |
---|
21 | % 'NoXZSum' or 'AllData' - Select only X Z Sum Q, Va, Vb, Vc and Vd signals |
---|
22 | % |
---|
23 | % OUTPUTS |
---|
24 | % structure output if 'Struct' precised |
---|
25 | % AM |
---|
26 | % |
---|
27 | % Vector output |
---|
28 | % 1. X - Horizontal data |
---|
29 | % 2. Z - Vertical data |
---|
30 | % 3. Sum - Sum signal data |
---|
31 | % 4. Q - Quadrusspole signal data |
---|
32 | % 5. Va - electrode data |
---|
33 | % 6. Vb - electrode data |
---|
34 | % 7. Vc - electrode data |
---|
35 | % |
---|
36 | % EXAMPLES |
---|
37 | % 1. Display BPM 18 |
---|
38 | % getbpmrawdata(18) |
---|
39 | % 2. Display all valid BPM and output data as a structure |
---|
40 | % getbpmrawdata([],'Struct'); |
---|
41 | % 3. Output all valid BPM data |
---|
42 | % [X Z Sum Q Va Vb Vc Vd] = getbpmrawdata([],'NoDisplay'); |
---|
43 | % 4. Archives BPM 17 and 18 w/o displaying |
---|
44 | % getbpmrawdata([17; 18],'Archive','NoDisplay'); |
---|
45 | % 5. Archives BPM 17 and 18 w/o displaying w/ buffer freezing mechanism |
---|
46 | % getbpmrawdata([17; 18],'Archive','NoDisplay','Freezing'); |
---|
47 | % 6. Idem via devicelist |
---|
48 | % getbpmrawdata([17 1; 18 1],'Archive','NoDisplay','Freezing'); |
---|
49 | % |
---|
50 | % See Also anabpmfirstturn, convertBPMData2CERNformat |
---|
51 | |
---|
52 | % |
---|
53 | % Written by Laurent S. Nadolski |
---|
54 | % 17 May 2006: group added |
---|
55 | |
---|
56 | % TODO freezing mechanism |
---|
57 | OldLiberaFlag = 0; % Booster version |
---|
58 | DisplayFlag = 0; |
---|
59 | ArchiveFlag = 0; |
---|
60 | StructureFlag = 0; |
---|
61 | FreezingFlag = 0; |
---|
62 | GroupFlag = 1; |
---|
63 | XZSumFlag = 1; |
---|
64 | FileName = ''; |
---|
65 | varargin2 = {}; |
---|
66 | SAFlag = 0; |
---|
67 | |
---|
68 | if ~exist('DeviceName','var') |
---|
69 | DeviceName = []; |
---|
70 | end |
---|
71 | |
---|
72 | % Flag factory |
---|
73 | for i = length(varargin):-1:1 |
---|
74 | if strcmpi(varargin{i},'Display') |
---|
75 | DisplayFlag = 1; |
---|
76 | varargin2 = {varargin2{:} varargin{i}}; |
---|
77 | varargin(i) = []; |
---|
78 | elseif strcmpi(varargin{i},'NoDisplay') |
---|
79 | DisplayFlag = 0; |
---|
80 | varargin2 = {varargin2{:} varargin{i}}; |
---|
81 | varargin(i) = []; |
---|
82 | elseif strcmpi(varargin{i},'SA') |
---|
83 | SAFlag = 1; |
---|
84 | varargin(i) = []; |
---|
85 | elseif strcmpi(varargin{i},'Group') |
---|
86 | GroupFlag = 1; |
---|
87 | varargin(i) = []; |
---|
88 | elseif strcmpi(varargin{i},'NoGroup') |
---|
89 | GroupFlag = 0; |
---|
90 | % Marie-Agnes modification 23 mai 2006 |
---|
91 | varargin2 = {varargin2{:} varargin{i}}; |
---|
92 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
93 | varargin(i) = []; |
---|
94 | elseif strcmpi(varargin{i},'Archive') |
---|
95 | ArchiveFlag = 1; |
---|
96 | StructureFlag = 1; |
---|
97 | if length(varargin) > i |
---|
98 | % Look for a filename as the next input |
---|
99 | if ischar(varargin{i+1}) |
---|
100 | FileName = varargin{i+1}; |
---|
101 | varargin(i+1) = []; |
---|
102 | end |
---|
103 | end |
---|
104 | % varargin2 = {varargin2{:} varargin{i}}; |
---|
105 | varargin(i) = []; |
---|
106 | elseif strcmpi(varargin{i},'NoArchive') |
---|
107 | ArchiveFlag = 0; |
---|
108 | % varargin2 = {varargin2{:} varargin{i}}; |
---|
109 | varargin(i) = []; |
---|
110 | elseif strcmpi(varargin{i},'Struct') |
---|
111 | StructureFlag = 1; |
---|
112 | varargin2 = {varargin2{:} varargin{i}}; |
---|
113 | varargin(i) = []; |
---|
114 | elseif strcmpi(varargin{i},'Freezing') |
---|
115 | FreezingFlag = 1; |
---|
116 | varargin(i) = []; |
---|
117 | elseif strcmpi(varargin{i},'NoFreezing') |
---|
118 | FreezingFlag = 0; |
---|
119 | varargin(i) = []; |
---|
120 | elseif strcmpi(varargin{i},'XZSum') |
---|
121 | XZSumFlag = 1; |
---|
122 | varargin(i) = []; |
---|
123 | elseif strcmpi(varargin{i},'NoXZSum') || strcmpi(varargin{i},'AllData') |
---|
124 | XZSumFlag = 0; |
---|
125 | varargin(i) = []; |
---|
126 | end |
---|
127 | end |
---|
128 | |
---|
129 | Machine = getsubmachinename; |
---|
130 | |
---|
131 | switch Machine |
---|
132 | case 'OldBooster' % Modif Alex shuntant l'ancien mode BPM booster 28-08-06 |
---|
133 | OldLiberaFlag = 1; |
---|
134 | otherwise |
---|
135 | OldLiberaFlag = 0; |
---|
136 | end |
---|
137 | |
---|
138 | AO = getfamilydata('BPMx'); |
---|
139 | |
---|
140 | % if empty select all valid BPM |
---|
141 | if isempty(varargin) |
---|
142 | num = 1:length(AO.DeviceName); |
---|
143 | DeviceList = family2dev('BPMx'); |
---|
144 | else |
---|
145 | DeviceList = varargin{1}; |
---|
146 | if size(DeviceList,2) == 2 % DeviceList |
---|
147 | %% |
---|
148 | else %% Element list |
---|
149 | DeviceList = elem2dev('BPMx',DeviceList); |
---|
150 | end |
---|
151 | end |
---|
152 | |
---|
153 | % Status one devices |
---|
154 | Status = family2status('BPMx',DeviceList); |
---|
155 | DeviceList = DeviceList(find(Status),:); |
---|
156 | |
---|
157 | if isempty(DeviceList) |
---|
158 | disp('All BPM not valid') |
---|
159 | AM = -1; |
---|
160 | return; |
---|
161 | end |
---|
162 | |
---|
163 | |
---|
164 | %% Buffer freezing |
---|
165 | % Enable freezing mechanism |
---|
166 | |
---|
167 | if (FreezingFlag) |
---|
168 | |
---|
169 | if OldLiberaFlag |
---|
170 | Enablecmd = 'EnableBufferFreezing'; |
---|
171 | UnFreezecmd = 'UnFreezeBuffer'; |
---|
172 | else |
---|
173 | Enablecmd = 'EnableDDBufferFreezing'; |
---|
174 | UnFreezecmd = 'UnFreezeDDBuffer'; |
---|
175 | end |
---|
176 | |
---|
177 | disp([mfilename ': Enabling freezing mecanism']); |
---|
178 | for k = 1:length(DeviceList) |
---|
179 | tango_command_inout2(DeviceName{k},Enablecmd); |
---|
180 | end |
---|
181 | disp([mfilename ': Freezing BPM: pseudo synchronism']); |
---|
182 | for k = 1:length(DeviceList) |
---|
183 | tango_command_inout2(DeviceName{k},UnFreezecmd); |
---|
184 | end |
---|
185 | end |
---|
186 | |
---|
187 | % Group definition |
---|
188 | if GroupFlag |
---|
189 | if ~SAFlag |
---|
190 | if OldLiberaFlag |
---|
191 | attr_name = ... |
---|
192 | {'XPosVector','ZPosVector', 'QuadVector', 'SumVector', ... |
---|
193 | 'VaVector', 'VbVector', 'VcVector', 'VdVector'}; |
---|
194 | else |
---|
195 | if ~XZSumFlag |
---|
196 | attr_name = ... |
---|
197 | {'XPosDD','ZPosDD', 'SumDD', 'QuadDD', ... |
---|
198 | 'VaDD', 'VbDD', 'VcDD', 'VdDD'}; |
---|
199 | else |
---|
200 | attr_name = {'XPosDD','ZPosDD', 'SumDD'}; |
---|
201 | end |
---|
202 | end |
---|
203 | else |
---|
204 | if ~XZSumFlag |
---|
205 | attr_name = ... |
---|
206 | {'XPosSA','ZPosSA', 'SumSA', 'QuadSA', ... |
---|
207 | 'VaSA', 'VbSA', 'VcSA', 'VdSA'}; |
---|
208 | else |
---|
209 | attr_name = {'XPosSA','ZPosSA', 'SumSA'}; |
---|
210 | end |
---|
211 | end |
---|
212 | |
---|
213 | GroupId =getfamilydata('BPMx', 'GroupId'); |
---|
214 | |
---|
215 | % get all BPMs |
---|
216 | DeviceListFull = family2dev('BPMx',0); |
---|
217 | % disable all |
---|
218 | tango_group_disable_device2(GroupId, dev2tangodev('BPMx',DeviceListFull)); |
---|
219 | % Enable only valid BPM |
---|
220 | tango_group_enable_device2(GroupId, dev2tangodev('BPMx',DeviceList)); |
---|
221 | |
---|
222 | % Stimulate connexion TANGO bug |
---|
223 | tango_group_ping(GroupId); |
---|
224 | |
---|
225 | if ~SAFlag |
---|
226 | % Check buffer size |
---|
227 | rep = tango_group_read_attribute2(GroupId,'DDBufferSize',0); |
---|
228 | |
---|
229 | % take minimum turn number for common buffersize |
---|
230 | turnNumber = min(rep); |
---|
231 | if mean(rep) ~= rep(1) |
---|
232 | warning(['Buffer size not the same for all BPMs: max= %d turns, min= %d turns', ... |
---|
233 | '\nCheck BPM buffer size for all BPMs'],max(rep), min(rep)); |
---|
234 | end |
---|
235 | else |
---|
236 | turnNumber = 1; |
---|
237 | end |
---|
238 | |
---|
239 | rep = tango_group_read_attributes(GroupId,attr_name,0); |
---|
240 | if tango_error == -1 |
---|
241 | tango_print_error_stack |
---|
242 | return |
---|
243 | end |
---|
244 | |
---|
245 | if rep.has_failed |
---|
246 | disp('Error when reading data for BPM'); |
---|
247 | for k = 1:length(rep.dev_replies), |
---|
248 | if rep.dev_replies(k).has_failed |
---|
249 | fprintf('Error with device %s\n',rep.dev_replies(k).dev_name) |
---|
250 | tango_print_error_stack_as_it_is(rep.dev_replies(k).attr_values(1).error) |
---|
251 | end |
---|
252 | end |
---|
253 | error('Programme %s Stopped', mfilename); |
---|
254 | else |
---|
255 | kActiveBPM = zeros(size(rep.dev_replies,2),1); |
---|
256 | |
---|
257 | AM.DeviceName = cell(size(rep.dev_replies,2),1); |
---|
258 | % initialize data |
---|
259 | % read turnNumber on first BPM and assume all BPM have the same number of turns |
---|
260 | %turnNumber = readattribute([char(family2tangodev('BPMx', DeviceList(1,:))) '/DDBufferSize']); |
---|
261 | AM.Data.X = zeros(size(rep.dev_replies,2),turnNumber); |
---|
262 | AM.Data.Z = zeros(size(rep.dev_replies,2),turnNumber); |
---|
263 | AM.Data.Sum = zeros(size(rep.dev_replies,2),turnNumber); |
---|
264 | |
---|
265 | if ~XZSumFlag |
---|
266 | AM.Data.Q = zeros(size(rep.dev_replies,2),turnNumber); |
---|
267 | AM.Data.Va = zeros(size(rep.dev_replies,2),turnNumber); |
---|
268 | AM.Data.Vb = zeros(size(rep.dev_replies,2),turnNumber); |
---|
269 | AM.Data.Vc = zeros(size(rep.dev_replies,2),turnNumber); |
---|
270 | AM.Data.Vd = zeros(size(rep.dev_replies,2),turnNumber); |
---|
271 | end |
---|
272 | |
---|
273 | % Loop over all BPM |
---|
274 | for kbpm = 1:size(rep.dev_replies,2), |
---|
275 | kActiveBPM(kbpm) = rep.dev_replies(kbpm).is_enabled; |
---|
276 | |
---|
277 | % Selected just active BPM |
---|
278 | if rep.dev_replies(kbpm).is_enabled |
---|
279 | %rep.dev_replies(k).attr_values(1).dev_name; |
---|
280 | AM.DeviceName{kbpm} = rep.dev_replies(kbpm).attr_values(1).dev_name; |
---|
281 | if length(rep.dev_replies(kbpm).attr_values(1).value) < turnNumber |
---|
282 | error('BPM %s datalength is %d <= %d', AM.DeviceName{kbpm}, ... |
---|
283 | length(rep.dev_replies(kbpm).attr_values(1).value), turnNumber); |
---|
284 | end |
---|
285 | AM.Data.X(kbpm,:) = rep.dev_replies(kbpm).attr_values(1).value(1:turnNumber); |
---|
286 | AM.Data.Z(kbpm,:) = rep.dev_replies(kbpm).attr_values(2).value(1:turnNumber); |
---|
287 | AM.Data.Sum(kbpm,:) = rep.dev_replies(kbpm).attr_values(3).value(1:turnNumber); |
---|
288 | |
---|
289 | % If more than X, Z, SUM is needed |
---|
290 | if ~XZSumFlag |
---|
291 | AM.Data.Q(kbpm,:) = rep.dev_replies(kbpm).attr_values(4).value(1:turnNumber); |
---|
292 | AM.Data.Va(kbpm,:) = rep.dev_replies(kbpm).attr_values(5).value(1:turnNumber); |
---|
293 | AM.Data.Vb(kbpm,:) = rep.dev_replies(kbpm).attr_values(6).value(1:turnNumber); |
---|
294 | AM.Data.Vc(kbpm,:) = rep.dev_replies(kbpm).attr_values(7).value(1:turnNumber); |
---|
295 | AM.Data.Vd(kbpm,:) = rep.dev_replies(kbpm).attr_values(8).value(1:turnNumber); |
---|
296 | end |
---|
297 | %%%%%%%%%%% modification |
---|
298 | klast = kbpm; |
---|
299 | %%%%%%%%%%%%%%%%%%%%%%%% |
---|
300 | |
---|
301 | % Display Data X Z SUM |
---|
302 | if DisplayFlag |
---|
303 | figure |
---|
304 | subplot(3,1,1) |
---|
305 | plot(AM.Data.X(kbpm,:)) |
---|
306 | ylabel('X (mm)') |
---|
307 | grid on |
---|
308 | |
---|
309 | subplot(3,1,2) |
---|
310 | plot(AM.Data.Z(kbpm,:)) |
---|
311 | ylabel('Z (mm)') |
---|
312 | grid on |
---|
313 | |
---|
314 | subplot(3,1,3) |
---|
315 | plot(AM.Data.Sum(kbpm,:)) |
---|
316 | ylabel('SUM') |
---|
317 | xlabel('turn number') |
---|
318 | grid on |
---|
319 | addlabel(1,0,datestr(clock)); |
---|
320 | suptitle(sprintf('Turn by turn data for %s',AM.DeviceName{kbpm})) |
---|
321 | end % Display loop |
---|
322 | end % enabled BPM |
---|
323 | end % BPM loop |
---|
324 | |
---|
325 | % Selected only data for asked BPMs |
---|
326 | AM.DeviceName(find(1-kActiveBPM)) = []; % Remove empty data BPM |
---|
327 | |
---|
328 | % Store data in structure |
---|
329 | kgoodBPM = find(kActiveBPM); |
---|
330 | |
---|
331 | % Slected only valid data, ie. for selectged BPM, other are zeros |
---|
332 | AM.Data.X = AM.Data.X(kgoodBPM,:); |
---|
333 | AM.Data.Z = AM.Data.Z(kgoodBPM,:); |
---|
334 | AM.Data.Sum = AM.Data.Sum(kgoodBPM,:); |
---|
335 | |
---|
336 | if ~XZSumFlag |
---|
337 | AM.Data.Q = AM.Data.Q(kgoodBPM,:); |
---|
338 | AM.Data.Va = AM.Data.Va(kgoodBPM,:); |
---|
339 | AM.Data.Vb = AM.Data.Vb(kgoodBPM,:); |
---|
340 | AM.Data.Vc = AM.Data.Vc(kgoodBPM,:); |
---|
341 | AM.Data.Vd = AM.Data.Vd(kgoodBPM,:); |
---|
342 | end |
---|
343 | |
---|
344 | % add description data |
---|
345 | AM.TimeStamp = datestr(now); |
---|
346 | AM.DataDescriptor = ['Turn by turn data for ' getsubmachinename]; |
---|
347 | AM.CreatedBy = mfilename; |
---|
348 | AM.DeviceList = DeviceList; |
---|
349 | AM.DeviceName = AM.DeviceName'; |
---|
350 | AM.Dcct = getdcct; |
---|
351 | end |
---|
352 | else |
---|
353 | %% loop of bpm list |
---|
354 | if size(DeviceList,1) > 1 |
---|
355 | AM.DeviceList=[]; |
---|
356 | for k = 1:length(DeviceList) |
---|
357 | AM0 = getbpmrawdata(DeviceList(k,:),varargin2{:},'Struct'); |
---|
358 | try |
---|
359 | AM.DeviceName{k} = AM0.DeviceName{:}; |
---|
360 | AM.Data.X(k,:) = AM0.Data.X(:); AM.Data.Z(k,:) = AM0.Data.Z(:); |
---|
361 | AM.Data.Sum(k,:) = AM0.Data.Sum(:); |
---|
362 | if ~XZSumFlag |
---|
363 | AM.Data.Q(k,:) = AM0.Data.Q(:); |
---|
364 | AM.Data.Va(k,:) = AM0.Data.Va(:); AM.Data.Vb(k,:) = AM0.Data.Vb(:); |
---|
365 | AM.Data.Vc(k,:) = AM0.Data.Vc(:); AM.Data.Vd(k,:) = AM0.Data.Vd(:); |
---|
366 | end |
---|
367 | AM.TimeStamp = datestr(now); |
---|
368 | AM.DataDescriptor = ['Turn by turn data for ' getsubmachinename]; |
---|
369 | AM.CreatedBy = mfilename; |
---|
370 | AM.DeviceList = [AM.DeviceList; AM0.DeviceList]; |
---|
371 | catch |
---|
372 | switch lasterr |
---|
373 | case 'Subscripted assignment dimension mismatch.' |
---|
374 | error('BPM do not have the same number of samples !!!\n see BPM %s', AM.DeviceName{k}) |
---|
375 | otherwise |
---|
376 | fprintf('error %s\n', lasterr) |
---|
377 | end |
---|
378 | end |
---|
379 | end |
---|
380 | |
---|
381 | if (FreezingFlag) |
---|
382 | |
---|
383 | % Disable freezing mechanism |
---|
384 | if OldLiberaFlag |
---|
385 | Disablecmd = 'DisableBufferFreezing'; |
---|
386 | else |
---|
387 | Disablecmd = 'DisableDDBufferFreezing'; |
---|
388 | end |
---|
389 | |
---|
390 | disp([mfilename ': disabling buffer freezing for BPM']) |
---|
391 | for k = 1:length(DeviceList) |
---|
392 | tango_command_inout2(DeviceName{k}, Disablecmd); |
---|
393 | end |
---|
394 | end |
---|
395 | |
---|
396 | else |
---|
397 | %% Loop for one BPM |
---|
398 | AO = getfamilydata('BPMx'); |
---|
399 | DeviceName = family2tangodev('BPMx',DeviceList); |
---|
400 | |
---|
401 | if OldLiberaFlag |
---|
402 | attr_name = ... |
---|
403 | {'XPosVector','ZPosVector', 'QuadVector', 'SumVector', ... |
---|
404 | 'VaVector', 'VbVector', 'VcVector', 'VdVector'}; |
---|
405 | else |
---|
406 | if ~XZSumFlag |
---|
407 | attr_name = ... |
---|
408 | {'XPosDD','ZPosDD', 'QuadDD', 'SumDD', ... |
---|
409 | 'VaDD', 'VbDD', 'VcDD', 'VdDD'}; |
---|
410 | else |
---|
411 | attr_name = {'XPosDD','ZPosDD', 'SumDD'}; |
---|
412 | end |
---|
413 | end |
---|
414 | |
---|
415 | |
---|
416 | |
---|
417 | rep = tango_read_attributes2(DeviceName{:},attr_name); |
---|
418 | |
---|
419 | X = rep(1).value; |
---|
420 | Z = rep(2).value; |
---|
421 | Sum = rep(3).value; |
---|
422 | if ~XZSumFlag |
---|
423 | Q = rep(4).value; |
---|
424 | Va = rep(5).value; |
---|
425 | Vb = rep(6).value; |
---|
426 | Vc = rep(7).value; |
---|
427 | Vd = rep(8).value; |
---|
428 | end |
---|
429 | %% Display part |
---|
430 | |
---|
431 | if DisplayFlag |
---|
432 | figure |
---|
433 | subplot(3,1,1) |
---|
434 | plot(X) |
---|
435 | ylabel('X (mm)') |
---|
436 | grid on |
---|
437 | |
---|
438 | subplot(3,1,2) |
---|
439 | plot(Z) |
---|
440 | ylabel('Z (mm)') |
---|
441 | grid on |
---|
442 | |
---|
443 | subplot(3,1,3) |
---|
444 | plot(Sum) |
---|
445 | ylabel('SUM') |
---|
446 | xlabel('turn number') |
---|
447 | grid on |
---|
448 | |
---|
449 | addlabel(1,0,datestr(clock)); |
---|
450 | suptitle(sprintf('Turn by turn data for %s',DeviceName{:})) |
---|
451 | end |
---|
452 | |
---|
453 | if StructureFlag % Build up structure |
---|
454 | AM.DeviceList = DeviceList; |
---|
455 | AM.DeviceName = DeviceName; |
---|
456 | AM.Data.X = X; |
---|
457 | AM.Data.Z = Z; |
---|
458 | AM.Data.Sum = Sum; |
---|
459 | if ~XZSumFlag |
---|
460 | AM.Data.Q = Q; |
---|
461 | AM.Data.Va = Va; |
---|
462 | AM.Data.Vb = Vb; |
---|
463 | AM.Data.Vc = Vc; |
---|
464 | AM.Data.Vd = Vd; |
---|
465 | end |
---|
466 | %time stamp of recording |
---|
467 | AM.TimeStamp = datestr(now); |
---|
468 | AM.DataDescriptor = ['Turn by turn data for ' getfamilydata('Machine')]; |
---|
469 | AM.CreatedBy = mfilename; |
---|
470 | AM.DeviceList = DeviceList; |
---|
471 | end |
---|
472 | end |
---|
473 | end |
---|
474 | |
---|
475 | if ArchiveFlag |
---|
476 | % filling up data |
---|
477 | % Archive data structure |
---|
478 | if isempty(FileName) |
---|
479 | FileName = appendtimestamp('BPMTurnByTurn'); |
---|
480 | DirectoryName = getfamilydata('Directory','BPMData'); |
---|
481 | if isempty(DirectoryName) |
---|
482 | DirectoryName = [getfamilydata('Directory','DataRoot') 'BPM', filesep]; |
---|
483 | else |
---|
484 | % Make sure default directory exists |
---|
485 | DirStart = pwd; |
---|
486 | [DirectoryName, ErrorFlag] = gotodirectory(DirectoryName); |
---|
487 | cd(DirStart); |
---|
488 | end |
---|
489 | [DirectoryName FileName] |
---|
490 | [FileName, DirectoryName] = uiputfile('*.mat', 'Select FileName', [DirectoryName FileName]); |
---|
491 | if FileName == 0 |
---|
492 | ArchiveFlag = 0; |
---|
493 | disp(' BPM measurement canceled.'); |
---|
494 | FileName=''; |
---|
495 | return |
---|
496 | end |
---|
497 | FileName = [DirectoryName, FileName]; |
---|
498 | elseif FileName == -1 |
---|
499 | FileName = appendtimestamp(getfamilydata('Default', 'BPMArchiveFile')); |
---|
500 | DirectoryName = getfamilydata('Directory','BPMData'); |
---|
501 | if isempty(DirectoryName) |
---|
502 | DirectoryName = [getfamilydata('Directory','DataRoot') 'BPM', filesep]; |
---|
503 | end |
---|
504 | FileName = [DirectoryName, FileName]; |
---|
505 | end |
---|
506 | |
---|
507 | save(FileName,'AM'); |
---|
508 | |
---|
509 | end |
---|
510 | |
---|
511 | % Build up structure |
---|
512 | if StructureFlag |
---|
513 | varargout{1} = AM; |
---|
514 | else |
---|
515 | if exist('AM','var') % not nice but it works |
---|
516 | varargout{1} = AM.Data.X; varargout{2} = AM.Data.Z; |
---|
517 | varargout{3} = AM.Data.Sum; |
---|
518 | if ~XZSumFlag |
---|
519 | varargout{4} = AM.Data.Q; |
---|
520 | varargout{5} = AM.Data.Va; varargout{6} = AM.Data.Vb; |
---|
521 | varargout{7} = AM.Data.Vc; varargout{8} = AM.Data.Vd; |
---|
522 | end |
---|
523 | else |
---|
524 | varargout{1} = X; varargout{2} = Z; |
---|
525 | varargout{3} = Sum; |
---|
526 | if ~XZSumFlag |
---|
527 | varargout{4} = Q; |
---|
528 | varargout{5} = Va; varargout{6} = Vb; |
---|
529 | varargout{7} = Vc; varargout{8} = Vd; |
---|
530 | end |
---|
531 | end |
---|
532 | end |
---|