ProjectorHelper.cxx

Go to the documentation of this file.
00001 
00012 #ifdef _MSC_VER
00013 #include "msdevstudio/MSconfig.h"
00014 #endif
00015 
00016 #include "ProjectorHelper.h"
00017 #include "datasrcs/DataPointTuple.h"
00018 #include "datasrcs/DataSource.h"
00019 
00020 #include <algorithm>
00021 #include <numeric>
00022 #include <iterator>
00023 
00024 #include <cmath>
00025 
00026 using std::sqrt;
00027 using std::vector;
00028 
00029 namespace dp = hippodraw::DataPoint2DTuple;
00030 
00031 namespace hippodraw {
00032 
00033 ProjectorHelper::
00034 ProjectorHelper ( const DataSource *ntuple )
00035   : m_ntuple ( ntuple )
00036 {
00037 }
00038 
00039 int 
00040 ProjectorHelper::
00041 size () const
00042 {
00043   return m_ntuple -> rows ();
00044 }
00045 
00046 double 
00047 ProjectorHelper::
00048 getTotal () const
00049 {
00050   return m_ntuple -> sum ( dp::Y );
00051 }
00052 
00053 double 
00054 ProjectorHelper::
00055 minCoord () const
00056 {
00057   const vector< double >& colCoord = m_ntuple -> getColumn( dp::X );
00058 
00059   return *std::min_element( colCoord.begin(), colCoord.end() );
00060 }
00061 
00062 double 
00063 ProjectorHelper::
00064 maxCoord () const
00065 {
00066   const vector< double >& colCoord = m_ntuple -> getColumn( dp::X );
00067 
00068   return *std::max_element( colCoord.begin(), colCoord.end() );
00069 }
00070 
00071 double 
00072 ProjectorHelper::
00073 minValue () const
00074 {
00075   const vector< double >& colValue = m_ntuple -> getColumn( dp::Y );
00076 
00077   return *std::min_element( colValue.begin(), colValue.end() );
00078 }
00079 
00080 double 
00081 ProjectorHelper::
00082 maxValue () const
00083 {
00084   const vector< double >& colValue = m_ntuple -> getColumn( dp::Y );
00085 
00086   return *std::max_element( colValue.begin(), colValue.end() );
00087 }
00088 
00089 double 
00090 ProjectorHelper::
00091 meanValue () const
00092 {
00093   const vector< double >& colValue = m_ntuple -> getColumn( dp::Y );
00094   double sum = 0.0;
00095   sum = std::accumulate( colValue.begin(), colValue.end(), sum );
00096 
00097   return sum / colValue.size();
00098 }
00099 
00100 
00101 double 
00102 ProjectorHelper::
00103 meanCoord () const
00104 {
00105   const vector<double>& colCoord = m_ntuple -> getColumn( dp::X );
00106   const vector<double>& colValue = m_ntuple -> getColumn( dp::Y );
00107   
00108   double sumXY = 0.0;
00109   sumXY = std::inner_product( colCoord.begin(), colCoord.end(),
00110                               colValue.begin(), sumXY );
00111   double sumY = 0.0;
00112   sumY = std::accumulate( colValue.begin(), colValue.end(), sumY );
00113     
00114   return sumXY / sumY;
00115 }
00116 
00117 double 
00118 ProjectorHelper::
00119 stdCoord () const
00120 {
00121   const vector<double>& x = m_ntuple -> getColumn( dp::X );
00122   const vector<double>& y = m_ntuple -> getColumn( dp::Y );
00123   
00124   double sumY = getTotal();
00125   double mean = meanCoord();
00126   double sumXXY = 0.0;
00127   
00128   for( unsigned int i = 0; i < x.size(); i++)
00129     sumXXY  += ( x[i] * x[i] * y[i] );
00130   
00131   return sqrt ( sumXXY / sumY - mean * mean );
00132 }
00133 
00134 double
00135 ProjectorHelper::
00136 valueAt( double x ) const
00137 {
00138   const vector<double>& colValue = m_ntuple -> getColumn( dp::Y );
00139   const vector<double>& colCoord = m_ntuple -> getColumn( dp::X );
00140 
00141   double value = 0.0;
00142   bool is_set = false;
00143 
00144   for ( unsigned int i = 1; i < colValue.size(); i++) {
00145     if ( colCoord[i-1] <= x  && x <= colCoord[i] ) {
00146       value = colValue[i-1];   // Eschew linear interpolation in favor of
00147       is_set = true;         // returning a valid value, which is more robust.
00148     }
00149   }
00150   if ( is_set == false ) {
00151     throw std::string("valueAt: x lies outside valid range.");
00152   }
00153   
00154   return value;
00155 }
00156 
00157 } // namespace hippodraw
00158 

Generated for HippoDraw Class Library by doxygen