diff --git a/interface/RooMultiPdf.h b/interface/RooMultiPdf.h index a084342cac197..7c0ba971d1f28 100644 --- a/interface/RooMultiPdf.h +++ b/interface/RooMultiPdf.h @@ -59,6 +59,7 @@ arg8=RooCmdArg::none()); */ bool checkIndexDirty() const; double getCorrection() const; + RooAbsPdf *getCurrentPdf() const; int getNumPdfs(){return nPdfs;}; void setCorrectionFactor(PenatlyScheme penal); @@ -75,6 +76,7 @@ arg8=RooCmdArg::none()); mutable Int_t _oldIndex; Double_t evaluate() const; + Double_t getLogVal(const RooArgSet *set = 0) const; //std::string createCorrectionString(); // should only do this once really double cFactor; diff --git a/src/RooMultiPdf.cxx b/src/RooMultiPdf.cxx index 0b1cc21428fe1..48263d47cd895 100644 --- a/src/RooMultiPdf.cxx +++ b/src/RooMultiPdf.cxx @@ -12,6 +12,7 @@ #include "../interface/RooMultiPdf.h" #include "RooRealVar.h" +#include "RooAddPdf.h" ClassImp(RooMultiPdf) @@ -82,12 +83,42 @@ double RooMultiPdf::getCorrection() const { return cFactor*val; //PVAL correction } //_____________________________________________________________________________ +RooAbsPdf* RooMultiPdf::getCurrentPdf() const { + + RooAbsPdf *cPdf = ((RooAbsPdf*)c.at(x)); + return cPdf; +} //_____________________________________________________________________________ Double_t RooMultiPdf::evaluate() const{ + + double val=0; RooAbsPdf *cPdf = ((RooAbsPdf*)c.at(x)); - double val = cPdf->getVal(); + if (cPdf->IsA()->InheritsFrom(RooAddPdf::Class())) + { + const RooAddPdf *aPdf = dynamic_cast(cPdf); + val = aPdf->evaluate(); + } else { + val = cPdf->getVal(); + } +// val = cPdf->getVal(); _oldIndex=x; return val; + } +//_____________________________________________________________________________ +Double_t RooMultiPdf::getLogVal(const RooArgSet* nset) const{ + + double logval=0; + RooAbsPdf *cPdf = ((RooAbsPdf*)c.at(x)); + if (cPdf->IsA()->InheritsFrom(RooAddPdf::Class())) + { + const RooAddPdf *aPdf = dynamic_cast(cPdf); + logval = aPdf->getLogVal(nset); + } else { + logval = cPdf->getLogVal(nset); + } + _oldIndex=x; + return logval;//cPdf->getLogVal(nset); +}