a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
HeffDS1.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 "HeffDS1.h"
9#include "StandardModel.h"
10#include "EvolDF1nlep.h"
11#include "EvolDB1Mll.h"
12#include "Charm_Kpnunu.h"
13
15: model(SM),
16coeffds1(10, NDR, NLO, NLO_QED11), coeffds1cc(10, NDR, NLO, NLO_QED11),
17coeffds1pnunu(2, NDR, NLO, NLO_QED11), coeffds1pnunuC(1,NDR,NNLO,NLO_QED11), coeffds1mumu(1, NDR, NLO),
18u(new EvolDF1nlep(10, NDR, NLO, NLO_QED11, SM)), uM(new EvolDB1Mll(13, NDR, NLO, SM)), uKpnunu(new Charm_Kpnunu(SM)),
19DS1ccLO(10, 0.),DS1ccLO_QED(10, 0.),DS1ccNLO(10, 0.),DS1ccNLO_QED(10, 0.)
20{
21}
22
24{
25}
26
27gslpp::vector<gslpp::complex>** HeffDS1::ComputeCoeffDS1PPv(double mu, schemes scheme)
28{
29
30 const std::vector<WilsonCoefficient>& mcb = model.getMatching().CMK();
31
32 coeffds1.setMu(mu); //inizializes to zero the coefficients
33
34 orders ordDF1 = coeffds1.getOrder();
35 orders_qed ordqedDF1 = coeffds1.getOrder_qed();
36
37 switch (scheme) {
38 case NDR:
39 for (unsigned int i = 0; i < mcb.size(); i++) {
40 if (i == 0) {
41 for (int j = LO; j <= ordDF1; j++) {
42 for (int k = LO; k <= j; k++) {
43 //Evolves the LO terms and the ones proportional to alpha_s
45 u->Df1Evolnlep(mu, mcb[i].getMu(),
46 orders(k), NO_QED, mcb[i].getScheme())*
47 (*(mcb[i].getCoeff(orders(j - k)))), orders(j));
48 }
49 }
50 switch (ordqedDF1) {
51 case NLO_QED11:
52 coeffds1.setCoeff(u->Df1Evolnlep(mu, mcb[i].getMu(),
53 LO, LO_QED, mcb[i].getScheme()) * (*(mcb[i].getCoeff(NLO))) +
54 u->Df1Evolnlep(mu, mcb[i].getMu(),
55 LO, NO_QED, mcb[i].getScheme()) * (*(mcb[i].getCoeff(NLO_QED11))) +
56 u->Df1Evolnlep(mu, mcb[i].getMu(),
57 LO, NLO_QED11, mcb[i].getScheme()) * (*(mcb[i].getCoeff(LO))) +
58 u->Df1Evolnlep(mu, mcb[i].getMu(),
59 NLO, NO_QED, mcb[i].getScheme()) * (*(mcb[i].getCoeff(LO_QED))), NLO_QED11);
60 case LO_QED:
61 coeffds1.setCoeff(u->Df1Evolnlep(mu, mcb[i].getMu(),
62 LO, LO_QED, mcb[i].getScheme()) * (*(mcb[i].getCoeff(LO))) +
63 u->Df1Evolnlep(mu, mcb[i].getMu(),
64 LO, NO_QED, mcb[i].getScheme()) * (*(mcb[i].getCoeff(LO_QED))), LO_QED);
65 break;
66 default:
67 throw std::runtime_error("Error in EvolDF1nlep::Df1Evolnlep()");
68 }
69 }
70 }
71 return coeffds1.getCoeff();
72 default:
73 throw "HeffDS1::ComputeCoeffDS1PPv(double mu, schemes scheme): scheme not implemented";
74 }
75}
76
77gslpp::vector<gslpp::complex>** HeffDS1::ComputeCoeffDS1PPz(double muc, schemes scheme)
78{
79
80 const std::vector<WilsonCoefficient>& mcbCC = model.getMatching().CMKCC();
81 coeffds1cc.setMu(muc);
82 double mu = 0.;
83 /*
84 if(muc < model.getMuc()){
85 mu = model.getMuc();
86 }
87 else{
88 mu = muc;
89 }*/
90 // here below assuming a theory of 3 flavours even above muc in light of current lattice results
91 mu = model.getMuc();
92
93 orders ordDF1 = coeffds1cc.getOrder();
95
96 switch (scheme) {
97 case NDR:
98 for (unsigned int i = 0; i < mcbCC.size(); i++) {
99 if (i == 0) {
100 for (int j = LO; j <= ordDF1; j++) {
101 for (int k = LO; k <= j; k++) {
102 //Evolves the LO terms and the ones proportional to alpha_s
104 u->Df1Evolnlep(mu, mcbCC[i].getMu(),
105 orders(k), NO_QED, mcbCC[i].getScheme())*
106 (*(mcbCC[i].getCoeff(orders(j - k)))), orders(j));
107 }
108 }
109 switch (ordqedDF1) {
110 case NLO_QED11:
111 coeffds1cc.setCoeff(u->Df1Evolnlep(mu, mcbCC[i].getMu(),
112 LO, LO_QED, mcbCC[i].getScheme()) * (*(mcbCC[i].getCoeff(NLO))) +
113 u->Df1Evolnlep(mu, mcbCC[i].getMu(),
114 LO, NO_QED, mcbCC[i].getScheme()) * (*(mcbCC[i].getCoeff(NLO_QED11))) +
115 u->Df1Evolnlep(mu, mcbCC[i].getMu(),
116 LO, NLO_QED11, mcbCC[i].getScheme()) * (*(mcbCC[i].getCoeff(LO))) +
117 u->Df1Evolnlep(mu, mcbCC[i].getMu(),
118 NLO, NO_QED, mcbCC[i].getScheme()) * (*(mcbCC[i].getCoeff(LO_QED))), NLO_QED11);
119 case LO_QED:
120 coeffds1cc.setCoeff(u->Df1Evolnlep(mu, mcbCC[i].getMu(),
121 LO, LO_QED, mcbCC[i].getScheme()) * (*(mcbCC[i].getCoeff(LO))) +
122 u->Df1Evolnlep(mu, mcbCC[i].getMu(),
123 LO, NO_QED, mcbCC[i].getScheme()) * (*(mcbCC[i].getCoeff(LO_QED))), LO_QED);
124 break;
125 default:
126 throw std::runtime_error("Error in HeffDS1::ComputeCoeffDS1PPz()");
127 }
132 for (int l = 2; l < 10; l++){
133 DS1ccLO.assign(l, 0.);
134 DS1ccLO_QED.assign(l, 0.);
135 DS1ccNLO.assign(l, 0.);
136 DS1ccNLO_QED.assign(l, 0.);
137 }
138 if(mu == model.getMuc()) CharmMatch();
139 // if(muc < mu){
140 if(muc != mu){
141 switch (ordDF1) {
142 case NLO:
143 coeffds1cc.setCoeff(u->Df1Evolnlep3flav(muc,mu,LO, NO_QED, mcbCC[i].getScheme()) * DS1ccNLO +
144 u->Df1Evolnlep3flav(muc,mu,NLO, NO_QED, mcbCC[i].getScheme()) * DS1ccLO,NLO);
145 case LO:
146 coeffds1cc.setCoeff(u->Df1Evolnlep3flav(muc,mu,LO, NO_QED, mcbCC[i].getScheme()) * DS1ccLO,LO);
147 break;
148 default:
149 throw std::runtime_error("Error in HeffDS1::ComputeCoeffDS1PPz()");
150 }
151 switch (ordqedDF1) {
152 case NLO_QED11:
153 coeffds1cc.setCoeff(u->Df1Evolnlep3flav(muc,mu,LO, LO_QED, mcbCC[i].getScheme()) * DS1ccNLO +
154 u->Df1Evolnlep3flav(muc,mu,LO, NO_QED, mcbCC[i].getScheme()) * DS1ccNLO_QED +
155 u->Df1Evolnlep3flav(muc,mu,LO, NLO_QED11, mcbCC[i].getScheme()) * DS1ccLO +
156 u->Df1Evolnlep3flav(muc,mu,NLO, NO_QED, mcbCC[i].getScheme()) * DS1ccLO_QED, NLO_QED11);
157 case LO_QED:
158 coeffds1cc.setCoeff(u->Df1Evolnlep3flav(muc,mu,LO, LO_QED, mcbCC[i].getScheme()) * DS1ccLO +
159 u->Df1Evolnlep3flav(muc,mu,LO, NO_QED, mcbCC[i].getScheme()) * DS1ccLO_QED, LO_QED);
160 break;
161 default:
162 throw std::runtime_error("Error in HeffDS1::ComputeCoeffDS1PPz()");
163 }
164 }
165 else{
166 switch (ordDF1) {
167 case NLO:
169 case LO:
171 break;
172 default:
173 throw std::runtime_error("Error in HeffDS1::ComputeCoeffDS1PPz()");
174 }
175 switch (ordqedDF1) {
176 case NLO_QED11:
178 case LO_QED:
180 break;
181 default:
182 throw std::runtime_error("Error in HeffDS1::ComputeCoeffDS1PPz()");
183 }
184 }
185 }
186 }
187 return coeffds1cc.getCoeff();
188 default:
189 throw "HeffDS1::ComputeCoeffDS1PPz(double mu, schemes scheme): scheme not implemented";
190 }
191}
192
193
194gslpp::vector<gslpp::complex>** HeffDS1::ComputeCoeffDS1pnunu()
195{
196 const std::vector<WilsonCoefficient>& mcb = model.getMatching().CMkpnn();
198 orders ordDF1 = coeffds1pnunu.getOrder();
200
201 for (unsigned int i = 0; i < mcb.size(); i++) {
202 for (int j = LO; j <= ordDF1; j++) {
204 + *mcb[i].getCoeff(orders(j)), orders(j));
205 }
206 for (int j = LO_QED; j <= ordDF1_ew; j++) {
208 + *mcb[i].getCoeff(orders_qed(j)), orders_qed(j));
209 }
210 }
211
212 return coeffds1pnunu.getCoeff();
213}
214
215gslpp::vector<gslpp::complex>** HeffDS1::ComputeCoeffDS1pnunuC()
216{
217 const std::vector<WilsonCoefficient>& mcbC = uKpnunu->EVOCkpnn();
219 orders ordDF1 = coeffds1pnunuC.getOrder();
221
222 for (unsigned int i = 0; i < mcbC.size(); i++) {
223 for (int j = LO; j <= ordDF1; j++) {
225 + *mcbC[i].getCoeff(orders(j)), orders(j));
226 }
227 for (int j = LO_QED; j <= ordDF1_ew; j++) {
229 + *mcbC[i].getCoeff(orders_qed(j)), orders_qed(j));
230 }
231 }
232
233 return coeffds1pnunuC.getCoeff();
234}
235
236gslpp::vector<gslpp::complex>** HeffDS1::ComputeCoeffDS1mumu()
237{
238
239 const std::vector<WilsonCoefficient>& mcb = model.getMatching().CMkmm();
240
241 orders ordDF1 = coeffds1mumu.getOrder();
242
243 for (unsigned int i = 0; i < mcb.size(); i++) {
244 for (int j = LO; j <= ordDF1; j++) {
246 + *mcb[i].getCoeff(orders(j)), orders(j));
247 }
248 }
249
250 return coeffds1mumu.getCoeff();
251}
252
254{
256 double alphaSmuC = model.Als(model.getMuc());
257 double logmc2OmuC2 = log(mc * mc / model.getMuc() / model.getMuc());
258
259 DS1ccNLO.assign(2, (-alphaSmuC / 24. / M_PI)*(-2. / 3. * (logmc2OmuC2 + 1.) * DS1ccLO(1)));
260 DS1ccNLO.assign(3, (alphaSmuC / 8. / M_PI)*(-2. / 3. * (logmc2OmuC2 + 1.) * DS1ccLO(1)));
261 DS1ccNLO.assign(4, (-alphaSmuC / 24. / M_PI)*(-2. / 3. * (logmc2OmuC2 + 1.) * DS1ccLO(1)));
262 DS1ccNLO.assign(5, (alphaSmuC / 8. / M_PI)*(-2. / 3. * (logmc2OmuC2 + 1.) * DS1ccLO(1)));
263
264 DS1ccNLO_QED.assign(2, (-alphaSmuC / 24. / M_PI)*(-2. / 3. * (logmc2OmuC2 + 1.) * DS1ccLO_QED(1)));
265 DS1ccNLO_QED.assign(3, (alphaSmuC / 8. / M_PI)*(-2. / 3. * (logmc2OmuC2 + 1.) * DS1ccLO_QED(1)));
266 DS1ccNLO_QED.assign(4, (-alphaSmuC / 24. / M_PI)*(-2. / 3. * (logmc2OmuC2 + 1.) * DS1ccLO_QED(1)));
267 DS1ccNLO_QED.assign(5, (alphaSmuC / 8. / M_PI)*(-2. / 3. * (logmc2OmuC2 + 1.) * DS1ccLO_QED(1)));
268 DS1ccNLO_QED.assign(6, -model.getAle() / 6. / M_PI * 4. / 9. * (logmc2OmuC2 + 1.)*(3. * DS1ccLO(0) + DS1ccLO(1)));
269 DS1ccNLO_QED.assign(8, -model.getAle() / 6. / M_PI * 4. / 9. * (logmc2OmuC2 + 1.)*(3. * DS1ccLO(0) + DS1ccLO(1)));
270}
@ NNLO
Definition: OrderScheme.h:36
@ LO
Definition: OrderScheme.h:34
@ NLO
Definition: OrderScheme.h:35
@ FULLNNLO
Definition: OrderScheme.h:39
@ NDR
Definition: OrderScheme.h:21
@ NLO_QED11
Definition: OrderScheme.h:59
@ LO_QED
Definition: OrderScheme.h:58
@ NO_QED
Definition: OrderScheme.h:57
Evolutor Class
Definition: EvolDF1nlep.h:16
gslpp::vector< gslpp::complex > DS1ccNLO_QED
Definition: HeffDS1.h:86
virtual ~HeffDS1()
destructor
Definition: HeffDS1.cpp:23
gslpp::vector< gslpp::complex > DS1ccLO
Definition: HeffDS1.h:86
gslpp::vector< gslpp::complex > ** ComputeCoeffDS1pnunu()
Definition: HeffDS1.cpp:194
const StandardModel & model
Definition: HeffDS1.h:79
WilsonCoefficient coeffds1cc
Definition: HeffDS1.h:81
gslpp::vector< gslpp::complex > DS1ccLO_QED
Definition: HeffDS1.h:86
WilsonCoefficient coeffds1pnunuC
Definition: HeffDS1.h:81
gslpp::vector< gslpp::complex > ** ComputeCoeffDS1pnunuC()
Definition: HeffDS1.cpp:215
HeffDS1(const StandardModel &SM)
constructor
Definition: HeffDS1.cpp:14
gslpp::vector< gslpp::complex > ** ComputeCoeffDS1mumu()
Definition: HeffDS1.cpp:236
std::unique_ptr< Charm_Kpnunu > uKpnunu
Definition: HeffDS1.h:84
WilsonCoefficient coeffds1mumu
Definition: HeffDS1.h:81
WilsonCoefficient coeffds1
Definition: HeffDS1.h:81
gslpp::vector< gslpp::complex > DS1ccNLO
Definition: HeffDS1.h:86
gslpp::vector< gslpp::complex > ** ComputeCoeffDS1PPv(double mu, schemes scheme=NDR)
the effective Hamiltonian at the scale mu for
Definition: HeffDS1.cpp:27
WilsonCoefficient coeffds1pnunu
Definition: HeffDS1.h:81
gslpp::vector< gslpp::complex > ** ComputeCoeffDS1PPz(double muc, schemes scheme=NDR)
Definition: HeffDS1.cpp:77
std::unique_ptr< EvolDF1nlep > u
Definition: HeffDS1.h:82
void CharmMatch()
compute the matching at the charm threshold within the SM, NDR scheme implemented
Definition: HeffDS1.cpp:253
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
const double getMuc() const
A get method to access the threshold between four- and three-flavour theory in GeV.
Definition: QCD.h:591
const double Mrun(const double mu, const double m, const quark q, const orders order=FULLNNLO) const
Computes a running quark mass from .
Definition: QCD.cpp:1353
@ CHARM
Definition: QCD.h:326
const Particle & getQuarks(const QCD::quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:536
A model class for the Standard Model.
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 getAle() const
A get method to retrieve the fine-structure constant .
gslpp::vector< gslpp::complex > ** getCoeff() const
void setCoeff(const gslpp::vector< gslpp::complex > &z, orders order_i)
virtual void setMu(double mu)
orders_qed getOrder_qed() const
orders getOrder() const
virtual void resetCoefficient()
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