Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooMinuit.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id: RooMinuit.h,v 1.15 2007/07/12 20:30:28 wouter Exp $
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 #ifndef ROO_MINUIT
17 #define ROO_MINUIT
18 
19 #include "TObject.h"
20 #include "TStopwatch.h"
21 #include <fstream>
22 #include "TMatrixDSymfwd.h"
23 #include <vector>
24 #include <string>
25 #include <map>
26 
27 class RooAbsReal ;
28 class RooFitResult ;
29 class RooArgList ;
30 class RooRealVar ;
31 class RooArgSet ;
32 class RooAbsArg ;
33 class TVirtualFitter ;
34 class TH2F ;
35 class RooPlot ;
36 
37 void RooMinuitGlue(Int_t& /*np*/, Double_t* /*gin*/, Double_t &f, Double_t *par, Int_t /*flag*/) ;
38 
39 class RooMinuit : public TObject {
40 public:
41 
42  RooMinuit(RooAbsReal& function) ;
43  virtual ~RooMinuit() ;
44 
45  enum Strategy { Speed=0, Balance=1, Robustness=2 } ;
46  enum PrintLevel { None=-1, Reduced=0, Normal=1, ExtraForProblem=2, Maximum=3 } ;
47  void setStrategy(Int_t strat) ;
48  void setErrorLevel(Double_t level) ;
49  void setEps(Double_t eps) ;
50  void optimizeConst(Int_t flag) ;
51  void setEvalErrorWall(Bool_t flag) { _doEvalErrorWall = flag ; }
52  void setOffsetting(Bool_t flag) ;
53 
54  RooFitResult* fit(const char* options) ;
55 
56  Int_t migrad() ;
57  Int_t hesse() ;
58  Int_t minos() ;
59  Int_t minos(const RooArgSet& minosParamList) ; // added FMV, 08/18/03
60  Int_t seek() ;
61  Int_t simplex() ;
62  Int_t improve() ;
63 
64  RooFitResult* save(const char* name=0, const char* title=0) ;
65  RooPlot* contour(RooRealVar& var1, RooRealVar& var2,
66  Double_t n1=1, Double_t n2=2, Double_t n3=0,
67  Double_t n4=0, Double_t n5=0, Double_t n6=0) ;
68 
69  Int_t setPrintLevel(Int_t newLevel) ;
70  void setNoWarn() ;
71  Int_t setWarnLevel(Int_t newLevel) ;
72  void setPrintEvalErrors(Int_t numEvalErrors) { _printEvalErrors = numEvalErrors ; }
73  void setVerbose(Bool_t flag=kTRUE) { _verbose = flag ; }
74  void setProfile(Bool_t flag=kTRUE) { _profile = flag ; }
75  void setMaxEvalMultiplier(Int_t n) { _maxEvalMult = n ; }
76  Bool_t setLogFile(const char* logfile=0) ;
77 
78  static void cleanup() ;
79 
80  Int_t evalCounter() const { return _evalCounter ; }
81  void zeroEvalCount() { _evalCounter = 0 ; }
82 
83 protected:
84 
85  friend class RooAbsPdf ;
86  void applyCovarianceMatrix(TMatrixDSym& V) ;
87 
88  friend void RooMinuitGlue(Int_t &np, Double_t *gin, Double_t &f, Double_t *par, Int_t flag) ;
89 
90  void profileStart() ;
91  void profileStop() ;
92 
93  Bool_t synchronize(Bool_t verbose) ;
94  void backProp() ;
95 
96  inline Int_t getNPar() const { return _nPar ; }
97  inline std::ofstream* logfile() const { return _logfile ; }
98  inline Double_t& maxFCN() { return _maxFCN ; }
99 
100  Double_t getPdfParamVal(Int_t index) ;
101  Double_t getPdfParamErr(Int_t index) ;
102  virtual Bool_t setPdfParamVal(Int_t index, Double_t value, Bool_t verbose=kFALSE) ;
103  void setPdfParamErr(Int_t index, Double_t value) ;
104  void setPdfParamErr(Int_t index, Double_t loVal, Double_t hiVal) ;
105  void clearPdfParamAsymErr(Int_t index) ;
106 
107  void saveStatus(const char* label, Int_t status) { _statusHistory.push_back(std::pair<std::string,int>(label,status)) ; }
108 
109  void updateFloatVec() ;
110 
111 private:
112 
113  Int_t _evalCounter ;
114  Int_t _printLevel ;
115  Int_t _warnLevel ;
116  Int_t _status ;
117  Int_t _optConst ;
118  Bool_t _profile ;
119  Bool_t _handleLocalErrors ;
120  Int_t _numBadNLL ;
121  Int_t _nPar ;
122  Int_t _printEvalErrors ;
123  Bool_t _doEvalErrorWall ;
124  Int_t _maxEvalMult ;
125  RooArgList* _floatParamList ;
126  std::vector<RooAbsArg*> _floatParamVec ;
127  RooArgList* _initFloatParamList ;
128  RooArgList* _constParamList ;
129  RooArgList* _initConstParamList ;
130  RooAbsReal* _func ;
131 
132  Double_t _maxFCN ;
133  std::ofstream* _logfile ;
134  Bool_t _verbose ;
135  TStopwatch _timer ;
136  TStopwatch _cumulTimer ;
137 
138  TMatrixDSym* _extV ;
139 
140  static TVirtualFitter *_theFitter ;
141 
142  std::vector<std::pair<std::string,int> > _statusHistory ;
143 
144  RooMinuit(const RooMinuit&) ;
145 
146  ClassDef(RooMinuit,0) // RooFit minimizer based on MINUIT
147 } ;
148 
149 
150 #endif
151