#include <EvtDalitzResPdf.hh>
Inheritance diagram for EvtDalitzResPdf:
Definition at line 31 of file EvtDalitzResPdf.hh.
EvtDalitzResPdf::EvtDalitzResPdf | ( | const EvtDalitzPlot & | dp, | |
double | m0, | |||
double | g0, | |||
EvtCyclic3::Pair | pairRes | |||
) |
EvtDalitzResPdf::EvtDalitzResPdf | ( | const EvtDalitzResPdf & | other | ) |
EvtDalitzResPdf::~EvtDalitzResPdf | ( | ) | [virtual] |
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] |
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] |
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] |
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().