12#include <EvtGenBase/EvtCPUtil.hh>
13#include <EvtGenBase/EvtTensor4C.hh>
14#include <EvtGenBase/EvtPatches.hh>
16#include <EvtGenBase/EvtParticle.hh>
17#include <EvtGenBase/EvtGenKine.hh>
18#include <EvtGenBase/EvtPDL.hh>
19#include <EvtGenBase/EvtVector4R.hh>
20#include <EvtGenBase/EvtReport.hh>
22#include <generators/evtgen/EvtGenModelRegister.h>
23#include <generators/evtgen/models/besiii/EvtDToKSKpi0.h>
37 EvtDToKSKpi0::~EvtDToKSKpi0() {}
39 std::string EvtDToKSKpi0::getName()
44 EvtDecayBase* EvtDToKSKpi0::clone()
46 return new EvtDToKSKpi0;
49 void EvtDToKSKpi0::init()
53 checkSpinParent(EvtSpinType::SCALAR);
59 _mDp2inv = 1. / _mDp2;
65 c_meson_radius_inter = 1.5;
66 c_meson_radius_Dp = 5;
68 void EvtDToKSKpi0::initProbMax()
73 void EvtDToKSKpi0::decay(EvtParticle* p)
75 p->initializePhaseSpace(getNDaug(), getDaugs());
76 for (
int i = 0; i < _nd; i++) {
77 _p4Lab[i] = p->getDaug(i)->getP4Lab();
78 _p4CM[i] = p->getDaug(i)->getP4();
80 double prob = AmplitudeSquare();
85 double EvtDToKSKpi0::twoBodyCMmom(
double rMassSq,
double d1m,
double d2m)
87 double kin1 = 1 - pow(d1m + d2m, 2) / rMassSq;
88 kin1 = kin1 >= 0 ?
sqrt(kin1) : 1;
89 double kin2 = 1 - pow(d1m - d2m, 2) / rMassSq;
90 kin2 = kin2 >= 0 ?
sqrt(kin2) : 1;
92 double ret = 0.5 *
sqrt(rMassSq) * kin1 * kin2;
96 double EvtDToKSKpi0::dampingFactorSquare(
const double& cmmom,
const int& spin,
const double& mRadius)
98 double square = mRadius * mRadius * cmmom * cmmom;
99 double dfsq = 1 + square;
100 double dfsqres = dfsq + 8 + 2 * square + square * square;
102 double ret = (spin == 2) ? dfsqres : dfsq;
106 double EvtDToKSKpi0::spinFactor(
int spin,
double motherMass,
double daug1Mass,
double daug2Mass,
double daug3Mass,
107 double m12,
double m13,
double m23)
109 if (spin == 0)
return 1;
111 double _mA = daug1Mass;
112 double _mB = daug2Mass;
113 double _mC = daug3Mass;
118 double massFactor = 1.0 / _mAB;
120 sFactor *= ((_mBC - _mAC) + (massFactor * (motherMass * motherMass - _mC * _mC) * (_mA * _mA - _mB * _mB)));
124 double extraterm = ((_mAB - (2 * motherMass * motherMass) - (2 * _mC * _mC))
125 + massFactor * pow(motherMass * motherMass - _mC * _mC, 2));
126 extraterm *= ((_mAB - (2 * _mA * _mA) - (2 * _mB * _mB)) + massFactor * pow(_mA * _mA - _mB * _mB, 2));
128 sFactor -= extraterm;
134 EvtComplex EvtDToKSKpi0::RBW(
int id,
double resmass,
double reswidth,
int spin)
136 double resmass2 = pow(resmass, 2);
138 EvtVector4R p1, p2, p3;
139 double mass_daug1 = 0, mass_daug2 = 0, mass_daug3 = 0;
142 mass_daug1 = pi0Mass;
152 mass_daug2 = pi0Mass;
162 mass_daug3 = pi0Mass;
165 double rMassSq = (p1 + p2).mass2();
166 double m12 = (p1 + p2).mass2();
167 double m13 = (p1 + p3).mass2();
168 double m23 = (p2 + p3).mass2();
170 double rMass =
sqrt(rMassSq);
174 double measureDaughterMoms = twoBodyCMmom(rMassSq, mass_daug1, mass_daug2);
175 double nominalDaughterMoms = twoBodyCMmom(resmass2, mass_daug1, mass_daug2);
178 frFactor = dampingFactorSquare(nominalDaughterMoms, spin, c_meson_radius_inter) / dampingFactorSquare(measureDaughterMoms, spin,
179 c_meson_radius_inter);
181 double measureDaughterMoms2 = twoBodyCMmom(c_motherMass * c_motherMass, rMass, mass_daug3);
182 double nominalDaughterMoms2 = twoBodyCMmom(c_motherMass * c_motherMass, resmass, mass_daug3);
183 fdFactor = dampingFactorSquare(nominalDaughterMoms2, spin, c_meson_radius_Dp) / dampingFactorSquare(measureDaughterMoms2, spin,
186 double A = (resmass2 - rMassSq);
187 double B = resmass2 * reswidth * pow(measureDaughterMoms / nominalDaughterMoms, 2.0 * spin + 1) * frFactor /
sqrt(rMassSq);
188 double C = 1.0 / (pow(A, 2) + pow(B, 2));
190 EvtComplex ret(A * C, B * C);
191 ret *=
sqrt(frFactor * fdFactor);
192 ret *= spinFactor(spin, c_motherMass, mass_daug1, mass_daug2, mass_daug3, m12, m13, m23);
196 EvtComplex EvtDToKSKpi0::Flatte(
int id,
double resmass,
double g1,
double rg2og1)
199 EvtVector4R p1, p2, p3;
200 double mass_daug1 __attribute__((unused)), mass_daug2 __attribute__((unused)), mass_daug3 __attribute__((unused));
203 mass_daug1 = pi0Mass;
213 mass_daug2 = pi0Mass;
223 mass_daug3 = pi0Mass;
226 double rMassSq __attribute__((unused)) = (p1 + p2).mass2();
227 double m12 = (p1 + p2).mass2();
231 double rhoetapi = 2 * twoBodyCMmom(s, KsMass, KpMass) /
sqrt(s);
232 double rhoKKbar = 2 * twoBodyCMmom(s, etamass, pipMass) /
sqrt(s);
233 double img = rhoetapi * g1 + rhoKKbar * g1 * rg2og1;
235 EvtComplex ret = EvtComplex(1, 0) / EvtComplex(resmass * resmass - s, -img);
240 EvtComplex EvtDToKSKpi0::LASS(
int id,
double resmass,
double reswidth)
243 double resmass2 = pow(resmass, 2);
245 EvtVector4R p1, p2, p3;
246 double mass_daug1 = 0, mass_daug2 = 0, mass_daug3 = 0;
249 mass_daug1 = pi0Mass;
259 mass_daug2 = pi0Mass;
269 mass_daug3 = pi0Mass;
272 double rMassSq = (p1 + p2).mass2();
273 double m12 = (p1 + p2).mass2();
274 double m13 = (p1 + p3).mass2();
275 double m23 = (p2 + p3).mass2();
277 double rMass =
sqrt(rMassSq);
281 double measureDaughterMoms = twoBodyCMmom(rMassSq, mass_daug1, mass_daug2);
282 double nominalDaughterMoms = twoBodyCMmom(resmass2, mass_daug1, mass_daug2);
284 frFactor = dampingFactorSquare(nominalDaughterMoms, spin, c_meson_radius_inter) / dampingFactorSquare(measureDaughterMoms, spin,
285 c_meson_radius_inter);
286 double measureDaughterMoms2 = twoBodyCMmom(c_motherMass * c_motherMass, rMass, mass_daug3);
287 double nominalDaughterMoms2 = twoBodyCMmom(c_motherMass * c_motherMass, resmass, mass_daug3);
288 fdFactor = dampingFactorSquare(nominalDaughterMoms2, spin, c_meson_radius_Dp) / dampingFactorSquare(measureDaughterMoms2, spin,
292 double q = measureDaughterMoms;
293 double g = reswidth * pow(measureDaughterMoms / nominalDaughterMoms, 2.0 * spin + 1) * frFactor /
sqrt(rMassSq);
296 const double _a = 0.113;
297 const double _r = -33.8;
299 const double _phiR = -109.7 * 3.141592653 / 180.0;
300 const double _B = 0.96;
301 const double _phiB = 0.1 * 3.141592653 / 180.0;
303 double cot_deltaB = (1.0 / (_a * q)) + 0.5 * _r * q;
304 double qcot_deltaB = (1.0 / _a) + 0.5 * _r * q * q;
306 EvtComplex expi2deltaB = EvtComplex(qcot_deltaB, q) / EvtComplex(qcot_deltaB, -q);
307 EvtComplex resT = EvtComplex(cos(_phiR + 2 * _phiB), sin(_phiR + 2 * _phiB)) * _R;
309 EvtComplex prop = EvtComplex(1, 0) / EvtComplex(resmass2 - rMassSq, -(resmass) * g);
310 resT *= prop * (resmass2 * reswidth / nominalDaughterMoms) * expi2deltaB;
312 resT += EvtComplex(cos(_phiB), sin(_phiB)) * _B * (cos(_phiB) + cot_deltaB * sin(_phiB)) *
sqrt(rMassSq) / EvtComplex(qcot_deltaB,
315 resT *=
sqrt(frFactor * fdFactor);
316 resT *= spinFactor(spin, c_motherMass, mass_daug1, mass_daug2, mass_daug3, m12, m13, m23);
321 double EvtDToKSKpi0::AmplitudeSquare()
323 EvtVector4R dp1 = GetDaugMomLab(0);
324 EvtVector4R dp2 = GetDaugMomLab(1);
325 EvtVector4R dp3 = GetDaugMomLab(2);
330 const double K892pMass = 0.89176;
331 const double K892pWidth = 0.0503;
333 const double K892zeroMass = 0.89555;
334 const double K892zeroWidth = 0.0473;
336 const double SwaveKppi0Mass = 1.441;
337 const double SwaveKppi0Width = 0.193;
339 const double SwaveKspi0Mass = 1.441;
340 const double SwaveKspi0Width = 0.193;
342 EvtComplex temp(0.0, 0.0);
344 EvtComplex amp_K892p(1, 0);
345 EvtComplex amp_K892zero(-0.3903972065719, 0.1298035433874);
346 EvtComplex amp_SwaveKppi0(-1.543197997647, 1.30109134697);
347 EvtComplex amp_SwaveKspi0(-3.123793580183, -0.3449005761848);
349 temp += amp_K892p * (RBW(1, K892pMass, K892pWidth, 1));
350 temp += amp_K892zero * (RBW(2, K892zeroMass, K892zeroWidth, 1));
351 temp += amp_SwaveKppi0 * (LASS(1, SwaveKppi0Mass, SwaveKppi0Width));
352 temp += amp_SwaveKspi0 * (LASS(2, SwaveKspi0Mass, SwaveKspi0Width));
354 double ret = pow(abs(temp), 2);
355 return (ret <= 0) ? 1e-20 : ret;
#define B2_EVTGEN_REGISTER_MODEL(classname)
Class to register B2_EVTGEN_REGISTER_MODEL.
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.