Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooMinimizer.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id$
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * AL, Alfio Lazzaro, INFN Milan, alfio.lazzaro@mi.infn.it *
9  * *
10  * *
11  * Redistribution and use in source and binary forms, *
12  * with or without modification, are permitted according to the terms *
13  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
14  *****************************************************************************/
15 
16 #ifndef __ROOFIT_NOROOMINIMIZER
17 
18 #ifndef ROO_MINIMIZER
19 #define ROO_MINIMIZER
20 
21 #include "TObject.h"
22 #include "TStopwatch.h"
23 #include <fstream>
24 #include "TMatrixDSymfwd.h"
25 
26 
27 #include "Fit/Fitter.h"
28 #include "RooMinimizerFcn.h"
29 
30 class RooAbsReal ;
31 class RooFitResult ;
32 class RooArgList ;
33 class RooRealVar ;
34 class RooArgSet ;
35 class TH2F ;
36 class RooPlot ;
37 
38 class RooMinimizer : public TObject {
39 public:
40 
41  RooMinimizer(RooAbsReal& function) ;
42  virtual ~RooMinimizer() ;
43 
44  enum Strategy { Speed=0, Balance=1, Robustness=2 } ;
45  enum PrintLevel { None=-1, Reduced=0, Normal=1, ExtraForProblem=2, Maximum=3 } ;
46  void setStrategy(Int_t strat) ;
47  void setErrorLevel(Double_t level) ;
48  void setEps(Double_t eps) ;
49  void optimizeConst(Int_t flag) ;
50  void setEvalErrorWall(Bool_t flag) { fitterFcn()->SetEvalErrorWall(flag); }
51  void setOffsetting(Bool_t flag) ;
52  void setMaxIterations(Int_t n) ;
53  void setMaxFunctionCalls(Int_t n) ;
54 
55  RooFitResult* fit(const char* options) ;
56 
57  Int_t migrad() ;
58  Int_t hesse() ;
59  Int_t minos() ;
60  Int_t minos(const RooArgSet& minosParamList) ;
61  Int_t seek() ;
62  Int_t simplex() ;
63  Int_t improve() ;
64 
65  Int_t minimize(const char* type, const char* alg=0) ;
66 
67  RooFitResult* save(const char* name=0, const char* title=0) ;
68  RooPlot* contour(RooRealVar& var1, RooRealVar& var2,
69  Double_t n1=1, Double_t n2=2, Double_t n3=0,
70  Double_t n4=0, Double_t n5=0, Double_t n6=0, unsigned int npoints = 50) ;
71 
72  Int_t setPrintLevel(Int_t newLevel) ;
73  void setPrintEvalErrors(Int_t numEvalErrors) { fitterFcn()->SetPrintEvalErrors(numEvalErrors); }
74  void setVerbose(Bool_t flag=kTRUE) { _verbose = flag ; fitterFcn()->SetVerbose(flag); }
75  void setProfile(Bool_t flag=kTRUE) { _profile = flag ; }
76  Bool_t setLogFile(const char* logf=0) { return fitterFcn()->SetLogFile(logf); }
77 
78  void setMinimizerType(const char* type) ;
79 
80  static void cleanup() ;
81  static RooFitResult* lastMinuitFit(const RooArgList& varList=RooArgList()) ;
82 
83  void saveStatus(const char* label, Int_t status) { _statusHistory.push_back(std::pair<std::string,int>(label,status)) ; }
84 
85  Int_t evalCounter() const { return fitterFcn()->evalCounter() ; }
86  void zeroEvalCount() { fitterFcn()->zeroEvalCount() ; }
87 
88  ROOT::Fit::Fitter* fitter() ;
89  const ROOT::Fit::Fitter* fitter() const ;
90 
91 protected:
92 
93  friend class RooAbsPdf ;
94  void applyCovarianceMatrix(TMatrixDSym& V) ;
95 
96  void profileStart() ;
97  void profileStop() ;
98 
99  inline Int_t getNPar() const { return fitterFcn()->NDim() ; }
100  inline std::ofstream* logfile() { return fitterFcn()->GetLogFile(); }
101  inline Double_t& maxFCN() { return fitterFcn()->GetMaxFCN() ; }
102 
103  const RooMinimizerFcn* fitterFcn() const { return ( fitter()->GetFCN() ? ((RooMinimizerFcn*) fitter()->GetFCN()) : _fcn ) ; }
104  RooMinimizerFcn* fitterFcn() { return ( fitter()->GetFCN() ? ((RooMinimizerFcn*) fitter()->GetFCN()) : _fcn ) ; }
105 
106 private:
107 
108  Int_t _printLevel ;
109  Int_t _status ;
110  Bool_t _optConst ;
111  Bool_t _profile ;
112  RooAbsReal* _func ;
113 
114  Bool_t _verbose ;
115  TStopwatch _timer ;
116  TStopwatch _cumulTimer ;
117  Bool_t _profileStart ;
118 
119  TMatrixDSym* _extV ;
120 
121  RooMinimizerFcn *_fcn;
122  std::string _minimizerType;
123 
124  static ROOT::Fit::Fitter *_theFitter ;
125 
126  std::vector<std::pair<std::string,int> > _statusHistory ;
127 
128  RooMinimizer(const RooMinimizer&) ;
129 
130  ClassDef(RooMinimizer,0) // RooFit interface to ROOT::Fit::Fitter
131 } ;
132 
133 
134 #endif
135 
136 #endif