50 RooAbsGenContext(model,vars,prototype,auxProto,verbose), _uniIter(0), _pdf(&model)
55 cxcoutI(
Generation) <<
"RooProdGenContext::ctor() setting up event special generator context for product p.d.f. " << model.
GetName()
56 <<
" for generation of observable(s) " << vars ;
70 RooLinkedList termList,depsList,impDepList,crossDepList,intList ;
77 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() factorizing product expression in irriducible terms " ;
100 Bool_t anyPrevAction=anyAction ;
111 if (impDeps==0 || termDeps==0) {
115 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() analyzing product term " << *term <<
" with observable(s) " << *termDeps ;
117 ccxcoutD(
Generation) <<
" which has dependence of external observable(s) " << *impDeps <<
" that to be generated first by other terms" ;
126 if (!anyPrevAction) {
127 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() no convergence in single term analysis loop, terminating loop and process remainder of terms as single unit " << endl ;
131 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() skipping this term for now because it needs imported dependents that are not generated yet" << endl ;
137 if (termDeps->getSize()==0) {
138 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() term has no observables requested to be generated, removing it" << endl ;
140 depsList.
Remove(termDeps) ;
141 impDepList.
Remove(impDeps) ;
156 coutI(
Generation) <<
"RooProdGenContext::ctor() creating subcontext for generation of observables " << *pdfDep <<
" from model " << pdf->
GetName() << endl ;
164 genDeps.
add(*pdfDep) ;
171 if (termDeps->getSize()>0) {
184 pdfSetList.
Add(pdfSet) ;
186 if (pdfnset && pdfnset->
getSize()>0) {
191 fullPdfSet.
add(*pdfSet) ;
203 coutI(
Generation) <<
"RooProdGenContext()::ctor creating subcontext for generation of observables " << *termDeps
204 <<
"for irriducuble composite term using sub-product object " << multiPdf->
GetName() ;
208 genDeps.
add(*termDeps) ;
218 depsList.
Remove(termDeps) ;
219 impDepList.
Remove(impDeps) ;
231 cxcoutD(
Generation) <<
"RooProdGenContext::ctor() there are left-over terms that need to be generated separately" << endl ;
243 trailerTerm.
add(*term) ;
244 trailerTermDeps.
add(*termDeps) ;
260 pdfSetList.
Add(pdfSet) ;
262 if (pdfnset && pdfnset->
getSize()>0) {
266 fullPdfSet.
add(*pdfSet) ;
279 cxcoutD(
Generation) <<
"RooProdGenContext(" << model.
GetName() <<
"): creating context for irreducible composite trailer term " 280 << multiPdf->
GetName() <<
" that generates observables " << trailerTermDeps << endl ;
291 coutI(
Generation) <<
"RooProdGenContext(" << model.
GetName() <<
"): generating uniform distribution for non-dependent observable(s) " <<
_uniObs << endl ;
317 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
329 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
330 (*iter)->attach(args) ;
341 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
342 (*iter)->initGenerator(theEvent) ;
358 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
359 (*iter)->generateEvent(theEvent,remaining) ;
388 for (list<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
389 (*iter)->setProtoDataOrder(lut) ;
402 os << indent <<
"--- RooProdGenContext ---" << endl ;
403 os << indent <<
"Using PDF ";
405 os << indent <<
"List of component generators" << endl ;
410 for (list<RooAbsGenContext*>::const_iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
411 (*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'.
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
virtual Bool_t Remove(TObject *arg)
Remove object from collection.
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.
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add element to an owning set.
if on multiple lines(like in C++). **The " * configuration fragment. * * The "import myobject continue
Parses the configuration file.
TString & Append(const char *cs)
std::list< RooAbsGenContext * > _gcList
virtual void setProtoDataOrder(Int_t *lut)
Set the traversal order of the prototype dataset by the given lookup table.
virtual void Add(TObject *arg)
static void indent(ostringstream &buf, int indent_level)
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 const RooArgSet * get(Int_t index) const
Return RooArgSet with coordinates of event 'index'.
virtual void randomize(const char *rangeName=0)=0
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() ...
void setOperMode(OperMode mode, Bool_t recurseADirty=kTRUE)
Change cache operation mode to given mode.
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.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add element to non-owning set.