0001 function varargout = getbpmrawdata(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 OldLiberaFlag = 1;
0057 DisplayFlag = 1;
0058 ArchiveFlag = 0;
0059 StructureFlag = 0;
0060 FreezingFlag = 0;
0061 GroupFlag = 1;
0062 FileName = '';
0063 varargin2 = {};
0064
0065 if ~exist('DeviceName','var')
0066 DeviceName = [];
0067 end
0068
0069 for i = length(varargin):-1:1
0070 if strcmpi(varargin{i},'Display')
0071 DisplayFlag = 1;
0072 varargin2 = {varargin2{:} varargin{i}};
0073 varargin(i) = [];
0074 elseif strcmpi(varargin{i},'NoDisplay')
0075 DisplayFlag = 0;
0076 varargin2 = {varargin2{:} varargin{i}};
0077 varargin(i) = [];
0078 elseif strcmpi(varargin{i},'Group')
0079 GroupFlag = 1;
0080 varargin(i) = [];
0081 elseif strcmpi(varargin{i},'NoGroup')
0082 GroupFlag = 0;
0083
0084 varargin2 = {varargin2{:} varargin{i}};
0085
0086 varargin(i) = [];
0087 elseif strcmpi(varargin{i},'Archive')
0088 ArchiveFlag = 1;
0089 StructureFlag = 1;
0090
0091 varargin(i) = [];
0092 elseif strcmpi(varargin{i},'NoArchive')
0093 ArchiveFlag = 0;
0094
0095 varargin(i) = [];
0096 elseif strcmpi(varargin{i},'Struct')
0097 StructureFlag = 1;
0098 varargin2 = {varargin2{:} varargin{i}};
0099 varargin(i) = [];
0100 elseif strcmpi(varargin{i},'Freezing')
0101 FreezingFlag = 1;
0102 varargin(i) = [];
0103 elseif strcmpi(varargin{i},'NoFreezing')
0104 FreezingFlag = 0;
0105 varargin(i) = [];
0106 end
0107 end
0108
0109 Machine = getfamilydata('SubMachine');
0110
0111 switch Machine
0112 case 'OldBooster'
0113 OldLiberaFlag = 1;
0114 otherwise
0115 OldLiberaFlag = 0;
0116 end
0117
0118 AO = getfamilydata('BPMx');
0119
0120
0121 if isempty(varargin)
0122 num = 1:length(AO.DeviceName);
0123 DeviceList = family2dev('BPMx');
0124 else
0125 DeviceList = varargin{1};
0126 if size(DeviceList,2) == 2
0127
0128 else
0129 DeviceList = elem2dev('BPMx',DeviceList);
0130 end
0131 end
0132
0133
0134 Status = family2status('BPMx',DeviceList);
0135 DeviceList = DeviceList(find(Status),:);
0136
0137 if isempty(DeviceList)
0138 disp('All BPM not valid')
0139 AM = -1;
0140 return;
0141 end
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171 if (FreezingFlag)
0172
0173 if OldLiberaFlag
0174 Enablecmd = 'EnableBufferFreezing';
0175 UnFreezecmd = 'UnFreezeBuffer'
0176 else
0177 Enablecmd = 'EnableDDBufferFreezing';
0178 UnFreezecmd = 'UnFreezeDDBuffer';
0179 end
0180
0181
0182
0183 disp([mfilename ': Enabling freezing mecanism']);
0184 for k = 1:length(DeviceList)
0185 tango_command_inout2(DeviceName{k},Enablecmd);
0186 end
0187 disp([mfilename ': Freezing BPM: pseudo synchronism']);
0188 for k = 1:length(DeviceList)
0189 tango_command_inout2(DeviceName{k},UnFreezecmd);
0190 end
0191 end
0192
0193 if GroupFlag
0194 if OldLiberaFlag
0195 attr_name = ...
0196 {'XPosVector','ZPosVector', 'QuadVector', 'SumVector', ...
0197 'VaVector', 'VbVector', 'VcVector', 'VdVector'};
0198 else
0199 attr_name = ...
0200 {'XPosDD','ZPosDD', 'QuadDD', 'SumDD', ...
0201 'VaDD', 'VbDD', 'VcDD', 'VdDD'};
0202 end
0203
0204 GroupId = tango_group_id('BPM');
0205
0206 DeviceListFull = family2dev('BPMx',0);
0207 tango_group_disable_device2(GroupId, dev2tangodev('BPMx',DeviceListFull));
0208 tango_group_enable_device2(GroupId, dev2tangodev('BPMx',DeviceList));
0209 rep = tango_group_read_attributes(GroupId,attr_name,0);
0210
0211 if rep.has_failed
0212 disp('Error when reading data for BPM');
0213 for k = 1:length(rep.dev_replies),
0214 if rep.dev_replies(k).has_failed
0215 fprintf('Error with device %s\n',rep.dev_replies(k).dev_name)
0216 end
0217 end
0218 error('Programme %s Stopped', mfilename);
0219 else
0220 vect = [];
0221 for k = 1:length(rep.dev_replies),
0222
0223 vect = [vect ; rep.dev_replies(k).is_enabled];
0224
0225 if rep.dev_replies(k).is_enabled
0226
0227 AM.DeviceName{k} = rep.dev_replies(k).attr_values(1).dev_name;
0228 AM.Data.X(k,:) = rep.dev_replies(k).attr_values(1).value;
0229 AM.Data.Z(k,:) = rep.dev_replies(k).attr_values(2).value;
0230 AM.Data.Q(k,:) = rep.dev_replies(k).attr_values(3).value;
0231 AM.Data.Sum(k,:) = rep.dev_replies(k).attr_values(4).value;
0232 AM.Data.Va(k,:) = rep.dev_replies(k).attr_values(5).value;
0233 AM.Data.Vb(k,:) = rep.dev_replies(k).attr_values(6).value;
0234 AM.Data.Vc(k,:) = rep.dev_replies(k).attr_values(7).value;
0235 AM.Data.Vd(k,:) = rep.dev_replies(k).attr_values(8).value;
0236
0237 klast = k;
0238
0239 end
0240 end
0241
0242 vect = vect(1:klast);
0243 AM.DeviceName(find(1 - vect)) = [];
0244 AM.Data.X = AM.Data.X(find(vect),:);
0245 AM.Data.Z = AM.Data.Z(find(vect),:);
0246 AM.Data.Q = AM.Data.Q(find(vect),:);
0247 AM.Data.Sum = AM.Data.Sum(find(vect),:);
0248 AM.Data.Va = AM.Data.Va(find(vect),:);
0249 AM.Data.Vb = AM.Data.Vb(find(vect),:);
0250 AM.Data.Vc = AM.Data.Vc(find(vect),:);
0251 AM.Data.Vd = AM.Data.Vd(find(vect),:);
0252
0253 AM.TimeStamp = datestr(now);
0254 AM.DataDescriptor = ['Turn by turn data for ' getsubmachinename];
0255 AM.CreatedBy = mfilename;
0256 AM.DeviceList = DeviceList;
0257 end
0258 else
0259
0260 if size(DeviceList,1) > 1
0261 AM.DeviceList=[];
0262 for k = 1:length(DeviceList)
0263
0264 AM0 = getbpmrawdata(DeviceList(k,:),varargin2{:},'Struct');
0265 try
0266 AM.DeviceName{k} = AM0.DeviceName{:};
0267 AM.Data.X(k,:) = AM0.Data.X(:); AM.Data.Z(k,:) = AM0.Data.Z(:);
0268 AM.Data.Sum(k,:) = AM0.Data.Sum(:); AM.Data.Q(k,:) = AM0.Data.Q(:);
0269 AM.Data.Va(k,:) = AM0.Data.Va(:); AM.Data.Vb(k,:) = AM0.Data.Vb(:);
0270 AM.Data.Vc(k,:) = AM0.Data.Vc(:); AM.Data.Vd(k,:) = AM0.Data.Vd(:);
0271 AM.TimeStamp = datestr(now);
0272 AM.DataDescriptor = ['Turn by turn data for ' getsubmachinenames];
0273 AM.CreatedBy = mfilename;
0274 AM.DeviceList = [AM.DeviceList; AM0.DeviceList];
0275 catch
0276 switch lasterr
0277 case 'Subscripted assignment dimension mismatch.'
0278 error('BPM do not have the same number of samples !!!')
0279 end
0280 end
0281 end
0282
0283 if (FreezingFlag)
0284
0285
0286 if OldLiberaFlag
0287 Disablecmd = 'DisableBufferFreezing';
0288 else
0289 Disablecmd = 'DisableDDBufferFreezing';
0290 end
0291
0292 disp([mfilename ': disabling buffer freezing for BPM'])
0293 for k = 1:length(DeviceList)
0294 tango_command_inout2(DeviceName{k}, Disablecmd);
0295 end
0296 end
0297
0298 else
0299
0300 AO = getfamilydata('BPMx');
0301 DeviceName = family2tangodev('BPMx',DeviceList);
0302
0303 if OldLiberaFlag
0304 attr_name = ...
0305 {'XPosVector','ZPosVector', 'QuadVector', 'SumVector', ...
0306 'VaVector', 'VbVector', 'VcVector', 'VdVector'};
0307 else
0308 attr_name = ...
0309 {'XPosDD','ZPosDD', 'QuadDD', 'SumDD', ...
0310 'VaDD', 'VbDD', 'VcDD', 'VdDD'};
0311 end
0312
0313
0314
0315 rep = tango_read_attributes2(DeviceName{:},attr_name);
0316
0317 X = rep(1).value;
0318 Z = rep(2).value;
0319 Q = rep(3).value;
0320 Sum = rep(4).value;
0321 Va = rep(5).value;
0322 Vb = rep(6).value;
0323 Vc = rep(7).value;
0324 Vd = rep(8).value;
0325
0326
0327
0328 if DisplayFlag
0329 figure
0330 subplot(2,2,1)
0331 plot(X)
0332 ylabel('X (mm)')
0333 grid on
0334
0335 subplot(2,2,2)
0336 plot(Z)
0337 ylabel('Z (mm)')
0338 grid on
0339
0340 subplot(2,2,3)
0341 plot(Sum)
0342 ylabel('SUM')
0343 xlabel('turn number')
0344 grid on
0345
0346 subplot(2,2,4)
0347 plot(Q)
0348 ylabel('Q')
0349 xlabel('turn number')
0350 grid on
0351 addlabel(1,0,datestr(clock));
0352 suptitle(sprintf('Turn by turn data for %s',DeviceName{:}))
0353 end
0354
0355 if StructureFlag
0356 AM.DeviceName = DeviceName;
0357 AM.Data.X = X;
0358 AM.Data.Z = Z;
0359 AM.Data.Sum = Sum;
0360 AM.Data.Q = Q;
0361 AM.Data.Va = Va;
0362 AM.Data.Vb = Vb;
0363 AM.Data.Vc = Vc;
0364 AM.Data.Vd = Vd;
0365
0366 AM.TimeStamp = datestr(now);
0367 AM.DataDescriptor = ['Turn by turn data for ' getfamilydata('Machine')];
0368 AM.CreatedBy = mfilename;
0369 AM.DeviceList = DeviceList;
0370 end
0371 end
0372 end
0373 if ArchiveFlag
0374
0375
0376 if isempty(FileName)
0377 FileName = appendtimestamp('BPMTurnByTurn');
0378 DirectoryName = getfamilydata('Directory','BPMData');
0379 if isempty(DirectoryName)
0380 DirectoryName = [getfamilydata('Directory','DataRoot') 'BPM', filesep];
0381 else
0382
0383 DirStart = pwd;
0384 [DirectoryName, ErrorFlag] = gotodirectory(DirectoryName);
0385 cd(DirStart);
0386 end
0387 [DirectoryName FileName]
0388 [FileName, DirectoryName] = uiputfile('*.mat', 'Select Dispersion File', [DirectoryName FileName]);
0389 if FileName == 0
0390 ArchiveFlag = 0;
0391 disp(' BPM measurement canceled.');
0392 FileName='';
0393 return
0394 end
0395 FileName = [DirectoryName, FileName];
0396 elseif FileName == -1
0397 FileName = appendtimestamp(getfamilydata('Default', 'BPMArchiveFile'));
0398 DirectoryName = getfamilydata('Directory','BPMData');
0399 if isempty(DirectoryName)
0400 DirectoryName = [getfamilydata('Directory','DataRoot') 'BPM', filesep];
0401 end
0402 FileName = [DirectoryName, FileName];
0403 end
0404
0405 save(FileName,'AM');
0406
0407 end
0408
0409 if StructureFlag
0410 varargout{1} = AM;
0411 else
0412 if exist('AM','var')
0413 varargout{1} = AM.Data.X; varargout{2} = AM.Data.Z;
0414 varargout{3} = AM.Data.Sum; varargout{4} = AM.Data.Q;
0415 varargout{5} = AM.Data.Va; varargout{6} = AM.Data.Vb;
0416 varargout{7} = AM.Data.Vc; varargout{8} = AM.Data.Vd;
0417 else
0418 varargout{1} = X; varargout{2} = Z;
0419 varargout{3} = Sum; varargout{4} = Q;
0420 varargout{5} = Va; varargout{6} = Vb;
0421 varargout{7} = Vc; varargout{8} = Vd;
0422 end
0423 end