a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
THDMMatching.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2015 HEPfit Collaboration
3 *
4 *
5 * For the licensing terms see doc/COPYING.
6 */
7
8#include "THDMMatching.h"
9#include "THDM.h"
10#include <gsl/gsl_integration.h>
11#include <gsl/gsl_sf_dilog.h>
12#include <math.h>
13#include <stdexcept>
14
16
18 myTHDM(THDM_i),
19 myCKM(3, 3, 0.),
20 mcdbs2(5, NDR, NLO),
21 mcbtaunu(5, NDR, LO),
22 mcbsg(8, NDR, NNLO),
23 mcprimebsg(8, NDR, NNLO),
24 mcgminus2mu(2,NDR,NLO)
25{}
26
27std::vector<WilsonCoefficient>& THDMMatching::CMdbs2() {
28
29 double Mut = myTHDM.getMut();
30 double xt = x_t(Mut);
31 double GF=myTHDM.getGF();
32 double MW=myTHDM.Mw();
33 gslpp::complex co = GF / 4. / M_PI * MW * myTHDM.getCKM().computelamt_s();
34 double tanb = myTHDM.gettanb();
35 double mHp2=myTHDM.getmHp2();
36 double xHW=mHp2/(MW*MW);
37 double xtH=xt/xHW;
38 double SWH=xtH*((2.0*xHW-8.0)*log(xtH)/((1.0-xHW)*(1.0-xtH)*(1.0-xtH))+6.0*xHW*log(xt)/((1.0-xHW)*(1.0-xt)*(1.0-xt))-(8.0-2.0*xt)/((1.0-xt)*(1.0-xtH)))/(tanb*tanb);
39 double SHH=xtH*((1.0+xtH)/((1.0-xtH)*(1.0-xtH))+2.0*xtH*log(xtH)/((1.0-xtH)*(1.0-xtH)*(1.0-xtH)))/(tanb*tanb*tanb*tanb);
40
42 mcdbs2.setMu(Mut);
43
44 switch (mcdbs2.getOrder()) {
45 case NNLO:
46 case NLO:
47 case LO:
48 mcdbs2.setCoeff(0, co * co * xt * (SWH+SHH), LO);
49 break;
50 default:
51 std::stringstream out;
52 out << mcdbs2.getOrder();
53 throw std::runtime_error("THDMMatching::CMdbs2(): order " + out.str() + "not implemented");
54 }
55
56 vmcds.push_back(mcdbs2);
57 return(vmcds);
58}
59
60std::vector<WilsonCoefficient>& THDMMatching::CMdiujleptonknu(int i, int j, int k) {
61
62 double Muw = myTHDM.getMuw();
63 double GF = myTHDM.getGF();
65 double mB;
66 double tanb = myTHDM.gettanb();
67 double mHp2=myTHDM.getmHp2();
68
69 vmculeptonnu = StandardModelMatching::CMdiujleptonknu(i,j,k);
70 mcbtaunu.setMu(Muw);
71
72 switch (mcbtaunu.getOrder()) {
73 case NNLO:
74 case NLO:
75 case LO:
76 if (i == 2 && j == 0 && k == 2) {
78 mcbtaunu.setCoeff(0, -4.*GF * myCKM(0,2) / sqrt(2.) * mB*mB*tanb*tanb/mHp2, LO);
79 }
80 else if (i == 2 && j == 1 && k == 2) {
82 mcbtaunu.setCoeff(0, -4.*GF * myCKM(1,2) / sqrt(2.) * mB*mB*tanb*tanb/mHp2, LO);
83 }
84 else std::runtime_error("THDMMatching::CMbtaunu(): flavour indices not implemented");
85 break;
86 default:
87 std::stringstream out;
88 out << mcbtaunu.getOrder();
89 throw std::runtime_error("THDMMatching::CMbtaunu(): order " + out.str() + "not implemented");
90 }
91
92 vmculeptonnu.push_back(mcbtaunu);
93 return(vmculeptonnu);
94
95}
96
97std::vector<WilsonCoefficient>& THDMMatching::CMbsg()
98{
99 double Muw = myTHDM.getMuw();
100
101 double Mut = myTHDM.getMut();
102 double mt = myTHDM.Mrun(Mut, myTHDM.getQuarks(QCD::TOP).getMass_scale(),
104 double mHp=myTHDM.getmHp();
105
106 double tanb = myTHDM.gettanb();
107
108 gslpp::complex co = 1.; // (- 4. * GF / sqrt(2)) * SM.computelamt_s(); THIS SHOULD ALREADY BE IMPLEMENTED IN THE OBSERVABLE
109
111 mcbsg.setMu(Muw);
112
113 switch (mcbsg.getOrder()) {
114 case NNLO:
115 for (int j=0; j<8; j++){
116 mcbsg.setCoeff(j, co * myTHDM.Alstilde5(Muw) * myTHDM.Alstilde5(Muw) * setWCbsg(j, tanb, mt, mHp, Muw, NNLO), NNLO);
117 }
118 case NLO:
119 for (int j=0; j<8; j++){
120 mcbsg.setCoeff(j, co * myTHDM.Alstilde5(Muw) * setWCbsg(j, tanb, mt, mHp, Muw, NLO), NLO);
121 }
122 case LO:
123 for (int j=0; j<8; j++){
124 mcbsg.setCoeff(j, co * setWCbsg(j, tanb, mt, mHp, Muw, LO), LO);
125 }
126 break;
127 default:
128 std::stringstream out;
129 out << mcbsg.getOrder();
130 throw std::runtime_error("THDMMatching::CMbsg(): order " + out.str() + "not implemented");
131 }
132
133 vmcbsg.push_back(mcbsg);
134 return(vmcbsg);
135}
136
137
138 std::vector<WilsonCoefficient>& THDMMatching::CMprimebsg()
139{
140 double Muw = myTHDM.getMuw();
141
142 vmcprimebsg = StandardModelMatching::CMprimebsg();
143 mcprimebsg.setMu(Muw);
144
145 switch (mcprimebsg.getOrder()) {
146 case NNLO:
147 for (int j=0; j<8; j++){
148 mcprimebsg.setCoeff(j, 0., NNLO);//* CHECK ORDER *//
149 }
150 case NLO:
151 for (int j=0; j<8; j++){
152 mcprimebsg.setCoeff(j, 0., NLO);//* CHECK ORDER *//
153 }
154 case LO:
155 for (int j=0; j<8; j++){
156 mcprimebsg.setCoeff(j, 0., LO);
157 }
158 break;
159 default:
160 std::stringstream out;
161 out << mcprimebsg.getOrder();
162 throw std::runtime_error("THDMMatching::CMprimebsg(): order " + out.str() + "not implemented");
163 }
164
165 vmcprimebsg.push_back(mcprimebsg);
166 return(vmcprimebsg);
167}
168
169
170
171/*******************************************************************************
172 * Wilson coefficients calculus, Misiak base for b -> s gamma *
173 * ****************************************************************************/
174
175double THDMMatching::setWCbsg(int i, double tan, double mt, double mhp, double mu, orders order)
176{
177 if ( tanbsg == tan && mtbsg == mt && mhpbsg == mhp && mubsg == mu){
178 switch (order){
179 case NNLO:
180 return ( CWbsgArrayNNLO[i] );
181 case NLO:
182 return ( CWbsgArrayNLO[i] );
183 break;
184 case LO:
185 return ( CWbsgArrayLO[i] );
186 break;
187 default:
188 std::stringstream out;
189 out << order;
190 throw std::runtime_error("order" + out.str() + "not implemeted");
191 }
192 }
193
194 tanbsg = tan; mtbsg = mt; mhpbsg = mhp; mubsg = mu;
195
196 double x = mt*mt/mhp/mhp;
197
198 double x2 = x*x;
199 double x3 = x2*x;
200 double x4 = x3*x;
201 double x5 = x4*x;
202 double xm = 1. - x;
203 double xm2 = xm*xm;
204 double xm3 = xm2*xm;
205 double xm4 = xm3*xm;
206 double xm6 = xm4*xm2;
207 double xm8 = xm4*xm4;
208 double xo = 1. - 1./x;
209 double xo2 = xo*xo;
210 double xo4 = xo*xo2*xo;
211 double xo6 = xo4*xo2;
212 double xo8 = xo4*xo4;
213 double Lx = log(x);
214 double Lx2 = Lx*Lx;
215 double Lx3 = Lx2*Lx;
216 double tan2 = tan*tan;
217 double Li2 = gsl_sf_dilog(1.-1./x);
218
219 double lstmu = 2. * log(mu/mt);
220
221 double n70ct = - ( (7. - 5.*x - 8.*x2)/(36.*xm3) + (2.*x - 3.*x2)*Lx/(6.*xm4) ) * x/2.;
222 double n70fr = ( (3.*x - 5.*x2)/(6.*xm2) + (2.*x - 3.*x2)*Lx/(3.*xm3) ) / 2.;
223
224 double n80ct = - ( (2. + 5.*x - x2)/(12.*xm3) + (x*Lx)/(2.*xm4) ) * x/2.;
225 double n80fr = ( (3.*x - x2)/(2.*xm2) + (x*Lx)/xm3 ) / 2.;
226
227 double n41ct = (-16.*x + 29.*x2 - 7.*x3)/(36.*xm3) + (-2.*x + 3.*x2)*Lx/(6.*xm4);
228
229
230 double n71ct = (797.*x - 5436.*x2 + 7569.*x3 - 1202.*x4)/(486.*xm4) +
231 (36.*x2 - 74.*x3 + 16.*x4)*Li2/(9.*xm4) +
232 ((7.*x - 463.*x2 + 807.*x3 - 63.*x4)*Lx)/(81.*xm3*xm2);
233 double cd71ct = (-31.*x - 18.*x2 + 135.*x3 - 14.*x4)/(27.*xm4) + (-28.*x2 + 46.*x3 + 6.*x4)*Lx/(9.*xm3*xm2);
234 double n71fr = (28.*x - 52.*x2 + 8.*x3)/(3.*xm3) + (-48.*x + 112.*x2 - 32.*x3)*Li2/(9.*xm3) +
235 (66.*x - 128.*x2 + 14.*x3)*Lx/(9.*xm4);
236 double cd71fr = (42.*x - 94.*x2 + 16.*x3)/(9.*xm3) + (32.*x - 56.*x2 - 12.*x3)*Lx/(9.*xm4);
237
238 double n81ct = (1130.*x - 18153.*x2 + 7650.*x3 - 4451.*x4)/(1296.*xm4) +
239 (30.*x2 - 17.*x3 + 13.*x4)*Li2/(6.*xm4) +
240 (-2.*x - 2155.*x2 + 321.*x3 - 468.*x4)*Lx/(216.*xm3*xm2);
241 double cd81ct = (-38.*x - 261.*x2 + 18.*x3 - 7.*x4)/(36.*xm4) + (-31.*x2 - 17.*x3)*Lx/(6.*xm3*xm2);
242 double n81fr = (143.*x - 44.*x2 + 29.*x3)/(8.*xm3) + (-36.*x + 25.*x2 - 17.*x3)*Li2/(6.*xm3) +
243 (165.*x - 7.*x2 + 34.*x3)*Lx/(12.*xm4);
244 double cd81fr = (81.*x - 16.*x2 + 7.*x3)/(6.*xm3) + (19.*x + 17.*x2)*Lx/(3.*xm4);
245
246 double n32ct = (10.*x4 + 30.*x2 - 20.*x)/(27.*xm4) * Li2 +
247 (30.*x3 - 66.*x2 - 56.*x)/(81.*xm4) * Lx + (6.*x3 - 187.*x2 + 213.*x)/(-81.*xm3);
248 double cd32ct = (-30.*x2 + 20.*x)/(27.*xm4)*Lx + (-35.*x3 + 145.*x2 - 80.*x)/(-81.*xm3);
249
250 double n42ct = (515.*x4 - 906.*x3 + 99.*x2 + 182.*x)/(54.*xm4) * Li2 +
251 (1030.*x4 - 2763.*x3 - 15.*x2 + 980.*x)/(-108.*xm3*xm2)*Lx +
252 (-29467.*x4 + 68142.*x3 - 6717.*x2 - 18134.*x)/(1944.*xm4);
253 double cd42ct = (-375.*x3 - 95.*x2 + 182.*x)/(-54.*xm3*xm2)*Lx +
254 (133.*x4 - 108.*x3 + 4023.*x2 - 2320.*x)/(324.*xm4);
255
256 double cd72ct = -(x * (67930.*x4 - 470095.*x3 + 1358478.*x2 - 700243.*x + 54970.))/(-2187.*xm3*xm2) +
257 (x * (10422.*x4 - 84390.*x3 + 322801.*x2 - 146588.*x + 1435.))/(729.*xm6)*Lx +
258 (2.*x2 * (260.*x3 - 1515.*x2 + 3757.*x - 1446.))/(-27. * xm3*xm2) * Li2;
259 double ce72ct = (x * (-518.*x4 + 3665.*x3 - 17397.*x2 + 3767.*x + 1843.))/(-162.*xm3*xm2) +
260 (x2 * (-63.*x3 + 532.*x2 + 2089.*x - 1118.))/(27.*xm6)*Lx;
261 double cd72fr = -(x * (3790.*x3 - 22511.*x2 + 53614.*x - 21069.))/(81.*xm4) -
262 (2.*x * (-1266.*x3 + 7642.*x2 - 21467.*x + 8179.))/(-81.*xm3*xm2)*Lx +
263 (8.*x * (139.*x3 - 612.*x2 + 1103.*x - 342.))/(27.*xm4) * Li2;
264 double ce72fr = -(x * (284.*x3 - 1435.*x2 + 4304.*x - 1425.))/(27.*xm4) -
265 (2.*x * (63.*x3 - 397.*x2 - 970.*x + 440.))/(-27.*xm3*xm2)*Lx;
266
267 double cd82ct = -(x * (522347.*x4 - 2423255.*x3 + 2706021.*x2 - 5930609.*x + 148856))/(-11664.*xm3*xm2) +
268 (x * (51948.*x4 - 233781.*x3 + 48634.*x2 - 698693.*x + 2452.))/(1944.*xm6)*Lx +
269 (x2 * (481.*x3 - 1950.*x2 + 1523.*x - 2550.))/(-18.*xm3*xm2) * Li2;
270 double ce82ct = (x * (-259.*x4 + 1117.*x3 + 2925.*x2 + 28411.*x + 2366.))/(-216.*xm3*xm2) -
271 (x2 * (139.*x2 + 2938.*x + 2683.))/(36.*xm6)*Lx;
272 double cd82fr = -(x * (1463.*x3 - 5794.*x2 + 5543.*x - 15036.))/(27.*xm4) -
273 (x * (-1887.*x3 + 7115.*x2 + 2519.*x + 19901.))/(-54.*xm3*xm2)*Lx -
274 (x * (-629.*x3 + 2178.*x2 - 1729.*x + 2196.))/(18.*xm4) * Li2;
275 double ce82fr = -(x * (259.*x3 - 947.*x2 - 251.*x - 5973.))/(36.*xm4)-
276 (x * (139.*x2 + 2134.*x + 1183.))/(-18.*xm3*xm2)*Lx;
277
278 double n72ct = 0.;
279 if (mhp < 50.)
280 n72ct = -274.2/x5 - 72.13*Lx/x5 + 24.41/x4 - 168.3*Lx/x4 + 79.15/x3 -
281 103.8*Lx/x3 + 47.09/x2 - 38.12*Lx/x2 + 15.35/x - 8.753*Lx/x + 3.970;
282 else if (mhp < mt)
283 n72ct = 1.283 + 0.7158 * xo + 0.4119 * xo2 + 0.2629 * xo*xo2 + 0.1825 * xo4 +
284 0.1347 * xo*xo4 + 0.1040 * xo6 + 0.0831 * xo*xo6 + 0.06804 * xo8 +
285 0.05688 * xo*xo8 + 0.04833 * xo2*xo8 + 0.04163 * xo*xo2*xo8 + 0.03625 * xo4*xo8 +
286 0.03188 * xo*xo4*xo8 + 0.02827 * xo6*xo8 + 0.02525 * xo*xo6*xo8 + 0.02269 * xo8*xo8;
287 else if (mhp < 520.)
288 n72ct = 1.283 - 0.7158 * xm - 0.3039 * xm2 - 0.1549 * xm3 - 0.08625 * xm4 -
289 0.05020 * xm3*xm2 - 0.02970 * xm6 - 0.01740 * xm3*xm4 - 0.009752 * xm8 -
290 0.004877 * xm3*xm6 - 0.001721 * xm2*xm8 + 0.0003378 * xm3*xm8 + 0.001679 * xm4*xm8 +
291 0.002542 * xm*xm4*xm8 + 0.003083 * xm6*xm8 + 0.003404 * xm*xm6*xm8 + 0.003574 * xm8*xm8;
292 else n72ct = -823.0*x5 + 42.30*x5*Lx3 - 412.4*x5*Lx2 - 3362*x5*Lx -
293 1492*x4 - 23.26*x4*Lx3 - 541.4*x4*Lx2 - 2540*x4*Lx -
294 1158*x3 - 34.50*x3*Lx3 - 348.2*x3*Lx2 - 1292*x3*Lx -
295 480.9*x2 - 20.73*x2*Lx3 - 112.4*x2*Lx2 - 396.1*x2*Lx -
296 8.278*x + 0.9225*x*Lx2 + 4.317*x*Lx;
297
298 double n72fr = 0.;
299 if (mhp < 50.)
300 n72fr = -( 194.3/x5 + 101.1*Lx/x5 - 24.97/x4 + 168.4*Lx/x4 - 78.90/x3 +
301 106.2*Lx/x3 - 49.32/x2 + 38.43*Lx/x2 - 12.91/x + 9.757*Lx/x + 8.088 );
302 else if (mhp < mt)
303 n72fr = -( 12.82 - 1.663 * xo - 0.8852 * xo2 - 0.4827 * xo*xo2 - 0.2976 * xo4 -
304 0.2021 * xo*xo4 - 0.1470 * xo6 - 0.1125 * xo*xo6 - 0.08931 * xo8 -
305 0.07291 * xo*xo8 - 0.06083 * xo2*xo8 - 0.05164 * xo*xo2*xo8 - 0.04446 * xo4*xo8 -
306 0.03873 * xo*xo4*xo8 - 0.03407 * xo6*xo8 - 0.03023 * xo*xo6*xo8 - 0.02702 * xo8*xo8 );
307 else if (mhp < 400.)
308 n72fr = -( 12.82 + 1.663 * xm + 0.7780 * xm2 + 0.3755 * xm3 + 0.1581 * xm4 +
309 0.03021 * xm3*xm2 - 0.04868 * xm6 - 0.09864 * xm3*xm4 - 0.1306 * xm8 -
310 0.1510 * xm3*xm6 - 0.1637 * xm2*xm8 - 0.1712 * xm3*xm8 - 0.1751 * xm4*xm8 -
311 0.1766 * xm*xm4*xm8 - 0.1763 * xm6*xm8 - 0.1748 * xm*xm6*xm8 - 0.1724 * xm8*xm8 );
312 else n72fr = -( 2828 * x5 - 66.63 * x5*Lx3 + 469.4 * x5*Lx2 + 1986 * x5*Lx +
313 1480 * x4 + 36.08 * x4*Lx3 + 323.2 * x4*Lx2 + 169.9 * x4*Lx +
314 166.7 * x3 + 19.73 * x3*Lx3 - 46.61 * x3*Lx2 - 826.2 * x3*Lx -
315 524.1 * x2 - 8.889 * x2*Lx3 - 195.7 * x2*Lx2 - 870.3 * x2*Lx -
316 572.2 * x - 20.94 * x*Lx3 - 123.5 * x*Lx2 - 453.5 * x*Lx );
317
318 double n82ct = 0.;
319 if (mhp < 50.)
320 n82ct = 826.2/x5 - 300.7*Lx/x5 + 96.35/x4 + 91.89*Lx/x4 - 66.39/x3 +
321 78.58*Lx/x3 - 39.76/x2 + 20.02*Lx/x2 - 5.214/x + 2.278;
322 else if (mhp < mt)
323 n82ct = 1.188 + 0.4078 * xo + 0.2002 * xo2 + 0.1190 * xo*xo2 + 0.07861 * xo4 +
324 0.05531 * xo*xo4 + 0.04061 * xo6 + 0.03075 * xo*xo6 + 0.02386 * xo8 +
325 0.01888 * xo*xo8 + 0.01520 * xo2*xo8 + 0.01241 * xo*xo2*xo8 + 0.01026 * xo4*xo8 +
326 0.008575 * xo*xo4*xo8 + 0.007238 * xo6*xo8 + 0.006164 * xo*xo6*xo8 + 0.005290 * xo8*xo8;
327 else if (mhp < 600.)
328 n82ct = 1.188 - 0.4078 * xm - 0.2076 * xm2 - 0.1265 * xm3 - 0.08570 * xm4 -
329 0.06204 * xm3*xm2 - 0.04689 * xm6 - 0.03652 * xm3*xm4 - 0.02907 * xm8 -
330 0.02354 * xm3*xm6 - 0.01933 * xm2*xm8 - 0.01605 * xm3*xm8 - 0.01345 * xm4*xm8 -
331 0.01137 * xm*xm4*xm8 - 0.009678 * xm6*xm8 - 0.008293 * xm*xm6*xm8 - 0.007148 * xm8*xm8;
332 else n82ct = -19606 * x5 - 226.7 * x5*Lx3 - 5251 * x5*Lx2 - 26090 * x5*Lx -
333 9016 * x4 - 143.4 * x4*Lx3 - 2244 * x4*Lx2 - 10102 * x4*Lx -
334 3357 * x3 - 66.32 * x3*Lx3 - 779.6 * x3*Lx2 - 3077 * x3*Lx -
335 805.5 * x2 - 22.98 * x2*Lx3 - 169.1 * x2*Lx2 - 602.7 * x2*Lx +
336 0.7437 * x + 0.6908 * x*Lx2 + 3.238 * x*Lx;
337
338 double n82fr = 0.;
339 if (mhp < 50.)
340 n82fr = -( -1003/x5 + 476.9*Lx/x5 - 205.7/x4 - 71.62*Lx/x4 + 62.26/x3 -
341 110.7*Lx/x3 + 63.74/x2 - 35.42*Lx/x2 + 10.89/x - 3.174 );
342 else if (mhp < mt)
343 n82fr = -( -0.6110 - 1.095 * xo - 0.4463 * xo2 - 0.2568 * xo*xo2 - 0.1698 * xo4 -
344 0.1197 * xo*xo4 - 0.08761 * xo6 - 0.06595 * xo*xo6 - 0.05079 * xo8 -
345 0.03987 * xo*xo8 - 0.03182 * xo2*xo8 - 0.02577 * xo*xo2*xo8 - 0.02114 * xo4*xo8 -
346 0.01754 * xo*xo4*xo8 - 0.01471 * xo6*xo8 - 0.01244 * xo*xo6*xo8 - 0.01062 * xo8*xo8 );
347 else if (mhp < 520.)
348 n82fr = -( -0.6110 + 1.095 * xm + 0.6492 * xm2 + 0.4596 * xm3 + 0.3569 * xm4 +
349 0.2910 * xm3*xm2 + 0.2438 * xm6 + 0.2075 * xm3*xm4 + 0.1785 * xm8 +
350 0.1546 * xm3*xm6 + 0.1347 * xm2*xm8 + 0.1177 * xm3*xm8 + 0.1032 * xm4*xm8 +
351 0.09073 * xm*xm4*xm8 + 0.07987 * xm6*xm8 + 0.07040 * xm*xm6*xm8 + 0.06210 * xm8*xm8 );
352 else n82fr = -( -15961 * x5 + 1003 * x5*Lx3 - 2627 * x5*Lx2 - 29962 * x5*Lx -
353 11683 * x4 + 54.66 * x4*Lx3 - 2777 * x4*Lx2 - 17770 * x4*Lx -
354 6481 * x3 - 40.68 * x3*Lx3 - 1439 * x3*Lx2 - 7906 * x3*Lx -
355 2943 * x2 - 31.83 * x2*Lx3 - 612.6 * x2*Lx2 - 2770 * x2*Lx -
356 929.8 * x - 19.80 * x*Lx3 - 174.7 * x*Lx2 - 658.4 * x*Lx );
357
358
359 switch (order){
360 case NNLO:
361 CWbsgArrayNNLO[2] = ( n32ct + cd32ct * lstmu ) / tan2;
362 CWbsgArrayNNLO[3] = ( n42ct + cd42ct * lstmu ) / tan2;
363 CWbsgArrayNNLO[4] = 2./15. * n41ct / tan2 - CWbsgArrayNNLO[2] / 10.;
364 CWbsgArrayNNLO[5] = 1./4. * n41ct / tan2 - CWbsgArrayNNLO[2] * 3./16.;
365 CWbsgArrayNNLO[6] = ( n72ct + cd72ct * lstmu + ce72ct * lstmu * lstmu)/tan2 +
366 n72fr + cd72fr * lstmu + ce72fr * lstmu * lstmu
367 - 1./3.*CWbsgArrayNNLO[2] - 4./9.*CWbsgArrayNNLO[3] - 20./3.*CWbsgArrayNNLO[4] - 80./9.*CWbsgArrayNNLO[5];
368 CWbsgArrayNNLO[7] = ( n82ct + cd82ct * lstmu + ce82ct * lstmu * lstmu)/tan2 +
369 n82fr + cd82fr * lstmu + ce82fr * lstmu * lstmu
370 + CWbsgArrayNNLO[2] - 1./6.*CWbsgArrayNNLO[3] - 20.*CWbsgArrayNNLO[4] - 10./3.*CWbsgArrayNNLO[5];
371 case NLO:
372 CWbsgArrayNLO[3] = n41ct / tan2;
373 CWbsgArrayNLO[6] = ( n71ct + cd71ct * lstmu ) / tan2 + n71fr + cd71fr * lstmu - 4./9.*CWbsgArrayNLO[3];
374 CWbsgArrayNLO[7] = ( n81ct + cd81ct * lstmu ) / tan2 + n81fr + cd81fr * lstmu - 1./6.*CWbsgArrayNLO[3];
375 case LO:
376 CWbsgArrayLO[6] = n70ct /tan2 + n70fr ;
377 CWbsgArrayLO[7] = n80ct /tan2 + n80fr ;
378 break;
379 default:
380 std::stringstream out;
381 out << order;
382 throw std::runtime_error("order" + out.str() + "not implemeted");
383 }
384
385 /*std::cout << "CWbsgArrayLO[6] = " << CWbsgArrayLO[6] << std::endl;
386 std::cout << "CWbsgArrayLO[7] = " << CWbsgArrayLO[7] << std::endl << std::endl;
387 std::cout << "CWbsgArrayNLO[3] = " << CWbsgArrayNLO[3] << std::endl;
388 std::cout << "CWbsgArrayNLO[6] = " << CWbsgArrayNLO[6] << std::endl;
389 std::cout << "CWbsgArrayNLO[7] = " << CWbsgArrayNLO[7] << std::endl << std::endl;
390 std::cout << "CWbsgArrayNNLO[2] = " << CWbsgArrayNNLO[2] << std::endl;
391 std::cout << "CWbsgArrayNNLO[3] = " << CWbsgArrayNNLO[3] << std::endl;
392 std::cout << "CWbsgArrayNNLO[4] = " << CWbsgArrayNNLO[4] << std::endl;
393 std::cout << "CWbsgArrayNNLO[5] = " << CWbsgArrayNNLO[5] << std::endl;
394 std::cout << "CWbsgArrayNNLO[6] = " << CWbsgArrayNNLO[6] << std::endl;
395 std::cout << "CWbsgArrayNNLO[7] = " << CWbsgArrayNNLO[7] << std::endl << std::endl;*/
396
397
398 switch (order){
399 case NNLO:
400 return ( CWbsgArrayNNLO[i] );
401 case NLO:
402 return ( CWbsgArrayNLO[i] );
403 break;
404 case LO:
405 return ( CWbsgArrayLO[i] );
406 break;
407 default:
408 std::stringstream out;
409 out << order;
410 throw std::runtime_error("order" + out.str() + "not implemeted");
411 }
412}
413
414
415/*******************************************************************************
416 * Muon g-2 (according to arxiv:1409.3199 *
417 * ****************************************************************************/
418
420
421 double gminus2muLO;
422
423 double pi=M_PI;
424 double GF=myTHDM.getGF();
426 std::string modelflag=myTHDM.getModelTypeflag();
427 double mHl2=myTHDM.getmHl2();
428 double mHh2=myTHDM.getmHh2();
429 double mA2=myTHDM.getmA2();
430 double mHp2=myTHDM.getmHp2();
431 double tanb=myTHDM.gettanb();
432 double sinb=tanb/sqrt(1.0+tanb*tanb);
433 double cosb=1.0/sqrt(1.0+tanb*tanb);
434 double bma=myTHDM.getbma();
435 double sina=sinb*cos(bma)-cosb*sin(bma);
436 double cosa=cosb*cos(bma)+sinb*sin(bma);
437
438 double ymu_h, ymu_H, ymu_A;
439 double rmu_hSM, rmu_h, rmu_H, rmu_A, rmu_Hp;
440 double part_hSM, part_h, part_H, part_A, part_Hp;
441
442 if( modelflag == "type1" ) {
443 ymu_h=cosa/sinb;
444 ymu_H=sina/sinb;
445 ymu_A=-1.0/tanb;
446 }
447 else if( modelflag == "type2" ) {
448 ymu_h=-sina/cosb;
449 ymu_H=cosa/cosb;
450 ymu_A=tanb;
451 }
452 else if( modelflag == "typeX" ) {
453 ymu_h=-sina/cosb;
454 ymu_H=cosa/cosb;
455 ymu_A=tanb;
456 }
457 else if( modelflag == "typeY" ) {
458 ymu_h=cosa/sinb;
459 ymu_H=sina/sinb;
460 ymu_A=-1.0/tanb;
461 }
462 else {
463 throw std::runtime_error("modelflag can be only any of \"type1\", \"type2\", \"typeX\" or \"typeY\"");
464 }
465
466 if( mHl2<1.0 || mHh2<1.0 || mA2<1.0 || mHp2<1.0)
467 {
468 throw std::runtime_error("The implemented approximation for g-2_\\mu only works for Higgs masses above 1 GeV.");
469 }
470 rmu_hSM=mMU*mMU/15647.5081;
471 rmu_h=mMU*mMU/mHl2;
472 rmu_H=mMU*mMU/mHh2;
473 rmu_A=mMU*mMU/mA2;
474 rmu_Hp=mMU*mMU/mHp2;
475
476 //https://arxiv.org/pdf/1409.3199.pdf
477
478 part_hSM=rmu_hSM*(-7.0/6.0-log(rmu_hSM));
479 part_h=ymu_h*ymu_h*rmu_h*(-7.0/6.0-log(rmu_h));
480 part_H=ymu_H*ymu_H*rmu_H*(-7.0/6.0-log(rmu_H));
481 part_A=ymu_A*ymu_A*rmu_A*(11.0/6.0+log(rmu_A));
482 part_Hp=-ymu_A*ymu_A*rmu_Hp*1.0/6.0;
483
484 gminus2muLO=GF*mMU*mMU/(4.0*pi*pi*sqrt(2.0)) * (-part_hSM+part_h+part_H+part_A+part_Hp);
485
486 return(gminus2muLO);
487}
488
489struct __f_params{
490 double a;
491};
492
493double __fS_integrand(double x, void* p){
494 __f_params &params= *reinterpret_cast<__f_params *>(p);
495 double integ = (2.0*x*(1.0-x)-1.0) * log(x*(1.0-x)/params.a) / (x*(1.0-x)-params.a);
496 return integ;
497}
498
499double __fPS_integrand(double x, void* p){
500 __f_params &params= *reinterpret_cast<__f_params *>(p);
501 double integ = log(x*(1.0-x)/params.a) / (x*(1.0-x)-params.a);
502 return integ;
503}
504
505double gscalar(double r)
506{
507 __f_params params;
508 params.a=r;
509
510 double result;
511 gsl_integration_glfixed_table * w
512 = gsl_integration_glfixed_table_alloc(100);
513 gsl_function F;
514
515 F.function = &__fS_integrand;
516 F.params = reinterpret_cast<void *>(&params);
517
518 result = gsl_integration_glfixed (&F, 0, 1, w);
519
520 gsl_integration_glfixed_table_free (w);
521
522 return result;
523}
524
525
526double gpseudoscalar(double r)
527{
528 __f_params params;
529 params.a=r;
530
531 double result;
532 gsl_integration_glfixed_table * w
533 = gsl_integration_glfixed_table_alloc(100);
534 gsl_function F;
535
536 F.function = &__fPS_integrand;
537 F.params = reinterpret_cast<void *>(&params);
538
539 result = gsl_integration_glfixed (&F, 0, 1, w);
540
541 gsl_integration_glfixed_table_free (w);
542
543 return result;
544}
545
547
548 double gminus2muNLO;
549
550 double pi=M_PI;
551 double GF=myTHDM.getGF();
552 double aem=myTHDM.getAle();
555 double mt=myTHDM.getQuarks(QCD::TOP).getMass();
556 double mb=myTHDM.getQuarks(QCD::BOTTOM).getMass();
557 std::string modelflag=myTHDM.getModelTypeflag();
558 double mHl2=myTHDM.getmHl2();
559 double mHh2=myTHDM.getmHh2();
560 double mA2=myTHDM.getmA2();
561 double mHp2=myTHDM.getmHp2();
562 double tanb=myTHDM.gettanb();
563 double sinb=tanb/sqrt(1.0+tanb*tanb);
564 double cosb=1.0/sqrt(1.0+tanb*tanb);
565 double bma=myTHDM.getbma();
566 double sina=sinb*cos(bma)-cosb*sin(bma);
567 double cosa=cosb*cos(bma)+sinb*sin(bma);
568
569 double ymu_h, ymu_H, ymu_A, yb_h, yb_H, yb_A, yt_h, yt_H, yt_A;
570 double rtau_hSM, rtau_h, rtau_H, rtau_A, rt_hSM, rt_h, rt_H, rt_A, rb_hSM, rb_h, rb_H, rb_A;
571 double part_hSM, part_h, part_H, part_A;
572
573 yt_h=cosa/sinb;
574 yt_H=sina/sinb;
575 yt_A=1.0/tanb;
576
577 if( modelflag == "type1" ) {
578 ymu_h=cosa/sinb;
579 ymu_H=sina/sinb;
580 ymu_A=-1.0/tanb;
581 yb_h=ymu_h;
582 yb_H=ymu_H;
583 yb_A=ymu_A;
584 }
585 else if( modelflag == "type2" ) {
586 ymu_h=-sina/cosb;
587 ymu_H=cosa/cosb;
588 ymu_A=tanb;
589 yb_h=ymu_h;
590 yb_H=ymu_H;
591 yb_A=ymu_A;
592 }
593 else if( modelflag == "typeX" ) {
594 ymu_h=-sina/cosb;
595 ymu_H=cosa/cosb;
596 ymu_A=tanb;
597 yb_h=yt_h;
598 yb_H=yt_H;
599 yb_A=-yt_A;
600 }
601 else if( modelflag == "typeY" ) {
602 ymu_h=cosa/sinb;
603 ymu_H=sina/sinb;
604 ymu_A=-1.0/tanb;
605 yb_h=-sina/cosb;
606 yb_H=cosa/cosb;
607 yb_A=tanb;
608 }
609 else {
610 throw std::runtime_error("modelflag can be only any of \"type1\", \"type2\", \"typeX\" or \"typeY\"");
611 }
612
613 if( mHl2<mMU*mMU || mHh2<mMU*mMU || mA2<mMU*mMU || mHp2<mMU*mMU)
614 {
615 throw std::runtime_error("The implemented two-loop approximation for g-2_\\mu only works for Higgs masses above m_mu^2.");
616 }
617 rtau_hSM=mTAU*mTAU/15647.5081;
618 rtau_h=mTAU*mTAU/mHl2;
619 rtau_H=mTAU*mTAU/mHh2;
620 rtau_A=mTAU*mTAU/mA2;
621 rt_hSM=mt*mt/15647.5081;
622 rt_h=mt*mt/mHl2;
623 rt_H=mt*mt/mHh2;
624 rt_A=mt*mt/mA2;
625 rb_hSM=mb*mb/15647.5081;
626 rb_h=mb*mb/mHl2;
627 rb_H=mb*mb/mHh2;
628 rb_A=mb*mb/mA2;
629
630 part_hSM=rtau_hSM*gscalar(rtau_hSM)+(4.0/3.0)*rt_hSM*gscalar(rt_hSM)+(1.0/3.0)*rb_hSM*gscalar(rb_hSM);
631 part_h=ymu_h*(ymu_h*rtau_h*gscalar(rtau_h)+(4.0/3.0)*yt_h*rt_h*gscalar(rt_h)+(1.0/3.0)*yb_h*rb_h*gscalar(rb_h));
632 part_H=ymu_H*(ymu_H*rtau_H*gscalar(rtau_H)+(4.0/3.0)*yt_H*rt_H*gscalar(rt_H)+(1.0/3.0)*yb_H*rb_H*gscalar(rb_H));
633 part_A=ymu_A*(ymu_A*rtau_A*gpseudoscalar(rtau_A)+(4.0/3.0)*yt_A*rt_A*gpseudoscalar(rt_A)+(1.0/3.0)*yb_A*rb_A*gpseudoscalar(rb_A));
634
635 gminus2muNLO=GF*mMU*mMU/(4.0*pi*pi*pi*sqrt(2.0)) * aem * (-part_hSM+part_h+part_H+part_A);
636
637 return(gminus2muNLO);
638}
639
640std::vector<WilsonCoefficient>& THDMMatching::CMgminus2mu() {
641
642 vmcgminus2mu = StandardModelMatching::CMgminus2mu();
643
644 double gminus2muLOvalue=gminus2muLO();
645 double gminus2muNLOvalue=gminus2muNLO();
646
647 switch (mcgminus2mu.getOrder()) {
648 case LO:
649 mcgminus2mu.setCoeff(0, gminus2muLOvalue, LO); //g-2_muR
650 mcgminus2mu.setCoeff(1, 0., LO); //g-2_muL
651 break;
652 case NLO:
653 mcgminus2mu.setCoeff(0, gminus2muLOvalue+gminus2muNLOvalue, NLO); //g-2_muR
654 mcgminus2mu.setCoeff(1, 0., NLO); //g-2_muL
655 break;
656 case NNLO:
657 default:
658 std::stringstream out;
659 out << mcgminus2mu.getOrder();
660 throw std::runtime_error("THDMMatching::CMgminus2mu(): order " + out.str() + " not implemented.\nOnly leading order (LO) or next-to-leading order (NLO) are allowed.");
661 }
662
663 vmcgminus2mu.push_back(mcgminus2mu);
664 return(vmcgminus2mu);
665
666}
@ 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
double gscalar(double r)
double gpseudoscalar(double r)
double __fPS_integrand(double x, void *p)
double __fS_integrand(double x, void *p)
const gslpp::complex computelamt_s() const
The product of the CKM elements .
Definition: CKM.cpp:174
virtual std::vector< WilsonCoefficient > & CMprimebsg()=0
virtual std::vector< WilsonCoefficient > & CMbsg()=0
double getMass_scale() const
A get method to access the scale at which the particle mass is defined.
Definition: Particle.h:133
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
@ B_C
Definition: QCD.h:347
@ B_P
Definition: QCD.h:345
const Meson & getMesons(const QCD::meson m) const
A get method to access a meson as an object of the type Meson.
Definition: QCD.h:526
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
@ BOTTOM
Definition: QCD.h:329
@ TOP
Definition: QCD.h:328
const double getMut() const
A get method to access the threshold between six- and five-flavour theory in GeV.
Definition: QCD.h:573
@ MU
Definition: QCD.h:314
@ TAU
Definition: QCD.h:316
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
const double getMuw() const
A get method to retrieve the matching scale around the weak scale.
const Particle & getLeptons(const QCD::lepton p) const
A get method to retrieve the member object of a lepton.
const CKM & getCKM() const
A get method to retrieve the member object of type CKM.
const gslpp::matrix< gslpp::complex > getVCKM() const
A get method to retrieve the CKM matrix.
virtual const double Mw() const
The SM prediction for the -boson mass in the on-shell scheme, .
const double getGF() const
A get method to retrieve the Fermi constant .
const double Alstilde5(const double mu) const
The value of at any scale with the number of flavours and full EW corrections.
const double getAle() const
A get method to retrieve the fine-structure constant .
A class for the matching in the Standard Model.
virtual std::vector< WilsonCoefficient > & CMdbs2()
,
A base class for symmetric Two-Higgs-Doublet models.
Definition: THDM.h:120
double getmHp() const
A method get the charged Higgs mass.
Definition: THDM.h:471
std::string getModelTypeflag() const
A method get the THDM model type.
Definition: THDM.h:242
double gettanb() const
A method get .
Definition: THDM.h:283
double getbma() const
A method get .
Definition: THDM.h:307
double getmHh2() const
A method get the squared mass of the "non-125 GeV" neutral scalar Higgs.
Definition: THDM.h:365
double getmHl2() const
A method get the squared mass of the lighter neutral scalar Higgs.
Definition: THDM.h:339
double getmHp2() const
A method get the squared charged Higgs mass.
Definition: THDM.h:457
double getmA2() const
A method get the squared mass of the pseudoscalar Higgs A.
Definition: THDM.h:423
gslpp::matrix< gslpp::complex > myCKM
Definition: THDMMatching.h:88
virtual std::vector< WilsonCoefficient > & CMgminus2mu()
Wilson coefficient for .
virtual std::vector< WilsonCoefficient > & CMprimebsg()
operator basis: current current; qcd penguins; magnetic and chromomagnetic penguins; semileptonic
double tanbsg
Definition: THDMMatching.h:92
virtual std::vector< WilsonCoefficient > & CMdbs2()
virtual double gminus2muLO()
Calculates amplitudes for at one loop from .
double setWCbsg(int i, double tan, double mt, double mhp, double mu, orders order)
WilsonCoefficient mcbsg
Definition: THDMMatching.h:89
const THDM & myTHDM
Definition: THDMMatching.h:87
WilsonCoefficient mcprimebsg
Definition: THDMMatching.h:89
double mubsg
Definition: THDMMatching.h:92
virtual double gminus2muNLO()
Calculates amplitudes for at approximate two-loop from .
WilsonCoefficient mcdbs2
Definition: THDMMatching.h:89
WilsonCoefficient mcbtaunu
Definition: THDMMatching.h:89
THDMMatching(const THDM &THDM_i)
double mhpbsg
Definition: THDMMatching.h:92
double mtbsg
Definition: THDMMatching.h:92
virtual std::vector< WilsonCoefficient > & CMbsg()
operator basis: current current; qcd penguins; magnetic and chromomagnetic penguins; semileptonic
double CWbsgArrayLO[8]
Definition: THDMMatching.h:91
double CWbsgArrayNNLO[8]
Definition: THDMMatching.h:91
double CWbsgArrayNLO[8]
Definition: THDMMatching.h:91
virtual std::vector< WilsonCoefficient > & CMdiujleptonknu(int i, int j, int k)
WilsonCoefficient mcgminus2mu
Definition: THDMMatching.h:89
void setCoeff(const gslpp::vector< gslpp::complex > &z, orders order_i)
virtual void setMu(double mu)
orders getOrder() const
orders
An enum type for orders in QCD.
Definition: OrderScheme.h:33
cd Li2(cd x)
Definition: hpl.h:1011