5 #include <carma/util/ScopedPthreadMutexLock.h>
8 #include <boost/foreach.hpp>
18 namespace linelength {
23 RMSTracker(
unsigned int max = 500)
34 unsigned int size()
const {
36 return static_cast<unsigned int>(_values.size());
39 void add(
const double value) {
41 const unsigned int vs = _values.size();
43 if (isnan(value) || isinf(value)) {
44 carma::util::programLogWarnIfPossible(
"RMSTracker::add got inf or nan, ignore");
49 const double v = _values.back();
50 const double Sv = _squares.back();
59 const double s = value * value;
64 _values.push_front(value);
65 _squares.push_front(s);
67 _Ssize = _values.size();
69 const double tSx = _Sx / _Ssize;
75 return sqrt((_Sxx / _Ssize) - _SSx);
80 double rmsMean()
const {
83 const double xm = _Sx / _Ssize;
86 BOOST_FOREACH(
const double value, _values) {
87 const double sxm = value - xm;
91 const double ret = sqrt(ssx / (_Ssize - 1));
92 if (isnan(ret) || isinf(ret))
100 return _Sx /
static_cast<double>(_values.size());
103 double median()
const {
104 std::vector<double> v;
108 v.resize(_values.size());
109 copy(_values.begin(), _values.end(), v.begin());
115 sort(v.begin(), v.end());
116 return v.at(v.size() / 2);
119 double instantaneous()
const {
121 return _values.front();
125 const unsigned int _max;
132 std::deque<double> _values;
133 std::deque<double> _squares;
141 #endif // LLRMSTRACKER_H
A simple wrapper class that makes use of ::pthread_mutex_t easier in a C++ world. ...
This is the interface file for extra APIs for program logging.