#ifndef ROO_FIT_RESULT
#define ROO_FIT_RESULT
#include "Riosfwd.h"
#include "RooAbsArg.h"
#include "RooPrintable.h"
#include "RooDirItem.h"
#include "RooArgList.h"
#include "RVersion.h"
#include "TMatrixFfwd.h"
#include "TMatrixDSym.h"
#include "TRootIOCtor.h"
#include <vector>
#include <string>
#include <map>
class RooArgSet ;
class RooAbsPdf ;
class RooPlot;
class TObject ;
class TH2 ;
typedef RooArgSet* pRooArgSet ;
class RooFitResult : public TNamed, public RooPrintable, public RooDirItem {
public:
RooFitResult(const char* name=0, const char* title=0) ;
RooFitResult(const RooFitResult& other) ;
virtual TObject* Clone(const char* newname = 0) const {
RooFitResult* r = new RooFitResult(*this) ;
if (newname && *newname) r->SetName(newname) ;
return r ;
}
virtual TObject* clone() const { return new RooFitResult(*this); }
virtual ~RooFitResult() ;
static RooFitResult* lastMinuitFit(const RooArgList& varList=RooArgList()) ;
virtual void printValue(ostream& os) const ;
virtual void printName(ostream& os) const ;
virtual void printTitle(ostream& os) const ;
virtual void printClassName(ostream& os) const ;
virtual void printArgs(ostream& os) const ;
void printMultiline(ostream& os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const ;
inline virtual void Print(Option_t *options= 0) const {
printStream(defaultPrintStream(),defaultPrintContents(options),defaultPrintStyle(options));
}
virtual Int_t defaultPrintContents(Option_t* opt) const ;
virtual StyleOption defaultPrintStyle(Option_t* opt) const ;
RooAbsPdf* createHessePdf(const RooArgSet& params) const ;
inline Int_t status() const {
return _status ;
}
inline UInt_t numStatusHistory() const { return _statusHistory.size() ; }
Int_t statusCodeHistory(UInt_t icycle) ;
const char* statusLabelHistory(UInt_t icycle) ;
inline Int_t covQual() const {
return _covQual ;
}
inline Int_t numInvalidNLL() const {
return _numBadNLL ;
}
inline Double_t edm() const {
return _edm ;
}
inline Double_t minNll() const {
return _minNLL ;
}
inline const RooArgList& constPars() const {
return *_constPars ;
}
inline const RooArgList& floatParsInit() const {
return *_initPars ;
}
inline const RooArgList& floatParsFinal() const {
return *_finalPars ;
}
TH2* correlationHist(const char* name = "correlation_matrix") const ;
Double_t correlation(const RooAbsArg& par1, const RooAbsArg& par2) const {
return correlation(par1.GetName(),par2.GetName()) ;
}
const RooArgList* correlation(const RooAbsArg& par) const {
return correlation(par.GetName()) ;
}
Double_t correlation(const char* parname1, const char* parname2) const ;
const RooArgList* correlation(const char* parname) const ;
const TMatrixDSym& covarianceMatrix() const ;
const TMatrixDSym& correlationMatrix() const ;
TMatrixDSym reducedCovarianceMatrix(const RooArgList& params) const ;
TMatrixDSym conditionalCovarianceMatrix(const RooArgList& params) const ;
Double_t globalCorr(const RooAbsArg& par) { return globalCorr(par.GetName()) ; }
Double_t globalCorr(const char* parname) ;
const RooArgList* globalCorr() ;
inline RooPlot *plotOn(RooPlot *frame, const RooAbsArg &par1, const RooAbsArg &par2,
const char *options= "ME") const {
return plotOn(frame,par1.GetName(),par2.GetName(),options);
}
RooPlot *plotOn(RooPlot *plot, const char *parName1, const char *parName2,
const char *options= "ME") const;
const RooArgList& randomizePars() const;
Bool_t isIdentical(const RooFitResult& other, Double_t tol=5e-5, Double_t tolCorr=1e-4, Bool_t verbose=kTRUE) const ;
void SetName(const char *name) ;
void SetNameTitle(const char *name, const char* title) ;
protected:
friend class RooMinuit ;
friend class RooMinimizer ;
friend class RooNag ;
void setCovarianceMatrix(TMatrixDSym& V) ;
void setConstParList(const RooArgList& list) ;
void setInitParList(const RooArgList& list) ;
void setFinalParList(const RooArgList& list) ;
inline void setMinNLL(Double_t val) { _minNLL = val ; }
inline void setEDM(Double_t val) { _edm = val ; }
inline void setStatus(Int_t val) { _status = val ; }
inline void setCovQual(Int_t val) { _covQual = val ; }
inline void setNumInvalidNLL(Int_t val) { _numBadNLL=val ; }
void fillCorrMatrix() ;
void fillCorrMatrix(const std::vector<double>& globalCC, const TMatrixDSym& corrs, const TMatrixDSym& covs) ;
void fillLegacyCorrMatrix() const ;
void setStatusHistory(std::vector<std::pair<std::string,int> >& hist) { _statusHistory = hist ; }
Double_t correlation(Int_t row, Int_t col) const;
Double_t covariance(Int_t row, Int_t col) const;
Int_t _status ;
Int_t _covQual ;
Int_t _numBadNLL ;
Double_t _minNLL ;
Double_t _edm ;
RooArgList* _constPars ;
RooArgList* _initPars ;
RooArgList* _finalPars ;
mutable RooArgList* _globalCorr ;
mutable TList _corrMatrix ;
mutable RooArgList *_randomPars;
mutable TMatrixF* _Lt;
TMatrixDSym* _CM ;
TMatrixDSym* _VM ;
TVectorD* _GC ;
std::vector<std::pair<std::string,int> > _statusHistory ;
ClassDef(RooFitResult,5)
};
#endif