Logo ROOT  
Reference Guide
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 * PB, Patrick Bos, NL eScience Center, p.bos@esciencecenter.nl *
10 * *
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
17#ifndef ROO_MINIMIZER
18#define ROO_MINIMIZER
19
23
24#include <Fit/Fitter.h>
25#include <TStopwatch.h>
26#include <TMatrixDSymfwd.h>
27
28#include <fstream>
29#include <memory> // shared_ptr, unique_ptr
30#include <string>
31#include <utility>
32#include <vector>
33
35class RooAbsReal ;
36class RooFitResult ;
37class RooArgList ;
38class RooRealVar ;
39class RooArgSet ;
40class RooPlot ;
41class RooDataSet ;
42
43class RooMinimizer : public TObject {
44public:
45 enum class FcnMode { classic, gradient, generic_wrapper };
46
48 explicit RooMinimizer(std::shared_ptr<RooFit::TestStatistics::RooAbsL> likelihood,
53
54 ~RooMinimizer() override;
55
56 enum Strategy { Speed=0, Balance=1, Robustness=2 } ;
58 void setStrategy(int strat) ;
59 void setErrorLevel(double level) ;
60 void setEps(double eps) ;
61 void optimizeConst(int flag) ;
62 void setEvalErrorWall(bool flag) ;
63 void setRecoverFromNaNStrength(double strength) ;
64 void setOffsetting(bool flag) ;
65 void setMaxIterations(int n) ;
66 void setMaxFunctionCalls(int n) ;
67
68 int migrad() ;
69 int hesse() ;
70 int minos() ;
71 int minos(const RooArgSet& minosParamList) ;
72 int seek() ;
73 int simplex() ;
74 int improve() ;
75
76 int minimize(const char* type, const char* alg=nullptr) ;
77
78 RooFitResult* save(const char* name=nullptr, const char* title=nullptr) ;
80 double n1=1.0, double n2=2.0, double n3=0.0,
81 double n4=0.0, double n5=0.0, double n6=0.0, unsigned int npoints = 50) ;
82
83 int setPrintLevel(int newLevel) ;
84 void setPrintEvalErrors(int numEvalErrors) ;
85 void setVerbose(bool flag=true) ;
86 void setProfile(bool flag=true) { _profile = flag ; }
87 bool setLogFile(const char* logf=nullptr) ;
88
89 /// Enable or disable the logging of function evaluations to a RooDataSet.
90 /// \see RooMinimizer::getLogDataSet().
91 /// param[in] flag Boolean flag to disable or enable the functionality.
92 void setLoggingToDataSet(bool flag=true) { _loggingToDataSet = flag ; }
93
94 /// If logging of function evaluations to a RooDataSet is enabled, returns a
95 /// pointer to a dataset with one row per evaluation of the RooAbsReal passed
96 /// to the minimizer. As columns, there are all floating parameters and the
97 /// values they had for that evaluation.
98 /// \see RooMinimizer::setLoggingToDataSet(bool).
99 RooDataSet * getLogDataSet() const { return _logDataSet.get(); }
100
101 int getPrintLevel() const { return _printLevel; }
102
103 void setMinimizerType(std::string const& type) ;
104 std::string const& minimizerType() const { return _minimizerType; }
105
106 static void cleanup() ;
107 static RooFitResult* lastMinuitFit() ;
108 static RooFitResult* lastMinuitFit(const RooArgList& varList) ;
109
110 void saveStatus(const char* label, int status) { _statusHistory.push_back(std::pair<std::string,int>(label,status)) ; }
111
112 int evalCounter() const ;
113 void zeroEvalCount() ;
114
116 const ROOT::Fit::Fitter* fitter() const ;
117
119
120 int getNPar() const ;
121
122 void applyCovarianceMatrix(TMatrixDSym const& V) ;
123
124private:
125
126 friend class RooAbsMinimizerFcn;
127
128 void profileStart() ;
129 void profileStop() ;
130
131 std::ofstream* logfile() ;
132 double& maxFCN() ;
133
134 bool fitFcn() const;
135
136 // constructor helper functions
138 void initMinimizerFcnDependentPart(double defaultErrorLevel);
139
140 int _printLevel = 1;
141 int _status = -99;
142 bool _profile = false;
143 bool _loggingToDataSet = false;
144 bool _verbose = false;
145 bool _profileStart = false;
146
149
150 std::unique_ptr<TMatrixDSym> _extV;
151
153
154 std::string _minimizerType;
156
157 static std::unique_ptr<ROOT::Fit::Fitter> _theFitter ;
158
159 std::vector<std::pair<std::string,int> > _statusHistory ;
160
161 std::unique_ptr<RooDataSet> _logDataSet;
162
163 ClassDefOverride(RooMinimizer,0) // RooFit interface to ROOT::Fit::Fitter
164} ;
165
166#endif
#define ClassDefOverride(name, id)
Definition: Rtypes.h:339
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
char name[80]
Definition: TGX11.cxx:110
Fitter class, entry point for performing all type of fits.
Definition: Fitter.h:77
Documentation for the abstract class IBaseFunctionMultiDim.
Definition: IFunction.h:62
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:62
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgList.h:22
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:56
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:55
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
Definition: RooFitResult.h:40
RooMinimizer is a wrapper class around ROOT::Fit:Fitter that provides a seamless interface between th...
Definition: RooMinimizer.h:43
void setRecoverFromNaNStrength(double strength)
Try to recover from invalid function values.
void optimizeConst(int flag)
If flag is true, perform constant term optimization on function being minimized.
std::vector< std::pair< std::string, int > > _statusHistory
Definition: RooMinimizer.h:159
void initMinimizerFirstPart()
Initialize the part of the minimizer that is independent of the function to be minimized.
std::ofstream * logfile()
RooMinimizer(RooAbsReal &function, FcnMode fcnMode=FcnMode::classic)
Construct MINUIT interface to given function.
int simplex()
Execute SIMPLEX.
std::unique_ptr< TMatrixDSym > _extV
Definition: RooMinimizer.h:150
void zeroEvalCount()
void setMinimizerType(std::string const &type)
Choose the minimizer algorithm.
std::unique_ptr< RooDataSet > _logDataSet
Definition: RooMinimizer.h:161
FcnMode _fcnMode
Definition: RooMinimizer.h:155
void profileStart()
Start profiling timer.
void setProfile(bool flag=true)
Definition: RooMinimizer.h:86
RooPlot * contour(RooRealVar &var1, RooRealVar &var2, double n1=1.0, double n2=2.0, double n3=0.0, double n4=0.0, double n5=0.0, double n6=0.0, unsigned int npoints=50)
Create and draw a TH2 with the error contours in the parameters var1 and var2.
bool setLogFile(const char *logf=nullptr)
void initMinimizerFcnDependentPart(double defaultErrorLevel)
Initialize the part of the minimizer that is dependent on the function to be minimized.
void setLoggingToDataSet(bool flag=true)
Enable or disable the logging of function evaluations to a RooDataSet.
Definition: RooMinimizer.h:92
void profileStop()
Stop profiling timer and report results of last session.
int minos()
Execute MINOS.
double & maxFCN()
int hesse()
Execute HESSE.
RooFitResult * save(const char *name=nullptr, const char *title=nullptr)
Save and return a RooFitResult snapshot of current minimizer status.
void setErrorLevel(double level)
Set the level for MINUIT error analysis to the given value.
int getPrintLevel() const
Definition: RooMinimizer.h:101
static std::unique_ptr< ROOT::Fit::Fitter > _theFitter
Definition: RooMinimizer.h:157
void setEvalErrorWall(bool flag)
int migrad()
Execute MIGRAD.
int seek()
Execute SEEK.
void setEps(double eps)
Change MINUIT epsilon.
std::string const & minimizerType() const
Definition: RooMinimizer.h:104
static RooFitResult * lastMinuitFit()
int improve()
Execute IMPROVE.
bool _loggingToDataSet
Definition: RooMinimizer.h:143
static void cleanup()
Cleanup method called by atexit handler installed by RooSentinel to delete all global heap objects wh...
bool _profileStart
Definition: RooMinimizer.h:145
void setOffsetting(bool flag)
Enable internal likelihood offsetting for enhanced numeric precision.
TStopwatch _timer
Definition: RooMinimizer.h:147
RooDataSet * getLogDataSet() const
If logging of function evaluations to a RooDataSet is enabled, returns a pointer to a dataset with on...
Definition: RooMinimizer.h:99
bool fitFcn() const
void saveStatus(const char *label, int status)
Definition: RooMinimizer.h:110
~RooMinimizer() override
Destructor.
int setPrintLevel(int newLevel)
Change the MINUIT internal printing level.
int minimize(const char *type, const char *alg=nullptr)
Minimise the function passed in the constructor.
ROOT::Math::IMultiGenFunction * getMultiGenFcn() const
void setStrategy(int strat)
Change MINUIT strategy to istrat.
void setVerbose(bool flag=true)
void setPrintEvalErrors(int numEvalErrors)
ROOT::Fit::Fitter * fitter()
Return underlying ROOT fitter object.
std::string _minimizerType
Definition: RooMinimizer.h:154
void setMaxFunctionCalls(int n)
Change maximum number of likelihood function calss from MINUIT (RooMinimizer default 500 * #parameter...
int evalCounter() const
TStopwatch _cumulTimer
Definition: RooMinimizer.h:148
int getNPar() const
void setMaxIterations(int n)
Change maximum number of MINUIT iterations (RooMinimizer default 500 * #parameters)
RooAbsMinimizerFcn * _fcn
Definition: RooMinimizer.h:152
void applyCovarianceMatrix(TMatrixDSym const &V)
Apply results of given external covariance matrix.
A RooPlot is a plot frame and a container for graphics objects within that frame.
Definition: RooPlot.h:43
RooRealVar represents a variable that can be changed from the outside.
Definition: RooRealVar.h:40
Mother of all ROOT objects.
Definition: TObject.h:41
Stopwatch class.
Definition: TStopwatch.h:28
const Int_t n
Definition: legend1.C:16
void function(const Char_t *name_, T fun, const Char_t *docstring=0)
Definition: RExports.h:167