#ifndef __ROOFIT_NOROOMINIMIZER
#ifndef ROO_MINIMIZER
#define ROO_MINIMIZER
#include "TObject.h"
#include "TStopwatch.h"
#include <fstream>
#include "TMatrixDSymfwd.h"
#include "Fit/Fitter.h"
#include "RooMinimizerFcn.h"
class RooAbsReal ;
class RooFitResult ;
class RooArgList ;
class RooRealVar ;
class RooArgSet ;
class TH2F ;
class RooPlot ;
class RooMinimizer : public TObject {
public:
RooMinimizer(RooAbsReal& function) ;
virtual ~RooMinimizer() ;
enum Strategy { Speed=0, Balance=1, Robustness=2 } ;
enum PrintLevel { None=-1, Reduced=0, Normal=1, ExtraForProblem=2, Maximum=3 } ;
void setStrategy(Int_t strat) ;
void setErrorLevel(Double_t level) ;
void setEps(Double_t eps) ;
void optimizeConst(Bool_t flag) ;
void setEvalErrorWall(Bool_t flag) { _fcn->SetEvalErrorWall(flag); }
RooFitResult* fit(const char* options) ;
Int_t migrad() ;
Int_t hesse() ;
Int_t minos() ;
Int_t minos(const RooArgSet& minosParamList) ;
Int_t seek() ;
Int_t simplex() ;
Int_t improve() ;
Int_t minimize(const char* type, const char* alg=0) ;
RooFitResult* save(const char* name=0, const char* title=0) ;
RooPlot* contour(RooRealVar& var1, RooRealVar& var2,
Double_t n1=1, Double_t n2=2, Double_t n3=0,
Double_t n4=0, Double_t n5=0, Double_t n6=0) ;
Int_t setPrintLevel(Int_t newLevel) ;
void setPrintEvalErrors(Int_t numEvalErrors) { _fcn->SetPrintEvalErrors(numEvalErrors); }
void setVerbose(Bool_t flag=kTRUE) { _verbose = flag ; _fcn->SetVerbose(flag); }
void setProfile(Bool_t flag=kTRUE) { _profile = flag ; }
Bool_t setLogFile(const char* logf=0) { return _fcn->SetLogFile(logf); }
void setMinimizerType(const char* type) ;
static void cleanup() ;
static RooFitResult* lastMinuitFit(const RooArgList& varList=RooArgList()) ;
protected:
friend class RooAbsPdf ;
void applyCovarianceMatrix(TMatrixDSym& V) ;
void profileStart() ;
void profileStop() ;
inline Int_t getNPar() const { return _fcn->NDim() ; }
inline ofstream* logfile() const { return _fcn->GetLogFile(); }
inline Double_t& maxFCN() { return _fcn->GetMaxFCN() ; }
private:
Int_t _printLevel ;
Int_t _status ;
Bool_t _optConst ;
Bool_t _profile ;
RooAbsReal* _func ;
Bool_t _verbose ;
TStopwatch _timer ;
TStopwatch _cumulTimer ;
TMatrixDSym* _extV ;
RooMinimizerFcn *_fcn;
std::string _minimizerType;
static ROOT::Fit::Fitter *_theFitter ;
RooMinimizer(const RooMinimizer&) ;
ClassDef(RooMinimizer,0)
} ;
#endif
#endif