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

EvtDalitzResPdf Class Reference

#include <EvtDalitzResPdf.hh>

Inheritance diagram for EvtDalitzResPdf:

EvtPdf< EvtDalitzPoint > List of all members.

Public Member Functions

EvtPredGen< EvtPdfGen< EvtDalitzPoint >,
EvtPdfPred< EvtDalitzPoint > > 
accRejGen (const EvtPdf< EvtDalitzPoint > &pc, int nMax, double factor=1.)
EvtPdf< EvtDalitzPoint > * clone () const
virtual EvtValError compute_integral () const
virtual EvtValError compute_integral (int N) const
EvtValError compute_mc_integral (const EvtPdf< EvtDalitzPoint > &pc, int N)
double evaluate (const EvtDalitzPoint &p) const
 EvtDalitzResPdf (const EvtDalitzResPdf &other)
 EvtDalitzResPdf (const EvtDalitzPlot &dp, double m0, double g0, EvtCyclic3::Pair pairRes)
EvtValError findGenEff (const EvtPdf< EvtDalitzPoint > &pc, int N, int nFindMax)
EvtPdfMax< EvtDalitzPointfindMax (const EvtPdf< EvtDalitzPoint > &pc, int N)
EvtValError getItg (int N) const
EvtValError getItg () const
double pdfMaxValue () const
virtual EvtDalitzPoint randomPoint ()
void setItg (EvtValError itg)
virtual ~EvtDalitzResPdf ()

Protected Member Functions

virtual double pdf (const EvtDalitzPoint &) const

Protected Attributes

EvtValError _itg

Private Attributes

EvtDalitzPlot _dp
double _g0
double _m0
EvtCyclic3::Pair _pair

Constructor & Destructor Documentation

EvtDalitzResPdf::EvtDalitzResPdf const EvtDalitzPlot dp,
double  m0,
double  g0,
EvtCyclic3::Pair  pairRes
 

00022   : EvtPdf<EvtDalitzPoint>(), 
00023   _dp(dp), _m0(_m0), _g0(_g0), _pair(pair)
00024 {}

EvtDalitzResPdf::EvtDalitzResPdf const EvtDalitzResPdf other  ) 
 

00028   : EvtPdf<EvtDalitzPoint>(other), 
00029   _dp(other._dp),_m0(other._m0), _g0(other._g0), _pair(other._pair)
00030 {}

EvtDalitzResPdf::~EvtDalitzResPdf  )  [virtual]
 

00034 {}


Member Function Documentation

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

EvtPdf<EvtDalitzPoint>* EvtDalitzResPdf::clone  )  const [inline, virtual]
 

Implements EvtPdf< EvtDalitzPoint >.

00040 { return new EvtDalitzResPdf(*this); }

virtual EvtValError EvtPdf< EvtDalitzPoint >::compute_integral  )  const [inline, virtual, inherited]
 

Reimplemented in EvtPdfSum< EvtDalitzPoint >.

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

EvtValError EvtDalitzResPdf::compute_integral int  N  )  const [virtual]
 

Reimplemented from EvtPdf< EvtDalitzPoint >.

00037 {
00038   assert(N != 0);
00039   
00040   EvtCyclic3::Pair i = _pair;
00041   EvtCyclic3::Pair j = EvtCyclic3::next(i);
00042 
00043   // Trapezoidal integral
00044 
00045   double dh = (_dp.qAbsMax(j) - _dp.qAbsMin(j))/((double) N);
00046   double sum = 0;
00047   
00048   int ii;
00049   for(ii=1;ii<N;ii++) {
00050     
00051     double x = _dp.qAbsMin(j) + ii*dh;
00052     double min = (_dp.qMin(i,j,x) - _m0*_m0)/_m0/_g0;
00053     double max = (_dp.qMax(i,j,x) - _m0*_m0)/_m0/_g0;
00054     double itg = 1/EvtConst::pi*(atan(max) - atan(min));
00055     sum += itg;
00056   }
00057   EvtValError ret(sum*dh,0.); 
00058   
00059   return ret;
00060 }

EvtValError EvtPdf< EvtDalitzPoint >::compute_mc_integral const EvtPdf< EvtDalitzPoint > &  pc,
int  N
[inherited]
 

double EvtPdf< EvtDalitzPoint >::evaluate const EvtDalitzPoint p  )  const [inline, inherited]
 

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

EvtValError EvtPdf< EvtDalitzPoint >::findGenEff const EvtPdf< EvtDalitzPoint > &  pc,
int  N,
int  nFindMax
[inherited]
 

EvtPdfMax<EvtDalitzPoint > EvtPdf< EvtDalitzPoint >::findMax const EvtPdf< EvtDalitzPoint > &  pc,
int  N
[inherited]
 

EvtValError EvtPdf< EvtDalitzPoint >::getItg int  N  )  const [inline, inherited]
 

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

EvtValError EvtPdf< EvtDalitzPoint >::getItg  )  const [inline, inherited]
 

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

double EvtDalitzResPdf::pdf const EvtDalitzPoint  )  const [protected, virtual]
 

Implements EvtPdf< EvtDalitzPoint >.

00094 {
00095   EvtCyclic3::Pair i = _pair;
00096   double dq = x.q(i) - _m0*_m0;
00097   return 1/EvtConst::pi*_g0*_m0/(dq*dq + _g0*_g0*_m0*_m0);
00098 }

double EvtDalitzResPdf::pdfMaxValue  )  const
 

00102 {
00103   return 1/(EvtConst::pi*_g0*_m0);
00104 }

EvtDalitzPoint EvtDalitzResPdf::randomPoint  )  [virtual]
 

Reimplemented from EvtPdf< EvtDalitzPoint >.

00064 {
00065   // Random point generation must be done in a box encompassing the 
00066   // Dalitz plot
00067 
00068 
00069   EvtCyclic3::Pair i = _pair;
00070   EvtCyclic3::Pair j = EvtCyclic3::next(i);  
00071   double min = 1/EvtConst::pi*atan((_dp.qAbsMin(i) - _m0*_m0)/_m0/_g0);
00072   double max = 1/EvtConst::pi*atan((_dp.qAbsMax(i) - _m0*_m0)/_m0/_g0);
00073 
00074   int n = 0;
00075   while(n++ < 1000) {
00076 
00077     double qj = EvtRandom::Flat(_dp.qAbsMin(j),_dp.qAbsMax(j));
00078     double r = EvtRandom::Flat(min,max);
00079     double qi = tan(EvtConst::pi*r)*_g0*_m0 + _m0*_m0;
00080     EvtDalitzCoord x(i,qi,j,qj);
00081     EvtDalitzPoint ret(_dp,x);
00082     if(ret.isValid()) return ret;
00083   }
00084   
00085   // All generated points turned out to be outside of the Dalitz plot
00086   // (in the outer box)
00087   
00088   printf("No point generated for dalitz plot after 1000 tries\n");
00089   assert(0);
00090 }

void EvtPdf< EvtDalitzPoint >::setItg EvtValError  itg  )  [inline, inherited]
 

00081 {_itg = itg; }


Member Data Documentation

EvtDalitzPlot EvtDalitzResPdf::_dp [private]
 

double EvtDalitzResPdf::_g0 [private]
 

EvtValError EvtPdf< EvtDalitzPoint >::_itg [mutable, protected, inherited]
 

Reimplemented in EvtPdfSum< EvtDalitzPoint >.

double EvtDalitzResPdf::_m0 [private]
 

EvtCyclic3::Pair EvtDalitzResPdf::_pair [private]
 


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