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

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 NTupleChiSqFCN::
00026 NTupleChiSqFCN ( )
00027 {
00028 }
00029 
00030 NTupleChiSqFCN::
00031 NTupleChiSqFCN ( const NTupleChiSqFCN & fcn )
00032   : NTupleFCN ( fcn )
00033 {
00034 }
00035 
00036 StatedFCN * 
00037 NTupleChiSqFCN::
00038 clone () const
00039 {
00040   return new NTupleChiSqFCN ( *this );
00041 }
00042 
00043 double
00044 NTupleChiSqFCN::
00045 up () const
00046 {
00047   return 1.0;
00048 }
00049 
00050 namespace dp2 = hippodraw::DataPoint2DTuple;
00051 namespace dp3 = hippodraw::DataPoint3DTuple;
00052 
00053 double
00054 NTupleChiSqFCN::
00055 objectiveValue () const
00056 {
00057   double result = 0.0;
00058 
00059   if ( m_dimen == 1 ) {
00060     int ix = m_indices [ dp2::X ];
00061     int iy = m_indices [ dp2::Y ];
00062     int ie = m_indices [ dp2::YERR ];
00063 
00064     unsigned int rows = m_ntuple -> rows ();
00065 
00066     for ( unsigned int i = 0; i < rows; i++ ) {
00067       if ( acceptRow ( i ) ) {
00068         const vector < double > & row = m_ntuple -> getRow ( i );
00069         double err = ie < 0 ? 0. : row [ ie ];
00070         if ( err == 0.0 && m_has_errors ) continue;
00071         if ( m_has_errors == false ) err = 1.0;
00072         
00073         double diff = m_function -> operator () ( row [ ix ] ) -  row [ iy ];
00074         result += diff * diff / ( err * err );
00075       }
00076     }
00077   }
00078   else {
00079     vector < double > coord ( m_dimen );
00080 
00081     int iy = m_indices [ dp3::Z ];
00082     int ie = m_indices [ dp3::ZERR ];
00083 
00084     unsigned int rows = m_ntuple -> rows ();
00085 
00086     for ( unsigned int i = 0; i < rows; i++ ) {
00087       if ( acceptRow ( i ) ) {
00088         const vector < double > & row = m_ntuple -> getRow ( i );
00089 
00090         double err = ie < 0 ? 0. : row [ ie ];
00091         if ( err == 0.0 && m_has_errors ) continue;
00092         if ( m_has_errors == false ) err = 1.0;
00093 
00094         for ( unsigned int j = 0; j < m_dimen; j++ ) {
00095           coord [ j ] = row [ m_indices [ j ] ];
00096         }
00097 
00098         double diff = m_function -> operator () ( coord ) -  row [ iy ];
00099         result += diff * diff / ( err * err );
00100       }
00101     }
00102   }
00103 
00104   return result;
00105 }
00106 
00107 bool
00108 NTupleChiSqFCN::
00109 needsIntegrated () const
00110 {
00111   return false;
00112 }

Generated for HippoDraw-1.14.8.5 by doxygen 1.4.3