StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StandardModel.h
1 // StandardModel.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2014 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 "Pythia8/Basics.h"
13 #include "Pythia8/PythiaStdlib.h"
14 #include "Pythia8/Settings.h"
15 
16 namespace Pythia8 {
17 
18 //==========================================================================
19 
20 // The AlphaStrong class calculates the alpha_strong value at an arbitrary
21 // scale, given the value at m_Z, to zeroth, first or second order.
22 
23 class AlphaStrong {
24 
25 public:
26 
27  // Constructors.
28  AlphaStrong() : isInit(false), order(0),
29  Lambda3Save(0.), Lambda4Save(0.), Lambda5Save(0.), Lambda6Save(0.),
30  Lambda3Save2(0.), Lambda4Save2(0.), Lambda5Save2(0.), Lambda6Save2(0.),
31  scale2Min(0.), mc2(0.), mb2(0.), mt2(0.), lastCallToFull(false),
32  valueRef(0.), valueNow(0.), scale2Now(0.) {}
33  AlphaStrong(double valueIn, int orderIn = 1) {
34  init( valueIn, orderIn) ;}
35 
36  // Destructor.
37  virtual ~AlphaStrong() {}
38 
39  // Initialization for given value at M_Z and given order.
40  virtual void init(double valueIn = 0.12, int orderIn = 1, int nfmaxIn = 6,
41  bool useCMWIn = false);
42 
43  // alpha_S value and Lambda values.
44  double alphaS(double scale2);
45  double alphaS1Ord(double scale2);
46  double alphaS2OrdCorr(double scale2);
47  double Lambda3() const { return Lambda3Save; }
48  double Lambda4() const { return Lambda4Save; }
49  double Lambda5() const { return Lambda5Save; }
50  double Lambda6() const { return (nfmax >= 6) ? Lambda6Save : Lambda5Save; }
51 
52  // Info: tell which scales we use for flavour thresholds.
53  double muThres(int idQ);
54  double muThres2(int idQ);
55 
56  // Return the CMW factor (for nF between 3 and 6).
57  double facCMW( int nFin);
58 
59 // Protected data members: accessible to derived classes.
60 protected:
61 
62  // Initialization data member.
63  bool isInit;
64 
65  // Running order and max number of flavours to use in running.
66  int order, nfmax;
67 
68  // Lambda values.
69  double Lambda3Save, Lambda4Save, Lambda5Save, Lambda6Save;
70  double Lambda3Save2, Lambda4Save2, Lambda5Save2, Lambda6Save2;
71 
72  // Smallest allowed renormalization scale.
73  double scale2Min;
74 
75  // Flavour thresholds.
76  static const double MC, MB, MZ, MT;
77  double mc2, mb2, mt2;
78 
79  // CMW rescaling factors.
80  bool useCMW;
81  static const double FACCMW3, FACCMW4, FACCMW5, FACCMW6;
82 
83  // Safety margins to avoid getting too close to LambdaQCD.
84  static const double SAFETYMARGIN1, SAFETYMARGIN2;
85 
86 // Private data members: not accessible to derived classes.
87 private:
88 
89  // Private constants: could only be changed in the code itself.
90  static const int NITER;
91 
92  // Private data members.
93  bool lastCallToFull;
94  double valueRef, valueNow, scale2Now;
95 
96 };
97 
98 //==========================================================================
99 
100 // The AlphaEM class calculates the alpha_electromagnetic value at an
101 // arbitrary scale, given the value at 0 and m_Z, to zeroth or first order.
102 
103 class AlphaEM {
104 
105 public:
106 
107  // Constructors.
108  AlphaEM() {}
109 
110  // Initialization for a given order.
111  void init(int orderIn, Settings* settingsPtr);
112 
113  // alpha_EM value.
114  double alphaEM(double scale2);
115 
116 private:
117 
118  // Constants: could only be changed in the code itself.
119  static const double MZ, Q2STEP[5], BRUNDEF[5];
120 
121  // Data members.
122  int order;
123  double alpEM0, alpEMmZ, mZ2, bRun[5], alpEMstep[5];
124 
125 };
126 
127 //==========================================================================
128 
129 // The CoupSM class stores and returns electroweak couplings,
130 // including Cabibbo-Kobayashi-Maskawa mass mixing matrix elements.
131 
132 class CoupSM {
133 
134 public:
135 
136  // Constructor.
137  CoupSM() {}
138 
139  // Initialize, normally from Pythia::init().
140  void init(Settings& settings, Rndm* rndmPtrIn);
141 
142  // alpha_S value and Lambda values.
143  double alphaS(double scale2) {return alphaSlocal.alphaS(scale2);}
144  double alphaS1Ord(double scale2) {return alphaSlocal.alphaS1Ord(scale2);}
145  double alphaS2OrdCorr(double scale2) {
146  return alphaSlocal.alphaS2OrdCorr(scale2);}
147  double Lambda3() const {return alphaSlocal.Lambda3();}
148  double Lambda4() const {return alphaSlocal.Lambda4();}
149  double Lambda5() const {return alphaSlocal.Lambda5();}
150 
151  // Return alpha_EM value.
152  double alphaEM(double scale2) {return alphaEMlocal.alphaEM(scale2);}
153 
154  // Return electroweak mixing angle and Fermi constant.
155  double sin2thetaW() {return s2tW;}
156  double cos2thetaW() {return c2tW;}
157  double sin2thetaWbar() {return s2tWbar;}
158  double GF() {return GFermi;}
159 
160  // Return electroweak couplings of quarks and leptons.
161  double ef(int idAbs) {return efSave[idAbs];}
162  double vf(int idAbs) {return vfSave[idAbs];}
163  double af(int idAbs) {return afSave[idAbs];}
164  double t3f(int idAbs) {return 0.5*afSave[idAbs];}
165  double lf(int idAbs) {return lfSave[idAbs];}
166  double rf(int idAbs) {return rfSave[idAbs];}
167 
168  // Return some squared couplings and other combinations.
169  double ef2(int idAbs) {return ef2Save[idAbs];}
170  double vf2(int idAbs) {return vf2Save[idAbs];}
171  double af2(int idAbs) {return af2Save[idAbs];}
172  double efvf(int idAbs) {return efvfSave[idAbs];}
173  double vf2af2(int idAbs) {return vf2af2Save[idAbs];}
174 
175  // Return CKM value or square:
176  // first index 1/2/3/4 = u/c/t/t', second 1/2/3/4 = d/s/b/b'.
177  double VCKMgen(int genU, int genD) {return VCKMsave[genU][genD];}
178  double V2CKMgen(int genU, int genD) {return V2CKMsave[genU][genD];}
179 
180  // Return CKM value or square for incoming flavours (sign irrelevant).
181  double VCKMid(int id1, int id2);
182  double V2CKMid(int id1, int id2);
183 
184  // Return CKM sum of squares for given inflavour, or random outflavour.
185  double V2CKMsum(int id) {return V2CKMout[abs(id)];}
186  int V2CKMpick(int id);
187 
188 protected:
189 
190  // Constants: could only be changed in the code itself.
191  static const double efSave[20], afSave[20];
192 
193  // Couplings and VCKM matrix (index 0 not used).
194  double s2tW, c2tW, s2tWbar, GFermi, vfSave[20], lfSave[20], rfSave[20],
195  ef2Save[20], vf2Save[20], af2Save[20], efvfSave[20],
196  vf2af2Save[20], VCKMsave[5][5], V2CKMsave[5][5], V2CKMout[20];
197 
198  // Pointer to the random number generator.
199  Rndm* rndmPtr;
200 
201  // An AlphaStrong instance for general use (but not MPI, ISR, FSR).
202  AlphaStrong alphaSlocal;
203 
204  // An AlphaEM instance for general use (but not MPI, ISR, FSR).
205  AlphaEM alphaEMlocal;
206 
207 };
208 
209 //==========================================================================
210 
211 // Generic couplings class
212 
213 class Couplings : public CoupSM {
214 
215 public:
216 
217  Couplings() : isSUSY(false) {}
218  bool isSUSY;
219 
220 };
221 
222 //==========================================================================
223 
224 } // end namespace Pythia8
225 
226 #endif // Pythia8_StandardModel_H