EvtAmpAmpPdf< T > Class Template Reference

#include <EvtAmpAmpPdf.hh>

Inheritance diagram for EvtAmpAmpPdf< T >:

EvtPdf< T > List of all members.

Public Member Functions

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

Protected Attributes

EvtValError _itg

Private Attributes

int _type
EvtAmplitude< T > * _amp1
EvtAmplitude< T > * _amp2

Detailed Description

template<class T>
class EvtAmpAmpPdf< T >

Definition at line 24 of file EvtAmpAmpPdf.hh.


Constructor & Destructor Documentation

template<class T>
EvtAmpAmpPdf< T >::EvtAmpAmpPdf (  )  [inline]

Definition at line 27 of file EvtAmpAmpPdf.hh.

Referenced by EvtAmpAmpPdf< T >::clone().

00027 {}

template<class T>
EvtAmpAmpPdf< T >::EvtAmpAmpPdf ( int  type,
const EvtAmplitude< T > &  amp1,
const EvtAmplitude< T > &  amp2 
) [inline]

Definition at line 28 of file EvtAmpAmpPdf.hh.

00029     : EvtPdf<T>(), _type(type), _amp1(amp1.clone()), _amp2(amp2.clone()) 
00030   {}

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

Definition at line 31 of file EvtAmpAmpPdf.hh.

00032     : EvtPdf<T>(other), _type(other._type), COPY_PTR(_amp1), COPY_PTR(_amp2) 
00033   {}

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

Definition at line 34 of file EvtAmpAmpPdf.hh.

References EvtAmpAmpPdf< T >::_amp1, and EvtAmpAmpPdf< T >::_amp2.

00035   { 
00036     delete _amp1; 
00037     delete _amp2; 
00038   }


Member Function Documentation

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

Definition at line 301 of file EvtPdf.hh.

References EvtPdfPred< T >::compute_max(), and iter().

Referenced by EvtPdf< T >::findGenEff().

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

Implements EvtPdf< T >.

Definition at line 40 of file EvtAmpAmpPdf.hh.

References EvtAmpAmpPdf< T >::EvtAmpAmpPdf().

00040 { return new EvtAmpAmpPdf(*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 >.

Definition at line 95 of file EvtPdf.hh.

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 >.

Definition at line 92 of file EvtPdf.hh.

Referenced by EvtPdf< EvtPoint1D >::compute_integral(), and EvtPdf< EvtPoint1D >::getItg().

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]

Definition at line 253 of file EvtPdf.hh.

References EvtPdf< T >::_itg, deljobs::end, ers::error, EvtPdf< T >::evaluate(), EvtPdf< T >::getItg(), iter(), and x.

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]

Definition at line 65 of file EvtPdf.hh.

Referenced by EvtPdf< T >::compute_mc_integral(), EvtIntervalDecayAmp< EvtDalitzPoint >::decay(), EvtBtoKD3P::decay(), EvtRelBreitWignerBarrierFact::getRandMass(), and EvtPdfSum< T >::pdf().

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]

Definition at line 241 of file EvtPdf.hh.

References EvtPdf< T >::accRejGen(), showlog::err, EvtPredGen< Generator, Predicate >::getPassed(), EvtPredGen< Generator, Predicate >::getTried(), and genRecEmupikp::i.

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]

Definition at line 230 of file EvtPdf.hh.

References EvtPdfPred< T >::compute_max(), EvtPdfPred< T >::getMax(), and iter().

Referenced by EvtIntervalDecayAmp< EvtDalitzPoint >::initProbMax().

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]

Definition at line 87 of file EvtPdf.hh.

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

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

Definition at line 83 of file EvtPdf.hh.

Referenced by EvtPdfSum< T >::compute_integral(), EvtPdf< T >::compute_mc_integral(), and EvtPdfSum< T >::randomPoint().

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

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

Implements EvtPdf< T >.

Definition at line 42 of file EvtAmpAmpPdf.hh.

References EvtAmpAmpPdf< T >::_amp1, EvtAmpAmpPdf< T >::_amp2, EvtAmpAmpPdf< T >::_type, conj(), imag(), NEGIM, NEGRE, POSIM, POSRE, and pr.

00043   {
00044     EvtComplex amp1 = _amp1->evaluate(p);
00045     EvtComplex amp2 = _amp2->evaluate(p);
00046     EvtComplex pr = amp1 * conj(amp2);
00047 
00048     if(_type == POSRE) return real(pr) > 0 ? real(pr) : 0.;
00049     if(_type == NEGRE) return real(pr) < 0 ? -real(pr) : 0.;
00050     if(_type == POSIM) return imag(pr) > 0 ? imag(pr) : 0.;
00051     if(_type == NEGIM) return imag(pr) < 0 ? -imag(pr) : 0.;
00052     
00053     assert(0);
00054   }

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

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

Definition at line 291 of file EvtPdf.hh.

References T, and subSeperate::temp.

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]

Definition at line 81 of file EvtPdf.hh.

00081 {_itg = itg; }


Member Data Documentation

template<class T>
EvtAmplitude<T>* EvtAmpAmpPdf< T >::_amp1 [private]

Definition at line 59 of file EvtAmpAmpPdf.hh.

Referenced by EvtAmpAmpPdf< T >::pdf(), and EvtAmpAmpPdf< T >::~EvtAmpAmpPdf().

template<class T>
EvtAmplitude<T>* EvtAmpAmpPdf< T >::_amp2 [private]

Definition at line 60 of file EvtAmpAmpPdf.hh.

Referenced by EvtAmpAmpPdf< T >::pdf(), and EvtAmpAmpPdf< T >::~EvtAmpAmpPdf().

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

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

Definition at line 111 of file EvtPdf.hh.

Referenced by EvtPdf< T >::compute_mc_integral(), EvtPdf< EvtPoint1D >::getItg(), and EvtPdf< EvtPoint1D >::setItg().

template<class T>
int EvtAmpAmpPdf< T >::_type [private]

Definition at line 58 of file EvtAmpAmpPdf.hh.

Referenced by EvtAmpAmpPdf< T >::pdf().


Generated on Tue Nov 29 23:18:51 2016 for BOSS_7.0.2 by  doxygen 1.4.7