source: MML/trunk/machine/SOLEIL/common/measrate.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 10 years ago

Initial import--MML version from SOLEIL@2013

File size: 3.0 KB
Line 
1function [AvgRate, N] = measrate(family, elem, T);
2%MEASRATE - noise on channels
3%[AvgRate, N] = measrate(Family, List, T);
4%
5% INPUTS
6% 1. Family = Family name ('BPMx', 'HCOR', etc.)
7% 2. List   = Device list or element list [column vector] {default, entire family}
8% 3. T      = Time interval to check sampling rate [seconds]
9%
10% OUTPUTS
11% 1. AvgRate = Average sample rate over T seconds perios
12% 2. N       = Number of observed transitions
13%
14% NOTES
15% 1.This method only works on noisy channels!
16
17%
18% Written by Gregory J. Portmann, ALS
19
20if nargin == 0,
21    error('Need atleast one input: family');
22end
23
24if nargin == 1,
25    elem = getlist(family);
26end
27
28if isempty(elem)
29    elem = getlist(family);
30end
31
32
33if (size(elem,2) == 2)
34    elem = dev2elem(family, elem);
35end                 
36
37if nargin <= 2,
38    T = 2;
39end
40
41OneAtATimeFlag = 0;
42
43if OneAtATimeFlag
44    DelT = .005;
45else
46    if length(elem)>50
47        DelT = .03;
48    else
49        DelT = .02;
50    end
51end
52if length(T) == 1
53    tin = 0:DelT:T;
54else
55    tin = T;
56end
57
58
59disp(['  Checking the data rate for channel or family: ', family]);
60disp(['  Collection data for ',num2str(tin(end)),' seconds at a sample rate of ',num2str(1/mean(diff(tin))),' Hertz.']); pause(0);
61disp(['  Channels must be noisy for this method to work.']);
62if OneAtATimeFlag
63   
64    for i = 1:size(elem,1)
65        % Collect data
66        [a, t] = getam(family, elem(i,1), 1, tin);
67       
68        adiff = abs(diff(a));
69        I = find(adiff>0);
70       
71        if size(I,2) < 3
72            disp(' '); disp('  WARNING: Less than 3 update.  Increase time span or channel not noisy enough.'); disp(' ');
73        end
74       
75        if isempty(I)
76            N(i,1) = 0;
77            AvgRate(i,1) = 0;
78        else
79            t = t(I);
80            tdiff = diff(t);
81           
82            N(i,1) = size(I,2)-1;
83            AvgRate(i,1) = 1/mean(tdiff);
84        end
85       
86        Dev=elem2dev(family,elem(i));
87        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));
88    end
89else
90    % Collect data using EPICs
91    getam(family);  % just to connect to channels
92    [a, t] = getam(family, [], 1, tin);
93   
94    %figure(3)
95    %plot(tin,t)
96   
97    for i = 1:size(elem,1)
98        adiff = abs(diff(a(i,:)));
99        I = find(adiff>0);
100       
101        if size(I,2) < 3
102            disp(' '); disp(['  WARNING: ',family,'(',num2str(i),') less than 3 update.  Increase time span or channel not noisy enough.']); disp(' ');
103        end
104       
105        if isempty(I)
106            N(i,1) = 0;
107            AvgRate(i,1) = 0;
108        else
109            t1 = t(I);
110            tdiff = diff(t1);
111           
112            N(i,1) = size(I,2)-1;
113            AvgRate(i,1) = 1/mean(tdiff);
114        end
115       
116        Dev = elem2dev(family,elem(i));
117        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));
118    end   
119end
Note: See TracBrowser for help on using the repository browser.