0001 function varargout = getbpmrawdata_mat(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 DisplayFlag = 1;
0053 ArchiveFlag = 0;
0054 StructureFlag = 0;
0055 FreezingFlag = 0;
0056 FileName='';
0057 varargin2 = {};
0058
0059 if ~exist('DeviceName','var')
0060 DeviceName = [];
0061 end
0062
0063 for i = length(varargin):-1:1
0064 if strcmpi(varargin{i},'Display')
0065 DisplayFlag = 1;
0066 varargin2 = {varargin2{:} varargin{i}};
0067 varargin(i) = [];
0068 elseif strcmpi(varargin{i},'NoDisplay')
0069 DisplayFlag = 0;
0070 varargin2 = {varargin2{:} varargin{i}};
0071 varargin(i) = [];
0072 elseif strcmpi(varargin{i},'Archive')
0073 ArchiveFlag = 1;
0074 StructureFlag = 1;
0075
0076 varargin(i) = [];
0077 elseif strcmpi(varargin{i},'NoArchive')
0078 ArchiveFlag = 0;
0079
0080 varargin(i) = [];
0081 elseif strcmpi(varargin{i},'Struct')
0082 StructureFlag = 1;
0083 varargin2 = {varargin2{:} varargin{i}};
0084 varargin(i) = [];
0085 elseif strcmpi(varargin{i},'Freezing')
0086 FreezingFlag = 1;
0087 varargin(i) = [];
0088 elseif strcmpi(varargin{i},'NoFreezing')
0089 FreezingFlag = 0;
0090 varargin(i) = [];
0091 end
0092 end
0093
0094 AO = getfamilydata('BPMx');
0095
0096
0097 if isempty(varargin)
0098 num = 1:length(AO.DeviceName);
0099 else
0100 num = varargin{1};
0101 if isempty(num)
0102 num = 1:length(AO.DeviceName);
0103 end
0104 end
0105
0106
0107 valid = find(AO.Status);
0108 num = intersect(num,valid);
0109
0110 if isempty(num)
0111 disp('All BPM not valid')
0112 return;
0113 end
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142 if (FreezingFlag)
0143
0144
0145 disp([mfilename ': Enabling freezing mecanism']);
0146 for k = 1:length(num)
0147 tango_command_inout2(AO.DeviceName{num(k)},'EnableBufferFreezing');
0148 end
0149 disp([mfilename ': Freezing BPM: pseudo synchronism']);
0150 for k = 1:length(num)
0151 tango_command_inout2(AO.DeviceName{num(k)},'UnFreezeBuffer');
0152 end
0153 end
0154
0155
0156 if length(num) > 1
0157 AM.DeviceList=[];
0158 for k = 1:length(num)
0159
0160 AM0 = getbpmrawdata_mat(num(k),varargin2{:},'Struct');
0161 try
0162 AM.DeviceName{k} = AM0.DeviceName{:};
0163 AM.Data.X(k,:) = AM0.Data.X(:); AM.Data.Z(k,:) = AM0.Data.Z(:);
0164 AM.Data.Sum(k,:) = AM0.Data.Sum(:); AM.Data.Q(k,:) = AM0.Data.Q(:);
0165 AM.Data.Va(k,:) = AM0.Data.Va(:); AM.Data.Vb(k,:) = AM0.Data.Vb(:);
0166 AM.Data.Vc(k,:) = AM0.Data.Vc(:); AM.Data.Vd(k,:) = AM0.Data.Vd(:);
0167 AM.TimeStamp = datestr(now);
0168 AM.DataDescriptor = ['Turn by turn data for ' getfamilydata('Machine')];
0169 AM.CreatedBy = mfilename;
0170 AM.DeviceList = [AM.DeviceList; AM0.DeviceList];
0171 catch
0172 switch lasterr
0173 case 'Subscripted assignment dimension mismatch.'
0174 error('BPM do not have the same number of samples !!!')
0175 end
0176 end
0177 end
0178
0179
0180 if (FreezingFlag)
0181 disp([mfilename ': disabling buffer freezing for BPM'])
0182 for k = 1:length(num)
0183 tango_command_inout2(AO.DeviceName{num(k)},'DisableBufferFreezing');
0184 end
0185 end
0186
0187 else
0188
0189 AO = getfamilydata('BPMx');
0190 AO.DeviceName;
0191
0192 attr_name = ...
0193 {'XPosDD','ZPosDD', 'QuadDD', 'SumDD', ...
0194 'VaDD', 'VbDD', 'VcDD', 'VdDD'};
0195
0196
0197 rep = tango_read_attributes2(AO.DeviceName{num},attr_name);
0198
0199 X = rep(1).value;
0200 Z = rep(2).value;
0201 Q = rep(3).value;
0202 Sum = rep(4).value;
0203 Va = rep(5).value;
0204 Vb = rep(6).value;
0205 Vc = rep(7).value;
0206 Vd = rep(8).value;
0207
0208
0209
0210 if DisplayFlag
0211 figure
0212 subplot(2,2,1)
0213 plot(X)
0214 ylabel('X (mm)')
0215 grid on
0216
0217 subplot(2,2,2)
0218 plot(Z)
0219 ylabel('Z (mm)')
0220 grid on
0221
0222 subplot(2,2,3)
0223 plot(Sum)
0224 ylabel('SUM')
0225 xlabel('turn number')
0226 grid on
0227
0228 subplot(2,2,4)
0229 plot(Q)
0230 ylabel('Q')
0231 xlabel('turn number')
0232 grid on
0233 addlabel(1,0,datestr(clock));
0234 suptitle(sprintf('Turn by turn data for %s',AO.DeviceName{num}))
0235 end
0236
0237 if StructureFlag
0238 AM.DeviceName = AO.DeviceName(num);
0239 AM.Data.X = X;
0240 AM.Data.Z = Z;
0241 AM.Data.Sum = Sum;
0242 AM.Data.Q = Q;
0243 AM.Data.Va = Va;
0244 AM.Data.Vb = Vb;
0245 AM.Data.Vc = Vc;
0246 AM.Data.Vd = Vd;
0247
0248 AM.TimeStamp = datestr(now);
0249 AM.DataDescriptor = ['Turn by turn data for ' getfamilydata('Machine')];
0250 AM.CreatedBy = mfilename;
0251 AM.DeviceList = tango2dev(AO.Monitor.TangoNames{num});
0252 end
0253
0254 end
0255
0256 if ArchiveFlag
0257
0258
0259 if isempty(FileName)
0260 FileName = appendtimestamp(getfamilydata('Default', 'BPMArchiveFile'));
0261 DirectoryName = getfamilydata('Directory','BPMData');
0262 if isempty(DirectoryName)
0263 DirectoryName = [getfamilydata('Directory','DataRoot') 'BPM', filesep];
0264 else
0265
0266 DirStart = pwd;
0267 [DirectoryName, ErrorFlag] = gotodirectory(DirectoryName);
0268 cd(DirStart);
0269 end
0270 [DirectoryName FileName]
0271 [FileName, DirectoryName] = uiputfile('*.mat', 'Select Dispersion File', [DirectoryName FileName]);
0272 if FileName == 0
0273 ArchiveFlag = 0;
0274 disp(' BPM measurement canceled.');
0275 FileName='';
0276 return
0277 end
0278 FileName = [DirectoryName, FileName];
0279 elseif FileName == -1
0280 FileName = appendtimestamp(getfamilydata('Default', 'BPMArchiveFile'));
0281 DirectoryName = getfamilydata('Directory','BPMData');
0282 if isempty(DirectoryName)
0283 DirectoryName = [getfamilydata('Directory','DataRoot') 'BPM', filesep];
0284 end
0285 FileName = [DirectoryName, FileName];
0286 end
0287
0288 save(FileName,'AM');
0289
0290 end
0291
0292 if StructureFlag
0293 varargout{1} = AM;
0294 else
0295 if exist('AM','var')
0296 varargout{1} = AM.Data.X; varargout{2} = AM.Data.Z;
0297 varargout{3} = AM.Data.Sum; varargout{4} = AM.Data.Q;
0298 varargout{5} = AM.Data.Va; varargout{6} = AM.Data.Vb;
0299 varargout{7} = AM.Data.Vc; varargout{8} = AM.Data.Vd;
0300 else
0301 varargout{1} = X; varargout{2} = Z;
0302 varargout{3} = Sum; varargout{4} = Q;
0303 varargout{5} = Va; varargout{6} = Vb;
0304 varargout{7} = Vc; varargout{8} = Vd;
0305 end
0306 end