NTupleChiSqFCN.cxx
Go to the documentation of this file.
1 
12 #ifdef _MSC_VER
13 #include "msdevstudio/MSconfig.h"
14 #endif
15 
16 #include "NTupleChiSqFCN.h"
17 
18 #include "functions/FunctionBase.h"
19 
21 #include "datasrcs/DataSource.h"
22 
23 using std::vector;
24 
25 using namespace hippodraw;
26 
29 {
30 }
31 
34  : NTupleFCN ( fcn )
35 {
36 }
37 
38 StatedFCN *
40 clone () const
41 {
42  return new NTupleChiSqFCN ( *this );
43 }
44 
45 double
47 #ifdef HAVE_MINUIT2
48 Up () const
49 #else
50 up () const
51 #endif
52 {
53  return 1.0;
54 }
55 
56 namespace dp2 = hippodraw::DataPoint2DTuple;
57 namespace dp3 = hippodraw::DataPoint3DTuple;
58 
59 double
62 {
63  double result = 0.0;
64 
65  unsigned int dim = ( m_indices.size() - 2 ) / 2;
66 
67  if ( dim == 1 ) {
68  int ix = m_indices [ dp2::X ];
69  int iy = m_indices [ dp2::Y ];
70  int ie = m_indices [ dp2::YERR ];
71 
72  unsigned int rows = m_ntuple -> rows ();
73 
74  for ( unsigned int i = 0; i < rows; i++ ) {
75  if ( acceptRow ( i ) ) {
76  const vector < double > & row = m_ntuple -> getRow ( i );
77  double err = ie < 0 ? 0. : row [ ie ];
78  if ( err == 0.0 && m_has_errors ) continue;
79  if ( m_has_errors == false ) err = 1.0;
80 
81  double diff = m_function -> operator () ( row [ ix ] ) - row [ iy ];
82  result += diff * diff / ( err * err );
83  }
84  }
85  }
86  else {
87  vector < double > coord ( dim );
88  int iv = m_indices [ dim ];
89  int ie = getErrorColumn ();
90 
91  unsigned int rows = m_ntuple -> rows ();
92 
93  for ( unsigned int i = 0; i < rows; i++ ) {
94  if ( acceptRow ( i ) ) {
95  const vector < double > & row = m_ntuple -> getRow ( i );
96 
97  double err = ie < 0 ? 0. : row [ ie ];
98  if ( err == 0.0 && m_has_errors ) continue;
99  if ( m_has_errors == false ) err = 1.0;
100 
101  for ( unsigned int j = 0; j < dim; j++ ) {
102  coord [ j ] = row [ m_indices [ j ] ];
103  }
104 
105  double diff = m_function -> operator () ( coord ) - row [ iv ];
106  result += diff * diff / ( err * err );
107  }
108  }
109  }
110 
111  return result;
112 }
113 
114 bool
117 {
118  return false;
119 }

Generated for HippoDraw Class Library by doxygen