LCOV - code coverage report
Current view: top level - PYTHIA8/pythia8210dev/include/Pythia8 - HelicityMatrixElements.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 38 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 117 0.0 %

          Line data    Source code
       1             : // HelicityMatrixElements.h is a part of the PYTHIA event generator.
       2             : // Copyright (C) 2015 Philip Ilten, Torbjorn Sjostrand.
       3             : // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
       4             : // Please respect the MCnet Guidelines, see GUIDELINES for details.
       5             : 
       6             : // Header file for a number of physics classes used in tau decays.
       7             : 
       8             : #ifndef Pythia8_HelicityMatrixElements_H
       9             : #define Pythia8_HelicityMatrixElements_H
      10             : 
      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"
      17             : 
      18             : namespace Pythia8 {
      19             : 
      20             : //==========================================================================
      21             : 
      22             : // The helicity matrix element class.
      23             : 
      24             : class HelicityMatrixElement {
      25             : 
      26             : public:
      27             : 
      28             :   // Constructor and destructor.
      29           0 :   HelicityMatrixElement() {};
      30           0 :   virtual ~HelicityMatrixElement() {};
      31             : 
      32             :   // Initialize the physics matrices and pointers.
      33             :   virtual void initPointers(ParticleData*, Couplings*, Settings* = 0);
      34             : 
      35             :   // Initialize the channel.
      36             :   virtual HelicityMatrixElement* initChannel(vector<HelicityParticle>&);
      37             : 
      38             :   // Calculate the matrix element weight for a decay.
      39             :   virtual double decayWeight(vector<HelicityParticle>&);
      40             : 
      41             :   // Calculate the maximum matrix element decay weight.
      42             :   virtual double decayWeightMax(vector<HelicityParticle>&)
      43           0 :     {return DECAYWEIGHTMAX;}
      44             : 
      45             :   // Calculate the helicity matrix element.
      46           0 :   virtual complex calculateME(vector<int>){return complex(0,0);}
      47             : 
      48             :   // Calculate the decay matrix for a particle.
      49             :   virtual void calculateD(vector<HelicityParticle>&);
      50             : 
      51             :   // Calculate the density matrix for a particle.
      52             :   virtual void calculateRho(unsigned int, vector<HelicityParticle>&);
      53             : 
      54             :   // Set a fermion line.
      55             :   void setFermionLine(int, HelicityParticle&, HelicityParticle&);
      56             : 
      57             :   // Calculate Breit-Wigner's with running widths and fixed.
      58             :   virtual complex  breitWigner(double s, double M, double G);
      59             :   virtual complex sBreitWigner(double m0, double m1, double s,
      60             :     double M, double G);
      61             :   virtual complex pBreitWigner(double m0, double m1, double s,
      62             :     double M, double G);
      63             :   virtual complex dBreitWigner(double m0, double m1, double s,
      64             :     double M, double G);
      65             : 
      66             : protected:
      67             : 
      68             :   // Maximum decay weight. WARNING: hardcoded constant.
      69             :   double DECAYWEIGHTMAX;
      70             : 
      71             :   // Physics matrices.
      72             :   vector< GammaMatrix > gamma;
      73             : 
      74             :   // Particle map vector.
      75             :   vector< int > pMap;
      76             : 
      77             :   // Particle ID vector.
      78             :   vector< int > pID;
      79             : 
      80             :   // Particle mass vector.
      81             :   vector< double > pM;
      82             : 
      83             :   // Wave functions.
      84             :   vector< vector< Wave4 > > u;
      85             : 
      86             :   // Initialize the constants for the matrix element (called by initChannel).
      87           0 :   virtual void initConstants() {};
      88             : 
      89             :   // Initialize the wave functions (called by decayWeight and calculateRho/D).
      90           0 :   virtual void initWaves(vector<HelicityParticle>&) {};
      91             : 
      92             :   // Pointer to particle data.
      93             :   ParticleData* particleDataPtr;
      94             : 
      95             :   // Pointer to Standard Model constants.
      96             :   Couplings*    couplingsPtr;
      97             : 
      98             :   // Pointer to Settings.
      99             :   Settings*     settingsPtr;
     100             : 
     101             : private:
     102             : 
     103             :   // Recursive sub-method to calculate the density matrix for a particle.
     104             :   void calculateRho(unsigned int, vector<HelicityParticle>&,
     105             :     vector<int>&, vector<int>&, unsigned int);
     106             : 
     107             :   // Recursive sub-method to calculate the decay matrix for a particle.
     108             :   void calculateD(vector<HelicityParticle>&, vector<int>&, vector<int>&,
     109             :     unsigned int);
     110             : 
     111             :   // Recursive sub-method to calculate the matrix element weight for a decay.
     112             :   void decayWeight(vector<HelicityParticle>&, vector<int>&, vector<int>&,
     113             :     complex&, unsigned int);
     114             : 
     115             :   // Calculate the product of the decay matrices for a hard process.
     116             :   complex calculateProductD(unsigned int, unsigned int,
     117             :     vector<HelicityParticle>&, vector<int>&, vector<int>&);
     118             : 
     119             :   // Calculate the product of the decay matrices for a decay process.
     120             :   complex calculateProductD(vector<HelicityParticle>&,
     121             :     vector<int>&, vector<int>&);
     122             : 
     123             : };
     124             : 
     125             : //==========================================================================
     126             : 
     127             : // Helicity matrix element for the hard process of two fermions -> W/W' ->
     128             : // two fermions.
     129             : 
     130           0 : class HMETwoFermions2W2TwoFermions : public HelicityMatrixElement {
     131             : 
     132             : public:
     133             : 
     134             :   void initConstants();
     135             : 
     136             :   void initWaves(vector<HelicityParticle>&);
     137             : 
     138             :   complex calculateME(vector<int>);
     139             : 
     140             : private:
     141             : 
     142             :   // Vector and axial couplings.
     143             :   double p0CA, p2CA, p0CV, p2CV;
     144             : 
     145             : };
     146             : 
     147             : //==========================================================================
     148             : 
     149             : // Helicity matrix element for the hard process of two fermions ->
     150             : // photon/Z/Z' -> two fermions.
     151             : 
     152           0 : class HMETwoFermions2GammaZ2TwoFermions : public HelicityMatrixElement {
     153             : 
     154             : public:
     155             : 
     156             :   void initConstants();
     157             : 
     158             :   void initWaves(vector<HelicityParticle>&);
     159             : 
     160             :   complex calculateME(vector<int>);
     161             : 
     162             : private:
     163             : 
     164             :   // Return gamma element for the helicity matrix element.
     165             :   complex calculateGammaME(vector<int>);
     166             : 
     167             :   // Return Z/Z' element for helicity matrix element.
     168             :   complex calculateZME(vector<int>, double, double, double, double,
     169             :     double, double);
     170             : 
     171             :   // Return the Z' vector or axial coupling for a fermion.
     172             :   double zpCoupling(int id, string type);
     173             : 
     174             :   // Vector and axial couplings.
     175             :   double p0CAZ, p2CAZ, p0CVZ, p2CVZ, p0CAZp, p2CAZp, p0CVZp, p2CVZp;
     176             : 
     177             :   // Weinberg angle, Z/Z' width (on-shell), Z/Z' mass (on-shell), and s.
     178             :   double cos2W, sin2W, zG, zM, zpG, zpM, s;
     179             : 
     180             :   // Fermion line charge.
     181             :   double p0Q, p2Q;
     182             : 
     183             :   // Bool whether the incoming fermions are oriented with the z-axis.
     184             :   bool zaxis, includeGamma, includeZ, includeZp;
     185             : 
     186             : };
     187             : 
     188             : //==========================================================================
     189             : 
     190             : // Helicity matrix element for the hard process of X -> two fermions.
     191             : 
     192           0 : class HMEX2TwoFermions : public HelicityMatrixElement {
     193             : 
     194             : public:
     195             : 
     196             :   void initWaves(vector<HelicityParticle>&);
     197             : 
     198             : };
     199             : 
     200             : //==========================================================================
     201             : 
     202             : // Helicity matrix element for the hard process of W/W' -> two fermions.
     203             : 
     204           0 : class HMEW2TwoFermions : public HMEX2TwoFermions {
     205             : 
     206             : public:
     207             : 
     208             :   void initConstants();
     209             : 
     210             :   complex calculateME(vector<int>);
     211             : 
     212             : private:
     213             : 
     214             :   // Vector and axial couplings.
     215             :   double p2CA, p2CV;
     216             : 
     217             : };
     218             : 
     219             : //==========================================================================
     220             : 
     221             : // Helicity matrix element for the hard process of photon -> two fermions.
     222             : 
     223           0 : class HMEGamma2TwoFermions : public HMEX2TwoFermions {
     224             : 
     225             : public:
     226             : 
     227             :   complex calculateME(vector<int>);
     228             : 
     229             : };
     230             : 
     231             : //==========================================================================
     232             : 
     233             : // Helicity matrix element for the hard process of Z/Z' -> two fermions.
     234             : 
     235           0 : class HMEZ2TwoFermions : public HMEX2TwoFermions {
     236             : 
     237             : public:
     238             : 
     239             :   void initConstants();
     240             : 
     241             :   complex calculateME(vector<int>);
     242             : 
     243             : private:
     244             : 
     245             :   // Return the Z' vector or axial coupling for a fermion.
     246             :   double zpCoupling(int id, string type);
     247             : 
     248             :   // Vector and axial couplings.
     249             :   double p2CA, p2CV;
     250             : 
     251             : };
     252             : 
     253             : //==========================================================================
     254             : 
     255             : // Helicity matrix element for the decay of a Higgs ->  two fermions.
     256             : 
     257             : // Because the Higgs is spin zero the Higgs production mechanism is not
     258             : // needed for calculating helicity density matrices. However, the CP mixing
     259             : // is needed.
     260             : 
     261           0 : class HMEHiggs2TwoFermions : public HelicityMatrixElement {
     262             : 
     263             : public:
     264             : 
     265             :   void initConstants();
     266             : 
     267             :   void initWaves(vector<HelicityParticle>&);
     268             : 
     269             :   complex calculateME(vector<int>);
     270             : 
     271             : private:
     272             : 
     273             :   // Coupling constants of the fermions with the Higgs.
     274             :   complex p2CA, p2CV;
     275             : 
     276             : };
     277             : 
     278             : //==========================================================================
     279             : 
     280             : // Base class for all tau decay helicity matrix elements.
     281             : 
     282           0 : class HMETauDecay : public HelicityMatrixElement {
     283             : 
     284             : public:
     285             : 
     286             :   virtual void initWaves(vector<HelicityParticle>&);
     287             : 
     288             :   virtual complex calculateME(vector<int>);
     289             : 
     290             :   virtual double decayWeightMax(vector<HelicityParticle>&);
     291             : 
     292             : protected:
     293             : 
     294           0 :   virtual void initHadronicCurrent(vector<HelicityParticle>&) {};
     295             : 
     296             :   virtual void calculateResonanceWeights(vector<double>&, vector<double>&,
     297             :     vector<complex>&);
     298             : 
     299             : };
     300             : 
     301             : //==========================================================================
     302             : 
     303             : // Helicity matrix element for a tau decaying into a single scalar meson.
     304             : 
     305           0 : class HMETau2Meson : public HMETauDecay {
     306             : 
     307             : public:
     308             : 
     309             :   void initConstants();
     310             : 
     311             :   void initHadronicCurrent(vector<HelicityParticle>&);
     312             : 
     313             : };
     314             : 
     315             : //==========================================================================
     316             : 
     317             : // Helicity matrix element for a tau decaying into two leptons.
     318             : 
     319           0 : class HMETau2TwoLeptons : public HMETauDecay {
     320             : 
     321             : public:
     322             : 
     323             :   void initConstants();
     324             : 
     325             :   void initWaves(vector<HelicityParticle>&);
     326             : 
     327             :   complex calculateME(vector<int>);
     328             : 
     329             : };
     330             : 
     331             : //==========================================================================
     332             : 
     333             : // Helicity matrix element for a tau decaying into two mesons through a
     334             : // vector meson resonance.
     335             : 
     336           0 : class HMETau2TwoMesonsViaVector : public HMETauDecay {
     337             : 
     338             : public:
     339             : 
     340             :   void initConstants();
     341             : 
     342             :   void initHadronicCurrent(vector<HelicityParticle>&);
     343             : 
     344             : private:
     345             : 
     346             :   // Resonance masses, widths, and weights.
     347             :   vector<double>  vecM, vecG, vecP, vecA;
     348             :   vector<complex> vecW;
     349             : 
     350             : };
     351             : 
     352             : //==========================================================================
     353             : 
     354             : // Helicity matrix element for a tau decay into two mesons through a vector
     355             : // or scalar meson resonance.
     356             : 
     357           0 : class HMETau2TwoMesonsViaVectorScalar : public HMETauDecay {
     358             : 
     359             : public:
     360             : 
     361             :   void initConstants();
     362             : 
     363             :   void initHadronicCurrent(vector<HelicityParticle>&);
     364             : 
     365             : private:
     366             : 
     367             :   // Coupling to vector and scalar resonances.
     368             :   double scaC, vecC;
     369             : 
     370             :   // Resonance masses, widths, and weights.
     371             :   vector<double>  scaM, scaG, scaP, scaA, vecM, vecG, vecP, vecA;
     372             :   vector<complex> scaW, vecW;
     373             : 
     374             : };
     375             : 
     376             : //==========================================================================
     377             : 
     378             : // Helicity matrix element for a tau decay into three mesons (base class).
     379             : 
     380           0 : class HMETau2ThreeMesons : public HMETauDecay {
     381             : 
     382             : public:
     383             : 
     384             :   void initConstants();
     385             : 
     386             :   void initHadronicCurrent(vector<HelicityParticle>&);
     387             : 
     388             : protected:
     389             : 
     390             :   // Decay mode of the tau.
     391             :   enum Mode{Pi0Pi0Pim, PimPimPip, Pi0PimK0b, PimPipKm, Pi0PimEta, PimKmKp,
     392             :             Pi0K0Km, KlPimKs, Pi0Pi0Km, KlKlPim, PimKsKs, PimK0bK0, Uknown};
     393             :   Mode mode;
     394             : 
     395             :   // Initialize decay mode and resonance constants (called by initConstants).
     396             :   virtual void initMode();
     397           0 :   virtual void initResonances() {;}
     398             : 
     399             :   // Initialize the momenta.
     400             :   virtual void initMomenta(vector<HelicityParticle>&);
     401             : 
     402             :   // Center of mass energies and momenta.
     403             :   double s1, s2, s3, s4;
     404             :   Wave4  q, q2, q3, q4;
     405             : 
     406             :   // Stored a1 Breit-Wigner (for speed).
     407             :   complex a1BW;
     408             : 
     409             :   // Form factors.
     410           0 :   virtual complex F1() {return complex(0, 0);}
     411           0 :   virtual complex F2() {return complex(0, 0);}
     412           0 :   virtual complex F3() {return complex(0, 0);}
     413           0 :   virtual complex F4() {return complex(0, 0);}
     414             : 
     415             :   // Phase space and Breit-Wigner for the a1.
     416             :   virtual double  a1PhaseSpace(double);
     417             :   virtual complex a1BreitWigner(double);
     418             : 
     419             :   // Sum running p and fixed width Breit-Wigner resonances.
     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);
     423             : 
     424             : };
     425             : 
     426             : //==========================================================================
     427             : 
     428             : // Helicity matrix element for a tau decay into three pions.
     429             : 
     430           0 : class HMETau2ThreePions : public HMETau2ThreeMesons {
     431             : 
     432             : private:
     433             : 
     434             :   void initResonances();
     435             : 
     436             :   // Resonance masses, widths, and weights.
     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;
     442             : 
     443             :   // Form factors.
     444             :   complex F1();
     445             :   complex F2();
     446             :   complex F3();
     447             : 
     448             :   // Running width and Breit-Wigner for the a1.
     449             :   double  a1PhaseSpace(double);
     450             :   complex a1BreitWigner(double);
     451             : 
     452             : };
     453             : 
     454             : //==========================================================================
     455             : 
     456             : // Helicity matrix element for a tau decay into three mesons with kaons.
     457             : 
     458           0 : class HMETau2ThreeMesonsWithKaons : public HMETau2ThreeMesons {
     459             : 
     460             : private:
     461             : 
     462             :   void initResonances();
     463             : 
     464             :   // Resonance masses, widths, and weights.
     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;
     469             :   double kM, piM, piW;
     470             : 
     471             :   // Form factors.
     472             :   complex F1();
     473             :   complex F2();
     474             :   complex F4();
     475             : 
     476             : };
     477             : 
     478             : //==========================================================================
     479             : 
     480             : // Helicity matrix element for a tau decay into generic three mesons.
     481             : 
     482           0 : class HMETau2ThreeMesonsGeneric : public HMETau2ThreeMesons {
     483             : 
     484             : private:
     485             : 
     486             :   void initResonances();
     487             : 
     488             :   // Resonance masses, widths, and weights.
     489             :   vector<double> rhoMa, rhoGa, rhoWa, rhoMv, rhoGv, rhoWv;
     490             :   vector<double> kstarM, kstarG, kstarW, k1M, k1G, k1W;
     491             :   double kM, piM, piW;
     492             : 
     493             :   // Form factors.
     494             :   complex F1();
     495             :   complex F2();
     496             :   complex F4();
     497             : 
     498             : };
     499             : 
     500             : //==========================================================================
     501             : 
     502             : // Helicity matrix element for a tau decay into two pions and a photon.
     503             : 
     504           0 : class HMETau2TwoPionsGamma : public HMETauDecay {
     505             : 
     506             : public:
     507             : 
     508             :   void initConstants();
     509             : 
     510             :   void initWaves(vector<HelicityParticle>&);
     511             : 
     512             :   complex calculateME(vector<int>);
     513             : 
     514             : protected:
     515             : 
     516             :   // Resonance masses, widths, and weights.
     517             :   vector<double>  rhoM, rhoG, rhoW, omegaM, omegaG, omegaW;
     518             :   double piM;
     519             : 
     520             :   // Form factor.
     521             :   complex F(double s, vector<double> M, vector<double> G, vector<double> W);
     522             : 
     523             : };
     524             : 
     525             : //==========================================================================
     526             : 
     527             : // Helicity matrix element for a tau decay into four pions.
     528             : 
     529           0 : class HMETau2FourPions : public HMETauDecay {
     530             : 
     531             : public:
     532             : 
     533             :   void initConstants();
     534             : 
     535             :   void initHadronicCurrent(vector<HelicityParticle>& p);
     536             : 
     537             : private:
     538             : 
     539             :   // G-function form factors (fits).
     540             :   double G(int i, double s);
     541             : 
     542             :   // T-vector functions.
     543             :   Wave4 t1(Wave4&, Wave4&, Wave4&, Wave4&, Wave4&);
     544             :   Wave4 t2(Wave4&, Wave4&, Wave4&, Wave4&, Wave4&);
     545             :   Wave4 t3(Wave4&, Wave4&, Wave4&, Wave4&, Wave4&);
     546             : 
     547             :   // Breit-Wigner denominators for the intermediate mesons.
     548             :   complex  a1D(double s);
     549             :   complex rhoD(double s);
     550             :   complex sigD(double s);
     551             :   complex omeD(double s);
     552             : 
     553             :   // Form factors needed for the a1, rho, and omega.
     554             :   double  a1FormFactor(double s);
     555             :   double rhoFormFactor1(double s);
     556             :   double rhoFormFactor2(double s);
     557             :   double omeFormFactor(double s);
     558             : 
     559             :   // Masses and widths of the intermediate mesons.
     560             :   double a1M, a1G, rhoM, rhoG, sigM, sigG, omeM, omeG;
     561             : 
     562             :   // Masses for the pions (charged and neutral).
     563             :   double picM, pinM;
     564             : 
     565             :   // Amplitude, phases, and weights for mixing.
     566             :   double  sigA, sigP, omeA, omeP;
     567             :   complex sigW, omeW;
     568             : 
     569             :   // Cut-off for a1 form factor.
     570             :   double lambda2;
     571             : 
     572             : };
     573             : 
     574             : //==========================================================================
     575             : 
     576             : // Helicity matrix element for a tau decaying into five pions.
     577             : 
     578           0 : class HMETau2FivePions : public HMETauDecay {
     579             : 
     580             : public:
     581             : 
     582             :   void initConstants();
     583             : 
     584             :   void initHadronicCurrent(vector<HelicityParticle>&);
     585             : 
     586             : private:
     587             : 
     588             :   // Hadronic currents.
     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);
     591             : 
     592             :   // Simplified s-wave Breit-Wigner assuming massless products.
     593             :   complex breitWigner(double s, double M, double G);
     594             : 
     595             :   // Masses and widths of intermediates.
     596             :   double a1M, a1G, rhoM, rhoG, omegaM, omegaG, omegaW, sigmaM, sigmaG, sigmaW;
     597             : 
     598             : };
     599             : 
     600             : //==========================================================================
     601             : 
     602             : // Helicity matrix element for a tau decay into flat phase space.
     603             : 
     604           0 : class HMETau2PhaseSpace : public HMETauDecay {
     605             : 
     606             : public:
     607             : 
     608           0 :   void initWaves(vector<HelicityParticle>&) {};
     609             : 
     610           0 :   complex calculateME(vector<int>) {return 1;}
     611             : 
     612           0 :   void calculateD(vector<HelicityParticle>&) {};
     613             : 
     614           0 :   void calculateRho(unsigned int, vector<HelicityParticle>&) {};
     615             : 
     616           0 :   double decayWeight(vector<HelicityParticle>&) {return 1.0;}
     617             : 
     618           0 :   double decayWeightMax(vector<HelicityParticle>&) {return 1.0;}
     619             : 
     620             : };
     621             : 
     622             : //==========================================================================
     623             : 
     624             : } // end namespace Pythia8
     625             : 
     626             : #endif // end Pythia8_HelicityMatrixElements_H

Generated by: LCOV version 1.11