54 cxcoutI(
Generation) <<
"RooAddGenContext::ctor() setting up event special generator context for sum p.d.f. " << model.
GetName()
55 <<
" for generation of observable(s) " << vars ;
69 coefNSet.
add(*prototype->
get()) ;
77 for (
const auto arg : model.
_pdfList) {
78 auto pdf =
dynamic_cast<const RooAbsPdf *
>(arg);
80 coutF(
Generation) <<
"Cannot generate events from an object that is not a PDF.\n\t"
81 <<
"The offending object is a " << arg->IsA()->GetName() <<
" named '" << arg->GetName() <<
"'." << std::endl;
82 throw std::invalid_argument(
"Trying to generate events from on object that is not a PDF.");
106 cxcoutI(
Generation) <<
"RooAddGenContext::ctor() setting up event special generator context for sum resolution model " << model.
GetName()
107 <<
" for generation of observable(s) " << vars ;
120 for (
const auto obj : model.
_pdfList) {
141 for (vector<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
158 for (vector<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
159 (*iter)->attach(args) ;
183 for (vector<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
184 (*iter)->initGenerator(theEvent) ;
199 for (i=0 ; i<
_nComp ; i++) {
201 _gcList[i]->generateEvent(theEvent,remaining) ;
221 for (i=0 ; i<
_nComp ; i++) {
234 for (i=0 ; i<
_nComp ; i++) {
251 for (vector<RooAbsGenContext*>::iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
252 (*iter)->setProtoDataOrder(lut) ;
264 os <<
indent <<
"--- RooAddGenContext ---" << endl ;
265 os <<
indent <<
"Using PDF ";
268 os <<
indent <<
"List of component generators" << endl ;
271 for (vector<RooAbsGenContext*>::const_iterator iter=
_gcList.begin() ; iter!=
_gcList.end() ; ++iter) {
272 (*iter)->printMultiline(os,content,
verbose,indent2) ;
static void indent(ostringstream &buf, int indent_level)
void setOperMode(OperMode mode, Bool_t recurseADirty=kTRUE)
Set the operation mode of this node.
Bool_t recursiveRedirectServers(const RooAbsCollection &newServerList, Bool_t mustReplaceAll=kFALSE, Bool_t nameChange=kFALSE, Bool_t recurseInNewSet=kTRUE)
Recursively replace all servers with the new servers in newSet.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
Int_t getSize() const
Return the number of elements in the collection.
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const override
Interface for multi-line printing.
RooArgSet _theEvent
Pointer to observable event being generated.
virtual void setProtoDataOrder(Int_t *lut)
Set the traversal order of prototype data to that in the lookup tables passed as argument.
virtual void fixAddCoefNormalization(const RooArgSet &addNormSet=RooArgSet(), Bool_t force=kTRUE)
Fix the interpretation of the coefficient of any RooAddPdf component in the expression tree headed by...
RooAddGenContext is an efficient implementation of the generator context specific for RooAddPdf PDFs.
void setProtoDataOrder(Int_t *lut) override
Forward the setProtoDataOrder call to the component generator contexts.
RooAddGenContext(const RooAddPdf &model, const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t _verbose=kFALSE)
Constructor.
Bool_t _isModel
Are we generating from a RooAddPdf or a RooAddModel.
void printMultiline(std::ostream &os, Int_t content, Bool_t verbose=kFALSE, TString indent="") const override
Print the details of the context.
void initGenerator(const RooArgSet &theEvent) override
One-time initialization of generator contex.
void updateThresholds()
Update the cumulative threshold table from the current coefficient values.
std::vector< RooAbsGenContext * > _gcList
List of component generator contexts.
RooArgSet * _pdfSet
Set owned all nodes of internal clone of p.d.f.
~RooAddGenContext() override
Destructor. Delete all owned subgenerator contexts.
RooAddModel::CacheElem * _mcache
! RooAddModel cache element
Double_t * _coefThresh
[_nComp] Array of coefficient thresholds
void attach(const RooArgSet ¶ms) override
Attach given set of variables to internal p.d.f. clone.
Int_t _nComp
Number of PDF components.
RooAddPdf::CacheElem * _pcache
! RooAddPdf cache element
RooAbsPdf * _pdf
Pointer to cloned p.d.f.
void generateEvent(RooArgSet &theEvent, Int_t remaining) override
Randomly choose one of the component contexts to generate this event, with a probability proportional...
RooAddModel is an efficient implementation of a sum of PDFs of the form.
CacheElem * getProjCache(const RooArgSet *nset, const RooArgSet *iset=0, const char *rangeName=0) const
Retrieve cache element with for calculation of p.d.f value with normalization set nset and integrated...
void updateCoefficients(CacheElem &cache, const RooArgSet *nset) const
Update the coefficient values in the given cache element: calculate new remainder fraction,...
RooListProxy _pdfList
List of component PDFs.
Double_t * _coefCache
! Transiet cache with transformed values of coefficients
RooAddPdf is an efficient implementation of a sum of PDFs of the form.
void updateCoefficients(CacheElem &cache, const RooArgSet *nset) const
Update the coefficient values in the given cache element: calculate new remainder fraction,...
CacheElem * getProjCache(const RooArgSet *nset, const RooArgSet *iset=0, const char *rangeName=0) const
Manager of cache with coefficient projections and transformations.
RooListProxy _pdfList
List of component PDFs.
std::vector< double > _coefCache
! Transient cache with transformed values of coefficients
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
RooDataSet is a container class to hold unbinned data.
const RooArgSet * get(Int_t index) const override
Return RooArgSet with coordinates of event 'index'.
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,...
static Double_t uniform(TRandom *generator=randomGenerator())
Return a number uniformly distributed from (0,1)
const char * GetName() const override
Returns name of object.
TString & Append(const char *cs)