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 ;
411 for (list<RooAbsGenContext*>::const_iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
412 (*iter)->printMultiline(os,content,verbose,indent2) ;
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 Remove(TObject *arg)
Remove object from collection.
RooProdPdf is an efficient implementation of a product of PDFs of the form.
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
RooCmdArg Conditional(const RooArgSet &pdfSet, const RooArgSet &depSet, Bool_t depsAreCond=kFALSE)
virtual void attach(const RooArgSet ¶ms)
Attach generator to given event buffer.
Iterator abstract base class.
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.
RooArgSet _ownedMultiProds
virtual ~RooProdGenContext()
Destructor. Delete all owned subgenerator contexts.
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.
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add element to an owning set.
TIterator * createIterator(Bool_t dir=kIterForward) const
if on multiple lines(like in C++).**The" * configuration fragment. * * The "import myobject continue
Parses the configuration file.
TString & Append(const char *cs)
TIterator * MakeIterator(Bool_t dir=kTRUE) const
Return an iterator over this list.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
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 void printMultiline(std::ostream &os, Int_t content, Bool_t verbose=kFALSE, TString indent="") const
Detailed printing interface.
virtual const char * GetName() const
Returns name of object.
RooArgSet * findPdfNSet(RooAbsPdf &pdf) const
Look up user specified normalization set for given input PDF component.
static void indent(ostringstream &buf, int indent_level)
RooDataSet is a container class to hold unbinned data.
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)
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() ...
virtual void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
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.
virtual void initGenerator(const RooArgSet &theEvent)
One-time initialization of generator context, forward to component generators.
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...
virtual TObject * Next()=0
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 const RooArgSet * get(Int_t index) const
Return RooArgSet with coordinates of event 'index'.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add element to non-owning set.
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.