Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:52

0001 #include "MbdRunningStats.h"
0002 #include <limits>
0003 #include <cmath>
0004 #include <iostream>
0005  
0006 MbdRunningStats::MbdRunningStats(const unsigned int imaxnum) :
0007   maxnum{imaxnum}
0008 {
0009   Clear();
0010 }
0011 
0012 void MbdRunningStats::Clear()
0013 {
0014   while ( !values.empty() )
0015   {
0016     values.pop();
0017   }
0018   S1 = S2 = 0.0;
0019 }
0020 
0021 void MbdRunningStats::Push(double x)
0022 {
0023   if ( Size() == maxnum )
0024   {
0025     double lastval = values.front();
0026     values.pop();
0027     S1 -= lastval;
0028     S2 -= (lastval*lastval);
0029   }
0030 
0031   values.push(x);
0032   S1 += x;
0033   S2 += (x*x);
0034 }
0035 
0036 double MbdRunningStats::Mean() const
0037 {
0038   if ( values.empty() ) 
0039   {
0040     //return std::numeric_limits<double>::infinity();
0041     //return std::numeric_limits<float>::quiet_NaN();
0042     return 0.;
0043   }
0044 
0045   return S1/values.size();
0046 }
0047 
0048 double MbdRunningStats::Variance() const
0049 {
0050   if ( values.empty() ) 
0051   {
0052     //return std::numeric_limits<double>::infinity();
0053     //return std::numeric_limits<float>::quiet_NaN();
0054     return 0.;
0055   }
0056 
0057   double var = (S2/values.size()) - (Mean()*Mean());
0058   /*
0059   std::cout << "RMS " << S2 << "\t" << values.size() << "\t" << Mean() << "\t" << Mean()*Mean() << "\t" << var << std::endl;
0060   */
0061   /*
0062   if ( var>4 )
0063   {
0064     var = 4.;
0065   }
0066   */
0067 
0068   return var;
0069 }
0070 
0071 double MbdRunningStats::StandardDeviation() const
0072 {
0073   return sqrt( Variance() );
0074 }
0075 
0076 double MbdRunningStats::RMS() const
0077 {
0078   return sqrt( Variance() );
0079 }
0080