75 _funcList(
"!funcList",
"List of functions", this), _coefList(
"!coefList",
"List of coefficients", this),
88 _funcList(
"!funcList",
"List of functions", this), _coefList(
"!coefList",
"List of coefficients", this),
109 _funcList(
"!funcList",
"List of functions", this), _coefList(
"!coefList",
"List of coefficients", this),
120 <<
") number of pdfs and coefficients inconsistent, must have Nfunc=Ncoef or Nfunc=Ncoef+1"
139 <<
" is not of type RooAbsReal, ignored" << endl;
144 <<
" is not of type RooAbsReal, ignored" << endl;
155 <<
" is not of type RooAbsReal, fatal error" << endl;
170 :
RooAbsReal(other,
name), _normIntMgr(other._normIntMgr, this), _haveLastCoef(other._haveLastCoef),
171 _funcList(
"!funcList", this, other._funcList), _coefList(
"!coefList", this, other._coefList),
172 _doFloor(other._doFloor)
211 <<
" funcVal = " << func->IsA()->
GetName() <<
"::" << func->
GetName() <<
" = " << func->
getVal()
214 value += func->
getVal() * coefVal;
216 lastCoef -= coef->
getVal();
224 value += func->
getVal() * lastCoef;
228 <<
" funcVal = " << func->
getVal() << endl;
231 if (lastCoef < 0 || lastCoef > 1) {
233 <<
" WARNING: sum of FUNC coefficients not in range [0-1], value=" << 1 - lastCoef << endl;
266 <<
" have one or more observables in common" << endl;
271 << coef->
GetName() <<
" depends on one or more of the following observables";
282 const char *rangeName)
const
296 analVars.
add(allVars);
300 Int_t sterileIdx(-1);
319 if (normSet && normSet->
getSize() > 0) {
362 assert(code == code2);
379 Double_t coefVal = coef->getVal(normSet2);
384 value += funcInt->getVal() * coefVal;
386 lastCoef -= coef->getVal(normSet2);
395 value += funcInt->getVal() * lastCoef;
399 if (lastCoef < 0 || lastCoef > 1) {
401 <<
" WARNING: sum of FUNC coefficients not in range [0-1], value=" << 1 - lastCoef << endl;
406 if (normSet2 && normSet2->
getSize() > 0) {
415 Double_t coefVal = coef->getVal(normSet2);
418 normVal += funcNorm->
getVal() * coefVal;
426 normVal += funcNorm->
getVal() * lastCoef;
430 return value / normVal;
436 list<Double_t> *sumBinB = 0;
444 list<Double_t> *funcBinB = func->
binBoundaries(obs, xlo, xhi);
453 list<Double_t> *newSumBinB =
new list<Double_t>(sumBinB->size() + funcBinB->size());
456 merge(funcBinB->begin(), funcBinB->end(), sumBinB->begin(), sumBinB->end(), newSumBinB->begin());
461 sumBinB = newSumBinB;
469 list<Double_t>::iterator new_end = unique(sumBinB->begin(), sumBinB->end());
470 sumBinB->erase(new_end, sumBinB->end());
495 list<Double_t> *sumHint = 0;
514 list<Double_t> *newSumHint =
new list<Double_t>(sumHint->size() + funcHint->size());
517 merge(funcHint->begin(), funcHint->end(), sumHint->begin(), sumHint->end(), newSumHint->begin());
521 sumHint = newSumHint;
529 list<Double_t>::iterator new_end = unique(sumHint->begin(), sumHint->end());
530 sumHint->erase(new_end, sumHint->end());
542 while ((sarg = siter.
next())) {
544 trackNodes.
add(*sarg);
575 os <<
" + [%] * " << func->
GetName();
static RooMathCoreReg dummy
typedef void((*Func_t)())
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
Return the observables of this pdf given a set of observables.
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.
virtual CacheMode canNodeBeCached() 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...
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...
RooAbsCacheElement is the abstract base class for objects to be stored in RooAbsCache cache manager o...
RooFIter fwdIterator() const R__SUGGEST_ALTERNATIVE("begin()
One-time forward iterator.
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
virtual void Print(Option_t *options=0) const
This method must be overridden when a class wants to print itself.
TIterator * createIterator(Bool_t dir=kIterForward) const R__SUGGEST_ALTERNATIVE("begin()
TIterator-style iteration over contained elements.
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Bool_t isSelectedComp() const
If true, the current pdf is a selected component (for use in plotting)
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &, Double_t, Double_t) const
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
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 Bool_t isBinnedDistribution(const RooArgSet &) const
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
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...
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=0, const TNamed *isetRangeName=0)
const RooNameSet * nameSet2ByIndex(Int_t index) const
Retrieve RooNameSet associated with slot at given index.
T * getObjByIndex(Int_t index) const
Retrieve payload object by slot index.
const RooNameSet * nameSet1ByIndex(Int_t index) const
Retrieve RooNameSet associated with slot at given index.
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=0)
A one-time forward iterator working on RooLinkedList or RooAbsCollection.
RooAbsArg * next()
Return next element or nullptr if at end.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Reimplementation of standard RooArgList::add()
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
RooArgSet * select(const RooArgSet &list) const
Construct a RooArgSet of objects in input 'list' whose names match to those in the internal name list...
RooRealIntegral performs hybrid numerical/analytical integrals of RooAbsReal objects.
Bool_t _doFloor
Iterator over coefficient list.
TIterator * _coefIter
Iterator over FUNC list.
Double_t evaluate() const
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
Bool_t isBinnedDistribution(const RooArgSet &obs) const
static Bool_t _doFloorGlobal
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
const RooArgList & funcList() const
RooObjCacheManager _normIntMgr
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=0) const
Variant of getAnalyticalIntegral that is also passed the normalization set that should be applied to ...
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &, Double_t, Double_t) const
virtual Bool_t checkObservables(const RooArgSet *nset) const
Overloadable function in which derived classes can implement consistency checks of the variables.
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
virtual ~RooRealSumFunc()
virtual void setCacheAndTrackHints(RooArgSet &)
void printMetaArgs(std::ostream &os) const
Iterator abstract base class.
virtual TObject * Next()=0
virtual const char * GetName() const
Returns name of object.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".