13 #include "msdevstudio/MSconfig.h"
30 using std::not_equal_to;
33 using namespace hippodraw;
39 m_has_errors ( false ),
48 m_ntuple ( fcn.m_ntuple ),
49 m_has_errors ( fcn.m_has_errors ),
50 m_fit_range ( fcn.m_fit_range )
70 namespace dp2 = hippodraw::DataPoint2DTuple;
71 namespace dp3 = hippodraw::DataPoint3DTuple;
77 unsigned int size = ntuple -> columns ();
78 vector < int > indices ( size );
80 for (
unsigned int i = 0; i <
size; i++ ) {
91 const std::vector < int > & indices )
101 unsigned int dim = (
m_indices.size() -2 ) / 2;
114 unsigned int cols =
m_ntuple -> columns ();
116 const vector < double > & errors =
m_ntuple -> getColumn ( ie );
118 if ( errors.empty() )
return false;
120 vector < double >::const_iterator first
121 = find_if ( errors.begin(), errors.end (),
122 bind2nd ( not_equal_to < double > (), 0.0 ) );
124 yes = first != errors.end ();
162 const vector < double > & errors =
m_ntuple -> getColumn ( ie );
163 int number_points = errors.size();
165 int zeros = count ( errors.begin(), errors.end(), 0.0 );
166 number_points -= zeros;
169 vector< double > free_parms;
175 reset ( std::vector < std::vector < double > > & alpha,
176 std::vector < double > & beta,
180 beta.resize ( size, 0.0 );
182 alpha.resize ( size );
184 for (
unsigned int i = 0; i < alpha.size (); i++ ) {
186 alpha[i].resize ( size, 0.0 );
195 std::vector < double > & beta )
201 reset ( alpha, beta, num_parms );
203 unsigned int rows =
m_ntuple -> rows ();
204 for (
unsigned int i = 0; i < rows; i++ ) {
206 const vector < double > & row =
m_ntuple -> getRow ( i );
208 double err = ie < 0 ? 0. : row [ ie ];
212 double x = row [ ix ];
213 double y = row [ iy ];
216 vector < double > derives;
219 for (
unsigned int j = 0; j < num_parms; j++ ) {
220 double t = derives[j] / ( err * err );
222 for (
unsigned int k = 0; k <= j; k++ ) {
223 alpha[j][k] = alpha[j][k] + t * derives[k];
226 beta[j] += t * y_diff;
242 cut -> setColumn ( ix );