9 #include "HelicityMatrixElements.h"
21 void HelicityMatrixElement::initPointers(ParticleData* particleDataPtrIn,
22 Couplings* couplingsPtrIn) {
24 particleDataPtr = particleDataPtrIn;
25 couplingsPtr = couplingsPtrIn;
26 for(
int i = 0; i <= 5; i++)
27 gamma.push_back(GammaMatrix(i));
35 HelicityMatrixElement* HelicityMatrixElement::initChannel(
36 vector<HelicityParticle>& p) {
40 for(
int i = 0; i < static_cast<int>(p.size()); i++) {
41 pID.push_back(p[i].
id());
42 pM.push_back(p[i].m());
53 void HelicityMatrixElement::calculateD(vector<HelicityParticle>& p) {
56 for (
int i = 0; i < p[0].spinType(); i++) {
57 for (
int j = 0; j < p[0].spinType(); j++) {
66 vector<int> h1(p.size(),0);
67 vector<int> h2(p.size(),0);
70 calculateD(p, h1, h2, 0);
73 p[0].normalize(p[0].D);
81 void HelicityMatrixElement::calculateD(vector<HelicityParticle>& p,
82 vector<int>& h1, vector<int>& h2,
unsigned int i) {
85 for (h1[i] = 0; h1[i] < p[i].spinType(); h1[i]++) {
86 for (h2[i] = 0; h2[i] < p[i].spinType(); h2[i]++) {
87 calculateD(p, h1, h2, i+1);
92 p[0].D[h1[0]][h2[0]] += calculateME(h1) * conj(calculateME(h2)) *
93 calculateProductD(p, h1, h2);
102 void HelicityMatrixElement::calculateRho(
unsigned int idx,
103 vector<HelicityParticle>& p) {
106 for (
int i = 0; i < p[idx].spinType(); i++) {
107 for (
int j = 0; j < p[idx].spinType(); j++) {
108 p[idx].rho[i][j] = 0;
116 vector<int> h1(p.size(),0);
117 vector<int> h2(p.size(),0);
120 calculateRho(idx, p, h1, h2, 0);
123 p[idx].normalize(p[idx].rho);
131 void HelicityMatrixElement::calculateRho(
unsigned int idx,
132 vector<HelicityParticle>& p, vector<int>& h1, vector<int>& h2,
136 for (h1[i] = 0; h1[i] < p[i].spinType(); h1[i]++) {
137 for (h2[i] = 0; h2[i] < p[i].spinType(); h2[i]++) {
138 calculateRho(idx, p, h1, h2, i+1);
144 if (p[1].direction < 0)
145 p[idx].rho[h1[idx]][h2[idx]] += p[0].rho[h1[0]][h2[0]] *
146 p[1].rho[h1[1]][h2[1]] * calculateME(h1)*conj(calculateME(h2)) *
147 calculateProductD(idx, 2, p, h1, h2);
150 p[idx].rho[h1[idx]][h2[idx]] += p[0].rho[h1[0]][h2[0]] *
151 calculateME(h1)*conj(calculateME(h2)) *
152 calculateProductD(idx, 1, p, h1, h2);
162 double HelicityMatrixElement::decayWeight(vector<HelicityParticle>& p) {
164 complex weight = complex(0,0);
170 vector<int> h1(p.size(),0);
171 vector<int> h2(p.size(),0);
174 decayWeight(p, h1, h2, weight, 0);
184 void HelicityMatrixElement::decayWeight(vector<HelicityParticle>& p,
185 vector<int>& h1, vector<int>& h2, complex& weight,
unsigned int i) {
188 for (h1[i] = 0; h1[i] < p[i].spinType(); h1[i]++) {
189 for (h2[i] = 0; h2[i] < p[i].spinType(); h2[i]++) {
190 decayWeight(p, h1, h2, weight, i+1);
195 weight += p[0].rho[h1[0]][h2[0]] * calculateME(h1) *
196 conj(calculateME(h2)) * calculateProductD(p, h1, h2);
205 complex HelicityMatrixElement::calculateProductD(
unsigned int idx,
206 unsigned int start, vector<HelicityParticle>& p,
207 vector<int>& h1, vector<int>& h2) {
210 for (
unsigned int i = start; i < p.size(); i++) {
212 answer *= p[i].D[h1[i]][h2[i]];
223 complex HelicityMatrixElement::calculateProductD(
224 vector<HelicityParticle>& p, vector<int>& h1, vector<int>& h2) {
227 for (
unsigned int i = 1; i < p.size(); i++) {
228 answer *= p[i].D[h1[i]][h2[i]];
238 void HelicityMatrixElement::setFermionLine(
int position,
239 HelicityParticle& p0, HelicityParticle& p1) {
241 vector< Wave4 > u0, u1;
244 if (p0.id()*p0.direction < 0) {
245 pMap[position] = position; pMap[position+1] = position+1;
246 for (
int h = 0; h < p0.spinType(); h++) u0.push_back(p0.wave(h));
247 for (
int h = 0; h < p1.spinType(); h++) u1.push_back(p1.waveBar(h));
251 pMap[position] = position+1; pMap[position+1] = position;
252 for (
int h = 0; h < p0.spinType(); h++) u1.push_back(p0.waveBar(h));
253 for (
int h = 0; h < p1.spinType(); h++) u0.push_back(p1.wave(h));
255 u.push_back(u0); u.push_back(u1);
263 complex HelicityMatrixElement::sBreitWigner(
double m0,
double m1,
double s,
264 double M,
double G) {
266 double gs = sqrtpos((s - pow2(m0+m1)) * (s - pow2(m0-m1))) / (2*sqrtpos(s));
267 double gM = sqrtpos((M*M - pow2(m0+m1)) * (M*M - pow2(m0-m1))) / (2*M);
268 return M*M / (M*M - s - complex(0,1)*G*M*M/sqrtpos(s)*(gs/gM));
276 complex HelicityMatrixElement::pBreitWigner(
double m0,
double m1,
double s,
277 double M,
double G) {
279 double gs = sqrtpos((s - pow2(m0+m1)) * (s - pow2(m0-m1))) / (2*sqrtpos(s));
280 double gM = sqrtpos((M*M - pow2(m0+m1)) * (M*M - pow2(m0-m1))) / (2*M);
281 return M*M / (M*M - s - complex(0,1)*G*M*M/sqrtpos(s)*pow3(gs/gM));
289 complex HelicityMatrixElement::dBreitWigner(
double m0,
double m1,
double s,
290 double M,
double G) {
292 double gs = sqrtpos((s - pow2(m0+m1)) * (s - pow2(m0-m1))) / (2*sqrtpos(s));
293 double gM = sqrtpos((M*M - pow2(m0+m1)) * (M*M - pow2(m0-m1))) / (2*M);
294 return M*M / (M*M - s - complex(0,1)*G*M*M/sqrtpos(s)*pow5(gs/gM));
311 void HMETwoFermions2W2TwoFermions::initWaves(vector<HelicityParticle>& p) {
315 setFermionLine(0,p[0],p[1]);
316 setFermionLine(2,p[2],p[3]);
324 complex HMETwoFermions2W2TwoFermions::calculateME(vector<int> h) {
327 for (
int mu = 0; mu <= 3; mu++) {
328 answer += (u[1][h[pMap[1]]] * gamma[mu] * (1 - gamma[5])
329 * u[0][h[pMap[0]]]) * gamma[4](mu,mu) * (u[3][h[pMap[3]]]
330 * gamma[mu] * (1 - gamma[5]) * u[2][h[pMap[2]]]);
350 void HMETwoFermions2Gamma2TwoFermions::initWaves(
351 vector<HelicityParticle>& p) {
355 setFermionLine(0, p[0], p[1]);
356 setFermionLine(2, p[2], p[3]);
358 p0Q = p[0].charge(); p2Q = p[2].charge();
367 complex HMETwoFermions2Gamma2TwoFermions::calculateME(vector<int> h) {
370 for (
int mu = 0; mu <= 3; mu++) {
371 answer += (u[1][h[pMap[1]]] * gamma[mu] * u[0][h[pMap[0]]])
372 * gamma[4](mu,mu) * (u[3][h[pMap[3]]] * gamma[mu] * u[2][h[pMap[2]]]);
374 return p0Q*p2Q * answer / s;
403 void HMETwoFermions2Z2TwoFermions::initConstants() {
406 sin2W = couplingsPtr->sin2thetaW();
407 cos2W = couplingsPtr->cos2thetaW();
409 zG = particleDataPtr->mWidth(23);
410 zM = particleDataPtr->m0(23);
412 p0CA = couplingsPtr->af(abs(pID[0]));
413 p2CA = couplingsPtr->af(abs(pID[2]));
414 p0CV = couplingsPtr->vf(abs(pID[0]));
415 p2CV = couplingsPtr->vf(abs(pID[2]));
423 void HMETwoFermions2Z2TwoFermions::initWaves(vector<HelicityParticle>& p) {
428 setFermionLine(0, p[0], p[1]);
429 setFermionLine(2, p[2], p[3]);
430 u4.push_back(Wave4(p[2].p() + p[3].p()));
435 zaxis = (p[0].pAbs() == fabs(p[0].pz())) &&
436 (p[1].pAbs() == fabs(p[1].pz()));
444 complex HMETwoFermions2Z2TwoFermions::calculateME(vector<int> h) {
448 if (h[0] == h[1] && zaxis)
return answer;
449 for (
int mu = 0; mu <= 3; mu++) {
450 for (
int nu = 0; nu <= 3; nu++) {
452 (u[1][h[pMap[1]]] * gamma[mu] * (p0CV - p0CA * gamma[5]) *
454 (gamma[4](mu,nu) - gamma[4](mu,mu)*u[4][0](mu) *
455 gamma[4](nu,nu) * u[4][0](nu) / (zM*zM)) *
456 (u[3][h[pMap[3]]] * gamma[nu] * (p2CV - p2CA * gamma[5]) *
460 return answer / (16 * pow2(sin2W * cos2W) *
461 (s - zM*zM + complex(0, s*zG/zM)));
478 void HMETwoFermions2GammaZ2TwoFermions::initPointers(
479 ParticleData* particleDataPtrIn, Couplings* couplingsPtrIn) {
481 zHME.initPointers(particleDataPtrIn, couplingsPtrIn);
482 gHME.initPointers(particleDataPtrIn, couplingsPtrIn);
490 HelicityMatrixElement* HMETwoFermions2GammaZ2TwoFermions::initChannel(
491 vector<HelicityParticle>& p) {
503 void HMETwoFermions2GammaZ2TwoFermions::initWaves(
504 vector<HelicityParticle>& p) {
515 complex HMETwoFermions2GammaZ2TwoFermions::calculateME(vector<int> h) {
517 return zHME.calculateME(h) + gHME.calculateME(h);
543 void HMEHiggsEven2TwoFermions::initWaves(vector<HelicityParticle>& p) {
548 setFermionLine(2, p[2], p[3]);
556 complex HMEHiggsEven2TwoFermions::calculateME(vector<int> h) {
558 return (u[1][h[pMap[3]]] * (p2CV - p2CA * gamma[5]) * u[0][h[pMap[2]]]);
578 void HMEHiggsOdd2TwoFermions::initWaves(vector<HelicityParticle>& p) {
583 setFermionLine(2, p[2], p[3]);
591 complex HMEHiggsOdd2TwoFermions::calculateME(vector<int> h) {
593 return (u[1][h[pMap[3]]] * (p2CV - p2CA * gamma[5]) * u[0][h[pMap[2]]]);
612 void HMEHiggsCharged2TwoFermions::initWaves(vector<HelicityParticle>& p) {
617 if (pID[3] == 15 || pID[3] == -16) p2CA = 1;
619 setFermionLine(2, p[2], p[3]);
627 complex HMEHiggsCharged2TwoFermions::calculateME(vector<int> h) {
629 return (u[1][h[pMap[3]]] * (p2CV - p2CA * gamma[5]) * u[0][h[pMap[2]]]);
645 void HMEUnpolarized::calculateRho(
unsigned int idx,
646 vector<HelicityParticle>& p) {
648 for (
int i = 0; i < p[idx].spinType(); i++ ) {
649 for (
int j = 1; j < p[idx].spinType(); j++) {
650 if (i == j) p[idx].rho[i][j] = 1.0 /
651 static_cast<double>(p[idx].spinType());
652 else p[idx].rho[i][j] = 0;
671 void HMETauDecay::initWaves(vector<HelicityParticle>& p) {
674 pMap.resize(p.size());
675 setFermionLine(0, p[0], p[1]);
676 initHadronicCurrent(p);
683 complex HMETauDecay::calculateME(vector<int> h) {
686 for (
int mu = 0; mu <= 3; mu++) {
688 (u[1][h[pMap[1]]] * gamma[mu] * (1 - gamma[5]) * u[0][h[pMap[0]]])
689 * gamma[4](mu,mu) * u[2][0](mu);
699 double HMETauDecay::decayWeightMax(vector<HelicityParticle>& p) {
702 double on = real(p[0].rho[0][0]) > real(p[0].rho[1][1]) ?
703 real(p[0].rho[0][0]) : real(p[0].rho[1][1]);
705 double off = fabs(real(p[0].rho[0][1])) + fabs(imag(p[0].rho[0][1]));
706 return DECAYWEIGHTMAX * (on + off);
714 void HMETauDecay::calculateResonanceWeights(vector<double>& phase,
715 vector<double>& amplitude, vector<complex>& weight) {
717 for (
unsigned int i = 0; i < phase.size(); i++)
718 weight.push_back(amplitude[i] * (cos(phase[i]) +
719 complex(0,1) * sin(phase[i])));
736 void HMETau2Meson::initConstants() {
738 DECAYWEIGHTMAX = 4*pow4(pM[0]);
746 void HMETau2Meson::initHadronicCurrent(vector<HelicityParticle>& p) {
750 u2.push_back(Wave4(p[2].p()));
765 void HMETau2TwoLeptons::initConstants() {
767 DECAYWEIGHTMAX = 16*pow4(pM[0]);
775 void HMETau2TwoLeptons::initWaves(vector<HelicityParticle>& p) {
779 setFermionLine(0,p[0],p[1]);
780 setFermionLine(2,p[2],p[3]);
788 complex HMETau2TwoLeptons::calculateME(vector<int> h) {
791 for (
int mu = 0; mu <= 3; mu++) {
792 answer += (u[1][h[pMap[1]]] * gamma[mu] * (1 - gamma[5])
793 * u[0][h[pMap[0]]]) * gamma[4](mu,mu) * (u[3][h[pMap[3]]]
794 * gamma[mu] * (1 - gamma[5]) * u[2][h[pMap[2]]]);
819 void HMETau2TwoMesonsViaVector::initConstants() {
822 vecM.clear(); vecG.clear(); vecP.clear(); vecA.clear(); vecW.clear();
825 if (abs(pID[2]) == 221) {
827 pM[2] = particleDataPtr->m0(211); pM[3] = particleDataPtr->m0(311);
828 vecM.push_back(0.8921); vecM.push_back(1.700);
829 vecG.push_back(0.0513); vecG.push_back(0.235);
830 vecP.push_back(0); vecP.push_back(M_PI);
831 vecA.push_back(1); vecA.push_back(0.038);
836 if (abs(pID[2]) == 111) DECAYWEIGHTMAX = 800;
837 else if (abs(pID[2]) == 311) DECAYWEIGHTMAX = 6;
838 pM[2] = particleDataPtr->m0(111); pM[3] = particleDataPtr->m0(211);
839 vecM.push_back(0.7746); vecM.push_back(1.4080); vecM.push_back(1.700);
840 vecG.push_back(0.1490); vecG.push_back(0.5020); vecG.push_back(0.235);
841 vecP.push_back(0); vecP.push_back(M_PI); vecP.push_back(0);
842 vecA.push_back(1.0); vecA.push_back(0.167); vecA.push_back(0.050);
844 calculateResonanceWeights(vecP, vecA, vecW);
852 void HMETau2TwoMesonsViaVector::initHadronicCurrent(
853 vector<HelicityParticle>& p) {
856 Wave4 u3(p[3].p() - p[2].p());
857 Wave4 u4(p[2].p() + p[3].p());
858 double s1 = m2(u3, u4);
859 double s2 = m2(u4, u4);
861 for (
unsigned int i = 0; i < vecW.size(); i++)
862 sumBW += vecW[i] * pBreitWigner(pM[2], pM[3], s2, vecM[i], vecG[i]);
863 u2.push_back((u3 - s1 / s2 * u4) * sumBW);
890 void HMETau2TwoMesonsViaVectorScalar::initConstants() {
892 DECAYWEIGHTMAX = 5400;
894 scaM.clear(); scaG.clear(); scaP.clear(); scaA.clear(); scaW.clear();
895 vecM.clear(); vecG.clear(); vecP.clear(); vecA.clear(); vecW.clear();
898 scaM.push_back(0.878);
899 scaG.push_back(0.499);
902 calculateResonanceWeights(scaP, scaA, scaW);
905 vecM.push_back(0.89547); vecM.push_back(1.414);
906 vecG.push_back(0.04619); vecG.push_back(0.232);
907 vecP.push_back(0); vecP.push_back(1.4399);
908 vecA.push_back(1); vecA.push_back(0.075);
909 calculateResonanceWeights(vecP, vecA, vecW);
917 void HMETau2TwoMesonsViaVectorScalar::initHadronicCurrent(
918 vector<HelicityParticle>& p) {
921 Wave4 u3(p[3].p() - p[2].p());
922 Wave4 u4(p[2].p() + p[3].p());
923 double s1 = m2(u3,u4);
924 double s2 = m2(u4,u4);
925 complex scaSumBW = 0; complex scaSumW = 0;
926 complex vecSumBW = 0; complex vecSumW = 0; complex vecSumBWM = 0;
927 for (
unsigned int i = 0; i < scaW.size(); i++) {
928 scaSumBW += scaW[i] * sBreitWigner(pM[2], pM[3], s2, scaM[i], scaG[i]);
931 for (
unsigned int i = 0; i < vecW.size(); i++) {
932 vecSumBW += vecW[i] * pBreitWigner(pM[2], pM[3], s2, vecM[i], vecG[i]);
933 vecSumBWM += vecW[i] * pBreitWigner(pM[2], pM[3], s2, vecM[i], vecG[i]) /
937 u2.push_back(vecC * (vecSumBW * u3 - s1 * vecSumBWM * u4) / vecSumW +
938 scaC * u4 * scaSumBW / scaSumW);
977 void HMETau2ThreePions::initConstants() {
980 if (abs(pID[2] + pID[3] + pID[4]) == 211) DECAYWEIGHTMAX = 6000;
983 else DECAYWEIGHTMAX = 3000;
986 rhoM.clear(); rhoG.clear();
987 rhoPp.clear(); rhoAp.clear(); rhoWp.clear();
988 rhoPd.clear(); rhoAd.clear(); rhoWd.clear();
991 rhoM.push_back(.7743); rhoM.push_back(1.370); rhoM.push_back(1.720);
992 rhoG.push_back(.1491); rhoG.push_back(.386); rhoG.push_back(.250);
993 rhoPp.push_back(0); rhoPp.push_back(3.11018); rhoPp.push_back(0);
994 rhoAp.push_back(1); rhoAp.push_back(0.12); rhoAp.push_back(0);
995 rhoPd.push_back(-0.471239); rhoPd.push_back(1.66504); rhoPd.push_back(0);
996 rhoAd.push_back(3.7e-07); rhoAd.push_back(8.7e-07); rhoAd.push_back(0);
999 f0M = 1.186; f2M = 1.275; sigM = 0.860;
1000 f0G = 0.350; f2G = 0.185; sigG = 0.880;
1001 f0P = -1.69646; f2P = 1.75929; sigP = 0.722566;
1002 f0A = 0.77; f2A = 7.1e-07; sigA = 2.1;
1005 calculateResonanceWeights(rhoPp, rhoAp, rhoWp);
1006 calculateResonanceWeights(rhoPd, rhoAd, rhoWd);
1007 f0W = f0A * (cos(f0P) + complex(0,1) * sin(f0P));
1008 f2W = f2A * (cos(f2P) + complex(0,1) * sin(f2P));
1009 sigW = sigA * (cos(sigP) + complex(0,1) * sin(sigP));
1017 void HMETau2ThreePions::initHadronicCurrent(vector<HelicityParticle>& p) {
1022 s1 = (p[2].p() + p[3].p() + p[4].p()) * (p[2].p() + p[3].p() + p[4].p());
1023 s2 = (p[3].p() + p[4].p()) * (p[3].p() + p[4].p());
1024 s3 = (p[2].p() + p[4].p()) * (p[2].p() + p[4].p());
1025 s4 = (p[2].p() + p[3].p()) * (p[2].p() + p[3].p());
1033 complex a1BW = a1BreitWigner(s1);
1034 Wave4 u3(p[2].p() + p[3].p() + p[4].p());
1035 Wave4 u4 = (a1BW * ((f2 - f1) * Wave4(p[4].p()) +
1036 (f1 - f3) * Wave4(p[3].p()) +
1037 (f3 - f2) * Wave4(p[2].p())));
1038 u2.push_back(u4 - (u4 * gamma[4] * u3 / s1) * u3);
1047 complex HMETau2ThreePions::F1() {
1049 complex answer(0,0);
1052 if (abs(pID[2] + pID[3] + pID[4]) == 211) {
1053 for (
unsigned int i = 0; i < rhoM.size(); i++) {
1054 answer += - rhoWp[i] * pBreitWigner(pM[3], pM[4], s2, rhoM[i], rhoG[i])
1055 - rhoWd[i] / 3.0 * pBreitWigner(pM[2], pM[4], s3, rhoM[i], rhoG[i])
1058 answer += -2.0 / 3.0 * (sigW * sBreitWigner(pM[2], pM[4], s3, sigM, sigG)
1059 + f0W * sBreitWigner(pM[2], pM[4], s3, f0M, f0G));
1060 answer += f2W * (0.5 * (s4 - s3)
1061 * dBreitWigner(pM[3], pM[4], s2, f2M, f2G)
1062 - 1.0 / (18 * s3) * (4 * pow2(pM[2]) - s3)
1063 * (s1 + s3 - pow2(pM[2]))
1064 * dBreitWigner(pM[2], pM[4], s3, f2M, f2G));
1069 for (
unsigned int i = 0; i < rhoM.size(); i++) {
1070 answer += rhoWp[i] * pBreitWigner(pM[3], pM[4], s2, rhoM[i], rhoG[i])
1071 - rhoWd[i] / 3.0 * pBreitWigner(pM[2], pM[4], s3, rhoM[i], rhoG[i])
1072 * (s4 - s2 - pow2(pM[4]) + pow2(pM[2]));
1074 answer += 2.0 / 3.0 * (sigW * sBreitWigner(pM[2], pM[3], s4, sigM, sigG)
1075 + f0W * sBreitWigner(pM[2], pM[3], s4, f0M, f0G));
1076 answer += f2W / (18 * s4) * (s1 - pow2(pM[4]) + s4)
1077 * (4 * pow2(pM[2]) - s4) * dBreitWigner(pM[2], pM[3], s4, f2M, f2G);
1087 complex HMETau2ThreePions::F2() {
1089 complex answer(0,0);
1092 if (abs(pID[2] + pID[3] + pID[4]) == 211) {
1093 for (
unsigned int i = 0; i < rhoM.size(); i++) {
1094 answer += -rhoWp[i] * pBreitWigner(pM[2], pM[4], s3, rhoM[i], rhoG[i])
1095 - rhoWd[i] / 3.0 * pBreitWigner(pM[3], pM[4], s2, rhoM[i], rhoG[i])
1098 answer += -2.0 / 3.0 * (sigW * sBreitWigner(pM[3], pM[4], s2, sigM, sigG)
1099 + f0W * sBreitWigner(pM[3], pM[4], s2, f0M, f0G));
1100 answer += f2W * (0.5 * (s4 - s2)
1101 * dBreitWigner(pM[2], pM[4], s3, f2M, f2G)
1102 - 1.0 / (18 * s2) * (4 * pow2(pM[2]) - s2) * (s1 + s2 - pow2(pM[2]))
1103 * dBreitWigner(pM[3], pM[4], s2, f2M, f2G));
1108 for (
unsigned int i = 0; i < rhoM.size(); i++) {
1109 answer += -rhoWp[i] / 3.0 *
1110 pBreitWigner(pM[2], pM[4], s3, rhoM[i], rhoG[i]) -
1111 rhoWd[i] * pBreitWigner(pM[3], pM[4], s2, rhoM[i], rhoG[i]) *
1112 (s4 - s3 - pow2(pM[4]) + pow2(pM[3]));
1114 answer += 2.0 / 3.0 * (sigW * sBreitWigner(pM[2], pM[3], s4, sigM, sigG)
1115 + f0W * sBreitWigner(pM[2], pM[3], s4, f0M, f0G));
1116 answer += f2W / (18 * s4) * (s1 - pow2(pM[4]) + s4) *
1117 (4 * pow2(pM[2]) - s4) * dBreitWigner(pM[2], pM[3], s4, f2M, f2G);
1127 complex HMETau2ThreePions::F3() {
1129 complex answer(0,0);
1132 if (abs(pID[2] + pID[3] + pID[4]) == 211) {
1133 for (
unsigned int i = 0; i < rhoM.size(); i++) {
1134 answer += -rhoWd[i] * (1.0 / 3.0 * (s3 - s4) *
1135 pBreitWigner(pM[3], pM[4], s2, rhoM[i], rhoG[i])
1136 - 1.0 / 3.0 * (s2 - s4) *
1137 pBreitWigner(pM[2], pM[4], s3, rhoM[i],
1140 answer += -2.0 / 3.0 * (sigW * sBreitWigner(pM[3], pM[4], s2, sigM, sigG)
1141 + f0W * sBreitWigner(pM[3], pM[4], s2, f0M, f0G));
1142 answer += 2.0 / 3.0 * (sigW * sBreitWigner(pM[2], pM[4], s3, sigM, sigG)
1143 + f0W * sBreitWigner(pM[2], pM[4], s3, f0M, f0G));
1144 answer += f2W * (-1.0 / (18 * s2) * (4 * pow2(pM[2]) - s2) *
1145 (s1 + s2 - pow2(pM[2])) *
1146 dBreitWigner(pM[3], pM[4], s2, f2M, f2G) +
1147 1.0 / (18 * s3) * (4 * pow2(pM[2]) - s3) *
1148 (s1 + s3 - pow2(pM[2])) *
1149 dBreitWigner(pM[2], pM[4], s3, f2M, f2G));
1154 for (
unsigned int i = 0; i < rhoM.size(); i++) {
1155 answer += rhoWd[i] * (-1.0 / 3.0 *
1156 (s4 - s3 - pow2(pM[4]) + pow2(pM[3])) *
1157 pBreitWigner(pM[3], pM[4], s2, rhoM[i], rhoG[i]) +
1158 1.0 / 3.0 * (s4 - s2 - pow2(pM[4]) + pow2(pM[2]))
1159 * pBreitWigner(pM[2], pM[4], s3, rhoM[i],
1162 answer += -f2W / 2.0 * (s2 - s3) *
1163 dBreitWigner(pM[2], pM[3], s4, f2M, f2G);
1173 double HMETau2ThreePions::a1Width(
double s) {
1175 double picM = 0.1753;
1176 double pinM = 0.1676;
1182 double piW = pow2(0.2384)/1.0252088;
1183 double kW = pow2(4.7621);
1189 picG = 5.80900 * pow3(s - picM) * (1.0 - 3.00980 * (s - picM) +
1190 4.5792 * pow2(s - picM));
1192 picG = -13.91400 + 27.67900 * s - 13.39300 * pow2(s) + 3.19240 * pow3(s)
1193 - 0.10487 * pow4(s);
1199 pinG = 6.28450 * pow3(s - pinM) * (1.0 - 2.95950 * (s - pinM) +
1200 4.33550 * pow2(s - pinM));
1202 pinG = -15.41100 + 32.08800 * s - 17.66600 * pow2(s) + 4.93550 * pow3(s)
1203 - 0.37498 * pow4(s);
1206 if (s > pow2(ksM + kM))
1207 kG = 0.5 * sqrt((s - pow2(ksM + kM)) * (s - pow2(ksM - kM))) / s;
1208 return piW*(picG + pinG + kW*kG);
1216 complex HMETau2ThreePions::a1BreitWigner(
double s) {
1219 return a1M*a1M/(a1M*a1M - s - complex(0,1)*a1Width(s));
1234 void HMETau2FourPions::initConstants() {
1236 if (abs(pID[3]) == 111) DECAYWEIGHTMAX = 5e8;
1237 else DECAYWEIGHTMAX = 5e9;
1238 pinM = particleDataPtr->m0(111);
1239 picM = particleDataPtr->m0(211);
1240 sigM = 0.8; omeM = 0.782; a1M = 1.23; rhoM = 0.7761;
1241 sigG = 0.8; omeG = 0.00841; a1G = 0.45; rhoG = 0.1445;
1242 sigP = 0.43585; omeP = 0.0;
1243 sigA = 1.39987; omeA = 1.0;
1244 sigW = sigA*(cos(sigP)+complex(0,1)*sin(sigP));
1245 omeW = omeA*(cos(omeP)+complex(0,1)*sin(omeP));
1254 void HMETau2FourPions::initHadronicCurrent(vector<HelicityParticle>& p) {
1260 u2.push_back(Wave4(p[2].p() + p[3].p() + p[4].p()+ p[5].p()));
1261 u2.push_back(Wave4(p[1].p()));
1262 u2.push_back(Wave4(p[2].p()));
1263 u2.push_back(Wave4(p[3].p()));
1264 u2.push_back(Wave4(p[4].p()));
1265 u2.push_back(Wave4(p[5].p()));
1266 u.push_back(u2); u2.clear();
1269 double s = m2(u2[0],u2[0]);
1272 if (abs(pID[3]) == 111)
1273 u2.push_back(G(1,s) * (t1(3,4,5,2) + t1(3,2,5,4) + t1(4,3,5,2) +
1274 t1(4,2,5,3) + t1(2,3,5,4) + t1(2,4,5,3) +
1275 t2(3,5,4,2) + t2(4,5,3,2) + t2(2,5,4,3) -
1276 t2(5,3,4,2) - t2(5,4,3,2) - t2(5,2,4,3)));
1279 else if (abs(pID[3]) == 211)
1280 u2.push_back(G(2,s) * (t1(3,5,4,2) + t1(4,5,3,2) + t1(3,4,5,2) +
1281 t1(4,3,5,2) + t1(2,4,3,5) + t1(2,3,4,5) +
1282 t2(2,4,3,5) + t2(2,3,4,5) -
1283 t2(3,2,4,5) - t2(4,2,3,5)) +
1284 G(3,s) * (t3(3,5,4,2) + t3(4,5,3,2) - t3(3,4,5,2) -
1285 t3(4,3,5,2) - t3(3,2,4,5) - t3(4,2,3,5)));
1288 u.pop_back(); u.push_back(u2);
1296 Wave4 HMETau2FourPions::t1(
int q1,
int q2,
int q3,
int q4) {
1298 Wave4 a1Q(u[2][q2] + u[2][q3] + u[2][q4]);
1299 Wave4 rhoQ(u[2][q3] + u[2][q4]);
1300 double a1S = m2(a1Q, a1Q);
1301 double rhoS = m2(rhoQ, rhoQ);
1304 double gM = sqrtpos(rhoM*rhoM - 4*picM*picM) * (rhoM*rhoM - 4*picM*picM)
1306 double dm = (rhoFormFactor1(0) - rhoFormFactor1(rhoM*rhoM) +
1307 rhoM*rhoM * rhoFormFactor2(rhoM*rhoM)) / gM;
1308 return - a1FormFactor(a1S) / (a1D(a1S) * rhoD(rhoS)) *
1309 pow2(a1M) * (rhoM*rhoM + rhoM*rhoG*dm) *
1310 (m2(u[2][0],a1Q) * (m2(u[2][q3],a1Q) * u[2][q4] -
1311 m2(u[2][q4],a1Q) * u[2][q3]) +
1312 (m2(u[2][0],u[2][q4]) * m2(u[2][q1],u[2][q3]) -
1313 m2(u[2][0],u[2][q3]) * m2(u[2][q1],u[2][q4])) * a1Q);
1321 Wave4 HMETau2FourPions::t2(
int ,
int q2,
int q3,
int q4) {
1323 Wave4 a1Q(u[2][q2] + u[2][q3] + u[2][q4]);
1324 Wave4 sigQ(u[2][q3] + u[2][q4]);
1325 double a1S = m2(a1Q, a1Q);
1326 double sigS = m2(sigQ, sigQ);
1327 return sigW * a1FormFactor(a1S) / (a1D(a1S) * sigD(sigS)) *
1328 pow2(a1M) * pow2(sigM) *
1329 (m2(u[2][0],a1Q) * a1S * u[2][q2] - m2(u[2][0],u[2][q2]) * a1S * a1Q);
1337 Wave4 HMETau2FourPions::t3(
int q1,
int q2,
int q3,
int q4) {
1338 Wave4 omeQ(u[2][q2] + u[2][q3] + u[2][q4]);
1339 Wave4 rhoQ(u[2][q3] + u[2][q4]);
1340 double omeS = m2(omeQ, omeQ);
1341 double rhoS = m2(rhoQ, rhoQ);
1344 double gM = sqrtpos(rhoM*rhoM - 4*picM*picM) * (rhoM*rhoM - 4*picM*picM)
1346 double dm = (rhoFormFactor1(0) - rhoFormFactor1(rhoM*rhoM) +
1347 rhoM*rhoM * rhoFormFactor2(rhoM*rhoM)) / gM;
1348 return omeW * omeFormFactor(omeS) / (omeD(omeS) * rhoD(rhoS)) *
1349 pow2(omeM) * (rhoM*rhoM + rhoM*rhoG*dm) *
1350 ((m2(u[2][0],u[2][q3]) * m2(u[2][q1],u[2][q4]) -
1351 m2(u[2][0],u[2][q4]) * m2(u[2][q1],u[2][q3])) * u[2][q2] +
1352 (m2(u[2][0],u[2][q4]) * m2(u[2][q1],u[2][q2]) -
1353 m2(u[2][0],u[2][q2]) * m2(u[2][q1],u[2][q4])) * u[2][q3] +
1354 (m2(u[2][0],u[2][q2]) * m2(u[2][q1],u[2][q3]) -
1355 m2(u[2][0],u[2][q3]) * m2(u[2][q1],u[2][q2])) * u[2][q4]);
1363 complex HMETau2FourPions::a1D(
double s) {
1369 double piM = 0.16960;
1370 double rM = 0.83425;
1378 rG = 0.003052*pow3(s - piM)*(1.0 + 151.088*(s - piM) +
1379 174.495*pow2(s - piM));
1383 rG = 2.60817 - 2.47790*s + 0.66539*pow2(s) - 0.0678183*pow3(s) +
1384 1.66577*(s-1.23701)/s;
1385 return s - a1M*a1M + complex(0,1) * sqrtpos(s) * rG;
1393 complex HMETau2FourPions::rhoD(
double s) {
1395 double gQ = sqrtpos(s - 4*picM*picM) * (s - 4*picM*picM) / sqrtpos(s);
1396 double gM = sqrtpos(rhoM*rhoM - 4*picM*picM) * (rhoM*rhoM - 4*picM*picM)
1398 double dm = (rhoFormFactor1(s) - rhoFormFactor1(rhoM*rhoM) -
1399 (s - rhoM*rhoM) * rhoFormFactor2(rhoM*rhoM)) / gM;
1402 if (s < 4*picM*picM) gQ = 0;
1403 return s - rhoM*rhoM - rhoM*rhoG*dm + complex(0,1)*rhoM*rhoG*(gQ/gM);
1411 complex HMETau2FourPions::sigD(
double s) {
1414 double piM = abs(pID[3]) == 111 ? pinM : picM;
1415 double gQ = sqrtpos(1.0 - 4*piM*piM/s);
1416 double gM = sqrtpos(1.0 - 4*piM*piM/(sigM*sigM));
1417 return s - sigM*sigM + complex(0,1)*sigM*sigG*gQ/gM;
1425 complex HMETau2FourPions::omeD(
double s) {
1428 double q = sqrtpos(s);
1429 double x = q - omeM;
1433 g = 1 + 17.560*x + 141.110*pow2(x) + 894.884*pow3(x) + 4977.35*pow4(x) +
1434 7610.66*pow5(x) - 42524.4*pow6(x);
1436 g = -1333.26 + 4860*q - 6000.81*pow2(q) + 2504.97*pow3(q);
1438 return s - omeM*omeM + complex(0,1)*omeM*omeG*g;
1446 double HMETau2FourPions::a1FormFactor(
double s) {
1448 return pow2((1.0 + a1M*a1M/lambda2) / (1.0 + s/lambda2));
1456 double HMETau2FourPions::rhoFormFactor1(
double s) {
1458 double f = sqrtpos(1 - 4*picM*picM/s);
1459 if (s > 4*picM*picM)
1460 f = f * log((1 + f) / (1 - f)) * (s - 4*picM*picM) / M_PI;
1461 else if (s < 0.0000001)
1462 f = -8 * picM*picM / M_PI;
1473 double HMETau2FourPions::rhoFormFactor2(
double s) {
1475 double f = sqrtpos(1 - 4*picM*picM/s);
1476 if (s > 4*picM*picM)
1477 f = f / (M_PI * s) * (s*f + (2*picM*picM + s)*log((1 + f) / (1 - f)));
1488 double HMETau2FourPions::omeFormFactor(
double ) {
1498 double HMETau2FourPions::G(
int i,
double s) {
1501 double s0(0), s1(0), s2(0), s3(0), s4(0), s5(0);
1504 double a1(0), b1(0);
1505 double a2(0), b2(0), c2(0), d2(0), e2(0);
1506 double a3(0), b3(0), c3(0), d3(0), e3(0);
1507 double a4(0), b4(0);
1508 double a5(0), b5(0);
1512 s0 = 0.614403; s1 = 0.656264; s2 = 1.57896;
1513 s3 = 3.08198; s4 = 3.12825; s5 = 3.17488;
1514 a1 = -23383.7; b1 = 38059.2;
1515 a2 = 230.368; b2 = -4.39368; c2 = 687.002;
1516 d2 = -732.581; e2 = 207.087;
1517 a3 = 1633.92; b3 = -2596.21; c3 = 1703.08;
1518 d3 = -501.407; e3 = 54.5919;
1519 a4 = -2982.44; b4 = 986.009;
1520 a5 = 6948.99; b5 = -2188.74;
1525 s0 = 0.614403; s1 = 0.635161; s2 = 2.30794;
1526 s3 = 3.08198; s4 = 3.12825; s5 = 3.17488;
1527 a1 = -54171.5; b1 = 88169.3;
1528 a2 = 454.638; b2 = -3.07152; c2 = -48.7086;
1529 d2 = 81.9702; e2 = -24.0564;
1530 a3 = -162.421; b3 = 308.977; c3 = -27.7887;
1531 d3 = -48.5957; e3 = 10.6168;
1532 a4 = -2650.29; b4 = 879.776;
1533 a5 = 6936.99; b5 = -2184.97;
1538 s0 = 0.81364; s1 = 0.861709; s2 = 1.92621;
1539 s3 = 3.08198; s4 = 3.12825; s5 = 3.17488;
1540 a1 = -84888.9; b1 = 104332;
1541 a2 = 2698.15; b2 = -3.08302; c2 = 1936.11;
1542 d2 = -1254.59; e2 = 201.291;
1543 a3 = 7171.65; b3 = -6387.9; c3 = 3056.27;
1544 d3 = -888.63; e3 = 108.632;
1545 a4 = -5607.48; b4 = 1917.27;
1546 a5 = 26573; b5 = -8369.76;
1555 return a2*pow(s,b2) + c2*pow2(s) + d2*pow3(s) + e2*pow4(s);
1557 return a3 + b3*s + c3*pow2(s) + d3*pow3(s) + e3*pow4(s);