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

EvtAmpPdf< T > Class Template Reference

#include <EvtAmpPdf.hh>

Inheritance diagram for EvtAmpPdf< T >:

EvtPdf< T > List of all members.

Public Member Functions

EvtPredGen< EvtPdfGen< T >,
EvtPdfPred< T > > 
accRejGen (const EvtPdf< T > &pc, int nMax, double factor=1.)
virtual EvtAmpPdf< T > * clone () const
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
 EvtAmpPdf (const EvtAmpPdf< T > &other)
 EvtAmpPdf (const EvtAmplitude< T > &amp)
 EvtAmpPdf ()
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 double pdf (const T &p) const
virtual T randomPoint ()
void setItg (EvtValError itg)
virtual ~EvtAmpPdf ()

Protected Attributes

EvtValError _itg

Private Attributes

EvtAmplitude< T > * _amp

template<class T>
class EvtAmpPdf< T >


Constructor & Destructor Documentation

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

00022 {}

template<class T>
EvtAmpPdf< T >::EvtAmpPdf const EvtAmplitude< T > &  amp  )  [inline]
 

00023 : EvtPdf<T>(), _amp(amp.clone()) {}

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

00024 : EvtPdf<T>(other), COPY_PTR(_amp) {}

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

00025 { delete _amp; }


Member Function Documentation

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

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 EvtAmpPdf<T>* EvtAmpPdf< T >::clone  )  const [inline, virtual]
 

Implements EvtPdf< T >.

00027 { return new EvtAmpPdf(*this); }

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

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, inherited]
 

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
[inherited]
 

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, inherited]
 

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
[inherited]
 

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
[inherited]
 

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, inherited]
 

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

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

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

template<class T>
virtual double EvtAmpPdf< T >::pdf const T &  p  )  const [inline, virtual]
 

Implements EvtPdf< T >.

00030   {
00031     EvtComplex amp = _amp->evaluate(p);
00032     return real(amp)*real(amp) + imag(amp)*imag(amp);
00033   }

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

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, inherited]
 

00081 {_itg = itg; }


Member Data Documentation

template<class T>
EvtAmplitude<T>* EvtAmpPdf< T >::_amp [private]
 

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

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


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