Home > machine > Soleil > common > measrate.m

measrate

PURPOSE ^

MEASRATE - noise on channels

SYNOPSIS ^

function [AvgRate, N] = measrate(family, elem, T);

DESCRIPTION ^

MEASRATE - noise on channels
[AvgRate, N] = measrate(Family, List, T);

 INPUTS
 1. Family = Family name ('BPMx', 'HCOR', etc.) 
 2. List   = Device list or element list [column vector] {default, entire family}
 3. T      = Time interval to check sampling rate [seconds]

 OUTPUTS
 1. AvgRate = Average sample rate over T seconds perios
 2. N       = Number of observed transitions

 NOTES
 1.This method only works on noisy channels!

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [AvgRate, N] = measrate(family, elem, T);
0002 %MEASRATE - noise on channels
0003 %[AvgRate, N] = measrate(Family, List, T);
0004 %
0005 % INPUTS
0006 % 1. Family = Family name ('BPMx', 'HCOR', etc.)
0007 % 2. List   = Device list or element list [column vector] {default, entire family}
0008 % 3. T      = Time interval to check sampling rate [seconds]
0009 %
0010 % OUTPUTS
0011 % 1. AvgRate = Average sample rate over T seconds perios
0012 % 2. N       = Number of observed transitions
0013 %
0014 % NOTES
0015 % 1.This method only works on noisy channels!
0016 
0017 %
0018 % Written by Gregory J. Portmann, ALS
0019 
0020 if nargin == 0,
0021     error('Need atleast one input: family');
0022 end 
0023 
0024 if nargin == 1,
0025     elem = getlist(family);
0026 end
0027 
0028 if isempty(elem)
0029     elem = getlist(family);
0030 end
0031 
0032 
0033 if (size(elem,2) == 2) 
0034     elem = dev2elem(family, elem);
0035 end                  
0036 
0037 if nargin <= 2,
0038     T = 2;
0039 end
0040 
0041 OneAtATimeFlag = 0;
0042 
0043 if OneAtATimeFlag
0044     DelT = .005;
0045 else
0046     if length(elem)>50
0047         DelT = .03;
0048     else
0049         DelT = .02;
0050     end
0051 end
0052 if length(T) == 1
0053     tin = 0:DelT:T;
0054 else
0055     tin = T;
0056 end
0057 
0058 
0059 disp(['  Checking the data rate for channel or family: ', family]); 
0060 disp(['  Collection data for ',num2str(tin(end)),' seconds at a sample rate of ',num2str(1/mean(diff(tin))),' Hertz.']); pause(0);
0061 disp(['  Channels must be noisy for this method to work.']);
0062 if OneAtATimeFlag
0063     
0064     for i = 1:size(elem,1)
0065         % Collect data
0066         [a, t] = getam(family, elem(i,1), 1, tin);
0067         
0068         adiff = abs(diff(a));
0069         I = find(adiff>0);
0070         
0071         if size(I,2) < 3
0072             disp(' '); disp('  WARNING: Less than 3 update.  Increase time span or channel not noisy enough.'); disp(' ');
0073         end
0074         
0075         if isempty(I)
0076             N(i,1) = 0;
0077             AvgRate(i,1) = 0;
0078         else
0079             t = t(I);
0080             tdiff = diff(t);
0081             
0082             N(i,1) = size(I,2)-1;
0083             AvgRate(i,1) = 1/mean(tdiff);
0084         end
0085         
0086         Dev=elem2dev(family,elem(i));
0087         fprintf('  %s(%2d,%2d), Sample Rate=%5.2f Hz,  Number of Samples=%d, Number of New Data Points=%d\n', family, Dev(1), Dev(2), AvgRate(i,1), length(t),N(i,1));
0088     end
0089 else
0090     % Collect data using EPICs
0091     getam(family);  % just to connect to channels
0092     [a, t] = getam(family, [], 1, tin);
0093     
0094     %figure(3)
0095     %plot(tin,t)
0096     
0097     for i = 1:size(elem,1)
0098         adiff = abs(diff(a(i,:)));
0099         I = find(adiff>0);
0100         
0101         if size(I,2) < 3
0102             disp(' '); disp(['  WARNING: ',family,'(',num2str(i),') less than 3 update.  Increase time span or channel not noisy enough.']); disp(' ');
0103         end
0104         
0105         if isempty(I)
0106             N(i,1) = 0;
0107             AvgRate(i,1) = 0;
0108         else
0109             t1 = t(I);
0110             tdiff = diff(t1);
0111             
0112             N(i,1) = size(I,2)-1;
0113             AvgRate(i,1) = 1/mean(tdiff);
0114         end
0115         
0116         Dev = elem2dev(family,elem(i));
0117         fprintf('  %s(%2d,%2d), Sample Rate=%5.2f Hz,  Number of Samples=%d, Number of New Data Points=%d\n', family, Dev(1), Dev(2), AvgRate(i,1), length(t),N(i,1));
0118     end   
0119 end

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