41 TMVA::MinuitFitter::MinuitFitter( IFitterTarget& target,
43 std::vector<
TMVA::Interval*>& ranges,
45 :
TMVA::FitterBase( target, name, ranges, theOption ),
46 TMVA::IFitterTarget( )
68 DeclareOptionRef(fErrorLevel = 1,
"ErrorLevel",
"TMinuit: error level: 0.5=logL fit, 1=chi-squared fit" );
69 DeclareOptionRef(fPrintLevel = -1,
"PrintLevel",
"TMinuit: output level: -1=least, 0, +1=all garbage" );
70 DeclareOptionRef(fFitStrategy = 2,
"FitStrategy",
"TMinuit: fit strategy: 2=best" );
71 DeclareOptionRef(fPrintWarnings =
kFALSE,
"PrintWarnings",
"TMinuit: suppress warnings" );
72 DeclareOptionRef(fUseImprove =
kTRUE,
"UseImprove",
"TMinuit: use IMPROVE" );
73 DeclareOptionRef(fUseMinos =
kTRUE,
"UseMinos",
"TMinuit: use MINOS" );
74 DeclareOptionRef(fBatch =
kFALSE,
"SetBatch",
"TMinuit: use batch mode" );
75 DeclareOptionRef(fMaxCalls = 1000,
"MaxCalls",
"TMinuit: approximate maximum number of function calls" );
76 DeclareOptionRef(fTolerance = 0.1,
"Tolerance",
"TMinuit: tolerance to the function value at the minimum" );
87 if (!fBatch)
Log() <<
kINFO <<
"<MinuitFitter> Init " <<
Endl;
100 args[0] = fPrintLevel;
101 fMinWrap->ExecuteCommand(
"SET PRINTOUT", args, 1 );
103 if (fBatch) fMinWrap->ExecuteCommand(
"SET BAT", args, 0 );
109 args[0] = fErrorLevel;
110 fMinWrap->ExecuteCommand(
"SET ERR", args, 1 );
113 if (!fPrintWarnings) fMinWrap->ExecuteCommand(
"SET NOWARNINGS", args, 0 );
116 args[0] = fFitStrategy;
117 fMinWrap->ExecuteCommand(
"SET STRATEGY", args, 1 );
129 if ( !fBatch )
Log() <<
kINFO <<
"<MinuitFitter> Fitting, please be patient ... " <<
Endl;
132 if ((
Int_t)pars.size() != GetNpars())
133 Log() <<
kFATAL <<
"<Run> Mismatch in number of parameters: (a)"
134 << GetNpars() <<
" != " << pars.size() <<
Endl;
138 if (!fBatch) timer =
new Timer();
141 for (
Int_t ipar=0; ipar<fNpars; ipar++) {
142 fMinWrap->SetParameter( ipar,
Form(
"Par%i",ipar ),
143 pars[ipar], fRanges[ipar]->GetWidth()/100.0,
144 fRanges[ipar]->GetMin(), fRanges[ipar]->GetMax() );
145 if (fRanges[ipar]->GetWidth() == 0.0) fMinWrap->FixParameter( ipar );
152 args[1] = fTolerance;
155 fMinWrap->ExecuteCommand(
"MIGrad", args, 2 );
158 if (fUseImprove) fMinWrap->ExecuteCommand(
"IMProve", args, 0 );
163 fMinWrap->ExecuteCommand(
"MINOs", args, 1 );
172 fMinWrap->GetStats( chi2, edm, errdef, nvpar, nparx );
175 if (GetNpars() != nparx) {
176 Log() <<
kFATAL <<
"<Run> Mismatch in number of parameters: "
177 << GetNpars() <<
" != " << nparx <<
Endl;
181 for (
Int_t ipar=0; ipar<GetNpars(); ipar++) {
182 Double_t errp, errm, errsym, globcor, currVal, currErr;
183 fMinWrap->GetParameter( ipar, currVal, currErr );
184 pars[ipar] = currVal;
185 fMinWrap->GetErrors( ipar, errp, errm, errsym, globcor );
virtual void Clear(Option_t *="")
MsgLogger & Endl(MsgLogger &ml)
virtual ~MinuitFitter()
destructor
Double_t Run()
estimator function interface for fitting
void Init()
minuit-specific settings
void Init(TClassEdit::TInterpreterLookupHelper *helper)
TString GetElapsedTime(Bool_t Scientific=kTRUE)
ClassImp(TMVA::MinuitFitter) TMVA
constructor
RooCmdArg Timer(Bool_t flag=kTRUE)
char * Form(const char *fmt,...)
Abstract ClassifierFactory template that handles arbitrary types.
Double_t EstimatorFunction(std::vector< Double_t > &pars)
performs the fit by calliung Run(pars)
void DeclareOptions()
declare SA options