43class RooProduct::ProdMap :
public std::vector<std::pair<RooArgSet*,RooArgList*> > {} ;
47 typedef RooProduct::ProdMap::iterator RPPMIter ;
48 std::pair<RPPMIter,RPPMIter> findOverlap2nd(RPPMIter i, RPPMIter end) ;
49 void dump_map(ostream& os, RPPMIter i, RPPMIter end) ;
79 _compRSet(
"!compRSet",
"Set of real product components",this),
80 _compCSet(
"!compCSet",
"Set of category product components",this),
92 <<
" is not of type RooAbsReal or RooAbsCategory" << endl ;
106 _compRSet(
"!compRSet",this,other._compRSet),
107 _compCSet(
"!compCSet",this,other._compCSet),
108 _cacheMgr(other._cacheMgr,this)
141 ProdMap* map =
new ProdMap ;
152 map->push_back( std::make_pair(
new RooArgSet(),indep) );
167 map->push_back( std::make_pair(vars,comps) );
173 std::pair<ProdMap::iterator,ProdMap::iterator> i = findOverlap2nd(map->begin(),map->end());
174 overlap = (i.first!=i.second);
176 i.first->first->add(*i.second->first);
179 RooFIter it = i.second->second->fwdIterator() ;
181 while ((targ = it.
next())) {
182 if (!i.first->second->find(*targ)) {
183 i.first->second->add(*targ) ;
188 delete i.second->first;
189 delete i.second->second;
190 map->erase(i.second);
196 int nVar=0;
int nFunc=0;
197 for (ProdMap::iterator i = map->begin();i!=map->end();++i) {
198 nVar+=i->first->getSize();
199 nFunc+=i->second->getSize();
201 assert(nVar==allVars.
getSize());
217 Int_t sterileIndex(-1);
235 for (ProdMap::iterator iter = map->begin() ; iter != map->end() ; ++iter) {
237 delete iter->second ;
245 for (ProdMap::const_iterator i = map->begin();i!=map->end();++i) {
247 if (i->second->getSize()>1) {
253 assert(i->second->getSize()==1);
254 RooFIter j = i->second->fwdIterator();
258 if (i->first->getSize()==0) {
272 <<
" for iset=" << *iset <<
" @" << iset <<
" range: " << (isetRange?isetRange:
"<none>") << endl ;
274 for (ProdMap::iterator iter = map->begin() ; iter != map->end() ; ++iter) {
276 delete iter->second ;
288 const char* rangeName)
const
296 analVars.
add(allVars) ;
368 auto rcomp =
static_cast<const RooAbsReal*
>(item);
370 prod *= rcomp->
getVal(nset) ;
390 auto func =
static_cast<const RooAbsReal*
>(item);
408 auto func =
static_cast<const RooAbsReal*
>(item);
410 if (func->dependsOn(obs) && !func->isBinnedDistribution(obs)) {
426 auto func =
static_cast<const RooAbsReal*
>(item);
465 for (
const auto parg : comp) {
466 if (parg->isDerived()) {
467 if (parg->canNodeBeCached()==
Always) {
468 trackNodes.
add(*parg) ;
489 os << rcomp->GetName() ;
496 os << ccomp->GetName() ;
508std::pair<RPPMIter,RPPMIter> findOverlap2nd(RPPMIter i, RPPMIter
end)
511 for (; i!=
end; ++i)
for ( RPPMIter j(i+1); j!=
end; ++j) {
512 if (i->second->overlaps(*j->second)) {
513 return std::make_pair(i,j);
516 return std::make_pair(
end,
end);
520void dump_map(ostream& os, RPPMIter i, RPPMIter
end)
527 else { os <<
" , " ; }
528 os << *(i->first) <<
" -> " << *(i->second) ;
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
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.
TIterator end() or range-based loops.")
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...
RooAbsCacheElement is the abstract base class for objects to be stored in RooAbsCache cache manager o...
RooAbsCategory is the common abstract base class for objects that represent a discrete value with a f...
virtual Int_t getIndex() const
Return index number of current state.
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 Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
RooAbsArg * first() const
const RooArgSet * nset() const
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...
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 ...
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
T * getObjByIndex(Int_t index) const
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...
virtual ~CacheElem()
Destructor.
virtual RooArgList containedArgs(Action)
Return list of all RooAbsArgs in cache element.
A RooProduct represents the product of a given set of RooAbsReal objects.
void printMetaArgs(std::ostream &os) const
Customized printing of arguments of a RooProduct to more intuitively reflect the contents of the prod...
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &, Double_t, Double_t) const
Forward the plot sampling hint from the p.d.f. that defines the observable obs
virtual ~RooProduct()
Destructor.
ProdMap * groupProductTerms(const RooArgSet &) const
Group observables into subsets in which the product factorizes and that can thus be integrated separa...
Double_t calculate(const RooArgList &partIntList) const
Calculate and return product of partial terms in partIntList.
Double_t evaluate() const
Evaluate product of input functions.
virtual Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=0) const
Declare that we handle all integrations internally.
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
Forward the plot sampling hint from the p.d.f. that defines the observable obs
const char * makeFPName(const char *pfx, const RooArgSet &terms) const
Construct automatic name for internal product terms.
virtual Bool_t forceAnalyticalInt(const RooAbsArg &dep) const
Force internal handling of integration of given observable if any of the product terms depend on it.
virtual Double_t analyticalIntegral(Int_t code, const char *rangeName=0) const
Calculate integral internally from appropriate partial integral cache.
RooProduct()
Default constructor.
RooObjCacheManager _cacheMgr
Int_t getPartIntList(const RooArgSet *iset, const char *rangeName=0) const
Return list of (partial) integrals whose product defines the integral of this RooProduct over the obs...
virtual void setCacheAndTrackHints(RooArgSet &)
Label OK'ed components of a RooProduct with cache-and-track.
virtual Bool_t isBinnedDistribution(const RooArgSet &obs) const
virtual const char * GetName() const
Returns name of object.
const char * Data() const
TString & Append(const char *cs)