CKM.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 HEPfit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #include "CKM.h"
9 
11 {
12 }
13 
14 CKM::CKM(const CKM& orig)
15 {
16  Rho = orig.Rho;
17  Eta = orig.Eta;
18  Lambda = orig.Lambda;
19  A = orig.A;
20 
21  s12 = orig.s12;
22  s13 = orig.s13;
23  s23 = orig.s23;
24  delta = orig.delta;
25  c12 = orig.c12;
26  c23 = orig.c23;
27  c13 = orig.c13;
28 
29  Vud = orig.Vud;
30  Vcd = orig.Vcd;
31  Vtd = orig.Vtd;
32  Vus = orig.Vus;
33  Vcs = orig.Vcs;
34  Vts = orig.Vts;
35  Vub = orig.Vub;
36  Vcb = orig.Vcb;
37  Vtb = orig.Vtb;
38 
39 }
40 
42 {
43 }
44 
46 {
47  Vud = x(0, 0);
48  Vus = x(0, 1);
49  Vub = x(0, 2);
50  Vcd = x(1, 0);
51  Vcs = x(1, 1);
52  Vcb = x(1, 2);
53  Vtd = x(2, 0);
54  Vts = x(2, 1);
55  Vtb = x(2, 2);
56 }
57 
59 {
60  x.assign(0, 0, Vud);
61  x.assign(0, 1, Vus);
62  x.assign(0, 2, Vub);
63  x.assign(1, 0, Vcd);
64  x.assign(1, 1, Vcs);
65  x.assign(1, 2, Vcb);
66  x.assign(2, 0, Vtd);
67  x.assign(2, 1, Vts);
68  x.assign(2, 2, Vtb);
69 }
70 
71 void CKM::setWolfenstein(double Lambda_v, double A_v, double Rho_v, double Eta_v)
72 {
73  Rho = Rho_v;
74  Eta = Eta_v;
75  Lambda = Lambda_v;
76  A = A_v;
77 
78  gslpp::complex num(Rho, Eta);
79  num = num * sqrt(1. - pow(A, 2.) * pow(Lambda, 4.));
80  gslpp::complex den = sqrt(1. - pow(Lambda, 2.)) * gslpp::complex(1. - pow(A, 2.) * pow(Lambda, 4.) * Rho, -pow(A, 2.) * pow(Lambda, 4.) * Eta);
81  gslpp::complex ratio = num / den;
82 
83  double rho_nb = ratio.real();
84  double eta_nb = ratio.imag();
85 
86  s12 = Lambda;
87  s23 = A * pow(Lambda, 2.);
88  s13 = (gslpp::complex(A * pow(Lambda, 3.) * rho_nb, -A * pow(Lambda, 3.) * eta_nb)).abs();
89  delta = -(gslpp::complex(A * pow(Lambda, 3.) * rho_nb, -A * pow(Lambda, 3.) * eta_nb)).arg();
90 
91  c12 = sqrt(1. - pow(s12, 2.));
92  c23 = sqrt(1. - pow(s23, 2.));
93  c13 = sqrt(1. - pow(s13, 2.));
94 
95  Vud = gslpp::complex(c12*c13, 0.);
96  Vus = gslpp::complex(s12*c13, 0.);
97  Vub = gslpp::complex(s13, -delta, true);
98 
99  Vcd = -s12 * c23 - gslpp::complex(c12 * s23*s13, delta, true);
100  Vcs = c12 * c23 - gslpp::complex(s12 * s23*s13, delta, true);
101  Vcb = gslpp::complex(s23*c13, 0.);
102 
103  Vtd = s12 * s23 - gslpp::complex(c12 * c23*s13, delta, true);
104  Vts = -c12 * s23 - gslpp::complex(s12 * c23*s13, delta, true);
105  Vtb = gslpp::complex(c23*c13, 0.);
106 
107  return;
108 }
109 
110 void CKM::setCKM(double Vud_v, double Vcb_v, double Vub_v, double gamma_v)
111 {
112  s13 = Vub_v;
113  c13 = sqrt(1. - s13 * s13);
114  c12 = Vud_v / c13;
115  s12 = sqrt(1. - c12 * c12);
116  s23 = Vcb_v / c13;
117  c23 = sqrt(1. - s23 * s23);
118  double a = c12 * s13 * s23 / s12 / c23;
119  delta = 2. * atan((1. + sqrt(1. - (a * a - 1.) * pow(tan(gamma_v), 2.))*(cos(gamma_v) < 0. ? 1. : (-1.))) / (a - 1.) / tan(gamma_v));
120 
121  Vud = gslpp::complex(c12*c13, 0.);
122  Vus = gslpp::complex(s12*c13, 0.);
123  Vub = gslpp::complex(s13, -delta, true);
124 
125  Vcd = -s12 * c23 - gslpp::complex(c12 * s23*s13, delta, true);
126  Vcs = c12 * c23 - gslpp::complex(s12 * s23*s13, delta, true);
127  Vcb = gslpp::complex(s23*c13, 0.);
128 
129  Vtd = s12 * s23 - gslpp::complex(c12 * c23*s13, delta, true);
130  Vts = -c12 * s23 - gslpp::complex(s12 * c23*s13, delta, true);
131  Vtb = gslpp::complex(c23*c13, 0.);
132 
133  // Wolfenstein to all orders
134  Lambda = s12;
135  A = s23 / Lambda / Lambda;
136  gslpp::complex Rb = Vud * Vub.conjugate() / (Vcd * Vcb.conjugate());
137  Rho = -Rb.real();
138  Eta = -Rb.imag();
139 
140  // std::cout << Lambda << " " << A << " " << Rho << " " << Eta << std::endl;
141  return;
142 }
143 
144 // Wolfenstein parameters
145 
146 double CKM::getRho() const
147 {
148  return Rho;
149 }
150 
151 double CKM::getEta() const
152 {
153  return Eta;
154 }
155 
156 double CKM::getLambda() const
157 {
158  return Lambda;
159 }
160 
161 double CKM::getA() const
162 {
163  return A;
164 }
165 
167 {
168  return (s13 * cos(delta) / s12 / s23);
169 }
170 
172 {
173  return (s13 * sin(delta) / s12 / s23);
174 }
175 
176 // Gilman parameterization
177 
178 double CKM::gets12()
179 {
180  return getLambda();
181 }
182 
183 double CKM::gets13()
184 {
185  return s13;
186 }
187 
188 double CKM::gets23()
189 {
190  return s23;
191 }
192 
193 double CKM::getc12()
194 {
195  return c12;
196 }
197 
198 double CKM::getc23()
199 {
200  return c23;
201 }
202 
203 double CKM::getc13()
204 {
205  return c13;
206 }
207 
209 {
210  return delta;
211 }
212 
213 // J_CP
214 
215 double CKM::getJcp()
216 {
217  return Eta * pow(A * pow(Lambda, 3), 2);
218 }
219 
220 //Absolute values of CKM elements
221 
222 double CKM::getVud()
223 {
224  return Vud.abs();
225 }
226 
227 double CKM::getVus()
228 {
229  return Vus.abs();
230 }
231 
232 double CKM::getVub()
233 {
234  return Vub.abs();
235 }
236 
237 double CKM::getVcd()
238 {
239  return Vcd.abs();
240 }
241 
242 double CKM::getVcs()
243 {
244  return Vcs.abs();
245 }
246 
247 double CKM::getVcb()
248 {
249  return Vcb.abs();
250 }
251 
252 double CKM::getVtd()
253 {
254  return Vtd.abs();
255 }
256 
257 double CKM::getVts()
258 {
259  return Vts.abs();
260 }
261 
262 double CKM::getVtb()
263 {
264  return Vtb.abs();
265 }
266 
267 // Phases
268 
270 {
271  return Vud.arg();
272 }
273 
275 {
276  return Vus.arg();
277 }
278 
280 {
281  return Vub.arg();
282 }
283 
285 {
286  return Vcd.arg();
287 }
288 
290 {
291  return Vcs.arg();
292 }
293 
295 {
296  return Vcb.arg();
297 }
298 
300 {
301  return Vtd.arg();
302 }
303 
305 {
306  return Vts.arg();
307 }
308 
310 {
311  return Vtb.arg();
312 }
313 
314 // Angles
315 
317 {
318  return (-Vcd*Vcb.conjugate()/(Vtd*Vtb.conjugate())).arg();
319 }
320 
322 {
323  return (-Vud*Vub.conjugate()/(Vcd*Vcb.conjugate())).arg();
324 }
325 
327 {
328  return (-Vtd*Vtb.conjugate()/(Vud*Vub.conjugate())).arg();
329 }
330 
332 {
333  return (-Vts*Vtb.conjugate()/(Vcs*Vcb.conjugate())).arg();
334 }
335 
336 // Lambda_q
337 
339 {
340  return Vtd*Vts.conjugate();
341 }
342 
344 {
345  return Vcd*Vcs.conjugate();
346 }
347 
349 {
350  return Vud*Vus.conjugate();
351 }
352 
353 
355 {
356  return Vtd*Vtb.conjugate();
357 }
358 
360 {
361  return Vcd*Vcb.conjugate();
362 }
363 
365 {
366  return Vud*Vub.conjugate();
367 }
368 
369 
371 {
372  return Vts*Vtb.conjugate();
373 }
374 
376 {
377  return Vcs*Vcb.conjugate();
378 }
379 
381 {
382  return Vus*Vub.conjugate();
383 }
384 
385 
386 //Complex values of CKM elements
387 
389 {
390  return Vud;
391 }
392 
394 {
395  return Vus;
396 }
397 
399 {
400  return Vub;
401 }
402 
404 {
405  return Vcd;
406 }
407 
409 {
410  return Vcs;
411 }
412 
414 {
415  return Vcb;
416 }
417 
419 {
420  return Vtd;
421 }
422 
424 {
425  return Vts;
426 }
427 
429 {
430  return Vtb;
431 }
432 
433 // Sides
434 double CKM::getRt()
435 {
436  return (Vtd*Vtb.conjugate()/(Vcd*Vcb.conjugate())).abs();
437 }
438 double CKM::getRts()
439 {
440  return (Vts*Vtb.conjugate()/(Vcs*Vcb.conjugate())).abs();
441 }
442 
443 double CKM::getRb()
444 {
445  return (Vud*Vub.conjugate()/(Vcd*Vcb.conjugate())).abs();
446 }
complex cos(const complex &z)
double gets23()
Definition: CKM.cpp:188
double Eta
Definition: CKM.h:114
gslpp::complex computelamu()
Definition: CKM.cpp:348
gslpp::complex V_ts()
Definition: CKM.cpp:423
double getdelta()
Definition: CKM.cpp:208
gslpp::complex computelamc()
Definition: CKM.cpp:343
double getArgVtb()
Definition: CKM.cpp:309
double s12
Definition: CKM.h:115
gslpp::complex V_us()
Definition: CKM.cpp:393
double getVcd()
Definition: CKM.cpp:237
double getVus()
Definition: CKM.cpp:227
gslpp::complex Vcs
Definition: CKM.h:119
gslpp::complex V_tb()
Definition: CKM.cpp:428
double getVcs()
Definition: CKM.cpp:242
double getVtb()
Definition: CKM.cpp:262
gslpp::complex V_cb()
Definition: CKM.cpp:413
double s23
Definition: CKM.h:115
gslpp::complex computelamc_s()
Definition: CKM.cpp:375
double computeBeta()
Definition: CKM.cpp:316
gslpp::complex computelamc_d()
Definition: CKM.cpp:359
double getArgVcd()
Definition: CKM.cpp:284
double getc13()
Definition: CKM.cpp:203
gslpp::complex Vtb
Definition: CKM.h:120
complex conjugate() const
complex pow(const complex &z1, const complex &z2)
double computeBetas()
Definition: CKM.cpp:331
gslpp::complex computelamu_d()
Definition: CKM.cpp:364
const double & real() const
double getVcb()
Definition: CKM.cpp:247
gslpp::complex V_td()
Definition: CKM.cpp:418
double getRhoNB()
Definition: CKM.cpp:166
void setWolfenstein(double, double, double, double)
Definition: CKM.cpp:71
double getEta() const
Definition: CKM.cpp:151
gslpp::complex computelamt_d()
Definition: CKM.cpp:354
gslpp::complex Vtd
Definition: CKM.h:118
double gets13()
Definition: CKM.cpp:183
double computeAlpha()
Definition: CKM.cpp:326
double getArgVub()
Definition: CKM.cpp:279
double s13
Definition: CKM.h:115
gslpp::complex Vus
Definition: CKM.h:119
double getVts()
Definition: CKM.cpp:257
double delta
Definition: CKM.h:115
double getArgVcb()
Definition: CKM.cpp:294
gslpp::complex computelamu_s()
Definition: CKM.cpp:380
double getArgVcs()
Definition: CKM.cpp:289
CKM()
Definition: CKM.cpp:10
gslpp::complex V_cs()
Definition: CKM.cpp:408
double getVub()
Definition: CKM.cpp:232
double c12
Definition: CKM.h:116
double getA() const
Definition: CKM.cpp:161
double getJcp()
Definition: CKM.cpp:215
double getRt()
Definition: CKM.cpp:434
double getEtaNB()
Definition: CKM.cpp:171
double gets12()
Definition: CKM.cpp:178
double getArgVts()
Definition: CKM.cpp:304
void setCKM(double, double, double, double)
Definition: CKM.cpp:110
double c23
Definition: CKM.h:116
double getc12()
Definition: CKM.cpp:193
double getVtd()
Definition: CKM.cpp:252
double getArgVud()
Definition: CKM.cpp:269
double getRb()
Definition: CKM.cpp:443
double Lambda
Definition: CKM.h:114
A class for the CKM matrix elements.
Definition: CKM.h:23
gslpp::complex Vts
Definition: CKM.h:119
gslpp::complex V_ud()
Definition: CKM.cpp:388
double abs() const
double getLambda() const
Definition: CKM.cpp:156
const double & imag() const
double Rho
Definition: CKM.h:114
gslpp::complex computelamt_s()
Definition: CKM.cpp:370
double getRts()
Definition: CKM.cpp:438
gslpp::complex Vub
Definition: CKM.h:120
double computeGamma()
Definition: CKM.cpp:321
double getRho() const
Definition: CKM.cpp:146
gslpp::complex V_cd()
Definition: CKM.cpp:403
double getc23()
Definition: CKM.cpp:198
double getVud()
Definition: CKM.cpp:222
double getArgVtd()
Definition: CKM.cpp:299
double arg() const
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
complex sin(const complex &z)
gslpp::complex Vud
Definition: CKM.h:118
double A
Definition: CKM.h:114
double c13
Definition: CKM.h:116
gslpp::complex V_ub()
Definition: CKM.cpp:398
double getArgVus()
Definition: CKM.cpp:274
gslpp::complex computelamt()
Definition: CKM.cpp:338
void getCKM(gslpp::matrix< gslpp::complex > &) const
Definition: CKM.cpp:58
~CKM()
Definition: CKM.cpp:41
gslpp::complex Vcd
Definition: CKM.h:118
complex tan(const complex &z)
gslpp::complex Vcb
Definition: CKM.h:120
complex sqrt(const complex &z)