9 #include "Pythia8/ParticleData.h"
10 #include "Pythia8/ResonanceWidthsDM.h"
11 #include "Pythia8/PythiaComplex.h"
24 void ResonanceS::initConstants() {
27 double vq = settingsPtr->parm(
"Sdm:vf");
28 double vX = settingsPtr->parm(
"Sdm:vX");
29 double aq = settingsPtr->parm(
"Sdm:af");
30 double aX = settingsPtr->parm(
"Sdm:aX");
32 gq = abs(aq) > 0 ? aq : vq;
33 gX = abs(aX) > 0 ? aX : vX;
35 if (abs(aX) > 0) pScalar =
true;
44 void ResonanceS::calcPreFac(
bool) {
47 preFac = 1.0 / (12.0 * M_PI * mRes);
48 alpS = couplingsPtr->alphaS(mHat * mHat);
56 void ResonanceS::calcWidth(
bool) {
61 double mRat2 = pow2(mf1 / mRes);
62 double kinfac = (1 - 4 * mRat2) * (1. + 2 * mRat2);
67 widNow = pow2(gq) * preFac * pow2(alpS / M_PI) * eta2gg();
70 widNow = 3. * pow2(gq * mf1) * preFac * kinfac;
73 widNow = pow2(gX * mf1) * preFac * kinfac;
79 double ResonanceS::eta2gg() {
82 complex eta = complex(0., 0.);
83 double mLoop, epsilon, root, rootLog;
87 for (
int idNow = 3; idNow < 7; ++idNow) {
88 mLoop = particleDataPtr->m0(idNow);
89 epsilon = pow2(2. * mLoop / mHat);
93 root = sqrt(1. - epsilon);
94 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
95 : log( (1. + root) / (1. - root) );
96 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
97 0.5 * M_PI * rootLog );
99 else phi = complex( pow2( asin(1. / sqrt(epsilon)) ), 0.);
102 if (!pScalar) etaNow = -0.5 * epsilon
103 * (complex(1., 0.) + (1. - epsilon) * phi);
104 else etaNow = -0.5 * epsilon * phi;
110 return (pow2(eta.real()) + pow2(eta.imag()));
123 void ResonanceZp::initConstants() {
126 gZp = settingsPtr->parm(
"Zp:gZp");
127 vu = settingsPtr->parm(
"Zp:vu");
128 vd = settingsPtr->parm(
"Zp:vd");
129 vl = settingsPtr->parm(
"Zp:vl");
130 vv = settingsPtr->parm(
"Zp:vv");
131 vX = settingsPtr->parm(
"Zp:vX");
132 au = settingsPtr->parm(
"Zp:au");
133 ad = settingsPtr->parm(
"Zp:ad");
134 al = settingsPtr->parm(
"Zp:al");
135 av = settingsPtr->parm(
"Zp:av");
136 aX = settingsPtr->parm(
"Zp:aX");
144 void ResonanceZp::calcPreFac(
bool) {
147 preFac = pow2(gZp) * mRes / 12.0 / M_PI;
155 void ResonanceZp::calcWidth(
bool) {
158 if (ps == 0. || id1 * id2 > 0)
return;
160 double kinFacA = pow3(ps);
161 double kinFacV = ps * (1. + 2. * mr1);
167 if (id1Abs %2 ) fac = vu * vu * kinFacV + au * au * kinFacA;
168 else fac = vd * vd * kinFacV + ad * ad * kinFacA;
170 else if (id1Abs > 7 && id1Abs < 17){
171 if (id1Abs %2 ) fac = vl * vl * kinFacV + al * al * kinFacA;
172 else fac = vv * vv * kinFacV + av * av * kinFacA;
175 if (id1Abs == 52) fac = vX * vX * kinFacV + aX * aX * kinFacA;
176 widNow = fac * preFac;
177 if (id1Abs < 7) widNow *= 3;