61 _funcIter = _funcList.createIterator();
62 _coefIter = _coefList.createIterator();
70 _funcList(
"!funcList",
"List of functions", this), _coefList(
"!coefList",
"List of coefficients", this),
83 _funcList(
"!funcList",
"List of functions", this),
_coefList(
"!coefList",
"List of coefficients", this),
104 _funcList(
"!funcList",
"List of functions", this),
_coefList(
"!coefList",
"List of coefficients", this),
115 <<
") number of pdfs and coefficients inconsistent, must have Nfunc=Ncoef or Nfunc=Ncoef+1" 132 if (!dynamic_cast<RooAbsReal *>(coef)) {
134 <<
" is not of type RooAbsReal, ignored" << endl;
137 if (!dynamic_cast<RooAbsReal *>(func)) {
139 <<
" is not of type RooAbsReal, ignored" << endl;
148 if (!dynamic_cast<RooAbsReal *>(func)) {
150 <<
" is not of type RooAbsReal, fatal error" << endl;
206 <<
" funcVal = " << func->IsA()->
GetName() <<
"::" << func->
GetName() <<
" = " << func->
getVal()
209 value += func->
getVal() * coefVal;
211 lastCoef -= coef->
getVal();
219 value += func->
getVal() * lastCoef;
223 <<
" funcVal = " << func->
getVal() << endl;
226 if (lastCoef < 0 || lastCoef > 1) {
228 <<
" WARNING: sum of FUNC coefficients not in range [0-1], value=" << 1 - lastCoef << endl;
261 <<
" have one or more observables in common" << endl;
266 << coef->
GetName() <<
" depends on one or more of the following observables";
277 const char *rangeName)
const 291 analVars.
add(allVars);
295 Int_t sterileIdx(-1);
314 if (normSet && normSet->
getSize() > 0) {
357 assert(code == code2);
374 Double_t coefVal = coef->getVal(normSet2);
379 value += funcInt->getVal() * coefVal;
381 lastCoef -= coef->getVal(normSet2);
390 value += funcInt->getVal() * lastCoef;
394 if (lastCoef < 0 || lastCoef > 1) {
396 <<
" WARNING: sum of FUNC coefficients not in range [0-1], value=" << 1 - lastCoef << endl;
401 if (normSet2 && normSet2->
getSize() > 0) {
410 Double_t coefVal = coef->getVal(normSet2);
413 normVal += funcNorm->
getVal() * coefVal;
421 normVal += funcNorm->
getVal() * lastCoef;
425 return value / normVal;
431 list<Double_t> *sumBinB = 0;
439 list<Double_t> *funcBinB = func->
binBoundaries(obs, xlo, xhi);
448 list<Double_t> *newSumBinB =
new list<Double_t>(sumBinB->size() + funcBinB->size());
451 merge(funcBinB->begin(), funcBinB->end(), sumBinB->begin(), sumBinB->end(), newSumBinB->begin());
456 sumBinB = newSumBinB;
464 list<Double_t>::iterator new_end = unique(sumBinB->begin(), sumBinB->end());
465 sumBinB->erase(new_end, sumBinB->end());
490 list<Double_t> *sumHint = 0;
509 list<Double_t> *newSumHint =
new list<Double_t>(sumHint->size() + funcHint->size());
512 merge(funcHint->begin(), funcHint->end(), sumHint->begin(), sumHint->end(), newSumHint->begin());
516 sumHint = newSumHint;
524 list<Double_t>::iterator new_end = unique(sumHint->begin(), sumHint->end());
525 sumHint->erase(new_end, sumHint->end());
537 while ((sarg = siter.
next())) {
539 trackNodes.
add(*sarg);
570 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.
void printMetaArgs(std::ostream &os) const
Double_t getVal(const RooArgSet *set=0) const
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral. ...
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
Bool_t _doFloor
Iterator over coefficient list.
T * getObjByIndex(Int_t index) const
const RooArgList & funcList() const
virtual ~RooRealSumFunc()
Bool_t isBinnedDistribution(const RooArgSet &obs) const
Iterator abstract base class.
const RooNameSet * nameSet1ByIndex(Int_t index) const
RooRealIntegral performs hybrid numerical/analytical integrals of RooAbsReal objects The class perfor...
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 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()
virtual Bool_t checkObservables(const RooArgSet *nset) const
Overloadable function in which derived classes can implement consistency checks of the variables...
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 ...
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
RooAbsCacheElement is the abstract base class for objects to be stored in RooAbsCache cache manager o...
virtual void setCacheAndTrackHints(RooArgSet &)
Double_t evaluate() const
virtual Bool_t isBinnedDistribution(const RooArgSet &) const
const RooNameSet * nameSet2ByIndex(Int_t index) const
TIterator * _coefIter
Iterator over FUNC list.
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
RooFIter fwdIterator() 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
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
typedef void((*Func_t)())
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
virtual TObject * Next()=0
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
RooObjCacheManager _normIntMgr
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)
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
static Bool_t _doFloorGlobal
virtual CacheMode canNodeBeCached() const