TFitterMinuit.h

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: TFitterMinuit.h 20880 2007-11-19 11:23:41Z rdm $
00002 // Author: L. Moneta    10/2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 ROOT Foundation,  CERN/PH-SFT                   *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #ifndef ROOT_TFitterMinuit_H_
00011 #define ROOT_TFitterMinuit_H_
00012 
00013 #ifndef ROOT_TVirtualFitter
00014 #include "TVirtualFitter.h"
00015 #endif
00016 
00017 #include "Minuit2/MnUserParameterState.h"
00018 #include "Minuit2/MinosError.h"
00019 #include "Minuit2/ModularFunctionMinimizer.h"
00020 #include "Minuit2/FumiliMinimizer.h"
00021 #include "TFcnAdapter.h"
00022 
00023 /**
00024     TVirtualFitter implementation for new C++ Minuit
00025 */
00026 
00027 namespace ROOT { 
00028    namespace Minuit2 { 
00029       class FunctionMinimum;
00030    }
00031 }
00032 
00033 class TFitterMinuit : public TVirtualFitter {
00034 
00035 public:
00036 
00037    // enumeration specifying the minimizers
00038    enum EMinimizerType { 
00039       kMigrad, 
00040       kSimplex, 
00041       kCombined, 
00042       kScan,
00043       kFumili
00044    };
00045    
00046 
00047    TFitterMinuit();
00048 
00049    TFitterMinuit(Int_t maxpar);
00050 
00051    virtual ~TFitterMinuit();
00052 
00053 public:
00054 
00055    // inherited interface
00056    virtual Double_t  Chisquare(Int_t npar, Double_t *params) const;
00057    virtual void      Clear(Option_t *option="");
00058    virtual Int_t     ExecuteCommand(const char *command, Double_t *args, Int_t nargs);
00059    virtual void      FixParameter(Int_t ipar);
00060    virtual Double_t *GetCovarianceMatrix() const;
00061    virtual Double_t  GetCovarianceMatrixElement(Int_t i, Int_t j) const;
00062    virtual Int_t     GetErrors(Int_t ipar,Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &globcc) const;
00063    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
00064    virtual Int_t     GetNumberTotalParameters() const;
00065    virtual Int_t     GetNumberFreeParameters() const;
00066 
00067    virtual Double_t  GetParError(Int_t ipar) const;
00068    virtual Double_t  GetParameter(Int_t ipar) const;
00069    virtual Int_t     GetParameter(Int_t ipar,char *name,Double_t &value,Double_t &verr,Double_t &vlow, Double_t &vhigh) const;
00070    virtual const char *GetParName(Int_t ipar) const;
00071    virtual Int_t     GetStats(Double_t &amin, Double_t &edm, Double_t &errdef, Int_t &nvpar, Int_t &nparx) const;
00072    virtual Double_t  GetSumLog(Int_t i);
00073 
00074    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
00075    virtual Bool_t    IsFixed(Int_t ipar) const ;
00076 
00077    virtual void      PrintResults(Int_t level, Double_t amin) const;
00078    virtual void      ReleaseParameter(Int_t ipar);
00079    virtual void      SetFitMethod(const char *name);
00080    virtual Int_t     SetParameter(Int_t ipar,const char *parname,Double_t value,Double_t verr,Double_t vlow, Double_t vhigh);
00081 
00082    virtual void      SetFCN(void (*fcn)(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t) );
00083    // this for CINT (interactive functions)
00084    virtual void      SetFCN(void * );
00085 
00086    // set FCN using Minuit interface
00087    // you pass to the class ownership of FCNBase pointer
00088 
00089    virtual void SetMinuitFCN(  ROOT::Minuit2::FCNBase * f);
00090 
00091    // methods needed by derived classes 
00092    virtual const ROOT::Minuit2::MnUserParameterState & State() const { return fState; } 
00093 
00094    virtual const ROOT::Minuit2::FCNBase * GetMinuitFCN() const { return fMinuitFCN; } 
00095 
00096    virtual const ROOT::Minuit2::ModularFunctionMinimizer * GetMinimizer() const { return fMinimizer; }
00097 
00098 
00099    // additional abstract methods to be implemented by derived classes 
00100    virtual int Minimize(  int nfcn = 0, double edmval = 0.1);
00101 
00102    int GetStrategy() { return fStrategy; }
00103 
00104    int PrintLevel() { return fDebug; }
00105 
00106    void SetStrategy( int stra) { fStrategy = stra; } 
00107 
00108    void SetPrintLevel(int level ) { fDebug = level; } 
00109 
00110    // set minimum tolerance to avoid having clients (as TGraf::Fit) setting tolerances too small
00111    void SetMinimumTolerance(double mintol) { fMinTolerance = mintol; }
00112 
00113    double MinimumTolerance() const { return fMinTolerance; }
00114 
00115    /// create the minimizer type (Migard or Simplex)
00116    //  can be re-implemented in the derived classes 
00117 
00118    virtual void CreateMinimizer(EMinimizerType = kMigrad ); 
00119   
00120 
00121 protected: 
00122 
00123    // method to set internal data (no copying involved so - make protected )
00124 
00125    virtual ROOT::Minuit2::MnUserParameterState & State() { return fState; }
00126 
00127    virtual void SetMinimizer( ROOT::Minuit2::ModularFunctionMinimizer * m) { fMinimizer = m; }
00128 
00129 
00130    // functions to create FCN - re-implemented in derived class (GFumili)
00131 
00132    virtual void CreateChi2FCN(); 
00133 
00134    virtual void CreateChi2ExtendedFCN(); 
00135 
00136    virtual void CreateBinLikelihoodFCN();
00137 
00138    virtual void CreateUnbinLikelihoodFCN() {}
00139 
00140    // internal function to perform the actual minimization (could be implemented by derived classes)
00141    virtual ROOT::Minuit2::FunctionMinimum DoMinimization( int nfcn = 0, double edmval = 0.1);
00142 
00143    // internal funcition to study Function minimum results
00144    // return 0 if function minimum is OK or an error code
00145 
00146    virtual int ExamineMinimum(const ROOT::Minuit2::FunctionMinimum & );
00147   
00148    virtual void Initialize();
00149    
00150 private:
00151 
00152    double fErrorDef;
00153    double fEDMVal;
00154    bool fGradient;
00155 
00156    ROOT::Minuit2::MnUserParameterState fState;
00157    std::vector<ROOT::Minuit2::MinosError> fMinosErrors;
00158    ROOT::Minuit2::ModularFunctionMinimizer * fMinimizer;
00159    ROOT::Minuit2::FCNBase * fMinuitFCN;
00160    int fDebug;
00161    int fStrategy;
00162    double fMinTolerance;
00163    mutable std::vector<double> fCovar; // cached covariance matrix (NxN)
00164 
00165 
00166    ClassDef(TFitterMinuit,1)  // The ROOT fitter based on new Minuit (Minuit2)
00167 
00168 };
00169 
00170 R__EXTERN TFitterMinuit* gMinuit2;
00171 
00172 
00173 #endif //ROOT_TFitterMinuit_H_

Generated on Tue Jul 5 14:26:49 2011 for ROOT_528-00b_version by  doxygen 1.5.1