42  typedef RooProduct::ProdMap::iterator 
RPPMIter ;
 
   72  _compRSet(
"!compRSet",
"Set of real product components",
this),
 
   73  _compCSet(
"!compCSet",
"Set of category product components",
this),
 
 
   92  _compRSet(
"!compRSet",
this,
other._compRSet),
 
   93  _compCSet(
"!compCSet",
this,
other._compCSet),
 
 
  108    coutE(InputArguments) << 
"RooProduct::addTerm(" << 
GetName() << 
") ERROR: component " << 
term->GetName()
 
  109        << 
" is not of type RooAbsReal or RooAbsCategory" << std::endl ;
 
  110    throw std::invalid_argument(
"RooProduct can only handle terms deriving from RooAbsReal or RooAbsCategory.");
 
 
  147  if (!
indep->empty()) {
 
  161    map->push_back( std::make_pair(vars,
comps) );
 
  167    std::pair<ProdMap::iterator,ProdMap::iterator> i = 
findOverlap2nd(map->begin(),map->end());
 
  170      i.first->first->add(*i.second->first);
 
  173      for (
auto const* 
targ : *(i.second->second)) {
 
  174        if (!i.first->second->find(*
targ)) {
 
  175          i.first->second->add(*
targ) ;
 
  180      delete i.second->first;
 
  181      delete i.second->second;
 
  182      map->erase(i.second);
 
  191  for (ProdMap::iterator i = map->begin();i!=map->end();++i) {
 
  192    nVar+=i->first->size();
 
  193    nFunc+=i->second->size();
 
 
  214  if (cache!=
nullptr) {
 
  221  cxcoutD(Integration) << 
"RooProduct::getPartIntList(" << 
GetName() << 
") groupProductTerms returned map" ;
 
  222  if (
dologD(Integration)) {
 
  224    ccoutD(Integration) << std::endl;
 
  230    for (ProdMap::iterator iter = map->begin() ; iter != map->end() ; ++iter) {
 
  232      delete iter->second ;
 
  239  for (ProdMap::const_iterator i = map->begin();i!=map->end();++i) {
 
  241    if (i->second->size()>1) { 
 
  246      cxcoutD(Integration) << 
"RooProduct::getPartIntList(" << 
GetName() << 
") created subexpression " << 
term->GetName() << std::endl;
 
  248      assert(i->second->size()==1);
 
  252    if (i->first->empty()) { 
 
  254      cxcoutD(Integration) << 
"RooProduct::getPartIntList(" << 
GetName() << 
") adding simple factor " << 
term->GetName() << std::endl;
 
  256      std::unique_ptr<RooAbsReal> integral{
term->createIntegral(*i->first,
isetRange)};
 
  258      cxcoutD(Integration) << 
"RooProduct::getPartIntList(" << 
GetName() << 
") adding integral for " << 
term->GetName() << 
" : " << integral->GetName() << std::endl;
 
  265  cxcoutD(Integration) << 
"RooProduct::getPartIntList(" << 
GetName() << 
") created list " << cache->
_prodList << 
" with code " << code+1 << std::endl
 
  268  for (ProdMap::iterator iter = map->begin() ; iter != map->end() ; ++iter) {
 
  270    delete iter->second ;
 
 
  302  if (cache==
nullptr) {
 
 
  324    double x = 
term->getVal();
 
 
  339  for (
auto const* arg : terms) {
 
  340    if (first) { first=
false;}
 
  341    else pname.Append(
"_X_");
 
  342    pname.Append(arg->GetName());
 
 
  360    prod *= 
rcomp->getVal(nset) ;
 
  366    prod *= 
ccomp->getCurrentIndex() ;
 
 
  376  std::size_t nEvents = 
output.size();
 
  378  for (
unsigned int i = 0; i < nEvents; ++i) {
 
  386    for (
unsigned int i = 0; i < nEvents; ++i) {
 
  395    for (
unsigned int i = 0; i < nEvents; ++i) {
 
 
  410    if (std::list<double>* 
binb = func->binBoundaries(obs,xlo,xhi)) {
 
 
  427    if (func->dependsOn(obs) && !func->isBinnedDistribution(obs)) {
 
 
  445    if (std::list<double>* 
hint = func->plotSamplingHint(obs,xlo,xhi)) {
 
 
  482    if (
parg->isDerived()) {
 
 
  499    if (!first) {  os << 
" * " ; } 
else {  first = 
false ; }
 
  500    os << 
rcomp->GetName() ;
 
  506    if (!first) {  os << 
" * " ; } 
else {  first = 
false ; }
 
  507    os << 
ccomp->GetName() ;
 
 
  518    throw std::runtime_error(
"RooProduct::ioStreamerPass2(): the number of proxies in the proxy list should be at least 2!");
 
  547      std::stringstream 
ss;
 
  548      ss << 
"Problem when reading RooProduct instance \"" << 
GetName() << 
"\"!\n" 
  549         << 
"     _proxyList[" << idx << 
"] was expected to be equal to " << 
memberName << 
", but it's not.\n" 
  550         << 
"         - proxyList[" << idx << 
"] : ";
 
  554      ss << 
"\n    RooFit will resolve this inconsistency by making _proxyList[" << idx << 
"] point to " << 
memberName 
  556      coutW(LinkStateMgmt) << 
ss.str() << std::endl;
 
 
  570  for (; i != end; ++i) {
 
  572      if (i->second->overlaps(*
j->second)) {
 
  573        return std::make_pair(i, 
j);
 
  577  return std::make_pair(end,end);
 
  587    if (first) { first=
false; }
 
  588    else { os << 
" , " ; }
 
  589    os << *(i->first) << 
" -> " << *(i->second) ;
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
Common abstract base class for objects that represent a value and a "shape" in RooFit.
 
RooFit::OwningPtr< RooArgSet > getParameters(const RooAbsData *data, bool stripDisconnected=true) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
 
virtual void ioStreamerPass2()
Method called by workspace container to finalize schema evolution issues that cannot be handled in a ...
 
Int_t numProxies() const
Return the number of registered proxies.
 
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
 
Abstract base class for objects to be stored in RooAbsCache cache manager objects.
 
A space to attach TBranches.
 
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
 
Storage_t::size_type size() const
 
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
 
Abstract interface for proxy classes.
 
const RooArgSet * nset() const
 
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
 
Abstract base class for objects that represent a real value and implements functionality common to al...
 
bool _forceNumInt
Force numerical integration if flag set.
 
RooArgList is a container object that can hold multiple RooAbsArg objects.
 
RooArgSet is a container object that can hold multiple RooAbsArg objects.
 
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=nullptr)
Setter function without integration set.
 
T * getObjByIndex(Int_t index) const
Retrieve payload object by slot index.
 
RooArgSet selectFromSet2(RooArgSet const &argSet, int index) const
Create RooArgSet containing the objects that are both in the cached set 2 with a given index and an i...
 
Int_t lastIndex() const
Return index of slot used in last get or set operation.
 
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=nullptr, const TNamed *isetRangeName=nullptr)
Getter function without integration set.
 
bool add(const RooAbsArg &var, bool valueServer, bool shapeServer, bool silent)
Overloaded RooCollection_t::add() method insert object into set and registers object as server to own...
 
std::span< const double > at(RooAbsArg const *arg, RooAbsArg const *caller=nullptr)
 
std::span< double > output()
 
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
 
RooArgList containedArgs(Action) override
Return list of all RooAbsArgs in cache element.
 
~CacheElem() override
Destructor.
 
Represents the product of a given set of RooAbsReal objects.
 
std::list< double > * binBoundaries(RooAbsRealLValue &, double, double) const override
Forward the plot sampling hint from the p.d.f. that defines the observable obs.
 
void doEval(RooFit::EvalContext &) const override
Base function for computing multiple values of a RooAbsReal.
 
double evaluate() const override
Evaluate product of input functions.
 
double analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Calculate integral internally from appropriate partial integral cache.
 
void addTerm(RooAbsArg *term)
Add a term to this product.
 
std::list< double > * plotSamplingHint(RooAbsRealLValue &, double, double) const override
Forward the plot sampling hint from the p.d.f. that defines the observable obs.
 
ProdMap * groupProductTerms(const RooArgSet &) const
Group observables into subsets in which the product factorizes and that can thus be integrated separa...
 
double calculate(const RooArgList &partIntList) const
The cache manager.
 
bool forceAnalyticalInt(const RooAbsArg &dep) const override
Force internal handling of integration of given observable if any of the product terms depend on it.
 
void setCacheAndTrackHints(RooArgSet &) override
Label OK'ed components of a RooProduct with cache-and-track.
 
~RooProduct() override
Destructor.
 
bool isBinnedDistribution(const RooArgSet &obs) const override
Tests if the distribution is binned. Unless overridden by derived classes, this always returns false.
 
void ioStreamerPass2() override
Method called by workspace container to finalize schema evolution issues that cannot be handled in a ...
 
Int_t getPartIntList(const RooArgSet *iset, const char *rangeName=nullptr) const
Return list of (partial) integrals whose product defines the integral of this RooProduct over the obs...
 
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Declare that we handle all integrations internally.
 
void printMetaArgs(std::ostream &os) const override
Customized printing of arguments of a RooProduct to more intuitively reflect the contents of the prod...
 
const char * makeFPName(const char *pfx, const RooArgSet &terms) const
Construct automatic name for internal product terms.
 
RooProduct()
Default constructor.
 
RooObjCacheManager _cacheMgr
 
const char * GetName() const override
Returns name of object.
 
void AddAt(TObject *obj, Int_t idx) override
Add object at position ids.
 
TObject * RemoveAt(Int_t idx) override
Remove object at index idx.