36using std::endl, std::vector, std::ostream;
48 cxcoutI(Generation) <<
"RooBinnedGenContext::ctor() setting up event special generator context for sum p.d.f. " << model.GetName()
49 <<
" for generation of observable(s) " << vars ;
50 if (prototype)
ccxcoutI(Generation) <<
" with prototype data for " << *prototype->
get() ;
51 if (auxProto && !auxProto->
empty())
ccxcoutI(Generation) <<
" with auxiliary prototypes " << *auxProto ;
63 coefNSet.
add(*prototype->
get(),
true) ;
64 _pdf->fixAddCoefNormalization(coefNSet) ;
68 _vars = std::unique_ptr<RooArgSet>{
_pdf->getObservables(vars)};
71 _hist = std::make_unique<RooDataHist>(
"genData",
"genData",*
_vars);
85 _pdf->recursiveRedirectServers(args) ;
97 _pdf->recursiveRedirectServers(theEvent) ;
117 double nEvents = nEvt ;
120 if (!
_pdf->canBeExtended()) {
121 coutE(InputArguments) <<
"RooAbsPdf::generateBinned(" <<
GetName()
122 <<
") ERROR: No event count provided and p.d.f does not provide expected number of events" << std::endl ;
127 nEvents =
_pdf->expectedEvents(
_vars.get());
140 vector<int> histOut(
_hist->numEntries()) ;
142 Int_t histOutSum(0) ;
143 for (
int i=0 ; i<
_hist->numEntries() ; i++) {
145 const double wi =
_hist->weight(i) ;
149 double w=wi*nEvents ;
150 wudata->
add(*coords,w) ;
152 }
else if (extended) {
156 wudata->
add(*coords,w) ;
166 histOutSum += histOut[i] ;
176 Int_t nEvtExtra = std::abs(
Int_t(nEvents)-histOutSum) ;
177 Int_t wgt = (histOutSum>nEvents) ? -1 : 1 ;
183 _hist->get(ibinRand) ;
186 if (ranY<_hist->weight(ibinRand)) {
188 histOut[ibinRand]++ ;
191 if (histOut[ibinRand]>0) {
192 histOut[ibinRand]-- ;
202 for (
int i=0 ; i<
_hist->numEntries() ; i++) {
204 wudata->
add(*
_hist->get(),histOut[i]) ;
231 os <<
indent <<
"--- RooBinnedGenContext ---" << std::endl ;
232 os <<
indent <<
"Using PDF ";
int Int_t
Signed integer 4 bytes (int).
static void indent(ostringstream &buf, int indent_level)
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
RooArgSet _theEvent
Pointer to observable event being generated.
RooAbsGenContext(const RooAbsPdf &model, const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool _verbose=false)
Constructor.
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Interface for multi-line printing.
Abstract interface for all probability density functions.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
RooAbsPdf * _pdf
Pointer to cloned p.d.f.
~RooBinnedGenContext() override
bool _expectedData
Asimov?
void generateEvent(RooArgSet &theEvent, Int_t remaining) override
this method is not implemented for this context
std::unique_ptr< RooDataHist > _hist
Histogram.
void printMultiline(std::ostream &os, Int_t content, bool verbose=false, TString indent="") const override
Print the details of the context.
RooArgSet _pdfSet
Set owned all nodes of internal clone of p.d.f.
RooBinnedGenContext(const RooAbsPdf &model, const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool _verbose=false)
Constructor.
void setExpectedData(bool) override
std::unique_ptr< RooArgSet > _vars
void initGenerator(const RooArgSet &theEvent) override
One-time initialization of generator context.
RooDataSet * generate(double nEvents=0.0, bool skipInit=false, bool extendedMode=false) override
Generate the specified number of events with nEvents>0 and and return a dataset containing the genera...
void attach(const RooArgSet ¶ms) override
Attach given set of variables to internal p.d.f. clone.
Container class to hold unbinned data.
const RooArgSet * get(Int_t index) const override
Return RooArgSet with coordinates of event 'index'.
void add(const RooArgSet &row, double weight, double weightError)
Add one ore more rows of data.
static TRandom * randomGenerator()
Return a pointer to a singleton random-number generator implementation.
const char * GetName() const override
Returns name of object.
virtual ULong64_t Poisson(Double_t mean)
Generates a random integer N according to a Poisson law.
virtual Double_t Uniform(Double_t x1=1)
Returns a uniform deviate on the interval (0, x1).
virtual UInt_t Integer(UInt_t imax)
Returns a random integer uniformly distributed on the interval [ 0, imax-1 ].
RooCmdArg WeightVar(const char *name="weight", bool reinterpretAsWeight=false)