8 #ifndef Pythia8_HelicityMatrixElements_H
9 #define Pythia8_HelicityMatrixElements_H
11 #include "Pythia8/Basics.h"
12 #include "Pythia8/Event.h"
13 #include "Pythia8/HelicityBasics.h"
14 #include "Pythia8/PythiaComplex.h"
15 #include "Pythia8/PythiaStdlib.h"
16 #include "Pythia8/StandardModel.h"
24 class HelicityMatrixElement {
29 HelicityMatrixElement() {};
30 virtual ~HelicityMatrixElement() {};
33 virtual void initPointers(ParticleData*, Couplings*, Settings* = 0);
36 virtual HelicityMatrixElement* initChannel(vector<HelicityParticle>&);
39 virtual double decayWeight(vector<HelicityParticle>&);
42 virtual double decayWeightMax(vector<HelicityParticle>&)
43 {
return DECAYWEIGHTMAX;}
46 virtual complex calculateME(vector<int>){
return complex(0,0);}
49 virtual void calculateD(vector<HelicityParticle>&);
52 virtual void calculateRho(
unsigned int, vector<HelicityParticle>&);
55 void setFermionLine(
int, HelicityParticle&, HelicityParticle&);
58 virtual complex breitWigner(
double s,
double M,
double G);
59 virtual complex sBreitWigner(
double m0,
double m1,
double s,
61 virtual complex pBreitWigner(
double m0,
double m1,
double s,
63 virtual complex dBreitWigner(
double m0,
double m1,
double s,
69 double DECAYWEIGHTMAX;
72 vector< GammaMatrix > gamma;
84 vector< vector< Wave4 > > u;
87 virtual void initConstants() {};
90 virtual void initWaves(vector<HelicityParticle>&) {};
93 ParticleData* particleDataPtr;
96 Couplings* couplingsPtr;
99 Settings* settingsPtr;
104 void calculateRho(
unsigned int, vector<HelicityParticle>&,
105 vector<int>&, vector<int>&,
unsigned int);
108 void calculateD(vector<HelicityParticle>&, vector<int>&, vector<int>&,
112 void decayWeight(vector<HelicityParticle>&, vector<int>&, vector<int>&,
113 complex&,
unsigned int);
116 complex calculateProductD(
unsigned int,
unsigned int,
117 vector<HelicityParticle>&, vector<int>&, vector<int>&);
120 complex calculateProductD(vector<HelicityParticle>&,
121 vector<int>&, vector<int>&);
130 class HMETwoFermions2W2TwoFermions :
public HelicityMatrixElement {
134 void initConstants();
136 void initWaves(vector<HelicityParticle>&);
138 complex calculateME(vector<int>);
143 double p0CA, p2CA, p0CV, p2CV;
152 class HMETwoFermions2GammaZ2TwoFermions :
public HelicityMatrixElement {
156 void initConstants();
158 void initWaves(vector<HelicityParticle>&);
160 complex calculateME(vector<int>);
165 complex calculateGammaME(vector<int>);
168 complex calculateZME(vector<int>,
double,
double,
double,
double,
172 double zpCoupling(
int id,
string type);
175 double p0CAZ, p2CAZ, p0CVZ, p2CVZ, p0CAZp, p2CAZp, p0CVZp, p2CVZp;
178 double cos2W, sin2W, zG, zM, zpG, zpM, s;
184 bool zaxis, includeGamma, includeZ, includeZp;
196 void initWaves(vector<HelicityParticle>&);
208 void initConstants();
210 complex calculateME(vector<int>);
227 complex calculateME(vector<int>);
239 void initConstants();
241 complex calculateME(vector<int>);
246 double zpCoupling(
int id,
string type);
265 void initConstants();
267 void initWaves(vector<HelicityParticle>&);
269 complex calculateME(vector<int>);
286 virtual void initWaves(vector<HelicityParticle>&);
288 virtual complex calculateME(vector<int>);
290 virtual double decayWeightMax(vector<HelicityParticle>&);
294 virtual void initHadronicCurrent(vector<HelicityParticle>&) {};
296 virtual void calculateResonanceWeights(vector<double>&, vector<double>&,
305 class HMETau2Meson :
public HMETauDecay {
309 void initConstants();
311 void initHadronicCurrent(vector<HelicityParticle>&);
319 class HMETau2TwoLeptons :
public HMETauDecay {
323 void initConstants();
325 void initWaves(vector<HelicityParticle>&);
327 complex calculateME(vector<int>);
336 class HMETau2TwoMesonsViaVector :
public HMETauDecay {
340 void initConstants();
342 void initHadronicCurrent(vector<HelicityParticle>&);
347 vector<double> vecM, vecG, vecP, vecA;
348 vector<complex> vecW;
357 class HMETau2TwoMesonsViaVectorScalar :
public HMETauDecay {
361 void initConstants();
363 void initHadronicCurrent(vector<HelicityParticle>&);
371 vector<double> scaM, scaG, scaP, scaA, vecM, vecG, vecP, vecA;
372 vector<complex> scaW, vecW;
380 class HMETau2ThreeMesons :
public HMETauDecay {
384 void initConstants();
386 void initHadronicCurrent(vector<HelicityParticle>&);
391 enum Mode{Pi0Pi0Pim, PimPimPip, Pi0PimK0b, PimPipKm, Pi0PimEta, PimKmKp,
392 Pi0K0Km, KlPimKs, Pi0Pi0Km, KlKlPim, PimKsKs, PimK0bK0, Uknown};
396 virtual void initMode();
397 virtual void initResonances() {;}
400 virtual void initMomenta(vector<HelicityParticle>&);
403 double s1, s2, s3, s4;
410 virtual complex F1() {
return complex(0, 0);}
411 virtual complex F2() {
return complex(0, 0);}
412 virtual complex F3() {
return complex(0, 0);}
413 virtual complex F4() {
return complex(0, 0);}
416 virtual double a1PhaseSpace(
double);
417 virtual complex a1BreitWigner(
double);
420 complex T(
double m0,
double m1,
double s,
421 vector<double>& M, vector<double>& G, vector<double>& W);
422 complex T(
double s, vector<double>& M, vector<double>& G, vector<double>& W);
430 class HMETau2ThreePions :
public HMETau2ThreeMesons {
434 void initResonances();
437 vector<double> rhoM, rhoG, rhoPp, rhoAp, rhoPd, rhoAd;
438 double f0M, f0G, f0P, f0A, f2M, f2G, f2P, f2A;
439 double sigM, sigG, sigP, sigA;
440 vector<complex> rhoWp, rhoWd;
441 complex f0W, f2W, sigW;
449 double a1PhaseSpace(
double);
450 complex a1BreitWigner(
double);
458 class HMETau2ThreeMesonsWithKaons :
public HMETau2ThreeMesons {
462 void initResonances();
465 vector<double> rhoMa, rhoGa, rhoWa, rhoMv, rhoGv, rhoWv;
466 vector<double> kstarMa, kstarGa, kstarWa, kstarMv, kstarGv, kstarWv;
467 vector<double> k1Ma, k1Ga, k1Wa, k1Mb, k1Gb, k1Wb;
468 vector<double> omegaM, omegaG, omegaW;
482 class HMETau2ThreeMesonsGeneric :
public HMETau2ThreeMesons {
486 void initResonances();
489 vector<double> rhoMa, rhoGa, rhoWa, rhoMv, rhoGv, rhoWv;
490 vector<double> kstarM, kstarG, kstarW, k1M, k1G, k1W;
504 class HMETau2TwoPionsGamma :
public HMETauDecay {
508 void initConstants();
510 void initWaves(vector<HelicityParticle>&);
512 complex calculateME(vector<int>);
517 vector<double> rhoM, rhoG, rhoW, omegaM, omegaG, omegaW;
521 complex F(
double s, vector<double> M, vector<double> G, vector<double> W);
529 class HMETau2FourPions :
public HMETauDecay {
533 void initConstants();
535 void initHadronicCurrent(vector<HelicityParticle>& p);
540 double G(
int i,
double s);
543 Wave4 t1(Wave4&, Wave4&, Wave4&, Wave4&, Wave4&);
544 Wave4 t2(Wave4&, Wave4&, Wave4&, Wave4&, Wave4&);
545 Wave4 t3(Wave4&, Wave4&, Wave4&, Wave4&, Wave4&);
548 complex a1D(
double s);
549 complex rhoD(
double s);
550 complex sigD(
double s);
551 complex omeD(
double s);
554 double a1FormFactor(
double s);
555 double rhoFormFactor1(
double s);
556 double rhoFormFactor2(
double s);
557 double omeFormFactor(
double s);
560 double a1M, a1G, rhoM, rhoG, sigM, sigG, omeM, omeG;
566 double sigA, sigP, omeA, omeP;
578 class HMETau2FivePions :
public HMETauDecay {
582 void initConstants();
584 void initHadronicCurrent(vector<HelicityParticle>&);
589 Wave4 Ja(Wave4 &q, Wave4 &q1, Wave4 &q2, Wave4 &q3, Wave4 &q4, Wave4 &q5);
590 Wave4 Jb(Wave4 &q, Wave4 &q1, Wave4 &q2, Wave4 &q3, Wave4 &q4, Wave4 &q5);
593 complex breitWigner(
double s,
double M,
double G);
596 double a1M, a1G, rhoM, rhoG, omegaM, omegaG, omegaW, sigmaM, sigmaG, sigmaW;
604 class HMETau2PhaseSpace :
public HMETauDecay {
608 void initWaves(vector<HelicityParticle>&) {};
610 complex calculateME(vector<int>) {
return 1;}
612 void calculateD(vector<HelicityParticle>&) {};
614 void calculateRho(
unsigned int, vector<HelicityParticle>&) {};
616 double decayWeight(vector<HelicityParticle>&) {
return 1.0;}
618 double decayWeightMax(vector<HelicityParticle>&) {
return 1.0;}
626 #endif // end Pythia8_HelicityMatrixElements_H