]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA8/pythia8130/include/StandardModel.h
pythia8130 distributed with AliRoot
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8130 / include / StandardModel.h
1 // StandardModel.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2008 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) {}
28   AlphaStrong(double valueIn, int orderIn = 1) { 
29     init( valueIn, orderIn) ;}
30
31   // Initialization for given value at M_Z and given order.
32   void init(double valueIn = 0.12, int orderIn = 1);
33
34   // alpha_S value and Lambda values.
35   double alphaS(double scale2);
36   double alphaS1Ord(double scale2);
37   double alphaS2OrdCorr(double scale2);
38   double Lambda3() const { return Lambda3Save; }
39   double Lambda4() const { return Lambda4Save; }
40   double Lambda5() const { return Lambda5Save; }
41
42 private:
43
44   // Constants: could only be changed in the code itself.
45   static const int    NITER;
46   static const double SAFETYMARGIN1, SAFETYMARGIN2;
47
48   // Data members.
49   bool   isInit, lastCallToFull;
50   int    order;
51   double valueRef, valueNow, scale2Now, scale2Min, Lambda3Save, 
52          Lambda4Save, Lambda5Save, Lambda3Save2, Lambda4Save2, 
53          Lambda5Save2, mc, mb, mZ, mc2, mb2;
54
55 };
56
57 //**************************************************************************
58
59 // The AlphaEM class calculates the alpha_electromagnetic value at an 
60 // arbitrary scale, given the value at 0 and m_Z, to zeroth or first order.
61
62 class AlphaEM {
63
64 public:
65
66   // Constructors.
67   AlphaEM(int orderIn = 1) {init(orderIn);}
68
69   // First-order initialization for given value at M_Z.
70   static void initStatic();
71
72   // Initialization for a given order.
73   void init(int orderIn = 1) {order = orderIn;}
74
75   // alpha_EM value.
76   double alphaEM(double scale2);
77
78 private:
79
80   // Static data members, mostly for first-order matching.
81   static double alpEM0, alpEMmZ, mZ2, Q2step[5], bRun[5], alpEMstep[5];
82
83   // Data members.
84   int order;
85
86 };
87
88 //**************************************************************************
89
90 // The CoupEW class stores and returns electroweak couplings.
91
92 class CoupEW {
93
94 public:
95
96    // Constructor.
97    CoupEW() {}
98
99   // Initialize, normally from Pythia::init().
100   static void initStatic();
101
102    // Return electroweak mixing angle.
103    static double sin2thetaW() {return s2tW;}
104    static double cos2thetaW() {return c2tW;}
105    static double sin2thetaWbar() {return s2tWbar;}
106
107    // Return electroweak couplings of quarks and leptons.
108    static double ef(int idAbs) {return efSave[idAbs];}
109    static double vf(int idAbs) {return vfSave[idAbs];}
110    static double af(int idAbs) {return afSave[idAbs];}
111    static double t3f(int idAbs) {return 0.5*afSave[idAbs];}
112    static double lf(int idAbs) {return lfSave[idAbs];}
113    static double rf(int idAbs) {return rfSave[idAbs];}
114   
115    // Return some squared couplings and other combinations.
116    static double ef2(int idAbs) {return ef2Save[idAbs];}
117    static double vf2(int idAbs) {return vf2Save[idAbs];}
118    static double af2(int idAbs) {return af2Save[idAbs];}
119    static double efvf(int idAbs) {return efvfSave[idAbs];}
120    static double vf2af2(int idAbs) {return vf2af2Save[idAbs];}
121
122 private:
123
124    // Store couplings.
125    static double s2tW, c2tW, s2tWbar, efSave[20], vfSave[20], afSave[20],
126                  lfSave[20], rfSave[20], ef2Save[20], vf2Save[20], 
127                  af2Save[20], efvfSave[20], vf2af2Save[20];
128
129 };
130
131 //**************************************************************************
132
133 // The VCKM class stores and returns Cabibbo-Kobayashi-Maskawa 
134
135 class VCKM {
136
137 public:
138
139   // Constructor.
140   VCKM() {}
141
142   // Initialize, normally from Pythia::init().
143   static void initStatic();
144
145   // Return value or square: first index 1/2/3/4 = u/c/t/t', 
146   // second 1/2/3/4 = d/s/b/b'.
147   static double Vgen(int genU, int genD) {return Vsave[genU][genD];}
148   static double V2gen(int genU, int genD) {return V2save[genU][genD];}
149
150   // Return value or square for incoming flavours (sign irrelevant).
151   static double Vid(int id1, int id2);
152   static double V2id(int id1, int id2);
153
154   // Return sum of squares for given inflavour, or random outflavour.
155   static double V2sum(int id) {return V2out[abs(id)];}
156   static int    V2pick(int id);
157   
158 private:
159
160   // Store VCKM matrix (index 0 not used) and sum of squares.
161   static double Vsave[5][5], V2save[5][5], V2out[20];
162
163 };
164
165 //**************************************************************************
166
167 } // end namespace Pythia8
168
169 #endif // Pythia8_StandardModel_H