a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
EvolDF1_diujlknu.cpp
Go to the documentation of this file.
1/*
2 * File: EvolDF1_diujlknu.cpp
3 * Author: silvest
4 *
5 * Created on 31 ottobre 2023, 18:07
6 */
7
8#include "EvolDF1_diujlknu.h"
9#include <cstring>
10#include "StandardModel.h"
11
12
13EvolDF1_diujlknu::EvolDF1_diujlknu(unsigned int dim_i, schemes scheme, orders order, const StandardModel& model) :
14RGEvolutor(dim_i, scheme, order),
15 model(model),
16 dim(dim_i){
17
18 gslpp::matrix<double> g0t(AnomalousDimension(LO, 3).transpose());
19
20 gslpp::matrix<gslpp::complex>vv(dim, dim, 0.);
21 gslpp::vector<gslpp::complex>ee(dim, 0.);
22
23 g0t.eigensystem(vv, ee);
24
25 gslpp::matrix<double> v(vv.real());
26 gslpp::vector<double> e(ee.real());
27
28 gslpp::matrix<double> vi = v.inverse();
29 for (unsigned int k = 0; k < dim; k++) {
30 a[k] = e(k);
31// std::cout << "a[" << k << "] = " << a[k] << std::endl;
32 for (unsigned int j = 0; j < dim; j++) {
33 for (unsigned int i = 0; i < dim; i++) {
34 b[i][j][k] = v(i, k) * vi(k, j);
35// if (b[i][j][k] != 0.)
36// std::cout << "b[" << i << "][" << j << "][" << k << "] = " << b[i][j][k] << std::endl;
37 }
38 }
39 }
40
41 gslpp::matrix<double> h(dim, dim, 0.);
42 for (int l = 0; l < 2; l++) {
43 gslpp::matrix<double> gg = vi * (AnomalousDimension(NLO, 5 - l).transpose()) * v;
44 double b0 = model.Beta0(5 - l);
45 for (unsigned int i = 0; i < dim; i++)
46 for (unsigned int j = 0; j < dim; j++)
47 h(i, j) = (i == j) * e(i) * model.Beta1(5 - l) / (2. * b0 * b0) -
48 gg(i, j) / (2. * b0 + e(i) - e(j));
49 gslpp::matrix<double> j = v * h * vi;
50 gslpp::matrix<double> jv = j*v;
51 gslpp::matrix<double> vij = vi*j;
52 for (unsigned int i = 0; i < dim; i++)
53 for (unsigned int j = 0; j < dim; j++)
54 for (unsigned int k = 0; k < dim; k++) {
55 c[l][i][j][k] = jv(i, k) * vi(k, j);
56// if (c[l][i][j][k] != 0.)
57// std::cout << "c[" << l << "][" << i << "][" << j << "][" << k << "] = " << c[l][i][j][k] << std::endl;
58 d[l][i][j][k] = -v(i, k) * vij(k, j);
59// if (d[l][i][j][k] != 0.)
60// std::cout << "d[" << l << "][" << i << "][" << j << "][" << k << "] = " << d[l][i][j][k] << std::endl;
61 }
62 }
63
64}
65
67}
68
69gslpp::matrix<double> EvolDF1_diujlknu::AnomalousDimension(orders order, unsigned int nf) const
70{
71 gslpp::matrix<double> ad(dim, dim, 0.);
72 switch (order) {
73 case LO:
74 ad(2, 2) = -4.;
75 ad(3, 3) = -4.;
76 ad(4, 4) = 4./3.;
77 break;
78 case NLO:
79 ad(2, 2) = 2./9.*(-303.+10.*nf);
80 ad(3, 3) = ad(2,2);
81 ad(4, 4) = 2./27.*(543.-26.*nf);
82 break;
83 default:
84 throw std::runtime_error("EvolDF1_diujlknu::AnomalousDimension(): order not implemented");
85 }
86 return (ad);
87}
88
89gslpp::matrix<double> EvolDF1_diujlknu::AnomalousDimension(orders_qed order_qed, unsigned int nf) const
90{
91 gslpp::matrix<double> ad(dim, dim, 0.);
92 switch (order_qed) {
93 case LO_QED:
94 ad(0, 0) = -2.;
95 ad(1, 1) = -1.;
96 ad(2, 2) = 2./3.;
97 ad(3, 3) = 2./3.;
98 ad(3, 4) = 1./12.;
99 ad(4, 3) = 4.;
100 ad(4, 4) = -20./9.;
101 break;
102 default:
103 throw std::runtime_error("EvolDF1_diujlknu::AnomalousDimension(): order_qed not implemented");
104 }
105 return (ad);
106}
107
108gslpp::matrix<double>& EvolDF1_diujlknu::Df1diujlknuEvol(double mu, double M, orders order, schemes scheme)
109{
110 switch (scheme) {
111 case NDR:
112 break;
113 case LRI:
114 case HV:
115 default:
116 std::stringstream out;
117 out << scheme;
118 throw std::runtime_error("EvolDF1_diujlknu::Df1diujlknuEvol(): scheme " + out.str() + " not implemented ");
119 }
120
121 double alsMZ = model.getAlsMz();
122 double Mz = model.getMz();
123 if(alsMZ == alsMZ_cache && Mz == Mz_cache) {
124 if (mu == this->mu && M == this->M && scheme == this->scheme)
125 return (*Evol(order));
126 }
127 alsMZ_cache = alsMZ;
128 Mz_cache = Mz;
129
130 if (M < mu) {
131 std::stringstream out;
132 out << "M = " << M << " < mu = " << mu;
133 throw out.str();
134 }
135
136 setScales(mu, M); // also assign evol to identity
137 if (M != mu) {
138 double m_down = mu;
139 double m_up = model.AboveTh(m_down);
140 double nf = model.Nf(m_down);
141
142 while (m_up < M) {
143 Df1diujlknuEvol(m_down, m_up, nf, scheme);
144 m_down = m_up;
145 m_up = model.AboveTh(m_down);
146 nf += 1.;
147 }
148 Df1diujlknuEvol(m_down, M, nf, scheme);
149 }
150
151 //add the leading QED log without resumming it for the moment, to be improved later
152 *elem[LO] = (*elem[LO]) + AnomalousDimension(LO_QED,3).transpose()*model.getAle()/2./M_PI*log(mu/M);
153
154 return (*Evol(order));
155}
156
157void EvolDF1_diujlknu::Df1diujlknuEvol(double mu, double M, double nf, schemes scheme)
158{
159
160 gslpp::matrix<double> resLO(dim, 0.), resNLO(dim, 0.), resNNLO(dim, 0.);
161
162 int l = 5 - (int) nf;
163 double alsM = model.Als(M, FULLNLO) / 4. / M_PI;
164 double alsmu = model.Als(mu, FULLNLO) / 4. / M_PI;
165
166 double eta = alsM / alsmu;
167
168 for (unsigned int k = 0; k < dim; k++) {
169 double etap = pow(eta, a[k] / 2. / model.Beta0(nf));
170 for (unsigned int i = 0; i < dim; i++)
171 for (unsigned int j = 0; j < dim; j++) {
172 resNNLO(i, j) += 0.;
173 resNLO(i, j) += c[l][i][j][k] * etap * alsmu;
174 resNLO(i, j) += d[l][i][j][k] * etap * alsM;
175 resLO(i, j) += b[i][j][k] * etap;
176 }
177 }
178 switch (order) {
179 case NNLO:
180 *elem[NNLO] = 0.; // Marco can implement it if he wishes to!
181 case NLO:
182 *elem[NLO] = (*elem[LO]) * resNLO + (*elem[NLO]) * resLO;
183 case LO:
184 *elem[LO] = (*elem[LO]) * resLO;
185 break;
186 case FULLNNLO:
187 case FULLNLO:
188 default:
189 throw std::runtime_error("Error in EvolDF1_diujlknu::Df1diujlknuEvol()");
190 }
191}
@ NNLO
Definition: OrderScheme.h:36
@ LO
Definition: OrderScheme.h:34
@ NLO
Definition: OrderScheme.h:35
@ FULLNNLO
Definition: OrderScheme.h:39
@ FULLNLO
Definition: OrderScheme.h:38
@ HV
Definition: OrderScheme.h:22
@ LRI
Definition: OrderScheme.h:23
@ NDR
Definition: OrderScheme.h:21
@ LO_QED
Definition: OrderScheme.h:58
gslpp::matrix< double > AnomalousDimension(orders order, unsigned int nf) const
ADM in the JMS basis, in the order CnueduVLLkkij, CnueduVLRkkij, CnueduSRRkkij, CnueduSRLkkij,...
unsigned int dim
double c[3][5][5][5]
virtual ~EvolDF1_diujlknu()
double d[3][5][5][5]
EvolDF1_diujlknu(unsigned int dim_i, schemes scheme, orders order, const StandardModel &model)
constructor
gslpp::matrix< double > & Df1diujlknuEvol(double mu, double M, orders order, schemes scheme=NDR)
const StandardModel & model
double b[5][5][5]
const double Beta1(const double nf) const
The coefficient for a certain number of flavours .
Definition: QCD.cpp:606
const double Beta0(const double nf) const
The coefficient for a certain number of flavours .
Definition: QCD.cpp:601
const double AboveTh(const double mu) const
The active flavour threshold above the scale as defined in QCD::Thresholds().
Definition: QCD.cpp:547
const double Nf(const double mu) const
The number of active flavour at scale .
Definition: QCD.cpp:571
A class for the RG evolutor of the Wilson coefficients.
Definition: RGEvolutor.h:24
double M
Definition: RGEvolutor.h:142
void setScales(double mu, double M)
Sets the upper and lower scale for the running of the Wilson Coefficients.
Definition: RGEvolutor.cpp:85
gslpp::matrix< double > * Evol(orders order)
Evolution matrix set at a fixed order of QCD coupling.
Definition: RGEvolutor.cpp:103
A model class for the Standard Model.
const double getMz() const
A get method to access the mass of the boson .
const double getAlsMz() const
A get method to access the value of .
const double Als(const double mu, const orders order, const bool Nf_thr, const bool qed_flag) const
The running QCD coupling in the scheme including QED corrections.
const double getAle() const
A get method to retrieve the fine-structure constant .
gslpp::matrix< double > * elem[MAXORDER_QED+1]
orders
An enum type for orders in QCD.
Definition: OrderScheme.h:33
schemes
An enum type for regularization schemes.
Definition: OrderScheme.h:20
orders_qed
An enum type for orders in electroweak.
Definition: OrderScheme.h:56