Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

EvtPdf< T > Class Template Reference

#include <EvtPdf.hh>

Inheritance diagram for EvtPdf< T >:

EvtAmpAmpPdf< T > EvtAmpPdf< T > EvtPdfDiv< T > EvtPdfSum< T > List of all members.

Public Member Functions

EvtPredGen< EvtPdfGen< T >,
EvtPdfPred< T > > 
accRejGen (const EvtPdf< T > &pc, int nMax, double factor=1.)
virtual EvtPdf< T > * clone () const =0
virtual EvtValError compute_integral (int N) const
virtual EvtValError compute_integral () const
EvtValError compute_mc_integral (const EvtPdf< T > &pc, int N)
double evaluate (const T &p) const
 EvtPdf (const EvtPdf &other)
 EvtPdf ()
EvtValError findGenEff (const EvtPdf< T > &pc, int N, int nFindMax)
EvtPdfMax< T > findMax (const EvtPdf< T > &pc, int N)
EvtValError getItg (int N) const
EvtValError getItg () const
virtual T randomPoint ()
void setItg (EvtValError itg)
virtual ~EvtPdf ()

Protected Member Functions

virtual double pdf (const T &) const =0

Protected Attributes

EvtValError _itg

template<class T>
class EvtPdf< T >


Constructor & Destructor Documentation

template<class T>
EvtPdf< T >::EvtPdf  )  [inline]
 

00060 {}

template<class T>
EvtPdf< T >::EvtPdf const EvtPdf< T > &  other  )  [inline]
 

00061 : _itg(other._itg) {}

template<class T>
virtual EvtPdf< T >::~EvtPdf  )  [inline, virtual]
 

00062 {}


Member Function Documentation

template<class T>
EvtPredGen< EvtPdfGen< T >, EvtPdfPred< T > > EvtPdf< T >::accRejGen const EvtPdf< T > &  pc,
int  nMax,
double  factor = 1.
 

00302 {
00303   EvtPdfGen<T> gen(pc);
00304   EvtPdfDiv<T> pdfdiv(*this,pc);
00305   EvtPdfPred<T> pred(pdfdiv);
00306   pred.compute_max(iter(gen,nMax),iter(gen),factor);
00307   return EvtPredGen<EvtPdfGen<T>,EvtPdfPred<T> >(gen,pred);
00308 }

template<class T>
virtual EvtPdf<T>* EvtPdf< T >::clone  )  const [pure virtual]
 

Implemented in EvtAmpAmpPdf< T >, EvtAmpPdf< T >, EvtBreitWignerPdf, EvtDalitzFlatPdf, EvtDalitzResPdf, EvtIntervalFlatPdf, EvtPdfDiv< T >, EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.

template<class T>
virtual EvtValError EvtPdf< T >::compute_integral int  N  )  const [inline, virtual]
 

Reimplemented in EvtDalitzFlatPdf, EvtDalitzResPdf, EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.

00095 { return compute_integral(); }

template<class T>
virtual EvtValError EvtPdf< T >::compute_integral  )  const [inline, virtual]
 

Reimplemented in EvtIntegPdf1D, EvtIntervalFlatPdf, EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.

00094   { printf("Analytic integration of PDF is not defined\n"); assert(0); return compute_integral();}

template<class T>
EvtValError EvtPdf< T >::compute_mc_integral const EvtPdf< T > &  pc,
int  N
 

00254 {
00255   assert(N > 0);
00256 
00257   EvtValError otherItg = pc.getItg();
00258   EvtPdfDiv<T> pdfdiv(*this,pc);
00259   EvtPdfUnary<T> unary(pdfdiv);  
00260   
00261   EvtPdfGen<T> gen(pc);    
00262   EvtStreamInputIterator<T> begin = iter(gen,N);
00263   EvtStreamInputIterator<T> end;
00264 
00265   double sum = 0.;
00266   double sum2 = 0.;
00267   while(!(begin == end)) {
00268     
00269     double value = pdfdiv.evaluate(*begin++);
00270     sum += value;
00271     sum2 += value*value;
00272   }
00273   
00274   EvtValError x;
00275   if(N > 0) {
00276     double av = sum/((double) N);
00277     if(N > 1) {
00278       double dev2 = (sum2 - av*av*N)/((double) (N - 1));
00279       // Due to numerical precision dev2 may sometimes be negative
00280       if(dev2 < 0.) dev2 = 0.;
00281       double error = sqrt(dev2/((double) N));
00282       x = EvtValError(av,error);
00283     }
00284     else x = EvtValError(av);
00285   }
00286   _itg = x * pc.getItg();
00287   return _itg;
00288 }

template<class T>
double EvtPdf< T >::evaluate const T &  p  )  const [inline]
 

00065                                     { 
00066     if(p.isValid()) return pdf(p); 
00067     else return 0.;
00068   }

template<class T>
EvtValError EvtPdf< T >::findGenEff const EvtPdf< T > &  pc,
int  N,
int  nFindMax
 

00242 {
00243   assert(N > 0 || nFindMax > 0);
00244   EvtPredGen<EvtPdfGen<T>,EvtPdfPred<T> > gen = accRejGen(pc,nFindMax);
00245   int i;
00246   for(i=0;i<N;i++) gen();
00247   double eff = double(gen.getPassed())/double(gen.getTried());
00248   double err = sqrt(double(gen.getPassed()))/double(gen.getTried());
00249   return EvtValError(eff,err);
00250 }

template<class T>
EvtPdfMax< T > EvtPdf< T >::findMax const EvtPdf< T > &  pc,
int  N
 

00231 {
00232   EvtPdfPred<T> pred(*this);
00233   EvtPdfGen<T> gen(pc);
00234   pred.compute_max(iter(gen,N),iter(gen));
00235   EvtPdfMax<T> p = pred.getMax();
00236   return p;
00237 }

template<class T>
EvtValError EvtPdf< T >::getItg int  N  )  const [inline]
 

00087                                   {
00088     if(!_itg.valueKnown()) _itg = compute_integral(N);
00089     return _itg;
00090   }

template<class T>
EvtValError EvtPdf< T >::getItg  )  const [inline]
 

00083                              {
00084     if(!_itg.valueKnown()) _itg = compute_integral();
00085     return _itg;
00086   }

template<class T>
virtual double EvtPdf< T >::pdf const T &   )  const [protected, pure virtual]
 

Implemented in EvtAmpAmpPdf< T >, EvtAmpPdf< T >, EvtBreitWignerPdf, EvtDalitzFlatPdf, EvtDalitzResPdf, EvtIntervalFlatPdf, EvtPdfDiv< T >, EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.

template<class T>
T EvtPdf< T >::randomPoint  )  [virtual]
 

Reimplemented in EvtDalitzFlatPdf, EvtDalitzResPdf, EvtIntegPdf1D, EvtIntervalFlatPdf, EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.

00292 {
00293   printf("Function defined for analytic PDFs only\n");
00294   assert(0);
00295   T temp;
00296   return temp;
00297 }

template<class T>
void EvtPdf< T >::setItg EvtValError  itg  )  [inline]
 

00081 {_itg = itg; }


Member Data Documentation

template<class T>
EvtValError EvtPdf< T >::_itg [mutable, protected]
 

Reimplemented in EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.


The documentation for this class was generated from the following file:
Generated on Wed Feb 2 16:08:15 2011 for BOSS6.5.5 by  doxygen 1.3.9.1