51 RooAbsGenContext(model,vars,prototype,auxProto,verbose), _uniIter(0), _pdf(&model)
56 cxcoutI(
Generation) <<
"RooProdGenContext::ctor() setting up event special generator context for product p.d.f. " << model.
GetName()
57 <<
" for generation of observable(s) " << vars ;
71 RooLinkedList termList,depsList,impDepList,crossDepList,intList ;
78 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() factorizing product expression in irriducible terms " ;
101 Bool_t anyPrevAction=anyAction ;
112 if (impDeps==0 || termDeps==0) {
116 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() analyzing product term " << *term <<
" with observable(s) " << *termDeps ;
118 ccxcoutD(
Generation) <<
" which has dependence of external observable(s) " << *impDeps <<
" that to be generated first by other terms" ;
127 if (!anyPrevAction) {
128 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() no convergence in single term analysis loop, terminating loop and process remainder of terms as single unit " << endl ;
132 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() skipping this term for now because it needs imported dependents that are not generated yet" << endl ;
138 if (termDeps->getSize()==0) {
139 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() term has no observables requested to be generated, removing it" << endl ;
141 depsList.
Remove(termDeps) ;
142 impDepList.
Remove(impDeps) ;
157 coutI(
Generation) <<
"RooProdGenContext::ctor() creating subcontext for generation of observables " << *pdfDep <<
" from model " << pdf->
GetName() << endl ;
165 genDeps.
add(*pdfDep) ;
172 if (termDeps->getSize()>0) {
185 pdfSetList.
Add(pdfSet) ;
187 if (pdfnset && pdfnset->
getSize()>0) {
192 fullPdfSet.
add(*pdfSet) ;
204 coutI(
Generation) <<
"RooProdGenContext()::ctor creating subcontext for generation of observables " << *termDeps
205 <<
"for irriducuble composite term using sub-product object " << multiPdf->
GetName() ;
209 genDeps.
add(*termDeps) ;
219 depsList.
Remove(termDeps) ;
220 impDepList.
Remove(impDeps) ;
232 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() there are left-over terms that need to be generated separately" << endl ;
244 trailerTerm.
add(*term) ;
245 trailerTermDeps.
add(*termDeps) ;
261 pdfSetList.
Add(pdfSet) ;
263 if (pdfnset && pdfnset->
getSize()>0) {
267 fullPdfSet.
add(*pdfSet) ;
280 cxcoutD(
Generation) <<
"RooProdGenContext(" << model.
GetName() <<
"): creating context for irreducible composite trailer term " 281 << multiPdf->
GetName() <<
" that generates observables " << trailerTermDeps << endl ;
292 coutI(
Generation) <<
"RooProdGenContext(" << model.
GetName() <<
"): generating uniform distribution for non-dependent observable(s) " <<
_uniObs << endl ;
318 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
330 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
331 (*iter)->attach(args) ;
342 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
343 (*iter)->initGenerator(theEvent) ;
359 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
360 (*iter)->generateEvent(theEvent,remaining) ;
389 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
390 (*iter)->setProtoDataOrder(lut) ;
403 os << indent <<
"--- RooProdGenContext ---" << endl ;
404 os << indent <<
"Using PDF ";
406 os << indent <<
"List of component generators" << endl ;
408 TString indent2(indent) ;
409 indent2.Append(
" ") ;
411 for (list<RooAbsGenContext*>::const_iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
412 (*iter)->printMultiline(os,content,verbose,indent2) ;
virtual const char * GetName() const
Returns name of object.
TIterator * createIterator(Bool_t dir=kIterForward) const
virtual void printStream(std::ostream &os, Int_t contents, StyleOption style, TString indent="") const
Print description of object on ostream, printing contents set by contents integer, which is interpreted as an OR of 'enum ContentsOptions' values and in the style given by 'enum StyleOption'.
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...
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
virtual Bool_t Remove(TObject *arg)
Remove object from collection.
RooProdPdf is an efficient implementation of a product of PDFs of the form.
RooCmdArg Conditional(const RooArgSet &pdfSet, const RooArgSet &depSet, Bool_t depsAreCond=kFALSE)
RooArgSet * findPdfNSet(RooAbsPdf &pdf) const
Look up user specified normalization set for given input PDF component.
virtual void attach(const RooArgSet ¶ms)
Attach generator to given event buffer.
Iterator abstract base class.
RooArgSet _ownedMultiProds
virtual void printMultiline(std::ostream &os, Int_t content, Bool_t verbose=kFALSE, TString indent="") const
Detailed printing interface.
virtual ~RooProdGenContext()
Destructor. Delete all owned subgenerator contexts.
std::list< RooAbsGenContext * > _gcList
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
virtual void setProtoDataOrder(Int_t *lut)
Set the traversal order of the prototype dataset by the given lookup table.
virtual void Add(TObject *arg)
virtual Bool_t addOwned(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling addOwned() for each element in the source...
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.
RooDataSet is a container class to hold unbinned data.
virtual const RooArgSet * get(Int_t index) const
Return RooArgSet with coordinates of event 'index'.
virtual void randomize(const char *rangeName=0)=0
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
void Delete(Option_t *o=0)
Remove all elements in collection and delete all elements NB: Collection does not own elements...
virtual void generateEvent(RooArgSet &theEvent, Int_t remaining)
Generate a single event of the product by generating the components of the products sequentially...
void useDefaultGen(Bool_t flag=kTRUE)
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Interface function to create a generator context from a p.d.f.
virtual void setProtoDataOrder(Int_t *lut)
Set the traversal order of prototype data to that in the lookup tables passed as argument.
virtual void initGenerator(const RooArgSet &theEvent)
One-time initialization of generator context, forward to component generators.
virtual void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Interface for multi-line printing.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
RooProdGenContext(const RooProdPdf &model, const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t _verbose=kFALSE)
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
TIterator * MakeIterator(Bool_t dir=kTRUE) const
Return an iterator over this list.
virtual TObject * Next()=0
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() ...
RooProdGenContext is an efficient implementation of the generator context specific for RooProdPdf PDF...
void setOperMode(OperMode mode, Bool_t recurseADirty=kTRUE)
Change cache operation mode to given mode.
Abstract base class for objects that are lvalues, i.e.
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Return generator context optimized for generating events from product p.d.f.s.