Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ProjectorHelper.cxx

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

Generated for HippoDraw-1.14.8.5 by doxygen 1.4.3