1 | // StandardModel.h is a part of the PYTHIA event generator. |
---|
2 | // Copyright (C) 2012 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 | // This file gives access to some Standard Model parameters. |
---|
7 | // AlphaStrong: fix or first- or second-order running alpha_strong. |
---|
8 | |
---|
9 | #ifndef Pythia8_StandardModel_H |
---|
10 | #define Pythia8_StandardModel_H |
---|
11 | |
---|
12 | #include "ParticleData.h" |
---|
13 | #include "PythiaStdlib.h" |
---|
14 | |
---|
15 | namespace Pythia8 { |
---|
16 | |
---|
17 | //========================================================================== |
---|
18 | |
---|
19 | // The AlphaStrong class calculates the alpha_strong value at an arbitrary |
---|
20 | // scale, given the value at m_Z, to zeroth, first or second order. |
---|
21 | |
---|
22 | class AlphaStrong { |
---|
23 | |
---|
24 | public: |
---|
25 | |
---|
26 | // Constructors. |
---|
27 | AlphaStrong() : isInit(false), lastCallToFull(false), order(0), |
---|
28 | valueRef(0.), valueNow(0.), scale2Now(0.), Lambda3Save(0.), |
---|
29 | Lambda4Save(0.), Lambda5Save(0.), scale2Min(0.), Lambda3Save2(0.), |
---|
30 | Lambda4Save2(0.), Lambda5Save2(0.), mc2(0.), mb2(0.) {} |
---|
31 | AlphaStrong(double valueIn, int orderIn = 1) { |
---|
32 | init( valueIn, orderIn) ;} |
---|
33 | |
---|
34 | // Initialization for given value at M_Z and given order. |
---|
35 | void init(double valueIn = 0.12, int orderIn = 1); |
---|
36 | |
---|
37 | // alpha_S value and Lambda values. |
---|
38 | double alphaS(double scale2); |
---|
39 | double alphaS1Ord(double scale2); |
---|
40 | double alphaS2OrdCorr(double scale2); |
---|
41 | double Lambda3() const { return Lambda3Save; } |
---|
42 | double Lambda4() const { return Lambda4Save; } |
---|
43 | double Lambda5() const { return Lambda5Save; } |
---|
44 | |
---|
45 | protected: |
---|
46 | |
---|
47 | // Initialization data member; protected to allow inheritance. |
---|
48 | bool isInit; |
---|
49 | |
---|
50 | private: |
---|
51 | |
---|
52 | // Constants: could only be changed in the code itself. |
---|
53 | static const int NITER; |
---|
54 | static const double MC, MB, MZ, SAFETYMARGIN1, SAFETYMARGIN2; |
---|
55 | |
---|
56 | // Data members. |
---|
57 | bool lastCallToFull; |
---|
58 | int order; |
---|
59 | double valueRef, valueNow, scale2Now, Lambda3Save, Lambda4Save, |
---|
60 | Lambda5Save, scale2Min, Lambda3Save2, Lambda4Save2, |
---|
61 | Lambda5Save2, mc2, mb2; |
---|
62 | |
---|
63 | }; |
---|
64 | |
---|
65 | //========================================================================== |
---|
66 | |
---|
67 | // The AlphaEM class calculates the alpha_electromagnetic value at an |
---|
68 | // arbitrary scale, given the value at 0 and m_Z, to zeroth or first order. |
---|
69 | |
---|
70 | class AlphaEM { |
---|
71 | |
---|
72 | public: |
---|
73 | |
---|
74 | // Constructors. |
---|
75 | AlphaEM() {} |
---|
76 | |
---|
77 | // Initialization for a given order. |
---|
78 | void init(int orderIn, Settings* settingsPtr); |
---|
79 | |
---|
80 | // alpha_EM value. |
---|
81 | double alphaEM(double scale2); |
---|
82 | |
---|
83 | private: |
---|
84 | |
---|
85 | // Constants: could only be changed in the code itself. |
---|
86 | static const double MZ, Q2STEP[5], BRUNDEF[5]; |
---|
87 | |
---|
88 | // Data members. |
---|
89 | int order; |
---|
90 | double alpEM0, alpEMmZ, mZ2, bRun[5], alpEMstep[5]; |
---|
91 | |
---|
92 | }; |
---|
93 | |
---|
94 | //========================================================================== |
---|
95 | |
---|
96 | // The CoupSM class stores and returns electroweak couplings, |
---|
97 | // including Cabibbo-Kobayashi-Maskawa mass mixing matrix elements. |
---|
98 | |
---|
99 | class CoupSM { |
---|
100 | |
---|
101 | public: |
---|
102 | |
---|
103 | // Constructor. |
---|
104 | CoupSM() {} |
---|
105 | |
---|
106 | // Initialize, normally from Pythia::init(). |
---|
107 | void init(Settings& settings, Rndm* rndmPtrIn); |
---|
108 | |
---|
109 | // alpha_S value and Lambda values. |
---|
110 | double alphaS(double scale2) {return alphaSlocal.alphaS(scale2);} |
---|
111 | double alphaS1Ord(double scale2) {return alphaSlocal.alphaS1Ord(scale2);} |
---|
112 | double alphaS2OrdCorr(double scale2) { |
---|
113 | return alphaSlocal.alphaS2OrdCorr(scale2);} |
---|
114 | double Lambda3() const {return alphaSlocal.Lambda3();} |
---|
115 | double Lambda4() const {return alphaSlocal.Lambda4();} |
---|
116 | double Lambda5() const {return alphaSlocal.Lambda5();} |
---|
117 | |
---|
118 | // Return alpha_EM value. |
---|
119 | double alphaEM(double scale2) {return alphaEMlocal.alphaEM(scale2);} |
---|
120 | |
---|
121 | // Return electroweak mixing angle and Fermi constant. |
---|
122 | double sin2thetaW() {return s2tW;} |
---|
123 | double cos2thetaW() {return c2tW;} |
---|
124 | double sin2thetaWbar() {return s2tWbar;} |
---|
125 | double GF() {return GFermi;} |
---|
126 | |
---|
127 | // Return electroweak couplings of quarks and leptons. |
---|
128 | double ef(int idAbs) {return efSave[idAbs];} |
---|
129 | double vf(int idAbs) {return vfSave[idAbs];} |
---|
130 | double af(int idAbs) {return afSave[idAbs];} |
---|
131 | double t3f(int idAbs) {return 0.5*afSave[idAbs];} |
---|
132 | double lf(int idAbs) {return lfSave[idAbs];} |
---|
133 | double rf(int idAbs) {return rfSave[idAbs];} |
---|
134 | |
---|
135 | // Return some squared couplings and other combinations. |
---|
136 | double ef2(int idAbs) {return ef2Save[idAbs];} |
---|
137 | double vf2(int idAbs) {return vf2Save[idAbs];} |
---|
138 | double af2(int idAbs) {return af2Save[idAbs];} |
---|
139 | double efvf(int idAbs) {return efvfSave[idAbs];} |
---|
140 | double vf2af2(int idAbs) {return vf2af2Save[idAbs];} |
---|
141 | |
---|
142 | // Return CKM value or square: |
---|
143 | // first index 1/2/3/4 = u/c/t/t', second 1/2/3/4 = d/s/b/b'. |
---|
144 | double VCKMgen(int genU, int genD) {return VCKMsave[genU][genD];} |
---|
145 | double V2CKMgen(int genU, int genD) {return V2CKMsave[genU][genD];} |
---|
146 | |
---|
147 | // Return CKM value or square for incoming flavours (sign irrelevant). |
---|
148 | double VCKMid(int id1, int id2); |
---|
149 | double V2CKMid(int id1, int id2); |
---|
150 | |
---|
151 | // Return CKM sum of squares for given inflavour, or random outflavour. |
---|
152 | double V2CKMsum(int id) {return V2CKMout[abs(id)];} |
---|
153 | int V2CKMpick(int id); |
---|
154 | |
---|
155 | protected: |
---|
156 | |
---|
157 | // Constants: could only be changed in the code itself. |
---|
158 | static const double efSave[20], afSave[20]; |
---|
159 | |
---|
160 | // Couplings and VCKM matrix (index 0 not used). |
---|
161 | double s2tW, c2tW, s2tWbar, GFermi, vfSave[20], lfSave[20], rfSave[20], |
---|
162 | ef2Save[20], vf2Save[20], af2Save[20], efvfSave[20], |
---|
163 | vf2af2Save[20], VCKMsave[5][5], V2CKMsave[5][5], V2CKMout[20]; |
---|
164 | |
---|
165 | // Pointer to the random number generator. |
---|
166 | Rndm* rndmPtr; |
---|
167 | |
---|
168 | // An AlphaStrong instance for general use (but not MPI, ISR, FSR). |
---|
169 | AlphaStrong alphaSlocal; |
---|
170 | |
---|
171 | // An AlphaEM instance for general use (but not MPI, ISR, FSR). |
---|
172 | AlphaEM alphaEMlocal; |
---|
173 | |
---|
174 | }; |
---|
175 | |
---|
176 | //========================================================================== |
---|
177 | |
---|
178 | // Generic couplings class |
---|
179 | |
---|
180 | class Couplings : public CoupSM { |
---|
181 | |
---|
182 | public: |
---|
183 | |
---|
184 | Couplings() : isSUSY(false) {} |
---|
185 | bool isSUSY; |
---|
186 | |
---|
187 | }; |
---|
188 | |
---|
189 | //========================================================================== |
---|
190 | |
---|
191 | } // end namespace Pythia8 |
---|
192 | |
---|
193 | #endif // Pythia8_StandardModel_H |
---|