Fitter.cxx
Go to the documentation of this file.
00001 
00012 #include "Fitter.h"
00013 
00014 #include "StatedFCN.h"
00015 
00016 #include <climits>
00017 #include <cstdlib>
00018 #include <stdexcept>
00019 
00020 using std::string;
00021 using std::vector;
00022 
00023 using namespace hippodraw;
00024 
00025 Fitter::
00026 Fitter ( const char * name )
00027   : m_name ( name ),
00028     m_fcn ( 0 ),
00029     m_max_iterations ( 100 )
00030 {
00031 }
00032 
00033 Fitter::
00034 Fitter ( const Fitter & fitter )
00035   : m_name ( fitter.m_name ),
00036     m_max_iterations ( fitter.m_max_iterations )
00037 {
00038   if ( fitter.m_fcn != 0 ) m_fcn = fitter.m_fcn -> clone ();
00039 }
00040 
00041 Fitter::
00042 ~Fitter ()
00043 {
00044   if ( m_fcn != 0 ) delete m_fcn;
00045 }
00046 
00047 void
00048 Fitter::
00049 copyFrom ( const Fitter * fitter )
00050 {
00051   m_fcn -> copyFrom ( fitter -> m_fcn );
00052 }
00053 
00054 const std::string &
00055 Fitter::
00056 name () const
00057 {
00058   return m_name;
00059 }
00060 
00061 void
00062 Fitter::
00063 setFCN ( StatedFCN * fcn )
00064 {
00065   if ( m_fcn != 0 ) delete m_fcn;
00066 
00067   m_fcn = fcn;
00068 }
00069 
00070 StatedFCN *
00071 Fitter::
00072 getFCN ()
00073 {
00074   return m_fcn;
00075 }
00076 
00077 bool
00078 Fitter::
00079 isCompatible ( const FunctionBase * function ) const
00080 {
00081   bool yes = false;
00082   if ( m_fcn != 0 ) {
00083     yes = m_fcn -> isCompatible ( function );
00084   }
00085   return yes;
00086 }
00087 
00088 void
00089 Fitter::
00090 setFunction ( FunctionBase * function )
00091 {
00092   if ( m_fcn != 0 ) {
00093     m_fcn -> setFunction ( function );
00094   }
00095 }
00096 
00097 void
00098 Fitter::
00099 setDataSource ( const DataSource * source )
00100 {
00101   if ( m_fcn != 0 ) {
00102     m_fcn -> setDataSource ( source );
00103     m_fcn -> setUseErrors ();
00104   }
00105 }
00106 
00107 void
00108 Fitter::
00109 setUseErrors ( bool yes )
00110 {
00111   if ( m_fcn != 0 ) {
00112     m_fcn -> setUseErrors ( yes );
00113   }
00114 }
00115 
00116 bool
00117 Fitter::
00118 getUseErrors () const
00119 {
00120   bool yes = false;
00121   if ( m_fcn != 0 ) {
00122     yes = m_fcn -> getUseErrors ();
00123   }
00124 
00125   return yes;
00126 }
00127 
00128 bool
00129 Fitter::
00130 needsIntegrated () const
00131 {
00132   bool yes = true;
00133   if ( m_fcn != 0 ) {
00134     yes = m_fcn -> needsIntegrated ();
00135   }
00136   return yes;
00137 }
00138 
00139 void
00140 Fitter::
00141 fillFreeParameters ( std::vector < double > & free_parms) const
00142 {
00143   return m_fcn -> fillFreeParameters ( free_parms );
00144 }
00145 
00146 void
00147 Fitter::
00148 setFixedFlags ( const std::vector < int > & flags )
00149 {
00150   m_fcn -> setFixedFlags ( flags );
00151 }
00152 
00153 const vector < int > &
00154 Fitter::
00155 getFixedFlags ( ) const
00156 {
00157   return m_fcn -> getFixedFlags ();
00158 }
00159 
00160 void
00161 Fitter::
00162 setLimits ( unsigned int, double, double )
00163 {
00164   string what ( "The " );
00165   what += m_name;
00166   what += " minimizer does not support limits on parameters";
00167   throw std::runtime_error ( what );
00168 }
00169 
00170 unsigned int
00171 Fitter::
00172 getParameterIndex ( const std::string & name )
00173 {
00174   unsigned int index = UINT_MAX;
00175   const vector < string > & names = m_fcn -> getParmNames ();
00176   unsigned int size = names.size();
00177   for ( unsigned int i = 0; i < size; i++ ) {
00178     const string & pname = names [i];
00179     if ( pname == name ) {
00180       index = i;
00181       break;
00182     }
00183   }
00184   if ( index == UINT_MAX ) {
00185     string what ( "No parameter named `" );
00186     what += name;
00187     what += "' for this function.";
00188     throw std::runtime_error ( what );
00189   }
00190 
00191   return index;
00192 }
00193 
00194 void
00195 Fitter::
00196 setLimits ( const std::string & name, double lower, double upper )
00197 {
00198   unsigned int index = getParameterIndex ( name );
00199   setLimits ( index, lower, upper );
00200 }
00201 
00202 void
00203 Fitter::
00204 setStepSize ( unsigned int, double )
00205 {
00206   string what ( "This " );
00207   what += m_name;
00208   what += " minimizer does not support setting step size.";
00209   throw std::runtime_error ( what );
00210 }
00211 
00212 void
00213 Fitter::
00214 setStepSize ( const std::string & name, double size )
00215 {
00216   unsigned int index = getParameterIndex ( name );
00217   setStepSize ( index, size );
00218 }
00219 
00220 double
00221 Fitter::objectiveValue () const
00222 {
00223   return m_fcn -> objectiveValue ();
00224 }
00225 
00226 int
00227 Fitter::
00228 calcDegreesOfFreedom () const
00229 {
00230   return m_fcn -> degreesOfFreedom();
00231 }
00232 
00233 int
00234 Fitter::
00235 calcCovariance ( std::vector < std::vector < double > > & )
00236 {
00237   return EXIT_FAILURE;
00238 }
00239 
00240 void
00241 Fitter::
00242 setFitCut ( TupleCut * cut )
00243 {
00244   m_fcn -> setFitCut ( cut );
00245 }
00246 
00247 void
00248 Fitter::
00249 setFitRange ( bool yes )
00250 {
00251   m_fcn -> setFitRange ( yes );
00252 }

Generated for HippoDraw Class Library by doxygen