47 class RooProduct::ProdMap :
public std::vector<std::pair<RooArgSet*,RooArgList*> > {} ;
51 typedef RooProduct::ProdMap::iterator RPPMIter ;
52 std::pair<RPPMIter,RPPMIter> findOverlap2nd(RPPMIter i, RPPMIter end) ;
53 void dump_map(ostream& os, RPPMIter i, RPPMIter end) ;
83 _compRSet(
"!compRSet",
"Set of real product components",this),
84 _compCSet(
"!compCSet",
"Set of category product components",this),
90 if (dynamic_cast<RooAbsReal*>(comp)) {
92 }
else if (dynamic_cast<RooAbsCategory*>(comp)) {
96 <<
" is not of type RooAbsReal or RooAbsCategory" << endl ;
110 _compRSet(
"!compRSet",this,other._compRSet),
111 _compCSet(
"!compCSet",this,other._compCSet),
112 _cacheMgr(other._cacheMgr,this)
145 ProdMap* map =
new ProdMap ;
156 map->push_back( std::make_pair(
new RooArgSet(),indep) );
171 map->push_back( std::make_pair(vars,comps) );
177 std::pair<ProdMap::iterator,ProdMap::iterator> i = findOverlap2nd(map->begin(),map->end());
178 overlap = (i.first!=i.second);
180 i.first->first->add(*i.second->first);
183 RooFIter it = i.second->second->fwdIterator() ;
185 while ((targ = it.
next())) {
186 if (!i.first->second->find(*targ)) {
187 i.first->second->add(*targ) ;
192 delete i.second->first;
193 delete i.second->second;
194 map->erase(i.second);
200 int nVar=0;
int nFunc=0;
201 for (ProdMap::iterator i = map->begin();i!=map->end();++i) {
202 nVar+=i->first->getSize();
203 nFunc+=i->second->getSize();
221 Int_t sterileIndex(-1);
239 for (ProdMap::iterator
iter = map->begin() ;
iter != map->end() ; ++
iter) {
241 delete iter->second ;
249 for (ProdMap::const_iterator i = map->begin();i!=map->end();++i) {
251 if (i->second->getSize()>1) {
257 assert(i->second->getSize()==1);
258 RooFIter j = i->second->fwdIterator();
262 if (i->first->getSize()==0) {
276 <<
" for iset=" << *iset <<
" @" << iset <<
" range: " << (isetRange?isetRange:
"<none>") << endl ;
278 for (ProdMap::iterator
iter = map->begin() ;
iter != map->end() ; ++
iter) {
280 delete iter->second ;
292 const char* rangeName)
const
300 analVars.
add(allVars) ;
354 if (first) { first=
kFALSE;}
374 prod *= rcomp->
getVal(nset) ;
471 while ((parg=piter.
next())) {
474 trackNodes.
add(*parg) ;
496 if (!first) { os <<
" * " ; }
else { first =
kFALSE ; }
503 if (!first) { os <<
" * " ; }
else { first =
kFALSE ; }
516 std::pair<RPPMIter,RPPMIter> findOverlap2nd(RPPMIter i, RPPMIter end)
519 for (; i!=end; ++i)
for ( RPPMIter j(i+1); j!=end; ++j) {
520 if (i->second->overlaps(*j->second)) {
521 return std::make_pair(i,j);
524 return std::make_pair(end,end);
528 void dump_map(ostream& os, RPPMIter i, RPPMIter end)
534 if (first) { first=
kFALSE; }
535 else { os <<
" , " ; }
536 os << *(i->first) <<
" -> " << *(i->second) ;
Double_t evaluate() const
Evaluate product of input functions.
const RooArgSet * nset() const
virtual ~CacheElem()
Destructor.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
Double_t calculate(const RooArgList &partIntList) const
Calculate and return product of partial terms in partIntList.
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...
ProdMap * groupProductTerms(const RooArgSet &) const
Group observables into subsets in which the product factorizes and that can thus be integrated separa...
virtual Bool_t isDerived() const
virtual Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=0) const
Declare that we handle all integrations internally.
const char * makeFPName(const char *pfx, const RooArgSet &terms) const
Construct automatic name for internal product terms.
virtual Bool_t isBinnedDistribution(const RooArgSet &) const
const RooNameSet * nameSet2ByIndex(Int_t index) const
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
RooFIter fwdIterator() const
virtual Int_t getIndex() const
Return index number of current state.
virtual RooArgList containedArgs(Action)
Return list of all RooAbsArgs in cache element.
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...
const char * Data() const
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=0, const TNamed *isetRangeName=0)
std::map< std::string, std::string >::const_iterator iter
TString & Append(const char *cs)
Double_t getVal(const RooArgSet *set=0) const
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Reimplementation of standard RooArgList::add()
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...
void printMetaArgs(std::ostream &os) const
Customized printing of arguments of a RooProduct to more intuitively reflect the contents of the prod...
virtual Bool_t isBinnedDistribution(const RooArgSet &obs) const
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
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.
RooProduct()
Default constructor.
virtual const char * GetName() const
Returns name of object.
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &, Double_t, Double_t) const
virtual ~RooProduct()
Destructor.
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
double func(double *x, double *p)
virtual CacheMode canNodeBeCached() const
T * getObjByIndex(Int_t index) const
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.
RooObjCacheManager _cacheMgr
virtual Double_t analyticalIntegral(Int_t code, const char *rangeName=0) const
Calculate integral internally from appropriate partial integral cache.
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 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.
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 void setCacheAndTrackHints(RooArgSet &)
Label OK'ed components of a RooProduct with cache-and-track.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add element to non-owning set.
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 ...