Chi2Dist.cxx
Go to the documentation of this file.
1 
12 #ifdef _MSC_VER
13 #include "msdevstudio/MSconfig.h"
14 #endif
15 
16 #include "Chi2Dist.h"
17 
18 #include "FunctionHelper.h"
19 
20 #include <cmath>
21 #include <cassert>
22 #include <iostream>
23 
24 #ifdef ITERATOR_MEMBER_DEFECT
25 using namespace std;
26 #else
27 using std::vector;
28 #endif
29 
30 namespace hippodraw {
31 
32 Chi2Dist::Chi2Dist ( )
33 {
34  initialize ();
35 }
36 
37 Chi2Dist::Chi2Dist ( double norm, double nu, double scale )
38 {
39  initialize ();
40 
41  m_parms[0] = norm;
42  m_parms[1] = nu;
43  m_parms[2] = scale;
44 }
45 
46 void Chi2Dist::initialize ()
47 {
48  m_name = "Chi-square dist.";
49  m_parm_names.push_back ( "Norm" );
50  m_parm_names.push_back ( "#dof" );
51  m_parm_names.push_back ( "x scale" );
52 
53  resize ();
54 }
55 
57 {
58  return new Chi2Dist ( *this );
59 }
60 
61 double Chi2Dist::operator () ( double x ) const
62 {
63  return m_parms[0]*exp( -x/2./m_parms[2])
64  *pow(x/2./m_parms[2], m_parms[1]/2. - 1. );
65 }
66 
67 /* virtual */
68 void
69 Chi2Dist::
70 initialParameters ( const FunctionHelper * helper )
71 {
72  m_parms[2] = 1.;
73  m_parms[1] = helper->meanCoord();
74  m_parms[0] = 1.;
75  m_parms[0] = helper->maxValue()/operator()(m_parms[1]);
76 }
77 
78 double Chi2Dist::derivByParm ( int i, double x ) const
79 {
80  switch ( i ) {
81  case 0 :
82  return operator()(x)/m_parms[0];
83  break;
84 
85  case 1 :
86  return operator()(x)/2.*log(x/2./m_parms[2]);
87  break;
88 
89  case 2 :
90  return operator()(x)*(x/2./m_parms[2] - (m_parms[1]/2.-1.))/m_parms[2];
91  break;
92 
93  default:
94  assert ( false );
95  break;
96  }
97  return 0.0;
98 }
99 
100 } // namespace hippodraw
101 

Generated for HippoDraw Class Library by doxygen