69 _funcIter = _funcList.createIterator() ;
70 _coefIter = _coefList.createIterator() ;
84 _funcList(
"!funcList",
"List of functions",this),
85 _coefList(
"!coefList",
"List of coefficients",this),
105 _funcList(
"!funcList",
"List of functions",this),
106 _coefList(
"!coefList",
"List of coefficients",this),
132 _funcList(
"!funcList",
"List of functions",this),
133 _coefList(
"!coefList",
"List of coefficients",this),
139 <<
") number of pdfs and coefficients inconsistent, must have Nfunc=Ncoef or Nfunc=Ncoef+1" << endl ;
155 if (!dynamic_cast<RooAbsReal*>(coef)) {
159 if (!dynamic_cast<RooAbsReal*>(func)) {
169 if (!dynamic_cast<RooAbsReal*>(func)) {
170 coutE(
InputArguments) <<
"RooRealSumPdf::RooRealSumPdf(" <<
GetName() <<
") last func " << coef->
GetName() <<
" is not of type RooAbsReal, fatal error" << endl ;
245 cxcoutD(
Eval) <<
"RooRealSumPdf::eval(" <<
GetName() <<
") coefVal = " << coefVal <<
" funcVal = " << func->IsA()->
GetName() <<
"::" << func->
GetName() <<
" = " << func->
getVal() << endl ;
247 value += func->
getVal()*coefVal ;
249 lastCoef -= coef->
getVal() ;
257 value += func->
getVal()*lastCoef ;
260 cxcoutD(
Eval) <<
"RooRealSumPdf::eval(" <<
GetName() <<
") lastCoef = " << lastCoef <<
" funcVal = " << func->
getVal() << endl ;
263 if (lastCoef<0 || lastCoef>1) {
265 <<
" WARNING: sum of FUNC coefficients not in range [0-1], value=" 266 << 1-lastCoef << endl ;
301 <<
" and FUNC " << func->
GetName() <<
" have one or more observables in common" << endl ;
306 <<
" depends on one or more of the following observables" ; nset->
Print(
"1") ;
322 const RooArgSet* normSet2,
const char* rangeName)
const 325 if (allVars.
getSize()==0)
return 0 ;
329 analVars.
add(allVars) ;
334 Int_t sterileIdx(-1) ;
350 if (normSet && normSet->
getSize()>0) {
378 if (code==0)
return getVal(normSet2) ;
406 Double_t coefVal = coef->getVal(normSet2) ;
411 value += funcInt->getVal()*coefVal ;
413 lastCoef -= coef->getVal(normSet2) ;
422 value += funcInt->getVal()*lastCoef ;
426 if (lastCoef<0 || lastCoef>1) {
428 <<
" WARNING: sum of FUNC coefficients not in range [0-1], value=" 429 << 1-lastCoef << endl ;
434 if (normSet2 && normSet2->
getSize()>0) {
443 Double_t coefVal = coef->getVal(normSet2) ;
446 normVal += funcNorm->
getVal()*coefVal ;
454 normVal += funcNorm->
getVal()*lastCoef ;
458 return value / normVal;
478 list<Double_t>* sumBinB = 0 ;
486 list<Double_t>* funcBinB = func->
binBoundaries(obs,xlo,xhi) ;
495 list<Double_t>* newSumBinB =
new list<Double_t>(sumBinB->size()+funcBinB->size()) ;
498 merge(funcBinB->begin(),funcBinB->end(),sumBinB->begin(),sumBinB->end(),newSumBinB->begin()) ;
503 sumBinB = newSumBinB ;
511 list<Double_t>::iterator new_end = unique(sumBinB->begin(),sumBinB->end()) ;
512 sumBinB->erase(new_end,sumBinB->end()) ;
544 list<Double_t>* sumHint = 0 ;
563 list<Double_t>* newSumHint =
new list<Double_t>(sumHint->size()+funcHint->size()) ;
566 merge(funcHint->begin(),funcHint->end(),sumHint->begin(),sumHint->end(),newSumHint->begin()) ;
570 sumHint = newSumHint ;
578 list<Double_t>::iterator new_end = unique(sumHint->begin(),sumHint->end()) ;
579 sumHint->erase(new_end,sumHint->end()) ;
595 while ((sarg=siter.
next())) {
597 trackNodes.
add(*sarg) ;
629 os <<
" + [%] * " << func->
GetName() ;
virtual const char * GetName() const
Returns name of object.
TIterator * createIterator(Bool_t dir=kIterForward) const
virtual Bool_t add(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling add() for each element in the source coll...
Bool_t dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=0, Bool_t valueOnly=kFALSE) const
Test whether we depend on (ie, are served by) any object in the specified collection.
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
Double_t getVal(const RooArgSet *set=0) const
virtual ExtendMode extendMode() const
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
T * getObjByIndex(Int_t index) const
static Bool_t _doFloorGlobal
TIterator * _coefIter
Iterator over FUNC list.
const RooArgList & funcList() const
Class RooRealSumPdf implements a PDF constructed from a sum of functions:
RooObjCacheManager _normIntMgr
void printMetaArgs(std::ostream &os) const
Customized printing of arguments of a RooRealSumPdf to more intuitively reflect the contents of the p...
Iterator abstract base class.
const RooNameSet * nameSet1ByIndex(Int_t index) const
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return expected number of events from this p.d.f for use in extended likelihood calculations.
Bool_t observableOverlaps(const RooAbsData *dset, const RooAbsArg &testArg) const
Test if any of the dependents of the arg tree (as determined by getObservables) overlaps with those o...
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=0, const TNamed *isetRangeName=0)
virtual void setCacheAndTrackHints(RooArgSet &)
Label OK'ed components of a RooRealSumPdf with cache-and-track.
virtual void Print(Option_t *options=0) const
This method must be overridden when a class wants to print itself.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Reimplementation of standard RooArgList::add()
Bool_t _extended
Iterator over coefficient list.
RooAbsReal * createIntegral(const RooArgSet &iset, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Create an object that represents the integral of the function over one or more observables listed in ...
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
void logEvalError(const char *message, const char *serverValueString=0) const
Log evaluation error message.
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
RooAbsCacheElement is the abstract base class for objects to be stored in RooAbsCache cache manager o...
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
cout << "RooRealSumPdf::analyticalIntegralWN:"<<GetName()<<"("<<code<<","<<(normSet2?*normSet2:RooArgSet())<<","<<(rangeName?rangeName:"<none>") << endl; Implement analytical integrations by deferring integration of component functions to integrators of components
Double_t getNorm(const RooArgSet &nset) const
Bool_t isBinnedDistribution(const RooArgSet &obs) const
virtual Bool_t isBinnedDistribution(const RooArgSet &) const
const RooNameSet * nameSet2ByIndex(Int_t index) const
RooRealSumPdf()
Default constructor coverity[UNINIT_CTOR].
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
RooFIter fwdIterator() const
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &, Double_t, Double_t) const
RooArgSet * getParameters(const RooAbsData *data, Bool_t stripDisconnected=kTRUE) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
static RooMathCoreReg dummy
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=0) const
cout << "RooRealSumPdf::getAnalyticalIntegralWN:"<<GetName()<<"("<<allVars<<",analVars,"<<(normSet2?*normSet2:RooArgSet())<<","<<(rangeName?rangeName:"<none>") << endl; Advertise that all integrals can be handled internally.
double func(double *x, double *p)
RooArgSet * select(const RooArgSet &list) const
Construct a RooArgSet of objects in input 'list' whose names match to those in the internal name list...
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &, Double_t, Double_t) const
virtual ~RooRealSumPdf()
Destructor.
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
virtual TObject * Next()=0
Bool_t isSelectedComp() const
If true, the current pdf is a selected component (for use in plotting)
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=0)
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
virtual CacheMode canNodeBeCached() const
virtual Bool_t checkObservables(const RooArgSet *nset) const
Check if FUNC is valid for given normalization set.
Double_t evaluate() const
Calculate the current value.