Home > machine > Soleil > StorageRing > getbpmrawdata_mat.m

getbpmrawdata_mat

PURPOSE ^

GETBPMRAWDATA - Gets turn by turn data for BPM

SYNOPSIS ^

function varargout = getbpmrawdata_mat(varargin)

DESCRIPTION ^

 GETBPMRAWDATA - Gets turn by turn data for  BPM

  INPUTS
  1. num - bpm number (scalar or vector) list ([] means all valid BPM)

  Optional input arguments
  2. Optional display
     'Display'   - Plot BPM data X,Z, Sum, Q 
     'NoDisplay' - No plotting
  3. 'NoArchive' - No file archive {Default}
     'Archive'   - Save a dispersion data structure to \<Directory.BPMData>\<DispArchiveFile><Date><Time>.mat
                   To change the filename, included the filename after the 'Archive', '' to browse
                   Structure output  is forced
  4. 'Struct'    - Return out as a structure
  5. 'Freezing'  - Buffer freezing mechanism 
     'NoFreezing'

  OUTPUTS
  structure output if 'Struct' precised
  AM

  vector output
  1. X - Horizontal data
  2. Z - Vertical data
  3. Sum - Sum signal data
  4. Q  - Quadrupole signal data
  5. Va - electrode data
  6. Vb - electrode data
  7. Vc - electrode data
  8. Vd - electrode data

  EXAMPLES
  1. Display BPM 18
      getbpmrawdata(18)
  2. Display all valid BPM and output data as a structure
      getbpmrawdata([],'Struct');
  3. Output all valid BPM data
      [X Z Sum Q Va Vb Vc Vd] = getbpmrawdata([],'NoDisplay');
  4. Archives BPM 17 and 18 w/o displaying
     getbpmrawdata([17 18],'Archive','NoDisplay');
  5. Archives BPM 17 and 18 w/o displaying w/ buffer freezing mechanism
     getbpmrawdata([17 18],'Archive','NoDisplay','Freezing');

 See Also anabpmfirstturn

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function varargout = getbpmrawdata_mat(varargin)
0002 % GETBPMRAWDATA - Gets turn by turn data for  BPM
0003 %
0004 %  INPUTS
0005 %  1. num - bpm number (scalar or vector) list ([] means all valid BPM)
0006 %
0007 %  Optional input arguments
0008 %  2. Optional display
0009 %     'Display'   - Plot BPM data X,Z, Sum, Q
0010 %     'NoDisplay' - No plotting
0011 %  3. 'NoArchive' - No file archive {Default}
0012 %     'Archive'   - Save a dispersion data structure to \<Directory.BPMData>\<DispArchiveFile><Date><Time>.mat
0013 %                   To change the filename, included the filename after the 'Archive', '' to browse
0014 %                   Structure output  is forced
0015 %  4. 'Struct'    - Return out as a structure
0016 %  5. 'Freezing'  - Buffer freezing mechanism
0017 %     'NoFreezing'
0018 %
0019 %  OUTPUTS
0020 %  structure output if 'Struct' precised
0021 %  AM
0022 %
0023 %  vector output
0024 %  1. X - Horizontal data
0025 %  2. Z - Vertical data
0026 %  3. Sum - Sum signal data
0027 %  4. Q  - Quadrupole signal data
0028 %  5. Va - electrode data
0029 %  6. Vb - electrode data
0030 %  7. Vc - electrode data
0031 %  8. Vd - electrode data
0032 %
0033 %  EXAMPLES
0034 %  1. Display BPM 18
0035 %      getbpmrawdata(18)
0036 %  2. Display all valid BPM and output data as a structure
0037 %      getbpmrawdata([],'Struct');
0038 %  3. Output all valid BPM data
0039 %      [X Z Sum Q Va Vb Vc Vd] = getbpmrawdata([],'NoDisplay');
0040 %  4. Archives BPM 17 and 18 w/o displaying
0041 %     getbpmrawdata([17 18],'Archive','NoDisplay');
0042 %  5. Archives BPM 17 and 18 w/o displaying w/ buffer freezing mechanism
0043 %     getbpmrawdata([17 18],'Archive','NoDisplay','Freezing');
0044 %
0045 % See Also anabpmfirstturn
0046 
0047 %
0048 % Written by Laurent S. Nadolski
0049 
0050 % TODO freezing mechanism: introduce group
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 %        varargin2 = {varargin2{:} varargin{i}};
0076         varargin(i) = [];
0077     elseif strcmpi(varargin{i},'NoArchive')
0078         ArchiveFlag = 0;
0079 %        varargin2 = {varargin2{:} varargin{i}};
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 % if empty select all valid BPM
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 % Status one devices
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 % % read BPM number of samples
0117 % % If all not the same stop program and ask action to user
0118 % for k = 1:length(num)
0119 %     modestr{k} = char(readattribute([AO.DeviceName{num(k)} '/Mode']));
0120 % end
0121 %
0122 % for k = 1:length(num)
0123 %     sampleNumber(k) = readattribute([AO.DeviceName{num(k)} '/NumSamples']);
0124 % end
0125 %
0126 % notTheSame = sampleNumber-sampleNumber(1);
0127 %
0128 % if ~all(strcmp(modestr,modestr{1}))
0129 %    disp([mfilename ' STOP!']);
0130 %    error('Not all BPM in the same mode')
0131 %    return;
0132 % end
0133 %
0134 % if (sum(notTheSame) ~= 0)
0135 %    disp([mfilename ' STOP!']);
0136 %    error('Not all BPM with the same number of samples')
0137 %    return;
0138 % end
0139 
0140 %% Buffer freezing
0141 % Enable freezing mechanism
0142 if (FreezingFlag)
0143 %     hh = warndlg('BPMmanager must be stop and BPM mode be FT or TT');
0144 %     uiwait(hh);
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 %% loop of bpm list
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     % Disable freezing mechanism
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     %% Loop for one BPM
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     %% Display part
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         %time stamp of recording
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     % filling up data
0258     % Archive data structure
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             % Make sure default directory exists
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') % not nice but it works
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

Generated on Mon 21-May-2007 15:35:27 by m2html © 2003