47#include "EvtGenBase/EvtValError.hh"
48#include "EvtGenBase/EvtPredGen.hh"
49#include "EvtGenBase/EvtStreamInputIterator.hh"
50#include "EvtGenBase/EvtPdfMax.hh"
51#include "EvtGenBase/EvtMacros.hh"
52#include "EvtGenBase/EvtRandom.hh"
66 if(p.isValid())
return pdf(p);
94 { printf(
"Analytic integration of PDF is not defined\n"); assert(0);
return compute_integral();}
110 virtual double pdf(
const T&)
const = 0;
121 _pdf(other._pdf ? other._pdf->clone() : 0)
152 return (random <= itsPdf->evaluate(p));
157 template <
class InputIterator>
void compute_max(InputIterator it, InputIterator end,
163 while(!(it == end)) {
165 double val = itsPdf->evaluate(p)*factor;
190 double ret = itsPdf->evaluate(p);
214 virtual double pdf(
const T& p)
const
216 double num = itsNum->evaluate(p);
217 double den = itsDen->evaluate(p);
243 assert(N > 0 || nFindMax > 0);
246 for(i=0;i<N;i++) gen();
267 while(!(begin == end)) {
269 double value = pdfdiv.
evaluate(*begin++);
276 double av = sum/((double) N);
278 double dev2 = (sum2 - av*av*N)/((
double) (N - 1));
280 if(dev2 < 0.) dev2 = 0.;
281 double error = sqrt(dev2/((
double) N));
293 printf(
"Function defined for analytic PDFs only\n");
virtual double pdf(const T &p) const
EvtPdfDiv(const EvtPdfDiv< T > &other)
EvtPdfDiv(const EvtPdf< T > &theNum, const EvtPdf< T > &theDen)
virtual EvtPdf< T > * clone() const
EvtPdfGen(const EvtPdf< T > &pdf)
EvtPdfGen(const EvtPdfGen< T > &other)
result_type operator()(argument_type p)
void compute_max(InputIterator it, InputIterator end, double factor=1.)
void setMax(const EvtPdfMax< T > &max)
EvtPdfPred(const EvtPdf< T > &thePdf)
EvtPdfMax< T > getMax() const
EvtPdfPred(const EvtPdfPred &other)
EvtPdfUnary(const EvtPdf< T > &thePdf)
result_type operator()(argument_type p)
EvtPdfUnary(const EvtPdfUnary &other)
virtual EvtPdf< T > * clone() const =0
virtual EvtValError compute_integral(int N) const
EvtPredGen< EvtPdfGen< T >, EvtPdfPred< T > > accRejGen(const EvtPdf< T > &pc, int nMax, double factor=1.)
virtual EvtValError compute_integral() const
void setItg(EvtValError itg)
EvtValError getItg(int N) const
virtual double pdf(const T &) const =0
EvtValError findGenEff(const EvtPdf< T > &pc, int N, int nFindMax)
EvtValError compute_mc_integral(const EvtPdf< T > &pc, int N)
double evaluate(const T &p) const
EvtPdfMax< T > findMax(const EvtPdf< T > &pc, int N)
EvtPdf(const EvtPdf &other)
EvtValError getItg() const