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*);
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;
101 void calculateRho(
unsigned int, vector<HelicityParticle>&,
102 vector<int>&, vector<int>&,
unsigned int);
105 void calculateD(vector<HelicityParticle>&, vector<int>&, vector<int>&,
109 void decayWeight(vector<HelicityParticle>&, vector<int>&, vector<int>&,
110 complex&,
unsigned int);
113 complex calculateProductD(
unsigned int,
unsigned int,
114 vector<HelicityParticle>&, vector<int>&, vector<int>&);
117 complex calculateProductD(vector<HelicityParticle>&,
118 vector<int>&, vector<int>&);
127 class HMETwoFermions2W2TwoFermions :
public HelicityMatrixElement {
131 void initWaves(vector<HelicityParticle>&);
133 complex calculateME(vector<int>);
142 class HMETwoFermions2Gamma2TwoFermions :
public HelicityMatrixElement {
146 void initWaves(vector<HelicityParticle>&);
148 complex calculateME(vector<int>);
162 class HMETwoFermions2Z2TwoFermions :
public HelicityMatrixElement {
166 void initConstants();
168 void initWaves(vector<HelicityParticle>&);
170 complex calculateME(vector<int>);
175 double p0CA, p2CA, p0CV, p2CV;
178 double cos2W, sin2W, zG, zM, s;
193 class HMETwoFermions2GammaZ2TwoFermions :
public HelicityMatrixElement {
197 HelicityMatrixElement* initChannel(vector<HelicityParticle>&);
199 void initPointers(ParticleData*, Couplings*);
201 void initWaves(vector<HelicityParticle>&);
203 complex calculateME(vector<int>);
207 HMETwoFermions2Z2TwoFermions zHME;
208 HMETwoFermions2Gamma2TwoFermions gHME;
220 void initConstants();
222 void initWaves(vector<HelicityParticle>&);
224 complex calculateME(vector<int>);
244 void initWaves(vector<HelicityParticle>&);
246 complex calculateME(vector<int>);
259 class HMEHiggsOdd2TwoFermions :
public HelicityMatrixElement {
263 void initWaves(vector<HelicityParticle>&);
265 complex calculateME(vector<int>);
278 class HMEHiggsCharged2TwoFermions :
public HelicityMatrixElement {
282 void initWaves(vector<HelicityParticle>&);
284 complex calculateME(vector<int>);
298 class HMEUnpolarized :
public HelicityMatrixElement {
302 void calculateRho(
unsigned int, vector<HelicityParticle>&);
310 class HMETauDecay :
public HelicityMatrixElement {
314 virtual void initWaves(vector<HelicityParticle>&);
316 virtual complex calculateME(vector<int>);
318 virtual double decayWeightMax(vector<HelicityParticle>&);
322 virtual void initHadronicCurrent(vector<HelicityParticle>&) {};
324 virtual void calculateResonanceWeights(vector<double>&, vector<double>&,
333 class HMETau2Meson :
public HMETauDecay {
337 void initConstants();
339 void initHadronicCurrent(vector<HelicityParticle>&);
347 class HMETau2TwoLeptons :
public HMETauDecay {
351 void initConstants();
353 void initWaves(vector<HelicityParticle>&);
355 complex calculateME(vector<int>);
364 class HMETau2TwoMesonsViaVector :
public HMETauDecay {
368 void initConstants();
370 void initHadronicCurrent(vector<HelicityParticle>&);
375 vector<double> vecM, vecG, vecP, vecA;
376 vector<complex> vecW;
385 class HMETau2TwoMesonsViaVectorScalar :
public HMETauDecay {
389 void initConstants();
391 void initHadronicCurrent(vector<HelicityParticle>&);
399 vector<double> scaM, scaG, scaP, scaA, vecM, vecG, vecP, vecA;
400 vector<complex> scaW, vecW;
412 void initConstants();
414 void initHadronicCurrent(vector<HelicityParticle>&);
419 enum Mode{Pi0Pi0Pim, PimPimPip, Pi0PimK0b, PimPipKm, Pi0PimEta, PimKmKp,
420 Pi0K0Km, KlPimKs, Pi0Pi0Km, KlKlPim, PimKsKs, PimK0bK0, Uknown};
424 virtual void initMode();
425 virtual void initResonances() {;}
428 virtual void initMomenta(vector<HelicityParticle>&);
431 double s1, s2, s3, s4;
438 virtual complex F1() {
return complex(0, 0);}
439 virtual complex F2() {
return complex(0, 0);}
440 virtual complex F3() {
return complex(0, 0);}
441 virtual complex F4() {
return complex(0, 0);}
444 virtual double a1PhaseSpace(
double);
445 virtual complex a1BreitWigner(
double);
448 complex T(
double m0,
double m1,
double s,
449 vector<double>& M, vector<double>& G, vector<double>& W);
450 complex T(
double s, vector<double>& M, vector<double>& G, vector<double>& W);
462 void initResonances();
465 vector<double> rhoM, rhoG, rhoPp, rhoAp, rhoPd, rhoAd;
466 double f0M, f0G, f0P, f0A, f2M, f2G, f2P, f2A;
467 double sigM, sigG, sigP, sigA;
468 vector<complex> rhoWp, rhoWd;
469 complex f0W, f2W, sigW;
477 double a1PhaseSpace(
double);
478 complex a1BreitWigner(
double);
490 void initResonances();
493 vector<double> rhoMa, rhoGa, rhoWa, rhoMv, rhoGv, rhoWv;
494 vector<double> kstarMa, kstarGa, kstarWa, kstarMv, kstarGv, kstarWv;
495 vector<double> k1Ma, k1Ga, k1Wa, k1Mb, k1Gb, k1Wb;
496 vector<double> omegaM, omegaG, omegaW;
514 void initResonances();
517 vector<double> rhoMa, rhoGa, rhoWa, rhoMv, rhoGv, rhoWv;
518 vector<double> kstarM, kstarG, kstarW, k1M, k1G, k1W;
536 void initConstants();
538 void initWaves(vector<HelicityParticle>&);
540 complex calculateME(vector<int>);
545 vector<double> rhoM, rhoG, rhoW, omegaM, omegaG, omegaW;
549 complex F(
double s, vector<double> M, vector<double> G, vector<double> W);
561 void initConstants();
563 void initHadronicCurrent(vector<HelicityParticle>& p);
568 double G(
int i,
double s);
576 complex a1D(
double s);
577 complex rhoD(
double s);
578 complex sigD(
double s);
579 complex omeD(
double s);
582 double a1FormFactor(
double s);
583 double rhoFormFactor1(
double s);
584 double rhoFormFactor2(
double s);
585 double omeFormFactor(
double s);
588 double a1M, a1G, rhoM, rhoG, sigM, sigG, omeM, omeG;
594 double sigA, sigP, omeA, omeP;
610 void initConstants();
612 void initHadronicCurrent(vector<HelicityParticle>&);
621 complex breitWigner(
double s,
double M,
double G);
624 double a1M, a1G, rhoM, rhoG, omegaM, omegaG, omegaW, sigmaM, sigmaG, sigmaW;
636 void initWaves(vector<HelicityParticle>&) {};
638 complex calculateME(vector<int>) {
return 1;}
640 void calculateD(vector<HelicityParticle>&) {};
642 void calculateRho(
unsigned int, vector<HelicityParticle>&) {};
644 double decayWeight(vector<HelicityParticle>&) {
return 1.0;}
646 double decayWeightMax(vector<HelicityParticle>&) {
return 1.0;}
654 #endif // end Pythia8_HelicityMatrixElements_H