39using std::endl, std::ostream;
 
   53  cxcoutI(Generation) << 
"RooProdGenContext::ctor() setting up event special generator context for product p.d.f. " << model.
GetName()
 
   54         << 
" for generation of observable(s) " << vars ;
 
   74    cxcoutD(Generation) << 
"RooProdGenContext::ctor() factorizing product expression in irriducible terms " ;
 
  108      cxcoutD(Generation) << 
"RooProdGenContext::ctor() analyzing product term " << *
term << 
" with observable(s) " << *
termDeps ;
 
  110   ccxcoutD(Generation) << 
" which has dependence of external observable(s) " << *
impDeps << 
" that to be generated first by other terms" ;
 
  120     cxcoutD(Generation) << 
"RooProdGenContext::ctor() no convergence in single term analysis loop, terminating loop and process remainder of terms as single unit " << endl ;
 
  124   cxcoutD(Generation) << 
"RooProdGenContext::ctor() skipping this term for now because it needs imported dependents that are not generated yet" << endl ;
 
  134   cxcoutD(Generation) << 
"RooProdGenContext::ctor() term has no observables requested to be generated, removing it" << endl ;
 
  152      if (
term->size()==1) {
 
  155   auto pdf = 
static_cast<RooAbsPdf*
>((*term)[0]);
 
  158     coutI(Generation) << 
"RooProdGenContext::ctor() creating subcontext for generation of observables " << *
pdfDep << 
" from model " << pdf->GetName() << endl ;
 
  199        coutI(Generation) << 
"RooProdGenContext()::ctor creating subcontext for generation of observables " << *
termDeps 
  200               << 
"for irriducuble composite term using sub-product object " << 
multiPdf->GetName() ;
 
  228    cxcoutD(Generation) << 
"RooProdGenContext::ctor() there are left-over terms that need to be generated separately" << endl ;
 
  271    cxcoutD(Generation) << 
"RooProdGenContext(" << model.
GetName() << 
"): creating context for irreducible composite trailer term " 
  283    coutI(Generation) << 
"RooProdGenContext(" << model.
GetName() << 
"): generating uniform distribution for non-dependent observable(s) " << 
_uniObs << std::endl;
 
 
  378  os << 
indent << 
"--- RooProdGenContext ---" << endl ;
 
  379  os << 
indent << 
"Using PDF ";
 
  381  os << 
indent << 
"List of component generators" << endl ;
 
 
static void indent(ostringstream &buf, int indent_level)
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
const_iterator begin() const
 
const_iterator end() const
 
RooFit::OwningPtr< RooArgSet > getObservables(const RooArgSet &set, bool valueOnly=true) const
Given a set of possible observables, return the observables that this PDF depends on.
 
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
 
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
 
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
 
Abstract base class for generator contexts of RooAbsPdf objects.
 
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Interface for multi-line printing.
 
virtual void setProtoDataOrder(Int_t *lut)
Set the traversal order of prototype data to that in the lookup tables passed as argument.
 
Abstract interface for all probability density functions.
 
RooArgSet is a container object that can hold multiple RooAbsArg objects.
 
Container class to hold unbinned data.
 
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
 
Efficient implementation of the generator context specific for RooProdPdf PDFs.
 
std::list< std::unique_ptr< RooAbsGenContext > > _gcList
List of component generator contexts.
 
void setProtoDataOrder(Int_t *lut) override
Set the traversal order of the prototype dataset by the given lookup table.
 
void attach(const RooArgSet ¶ms) override
Attach generator to given event buffer.
 
RooArgSet _ownedMultiProds
Owned auxiliary multi-term product PDFs.
 
const RooProdPdf * _pdf
Original PDF.
 
void initGenerator(const RooArgSet &theEvent) override
One-time initialization of generator context, forward to component generators.
 
RooArgSet _uniObs
Observable to be generated with flat distribution.
 
~RooProdGenContext() override
Destructor. Delete all owned subgenerator contexts.
 
void generateEvent(RooArgSet &theEvent, Int_t remaining) override
Generate a single event of the product by generating the components of the products sequentially.
 
RooProdGenContext(const RooProdPdf &model, const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool _verbose=false)
 
void printMultiline(std::ostream &os, Int_t content, bool verbose=false, TString indent="") const override
Detailed printing interface.
 
Efficient implementation of a product of PDFs of the form.
 
void factorizeProduct(const RooArgSet &normSet, const RooArgSet &intSet, RooLinkedList &termList, RooLinkedList &normList, RooLinkedList &impDepList, RooLinkedList &crossDepList, RooLinkedList &intList) const
Factorize product in irreducible terms for given choice of integration/normalization.
 
std::string makeRGPPName(const char *pfx, const RooArgSet &term, const RooArgSet &iset, const RooArgSet &nset, const char *isetRangeName) const
Make an appropriate automatic name for a RooGenProdProj object in getPartIntList()
 
RooArgSet * findPdfNSet(RooAbsPdf const &pdf) const
Look up user specified normalization set for given input PDF component.
 
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
 
const char * GetName() const override
Returns name of object.
 
RooCmdArg Conditional(const RooArgSet &pdfSet, const RooArgSet &depSet, bool depsAreCond=false)