/***************************************************************************** * Project: RooFit * * Package: RooFitCore * * @(#)root/roofitcore:$Id: RooMinimizerFcn.h 30408 2009-09-24 15:03:37Z wouter $ * Authors: * * AL, Alfio Lazzaro, INFN Milan, alfio.lazzaro@mi.infn.it * * * * * * Redistribution and use in source and binary forms, * * with or without modification, are permitted according to the terms * * listed in LICENSE (http://roofit.sourceforge.net/license.txt) * *****************************************************************************/ #ifndef __ROOFIT_NOROOMINIMIZER #ifndef ROO_MINIMIZER_FCN #define ROO_MINIMIZER_FCN #include "Math/IFunction.h" #include "Fit/ParameterSettings.h" #include "Fit/FitResult.h" #include "TMatrixDSym.h" #include "RooAbsReal.h" #include "RooArgList.h" #include <iostream> #include <fstream> class RooMinimizer; class RooMinimizerFcn : public ROOT::Math::IBaseFunctionMultiDim { public: RooMinimizerFcn(RooAbsReal *funct, RooMinimizer *context, bool verbose = false); virtual ~RooMinimizerFcn(); virtual ROOT::Math::IBaseFunctionMultiDim* Clone() const; virtual unsigned int NDim() const { return _nDim; } RooArgList* GetFloatParamList() { return _floatParamList; } RooArgList* GetConstParamList() { return _constParamList; } RooArgList* GetInitFloatParamList() { return _initFloatParamList; } RooArgList* GetInitConstParamList() { return _initConstParamList; } void SetEvalErrorWall(Bool_t flag) { _doEvalErrorWall = flag ; } void SetPrintEvalErrors(Int_t numEvalErrors) { _printEvalErrors = numEvalErrors ; } Bool_t SetLogFile(const char* inLogfile); ofstream* GetLogFile() { return _logfile; } void SetVerbose(Bool_t flag=kTRUE) { _verbose = flag ; } Double_t& GetMaxFCN() { return _maxFCN; } Int_t GetNumInvalidNLL() { return _numBadNLL; } Bool_t Synchronize(std::vector<ROOT::Fit::ParameterSettings>& parameters, Bool_t optConst, Bool_t verbose); void BackProp(const ROOT::Fit::FitResult &results); void ApplyCovarianceMatrix(TMatrixDSym& V); private: Double_t GetPdfParamVal(Int_t index); Double_t GetPdfParamErr(Int_t index); void SetPdfParamErr(Int_t index, Double_t value); void ClearPdfParamAsymErr(Int_t index); void SetPdfParamErr(Int_t index, Double_t loVal, Double_t hiVal); inline Bool_t SetPdfParamVal(const Int_t &index, const Double_t &value) const; virtual double DoEval(const double * x) const; private: RooAbsReal *_funct; RooMinimizer *_context; mutable double _maxFCN; mutable int _numBadNLL; mutable int _printEvalErrors; Bool_t _doEvalErrorWall; int _nDim; ofstream *_logfile; bool _verbose; RooArgList* _floatParamList; RooArgList* _constParamList; RooArgList* _initFloatParamList; RooArgList* _initConstParamList; }; #endif #endif