a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
HeffDF1.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012 HEPfit Collaboration
3 *
4 *
5 * For the licensing terms see doc/COPYING.
6 */
7
8#include "HeffDF1.h"
9#include "gslpp_complex.h"
10
11extern std::map<std::string, unsigned int> blocks_nops;
12
13HeffDF1::HeffDF1(std::string blocks, const StandardModel & SM, qcd_orders order_qcd, qed_orders order_qed)
14: coeff(blocks_nops.at(blocks), NDR, order_qcd, order_qed),
15model(SM),
16evolDF1(blocks, NDR, SM, order_qcd, order_qed)
17{
18 this->blocks = blocks;
19 this->nops = blocks_nops.at(blocks);
20 mu_cache = 0.;
21}
22
23gslpp::vector<gslpp::complex> HeffDF1::LowScaleCoeff(qcd_orders order_qcd, qed_orders order_qed)
24{
25 double mu = coeff.getMu(), eta, M, alsM, kM, b0, b1, b0e, b1e;
26
27 // gslpp::vector<gslpp::complex> aux01(nops, 0.);
28 // gslpp::vector<gslpp::complex> aux11(nops, 0.);
29 // gslpp::vector<gslpp::complex> aux21(nops, 0.);
30
31 if (mu == -1) throw std::runtime_error("Error in HeffDF1::LowScaleCoeff(): coeff not initialized.");
32 if (model.Nf(mu) != 5) throw std::runtime_error("Error in HeffDF1::LowScaleCoeff(): defined for 5 flavours only.");
33 if (order_qcd > coeff.getOrder_QCD() || order_qed > coeff.getOrder_QED())
34 throw std::runtime_error("Error in HeffDF1::LowScaleCoeff(): order not computed at the high scale.");
35
36 M = model.getMuw();
37 alsM = model.Als(M, FULLNNNLO, true, order_qed == QED0 ? false : true);
38 eta = alsM / model.Als(mu, FULLNNNLO, true, order_qed == QED0 ? false : true);
39 alsM /= 4. * M_PI; // AlsM tilde
40 if (order_qed != QED0)
41 {
42 b0 = model.Beta_s(00, 5.);
43 b0e = model.Beta_e(00, 5.);
44 b1 = model.Beta_s(10, 5.);
45 b1e = model.Beta_e(01, 5.);
46 kM = model.Ale(M, FULLNLO) / 4. / M_PI / alsM;
47 }
48 // if(blocks == "CPL") {
49 // aux01.assign(6, (*(coeff.getCoeff(orders_qed(LO_QED))))(6));
50 // aux11.assign(6, (*(coeff.getCoeff(orders_qed(NLO_QED11))))(6));
51 // aux21.assign(6, (*(coeff.getCoeff(orders_qed(NLO_QED21))))(6));
52 // aux01.assign(7, (*(coeff.getCoeff(orders_qed(LO_QED))))(7));
53 // aux11.assign(7, (*(coeff.getCoeff(orders_qed(NLO_QED11))))(7));
54 // aux21.assign(7, (*(coeff.getCoeff(orders_qed(NLO_QED21))))(7));
55 // }
56 // else if(blocks == "CPML" || blocks == "CPMLQB") {
57 // aux01.assign(8, (*(coeff.getCoeff(orders_qed(LO_QED))))(8));
58 // aux11.assign(8, (*(coeff.getCoeff(orders_qed(NLO_QED11))))(8));
59 // aux21.assign(8, (*(coeff.getCoeff(orders_qed(NLO_QED21))))(8));
60 // aux01.assign(9, (*(coeff.getCoeff(orders_qed(LO_QED))))(9));
61 // aux11.assign(9, (*(coeff.getCoeff(orders_qed(NLO_QED11))))(9));
62 // aux21.assign(9, (*(coeff.getCoeff(orders_qed(NLO_QED21))))(9));
63
64 switch (order_qed)
65 {
66 case QED0:
67 switch (order_qcd)
68 {
69 case QCD0:
70 return coeff.getCoeff(QCD0, QED0);
71 case QCD1:
72 return (coeff.getCoeff(QCD1, QED0) * eta / alsM);
73 case QCD2:
74 return (coeff.getCoeff(QCD2, QED0) * eta / alsM * eta / alsM);
75 default:
76 throw std::runtime_error("Error in HeffDF1::LowScaleCoeff(): undefined order.");
77
78 }
79 case QED1:
80 switch (order_qcd)
81 {
82 case QCD0:
83 return coeff.getCoeff(QCD0, QED1) / kM / eta;
84 case QCD1:
85 return (coeff.getCoeff(QCD1, QED1) / kM / alsM);
86 case QCD2:
87 return (coeff.getCoeff(QCD2, QED1) * eta / kM / alsM / alsM);
88 default:
89 throw std::runtime_error("Error in HeffDF1::LowScaleCoeff(): undefined order.");
90 }
91 case QED2:
92 switch (order_qcd)
93 {
94 case QCD0:
95 return (coeff.getCoeff(QCD0, QED2) / kM / kM / eta / eta + b0e / b0 * (1. - eta) / eta / eta * coeff.getCoeff(QCD0, QED1) / kM);
96 case QCD1:
97 return (coeff.getCoeff(QCD1, QED2) / alsM / kM / kM / eta + b0e / b0 * (1. - eta) / eta * coeff.getCoeff(QCD1, QED1) / kM / alsM
98 + log(eta) / eta * (b0e * b1 / b0 / b0 - b1e / b0) * coeff.getCoeff(QCD0, QED1) / kM);
99 case QCD2:
100 return (coeff.getCoeff(QCD2, QED2) / alsM / alsM / kM / kM + b0e / b0 * (1. - eta) * coeff.getCoeff(QCD2, QED1) / kM / alsM / alsM
101 + log(eta) * (b0e * b1 / b0 / b0 - b1e / b0) * coeff.getCoeff(QCD1, QED1) / kM / alsM);
102 default:
103 throw std::runtime_error("Error in HeffDF1::LowScaleCoeff(): undefined order.");
104 }
105 default:
106 throw std::runtime_error("Error in HeffDF1::LowScaleCoeff(): undefined order.");
107 }
108}
109
110Expanded<gslpp::vector<gslpp::complex> > HeffDF1::ComputeCoeff(double mu, schemes scheme)
111{
112 const std::vector<WilsonCoefficientNew>& mc = model.getMatching().CMDF1(blocks, nops);
113 uint i;
114
115 if (mu == mu_cache && scheme == scheme_cache)
116 {
117 bool check = true;
118 for (i = 0; i < mc.size(); i++)
119 if (mc[i].getMu() == Vmu_cache[i])
120 check = check && (mc[i].getCoeff() == WC_cache[i].getCoeff());
121 else check = false;
122 if (check) return coeff.getCoeff();
123 }
124
125 mu_cache = mu;
126 scheme_cache = scheme;
127 WC_cache = mc;
128 Vmu_cache.clear();
129
130 coeff.setMu(mu); // also reset the coefficients
131
132 for (i = 0; i < mc.size(); i++)
133 {
134 Vmu_cache.push_back(mc[i].getMu());
135 coeff.setCoeff(coeff.getCoeff() + evolDF1.DF1Evol(mu, mc[i].getMu(), mc[i].getScheme()) * mc[i].getCoeff()); // multiple matching scales wrong for EW corrections *** TO BE FIXED
136 }
137
138 return coeff.getCoeff();
139}
140
141
142/*****************************************
143 * New Physics DF1 Effective Hamiltonian *
144 *****************************************/
145
146HeffDF1_NP::HeffDF1_NP(std::string blocks, const StandardModel & SM, qcd_orders order_qcd, qed_orders order_qed)
147: HeffDF1(blocks, SM, order_qcd, order_qed),
148 coeffNP(blocks_nops.at(blocks), 0.)
149{
150 coeffNP.assign(6, -1.);
151 coeffNP.assign(8, 1.);
152 coeffNP.assign(9, -1.);
153}
154
155Expanded<gslpp::vector<gslpp::complex> > HeffDF1_NP::ComputeCoeff(double mu, schemes scheme)
156{
158
160
161 return coeff.getCoeff();
162}
unsigned int uint
Definition: EvolDF1.h:20
std::map< std::string, unsigned int > blocks_nops
Definition: EvolDF1.cpp:16
@ FULLNNNLO
Definition: OrderScheme.h:40
@ FULLNLO
Definition: OrderScheme.h:38
@ NDR
Definition: OrderScheme.h:21
@ QED1
Definition: OrderScheme.h:92
@ QED0
Definition: OrderScheme.h:91
@ QED2
Definition: OrderScheme.h:93
@ QCD1
Definition: OrderScheme.h:76
@ QCD0
Definition: OrderScheme.h:75
@ QCD2
Definition: OrderScheme.h:77
const Expanded< gslpp::matrix< double > > & DF1Evol(double mu, double M, schemes scheme=NDR)
a method returning the evolutor related to the high scale and the low scale
Definition: EvolDF1.cpp:1359
Expanded< gslpp::vector< gslpp::complex > > ComputeCoeff(double mu, schemes scheme=NDR)
Definition: HeffDF1.cpp:155
HeffDF1_NP(std::string blocks, const StandardModel &SM, qcd_orders order_qcd, qed_orders order_qed)
constructor
Definition: HeffDF1.cpp:146
gslpp::vector< gslpp::complex > coeffNP
Definition: HeffDF1.h:109
std::vector< double > Vmu_cache
Definition: HeffDF1.h:79
std::string blocks
Definition: HeffDF1.h:75
const StandardModel & model
Definition: HeffDF1.h:71
std::vector< WilsonCoefficientNew > WC_cache
Definition: HeffDF1.h:80
unsigned int nops
Definition: HeffDF1.h:76
schemes scheme_cache
Definition: HeffDF1.h:78
virtual Expanded< gslpp::vector< gslpp::complex > > ComputeCoeff(double mu, schemes scheme=NDR)
Definition: HeffDF1.cpp:110
EvolDF1 evolDF1
Definition: HeffDF1.h:73
WilsonCoefficientNew coeff
Definition: HeffDF1.h:68
gslpp::vector< gslpp::complex > LowScaleCoeff(qcd_orders order_qcd, qed_orders order_qed)
Definition: HeffDF1.cpp:23
double mu_cache
Definition: HeffDF1.h:77
HeffDF1(std::string blocks, const StandardModel &SM, qcd_orders order_qcd=QCD1, qed_orders order_qed=QED0)
constructor
Definition: HeffDF1.cpp:13
virtual std::vector< WilsonCoefficientNew > & CMDF1(std::string blocks, unsigned int nops)=0
const double Nf(const double mu) const
The number of active flavour at scale .
Definition: QCD.cpp:571
A model class for the Standard Model.
const double getMuw() const
A get method to retrieve the matching scale around the weak scale.
const double Ale(double mu, orders order, bool Nf_thr=true) const
The running electromagnetic coupling in the scheme.
const double Beta_s(int nm, unsigned int nf) const
QCD beta function coefficients including QED corrections - eq. (36) hep-ph/0512066.
virtual StandardModelMatching & getMatching() const
A get method to access the member reference of type StandardModelMatching.
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 Beta_e(int nm, unsigned int nf) const
QED beta function coefficients - eq. (36) hep-ph/0512066.
gslpp::vector< gslpp::complex > getCoeff(qcd_orders order_qcd_i, qed_orders order_qed_i=QED0) const
void setCoeff(int i, gslpp::complex z, qcd_orders order_qcd_i, qed_orders order_qed_i=QED0)
double getMu() const
void setMu(double mu)
qcd_orders getOrder_QCD() const
qed_orders getOrder_QED() const
schemes
An enum type for regularization schemes.
Definition: OrderScheme.h:20
qed_orders
An enum type for qed_orders in electroweak.
Definition: OrderScheme.h:90
qcd_orders
An enum type for qcd_orders in QCD.
Definition: OrderScheme.h:74