a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
CKM.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 "CKM.h"
9
10CKM::CKM() : V(3, 3)
11{}
12
13void CKM::computeCKMwithWolfenstein(double Lambda_v, double A_v, double Rho_v, double Eta_v)
14{
15 Rho = Rho_v;
16 Eta = Eta_v;
17 Lambda = Lambda_v;
18 A = A_v;
19
20 gslpp::complex num(Rho, Eta);
21 num = num * sqrt(1. - pow(A, 2.) * pow(Lambda, 4.));
22 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);
23 gslpp::complex ratio = num / den;
24
25 double rho_nb = ratio.real();
26 double eta_nb = ratio.imag();
27
28 s12 = Lambda;
29 s23 = A * pow(Lambda, 2.);
30 s13 = (gslpp::complex(A * pow(Lambda, 3.) * rho_nb, -A * pow(Lambda, 3.) * eta_nb)).abs();
31 delta = -(gslpp::complex(A * pow(Lambda, 3.) * rho_nb, -A * pow(Lambda, 3.) * eta_nb)).arg();
32
33 c12 = sqrt(1. - s12 * s12);
34 c13 = sqrt(1. - s13 * s13);
35 c23 = sqrt(1. - s23 * s23);
36
38}
39
41{
42 V.assign(0, 0, c12*c13);
43 V.assign(0, 1, s12*c13);
44 V.assign(0, 2, gslpp::complex(s13, -delta, true));
45
46 V.assign(1, 0 , -s12 * c23 - gslpp::complex(c12 * s23*s13, delta, true));
47 V.assign(1, 1, c12 * c23 - gslpp::complex(s12 * s23*s13, delta, true));
48 V.assign(1, 2, s23*c13);
49
50 V.assign(2, 0, s12 * s23 - gslpp::complex(c12 * c23*s13, delta, true));
51 V.assign(2, 1, -c12 * s23 - gslpp::complex(s12 * c23*s13, delta, true));
52 V.assign(2, 2, c23*c13);
53}
54
55void CKM::computeCKMfromAngles(double s12_in, double s23_in, double s13_in, double delta_in)
56{
57 s12 = s12_in;
58 s13 = s13_in;
59 s23 = s23_in;
60 delta = delta_in;
61
62 c12 = sqrt(1.-s12*s12);
63 c13 = sqrt(1.-s13*s13);
64 c23 = sqrt(1.-s23*s23);
65
66 V.assign(0, 0, c12*c13);
67 V.assign(0, 1, s12*c13);
68 V.assign(0, 2, gslpp::complex(s13, -delta, true));
69
70 V.assign(1, 0 , -s12 * c23 - gslpp::complex(c12 * s23*s13, delta, true));
71 V.assign(1, 1, c12 * c23 - gslpp::complex(s12 * s23*s13, delta, true));
72 V.assign(1, 2, s23*c13);
73
74 V.assign(2, 0, s12 * s23 - gslpp::complex(c12 * c23*s13, delta, true));
75 V.assign(2, 1, -c12 * s23 - gslpp::complex(s12 * c23*s13, delta, true));
76 V.assign(2, 2, c23*c13);
77
78 // Wolfenstein to all orders
79 Lambda = s12;
80 A = s23 / Lambda / Lambda;
81 gslpp::complex Rb = V(0, 0) * V(0, 2).conjugate() / (V(1, 0) * V(1, 2).conjugate());
82 Rho = -Rb.real();
83 Eta = -Rb.imag();
84}
85
86void CKM::computeCKM(double Vus_v, double Vcb_v, double Vub_v, double gamma_v, bool useVud)
87{
88 s13 = Vub_v;
89 c13 = sqrt(1.-s13*s13);
90 if (useVud) {
91 c12 = Vus_v / c13;
92 s12 = sqrt(1. - c12 * c12);
93 }
94 else {
95 s12 = Vus_v / c13;
96 c12 = sqrt(1. - s12 * s12);
97 }
98
99 s23 = Vcb_v / c13;
100 c23 = sqrt(1. - s23 * s23);
101
102 double a = c12 * s13 * s23 / s12 / c23;
103 if ( fabs(gamma_v) < 1.e-10 )
104 delta = 0.;
105 else
106 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));
107
109
110 // Wolfenstein to all orders
111 Lambda = s12;
112 A = s23 / Lambda / Lambda;
113 gslpp::complex Rb = V(0, 0) * V(0, 2).conjugate() / (V(1, 0) * V(1, 2).conjugate());
114 Rho = -Rb.real();
115 Eta = -Rb.imag();
116 return;
117}
118
119
120const double CKM::computeBeta() const
121{
122 return (-V(1, 0)*V(1, 2).conjugate()/(V(2, 0)*V(2, 2).conjugate())).arg();
123}
124
125const double CKM::computeGamma() const
126{
127 return (-V(0, 0)*V(0, 2).conjugate()/(V(1, 0)*V(1, 2).conjugate())).arg();
128}
129
130const double CKM::computeAlpha() const
131{
132 return (-V(2, 0)*V(2, 2).conjugate()/(V(0, 0)*V(0, 2).conjugate())).arg();
133}
134
135const double CKM::computeBetas() const
136{
137 return (-V(2, 1)*V(2, 2).conjugate()/(V(1, 1)*V(1, 2).conjugate())).arg();
138}
139
140// Lambda_q
141
142const gslpp::complex CKM::computelamt() const
143{
144 return V(2, 0)*V(2, 1).conjugate();
145}
146
147const gslpp::complex CKM::computelamc() const
148{
149 return V(1, 0)*V(1, 1).conjugate();
150}
151
152const gslpp::complex CKM::computelamu() const
153{
154 return V(0, 0)*V(0, 1).conjugate();
155}
156
157
158const gslpp::complex CKM::computelamt_d() const
159{
160 return V(2, 0)*V(2, 2).conjugate();
161}
162
163const gslpp::complex CKM::computelamc_d() const
164{
165 return V(1, 0)*V(1, 2).conjugate();
166}
167
168const gslpp::complex CKM::computelamu_d() const
169{
170 return V(0, 0)*V(0, 2).conjugate();
171}
172
173
174const gslpp::complex CKM::computelamt_s() const
175{
176 return V(2, 1)*V(2, 2).conjugate();
177}
178
179const gslpp::complex CKM::computelamc_s() const
180{
181 return V(1, 1)*V(1, 2).conjugate();
182}
183
184const gslpp::complex CKM::computelamu_s() const
185{
186 return V(0, 1)*V(0, 2).conjugate();
187}
188
189// Sides
190const double CKM::computeRt() const
191{
192 return (V(2, 0)*V(2, 2).conjugate()/(V(1, 0)*V(1, 2).conjugate())).abs();
193}
194const double CKM::computeRts() const
195{
196 return (V(2, 1)*V(2, 2).conjugate()/(V(1, 1)*V(1, 2).conjugate())).abs();
197}
198
199const double CKM::computeRb() const
200{
201 return (V(0, 0)*V(0, 2).conjugate()/(V(1, 0)*V(1, 2).conjugate())).abs();
202}
const double computeBeta() const
The CKM angle .
Definition: CKM.cpp:120
const double computeAlpha() const
The CKM angle .
Definition: CKM.cpp:130
const double computeRb() const
.
Definition: CKM.cpp:199
gslpp::matrix< gslpp::complex > V
The CKM matrix.
Definition: CKM.h:383
const gslpp::complex computelamc() const
The product of the CKM elements .
Definition: CKM.cpp:147
double delta
The CP violating phase in the CKM matrix.
Definition: CKM.h:381
void computeCKMwithWolfenstein(double Lambda_v, double A_v, double Rho_v, double Eta_v)
A set method to calculate the CKM matrix from Wolfenstein parameters.
Definition: CKM.cpp:13
const gslpp::complex computelamt_s() const
The product of the CKM elements .
Definition: CKM.cpp:174
double c13
The cosine of the three mixing angles.
Definition: CKM.h:380
double s13
Definition: CKM.h:379
double Eta
Definition: CKM.h:378
double c12
Definition: CKM.h:380
const double computeGamma() const
The CKM angle .
Definition: CKM.cpp:125
const gslpp::complex computelamu_s() const
The product of the CKM elements .
Definition: CKM.cpp:184
const gslpp::complex computelamc_s() const
The product of the CKM elements .
Definition: CKM.cpp:179
double A
The Wolfenstein parameters.
Definition: CKM.h:378
const gslpp::complex computelamu_d() const
The product of the CKM elements .
Definition: CKM.cpp:168
const gslpp::complex computelamc_d() const
The product of the CKM elements .
Definition: CKM.cpp:163
const double computeBetas() const
The CKM angle .
Definition: CKM.cpp:135
const gslpp::complex computelamu() const
The product of the CKM elements .
Definition: CKM.cpp:152
double Rho
Definition: CKM.h:378
CKM()
Definition: CKM.cpp:10
const gslpp::complex computelamt() const
The product of the CKM elements .
Definition: CKM.cpp:142
double s23
The sine of the three mixing angles.
Definition: CKM.h:379
void computeCKMfromAngles()
Definition: CKM.cpp:40
const gslpp::complex computelamt_d() const
The product of the CKM elements .
Definition: CKM.cpp:158
const double computeRt() const
.
Definition: CKM.cpp:190
double c23
Definition: CKM.h:380
double Lambda
Definition: CKM.h:378
double s12
Definition: CKM.h:379
void computeCKM(double Vus_v, double Vcb_v, double Vub_v, double gamma_v, bool useVud=false)
A set method to calculate the CKM matrix from CKM elements and .
Definition: CKM.cpp:86
const double computeRts() const
.
Definition: CKM.cpp:194