44#include "EvtGenBase/EvtParticle.hh"
45#include "EvtGenBase/EvtGenKine.hh"
46#include "EvtGenBase/EvtPDL.hh"
47#include "EvtGenBase/EvtVector4C.hh"
48#include "EvtGenBase/EvtReport.hh"
49#include "EvtGenBase/EvtRandom.hh"
50#include <generators/evtgen/EvtGenModelRegister.h>
51#include "generators/evtgen/models/EvtYmSToYnSpipiCLEOboost.h"
58EvtYmSToYnSpipiCLEOboost::~EvtYmSToYnSpipiCLEOboost() {}
63 return "YMSTOYNSPIPICLEOBOOST";
78 static EvtId PIP = EvtPDL::getId(
"pi+");
79 static EvtId PIM = EvtPDL::getId(
"pi-");
80 static EvtId PI0 = EvtPDL::getId(
"pi0");
86 checkSpinParent(EvtSpinType::VECTOR);
87 checkSpinDaughter(0, EvtSpinType::VECTOR);
91 if ((!(getDaug(1) == PIP && getDaug(2) == PIM)) &&
92 (!(getDaug(1) == PI0 && getDaug(2) == PI0))) {
93 EvtGenReport(EVTGEN_ERROR,
"EvtGen") <<
"EvtYmSToYnSpipiCLEOboost generator expected "
94 <<
" pi+ and pi- (or pi0 and pi0) "
95 <<
"as 2nd and 3rd daughter. " << endl;
96 EvtGenReport(EVTGEN_ERROR,
"EvtGen") <<
"Will terminate execution!" << endl;
122 double ReB_over_A = getArg(0);
123 double ImB_over_A = getArg(1);
125 p->makeDaughters(getNDaug(), getDaugs());
126 EvtParticle* v, *s1, *s2;
131 double m_pi = s1->getP4().mass();
132 double M_mS = p->getP4().mass();
133 double M_nS = v->getP4().mass();
143 bool acceptX =
false;
145 while (
false == acceptX) {
150 double mX = EvtRandom::Flat(2.0 * m_pi, M_mS - M_nS);
163 EvtGenKine::PhaseSpace(2, masses, p4, M_mS);
166 EvtVector4R P_X = p4[1];
171 masses[0] = s1->mass();
172 masses[1] = s2->mass();
174 EvtGenKine::PhaseSpace(2, masses, p4, P_X.mass());
180 EvtVector4R P_YmS_X = boostTo(p->getP4Restframe(), P_X);
181 double costheta = - p4[0].dot(P_YmS_X) / (p4[0].d3mag() * P_YmS_X.d3mag());
182 if (EvtPDL::name(s1->getId()) ==
"pi0") {
184 costheta = - p4[1].dot(P_YmS_X) / (p4[1].d3mag() * P_YmS_X.d3mag());
187 if (EvtPDL::name(s1->getId()) ==
"pi-") {
188 costheta = - p4[1].dot(P_YmS_X) / (p4[1].d3mag() * P_YmS_X.d3mag());
196 P_pi1 = boostTo(p4[0], P_YmS_X);
197 P_pi2 = boostTo(p4[1], P_YmS_X);
215 double Q = (mX * mX - 2.0 * m_pi * m_pi);
219 sqrt(P_nS.get(0) * P_nS.get(0) - M_nS * M_nS) *
220 sqrt(0.25 - pow(m_pi / mX, 2.0));
222 double sumE = (M_mS * M_mS - M_nS * M_nS + mX * mX) / (2.0 * M_mS);
224 double E1E2 = 0.25 * (pow(sumE, 2.0) - pow(deltaEmax * costheta, 2.0));
226 double M2 = Q * Q + (pow(ReB_over_A, 2.0) + pow(ImB_over_A, 2.0)) * E1E2 * E1E2 + 2.0 * ReB_over_A * Q * E1E2;
237 sqrt((M_mS * M_mS - pow(M_nS + mX, 2.0)) * (M_mS * M_mS - pow(M_nS - mX, 2.0))) *
238 sqrt(mX * mX - 4 * m_pi * m_pi);
241 double dG = M2 * dPS;
245 double rnd = EvtRandom::Flat(0.0, getProbMax(0.0));
254 v->init(getDaugs()[0], P_nS);
255 s1->init(getDaugs()[1], P_pi1);
256 s2->init(getDaugs()[2], P_pi2);
264 EvtVector4C ep0, ep1, ep2;
271 vertex(0, 0, (ep0 * v->epsParent(0).conj()));
272 vertex(0, 1, (ep0 * v->epsParent(1).conj()));
273 vertex(0, 2, (ep0 * v->epsParent(2).conj()));
275 vertex(1, 0, (ep1 * v->epsParent(0).conj()));
276 vertex(1, 1, (ep1 * v->epsParent(1).conj()));
277 vertex(1, 2, (ep1 * v->epsParent(2).conj()));
279 vertex(2, 0, (ep2 * v->epsParent(0).conj()));
280 vertex(2, 1, (ep2 * v->epsParent(1).conj()));
281 vertex(2, 2, (ep2 * v->epsParent(2).conj()));
Register Decay model EvtYmSToYnSpipiCLEOboost.
void init()
Initialize standard stream objects
EvtDecayBase * clone()
Clone the decay
void initProbMax()
Initialize standard stream objects for probability function
std::string getName()
Get function Name
void decay(EvtParticle *p)
Member of particle in EvtGen.
#define B2_EVTGEN_REGISTER_MODEL(classname)
Class to register B2_EVTGEN_REGISTER_MODEL.