00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "EvtGenBase/EvtPatches.hh"
00017
00018 #include "EvtGenBase/EvtPatches.hh"
00019 #include "EvtGenBase/EvtPDL.hh"
00020 #include "EvtGenModels/EvtPto3P.hh"
00021 #include "EvtGenBase/EvtPto3PAmpFactory.hh"
00022 using namespace EvtCyclic3;
00023
00024 EvtDalitzPlot EvtPto3P::dp()
00025 {
00026
00027
00028
00029 EvtId parent = getParentId();
00030 assert(getNDaug() == 3);
00031 EvtId dau0 = getDaug(0);
00032 EvtId dau1 = getDaug(1);
00033 EvtId dau2 = getDaug(2);
00034
00035 assert(EvtPDL::getSpinType(parent) == EvtSpinType::SCALAR);
00036 assert(EvtPDL::getSpinType(dau0) == EvtSpinType::SCALAR);
00037 assert(EvtPDL::getSpinType(dau1) == EvtSpinType::SCALAR);
00038 assert(EvtPDL::getSpinType(dau2) == EvtSpinType::SCALAR);
00039 assert(EvtPDL::chg3(parent) == EvtPDL::chg3(dau0) + EvtPDL::chg3(dau1) + EvtPDL::chg3(dau2));
00040 assert(getNArg() > 0);
00041
00042 return EvtDalitzPlot(EvtPDL::getMass(dau0),EvtPDL::getMass(dau1),EvtPDL::getMass(dau2),EvtPDL::getMass(parent));
00043 }
00044
00045 EvtAmpFactory<EvtDalitzPoint>* EvtPto3P::createFactory(const EvtMultiChannelParser& parser)
00046 {
00047
00048
00049 EvtDalitzPlot plot = dp();
00050 EvtAmpFactory<EvtDalitzPoint>* fact = new EvtPto3PAmpFactory(plot);
00051 fact->build(parser,10000);
00052 return fact;
00053 }
00054
00055
00056 std::vector<EvtVector4R> EvtPto3P::initDaughters(const EvtDalitzPoint& x) const
00057 {
00058 std::vector<EvtVector4R> v;
00059 assert(x.isValid());
00060
00061
00062
00063 double eA = x.e(A,AB);
00064 double eB = x.e(B,AB);
00065 double eC = x.e(C,AB);
00066 double pA = x.p(A,AB);
00067 double pC = x.p(C,AB);
00068 double cos = x.cosTh(CA,AB);
00069 double sin = sqrt(1.0-cos*cos);
00070
00071 EvtVector4R vA(eA,0,0,pA);
00072 EvtVector4R vB(eB,0,0,-pA);
00073 EvtVector4R vC(eC,0,pC*sin,pC*cos);
00074
00075
00076
00077
00078
00079 EvtVector4R vboost = vA + vB + vC;
00080 vboost.set(1,-vboost.get(1));
00081 vboost.set(2,-vboost.get(2));
00082 vboost.set(3,-vboost.get(3));
00083 vA.applyBoostTo(vboost);
00084 vB.applyBoostTo(vboost);
00085 vC.applyBoostTo(vboost);
00086
00087
00088
00089 double alpha = EvtRandom::Flat( EvtConst::twoPi );
00090 double beta = acos(EvtRandom::Flat( -1.0, 1.0 ));
00091 double gamma = EvtRandom::Flat( EvtConst::twoPi );
00092
00093 vA.applyRotateEuler( alpha, beta, gamma );
00094 vB.applyRotateEuler( alpha, beta, gamma );
00095 vC.applyRotateEuler( alpha, beta, gamma );
00096
00097
00098
00099 assert(v.size() == 0);
00100 v.push_back(vA);
00101 v.push_back(vB);
00102 v.push_back(vC);
00103
00104 return v;
00105 }
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116