FitterFactory.cxx

Go to the documentation of this file.
00001 
00012 // for have minuit
00013 #ifdef HAVE_CONFIG_H
00014 #include "config.h"
00015 #endif
00016 
00017 // for truncation warning in debug mode
00018 #ifdef _MSC_VER
00019 #include "msdevstudio/MSconfig.h"
00020 #endif
00021 
00022 #include "FitterFactory.h"
00023 
00024 // List of default fitters
00025 #include "LMFitter.h"
00026 #include "BFGSFitter.h"
00027 
00028 #if HAVE_MINUIT || HAVE_MINUIT2
00029 #include "MinuitMigrad.h"
00030 #endif
00031 
00032 // List of default objective functions
00033 #include "NTupleChiSqFCN.h"
00034 #include "NTupleLikeliHoodFCN.h"
00035 #include "NTuplePearsonFCN.h"
00036 
00037 #include <stdexcept>
00038 
00039 using std::string;
00040 using std::vector;
00041 
00042 using namespace hippodraw;
00043 
00044 FitterFactory * FitterFactory::s_instance = 0;
00045 
00046 FitterFactory::FitterFactory ()
00047 {
00048 }
00049 
00050 FitterFactory * FitterFactory::instance ()
00051 {
00052   if ( s_instance == 0 ) {
00053     s_instance = new FitterFactory ();
00054     s_instance->initialize ();
00055   }
00056 
00057   return s_instance;
00058 }
00059 
00060 void FitterFactory::initialize ()
00061 {
00062   Fitter * fitter = new LMFitter ( "ChiSq: Levenberg Marquart" );
00063   StatedFCN * chifcn = new NTupleChiSqFCN ();
00064   fitter -> setFCN ( chifcn );
00065   add ( fitter  );
00066 
00067   fitter = new LMFitter ( "Pearson: BFGS" );
00068   StatedFCN * pearsonfcn = new NTuplePearsonFCN ();
00069   fitter -> setFCN ( pearsonfcn );
00070   add ( fitter  );
00071 
00072   fitter = new BFGSFitter   ( "MLEH: BFGS" );
00073   StatedFCN * likfcn = new NTupleLikeliHoodFCN ();
00074   fitter -> setFCN ( likfcn ); 
00075   add ( fitter );
00076  
00077 #if HAVE_MINUIT || HAVE_MINUIT2
00078   fitter = new MinuitMigrad ( "ChiSq: Minuit(Migrad)" );
00079   chifcn = new NTupleChiSqFCN ();
00080   fitter -> setFCN ( chifcn );
00081   add ( fitter );
00082 
00083   fitter = new MinuitMigrad ( "MLEH: Minuit(Migrad)" );
00084   likfcn = new NTupleLikeliHoodFCN ();
00085   fitter -> setFCN ( likfcn ); 
00086   add ( fitter );
00087 #endif
00088   
00089 }
00090 
00091 void
00092 FitterFactory::
00093 setDefault ( const std::string & name )
00094 {
00095   bool yes = exists ( name );
00096 
00097   if ( yes == false ) {
00098     string what ( "FitterFactory: Fitter with name `" );
00099     what += name;
00100     what += "' does not exist.";
00101     throw std::runtime_error ( what );
00102   }
00103 
00104   m_default = name;
00105 }
00106 
00107 const string &
00108 FitterFactory::
00109 getDefault () const
00110 {
00111   if ( m_default.empty () ) {
00112     const vector < string > & fitters = names ();
00113     return fitters.front ();
00114   }
00115   //else
00116   return m_default;
00117 }

Generated for HippoDraw Class Library by doxygen