NTupleChiSqFCN.cxx

Go to the documentation of this file.
00001 
00012 #ifdef _MSC_VER
00013 #include "msdevstudio/MSconfig.h"
00014 #endif
00015 
00016 #include "NTupleChiSqFCN.h"
00017 
00018 #include "functions/FunctionBase.h"
00019 
00020 #include "datasrcs/DataPointTuple.h"
00021 #include "datasrcs/DataSource.h"
00022 
00023 using std::vector;
00024 
00025 using namespace hippodraw;
00026 
00027 NTupleChiSqFCN::
00028 NTupleChiSqFCN ( )
00029 {
00030 }
00031 
00032 NTupleChiSqFCN::
00033 NTupleChiSqFCN ( const NTupleChiSqFCN & fcn )
00034   : NTupleFCN ( fcn )
00035 {
00036 }
00037 
00038 StatedFCN * 
00039 NTupleChiSqFCN::
00040 clone () const
00041 {
00042   return new NTupleChiSqFCN ( *this );
00043 }
00044 
00045 double
00046 NTupleChiSqFCN::
00047 #ifdef HAVE_MINUIT2
00048 Up () const
00049 #else
00050 up () const
00051 #endif
00052 {
00053   return 1.0;
00054 }
00055 
00056 namespace dp2 = hippodraw::DataPoint2DTuple;
00057 namespace dp3 = hippodraw::DataPoint3DTuple;
00058 
00059 double
00060 NTupleChiSqFCN::
00061 objectiveValue () const
00062 {
00063   double result = 0.0;
00064 
00065   unsigned int dim = ( m_indices.size() - 2 ) / 2;
00066 
00067   if ( dim == 1 ) {
00068     int ix = m_indices [ dp2::X ];
00069     int iy = m_indices [ dp2::Y ];
00070     int ie = m_indices [ dp2::YERR ];
00071 
00072     unsigned int rows = m_ntuple -> rows ();
00073 
00074     for ( unsigned int i = 0; i < rows; i++ ) {
00075       if ( acceptRow ( i ) ) {
00076         const vector < double > & row = m_ntuple -> getRow ( i );
00077         double err = ie < 0 ? 0. : row [ ie ];
00078         if ( err == 0.0 && m_has_errors ) continue;
00079         if ( m_has_errors == false ) err = 1.0;
00080         
00081         double diff = m_function -> operator () ( row [ ix ] ) -  row [ iy ];
00082         result += diff * diff / ( err * err );
00083       }
00084     }
00085   }
00086   else {
00087     vector < double > coord ( dim );
00088     int iv = m_indices [ dim ];
00089     int ie = getErrorColumn ();
00090 
00091     unsigned int rows = m_ntuple -> rows ();
00092 
00093     for ( unsigned int i = 0; i < rows; i++ ) {
00094       if ( acceptRow ( i ) ) {
00095         const vector < double > & row = m_ntuple -> getRow ( i );
00096 
00097         double err = ie < 0 ? 0. : row [ ie ];
00098         if ( err == 0.0 && m_has_errors ) continue;
00099         if ( m_has_errors == false ) err = 1.0;
00100 
00101         for ( unsigned int j = 0; j < dim; j++ ) {
00102           coord [ j ] = row [ m_indices [ j ] ];
00103         }
00104 
00105         double diff = m_function -> operator () ( coord ) -  row [ iv ];
00106         result += diff * diff / ( err * err );
00107       }
00108     }
00109   }
00110 
00111   return result;
00112 }
00113 
00114 bool
00115 NTupleChiSqFCN::
00116 needsIntegrated () const
00117 {
00118   return false;
00119 }

Generated for HippoDraw Class Library by doxygen