EvtDalitzResPdf Class Reference

#include <EvtDalitzResPdf.hh>

Inheritance diagram for EvtDalitzResPdf:

EvtPdf< EvtDalitzPoint > List of all members.

Public Member Functions

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

Protected Member Functions

virtual double pdf (const EvtDalitzPoint &) const

Protected Attributes

EvtValError _itg

Private Attributes

EvtDalitzPlot _dp
double _m0
double _g0
EvtCyclic3::Pair _pair

Detailed Description

Definition at line 31 of file EvtDalitzResPdf.hh.


Constructor & Destructor Documentation

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

Definition at line 20 of file EvtDalitzResPdf.cc.

Referenced by clone().

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

EvtDalitzResPdf::EvtDalitzResPdf ( const EvtDalitzResPdf other  ) 

Definition at line 27 of file EvtDalitzResPdf.cc.

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

EvtDalitzResPdf::~EvtDalitzResPdf (  )  [virtual]

Definition at line 33 of file EvtDalitzResPdf.cc.

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

Definition at line 40 of file EvtDalitzResPdf.hh.

References EvtDalitzResPdf().

00040 { return new EvtDalitzResPdf(*this); }

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

Reimplemented in EvtPdfSum< EvtDalitzPoint >.

Definition at line 92 of file EvtPdf.hh.

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

Definition at line 36 of file EvtDalitzResPdf.cc.

References _dp, _g0, _m0, _pair, genRecEmupikp::i, ganga-rec::j, max, min, EvtCyclic3::next(), EvtConst::pi, EvtDalitzPlot::qAbsMax(), EvtDalitzPlot::qAbsMin(), EvtDalitzPlot::qMax(), EvtDalitzPlot::qMin(), and x.

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]

Definition at line 65 of file EvtPdf.hh.

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]

Definition at line 87 of file EvtPdf.hh.

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

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

Definition at line 83 of file EvtPdf.hh.

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

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

Implements EvtPdf< EvtDalitzPoint >.

Definition at line 93 of file EvtDalitzResPdf.cc.

References _g0, _m0, _pair, genRecEmupikp::i, EvtConst::pi, and x.

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

Definition at line 101 of file EvtDalitzResPdf.cc.

References _g0, _m0, and EvtConst::pi.

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

EvtDalitzPoint EvtDalitzResPdf::randomPoint (  )  [virtual]

Reimplemented from EvtPdf< EvtDalitzPoint >.

Definition at line 63 of file EvtDalitzResPdf.cc.

References _dp, _g0, _m0, _pair, EvtRandom::Flat(), genRecEmupikp::i, EvtDalitzPoint::isValid(), ganga-rec::j, max, min, EvtCyclic3::next(), EvtConst::pi, EvtDalitzPlot::qAbsMax(), EvtDalitzPlot::qAbsMin(), tan(), and x.

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]

Definition at line 81 of file EvtPdf.hh.

00081 {_itg = itg; }


Member Data Documentation

EvtDalitzPlot EvtDalitzResPdf::_dp [private]

Definition at line 52 of file EvtDalitzResPdf.hh.

Referenced by compute_integral(), and randomPoint().

double EvtDalitzResPdf::_g0 [private]

Definition at line 54 of file EvtDalitzResPdf.hh.

Referenced by compute_integral(), pdf(), pdfMaxValue(), and randomPoint().

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

Reimplemented in EvtPdfSum< EvtDalitzPoint >.

Definition at line 111 of file EvtPdf.hh.

double EvtDalitzResPdf::_m0 [private]

Definition at line 53 of file EvtDalitzResPdf.hh.

Referenced by compute_integral(), pdf(), pdfMaxValue(), and randomPoint().

EvtCyclic3::Pair EvtDalitzResPdf::_pair [private]

Definition at line 55 of file EvtDalitzResPdf.hh.

Referenced by compute_integral(), pdf(), and randomPoint().


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