00001 #include "EvtGenBase/EvtPatches.hh"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "EvtGenBase/EvtPatches.hh"
00012 #include "EvtGenBase/EvtDalitzFlatPdf.hh"
00013
00014 EvtDalitzFlatPdf::EvtDalitzFlatPdf(const EvtDalitzPlot& dp)
00015 : EvtPdf<EvtDalitzPoint>(), _dp(dp)
00016 {}
00017
00018 EvtDalitzFlatPdf::EvtDalitzFlatPdf(const EvtDalitzFlatPdf& other)
00019 : EvtPdf<EvtDalitzPoint>(other), _dp(other._dp)
00020 {}
00021
00022 EvtDalitzFlatPdf::~EvtDalitzFlatPdf()
00023 {}
00024
00025 EvtPdf<EvtDalitzPoint>* EvtDalitzFlatPdf::clone() const
00026 {
00027 return new EvtDalitzFlatPdf(*this);
00028 }
00029
00030 double EvtDalitzFlatPdf::pdf(const EvtDalitzPoint&) const
00031 {
00032 return 1.;
00033 }
00034
00035 EvtValError EvtDalitzFlatPdf::compute_integral(int N) const
00036 {
00037 return EvtValError(_dp.getArea(N),0.);
00038 }
00039
00040 EvtDalitzPoint EvtDalitzFlatPdf::randomPoint()
00041 {
00042
00043
00044
00045
00046
00047
00048
00049 EvtCyclic3::Pair pair1 = EvtCyclic3::BC;
00050 EvtCyclic3::Pair pair2 = EvtCyclic3::CA;
00051
00052 int n = 0;
00053 int maxTries = 1000;
00054 while(n++ < maxTries) {
00055
00056 double q1 = EvtRandom::Flat(_dp.qAbsMin(pair1),_dp.qAbsMax(pair2));
00057 double q2 = EvtRandom::Flat(_dp.qAbsMin(pair2),_dp.qAbsMax(pair2));
00058
00059 EvtDalitzCoord point(pair1,q1,pair2,q2);
00060 EvtDalitzPoint x(_dp,point);
00061
00062 if(x.isValid()) return x;
00063 }
00064
00065 printf("No point generated for dalitz plot after %d tries\n",maxTries);
00066 assert(0);
00067 }