28 const std::string neutralino_mix_block =
29 bsm_blocks->contains(
"NMNMIX") ?
"NMNMIX" :
"NMIX";
31 std::unordered_map<ParameterType, std::vector<std::string>> src = {
33 {
ParameterType::BSM, {
"MASS",
"GAUGE",
"HMIX",
"MSOFT",
"AD",
"AU",
"SBOTMIX",
"STOPMIX",
"UMIX",
"VMIX", neutralino_mix_block,
"ALPHA"}},
43 auto func = [neutralino_mix_block] (
const BlockSrc& src, std::shared_ptr<DependentBlock> dep_block) {
45 src.get_val(
"ALPHA",
LhaID());
47 double g2 = src.get_val(
"GAUGE", 2);
48 double alpha_em = src.get_val(
"SMINPUTS", 1);
52 double m_ss = src.get_val(
"MASS", 1000003);
54 double m_bs = src.get_val(
"MASS", 1000005);
55 double m_ts = src.get_val(
"MASS", 1000006);
61 double m_b2s = src.get_val(
"MASS", 2000005);
62 double m_t2s = src.get_val(
"MASS", 2000006);
64 double m_gluino = src.get_val(
"MASS", 1000021);
65 double m_c1 = src.get_val(
"MASS", 1000024);
66 double m_c2 = src.get_val(
"MASS", 1000037);
67 double mu_Q = src.get_val(
"HMIX", 1);
69 double mqL3 = src.get_val(
"MSOFT", 43);
70 double mbR = src.get_val(
"MSOFT", 49);
72 const auto mass_block = src.block(
"MASS");
73 const auto mass_if_present = [&](
int pdg) {
74 return mass_block->contains(
LhaID(pdg)) ? src.get_val(
"MASS", pdg) :
scalar_t(.0);
77 std::vector<double> m_neutralino = {
78 src.get_val(
"MASS", 1000022),
79 src.get_val(
"MASS", 1000023),
80 src.get_val(
"MASS", 1000025),
81 src.get_val(
"MASS", 1000035)
88 const double m_neutralino5 = mass_if_present(1000045);
89 const bool has_neutralino5_mix =
90 src.block(neutralino_mix_block)->contains(
LhaID(5, 3)) &&
91 src.block(neutralino_mix_block)->contains(
LhaID(5, 4));
92 if (m_neutralino5 != 0.0 && has_neutralino5_mix) {
93 m_neutralino.push_back(m_neutralino5);
94 }
else if (m_neutralino5 != 0.0) {
95 LOG_WARN(
"EPSILON_SUSY: MASS(1000045) is present but NMIX/NMNMIX row 5 is incomplete; ignoring neutralino 5.");
97 double ad_22 = src.get_val(
"AD", {3, 3});
98 double au_22 = src.get_val(
"AU", {3, 3});
100 const double tan_beta = src.get_val(
"HMIX", 2);
101 const double sin_beta = tan_beta / std::sqrt(1.0 + tan_beta * tan_beta);
102 const double cos_beta = 1.0 / std::sqrt(1.0 + tan_beta * tan_beta);
103 const double mW = src.get_val(
"MASS", 24);
105 const bool has_yu33 = src.has_block(
"YU") && src.block(
"YU")->contains(
LhaID(3, 3));
106 const bool has_yd33 = src.has_block(
"YD") && src.block(
"YD")->contains(
LhaID(3, 3));
113 const double yu_22 = has_yu33
114 ? src.get_val(
"YU",
LhaID(3, 3))
115 : g2 * src.get_val(
"WPARAM_MATCH_SM", 6) / (std::sqrt(2.0) * mW * sin_beta);
116 const double yd_22 = has_yd33
117 ? src.get_val(
"YD",
LhaID(3, 3))
118 : g2 * src.get_val(
"WPARAM_MATCH_SM",
LhaID(5, 1)) / (std::sqrt(2.0) * mW * cos_beta);
120 if (!has_yu33 || !has_yd33) {
121 LOG_WARN(
"EPSILON_SUSY: YU(3,3)/YD(3,3) missing; using Yukawas reconstructed from running quark masses.");
124 double sbot_mix_00 = src.get_val(
"SBOTMIX", {0+1, 0+1});
125 double sbot_mix_01 = src.get_val(
"SBOTMIX", {0+1, 1+1});
127 double stop_mix_00 = src.get_val(
"STOPMIX", {0+1, 0+1});
128 double stop_mix_01 = src.get_val(
"STOPMIX", {0+1, 1+1});
130 double umix_01 = src.get_val(
"UMIX", {0+1, 1+1});
131 double umix_11 = src.get_val(
"UMIX", {1+1, 1+1});
133 double vmix_01 = src.get_val(
"VMIX", {0+1, 1+1});
134 double vmix_11 = src.get_val(
"VMIX", {1+1, 1+1});
136 double sw2 = src.get_val(
"WPARAM_SI_SM", 4);
141 std::cout <<
"MSOFT" <<
MSOFT << std::endl;
143 double factor = 2.0 / 3.0 * alphas_MSOFT / M_PI;
145 double M_2 = src.get_val(
"MSOFT", 2);
148 double term1 = (ad_22 / tan_beta - mu_Q) / m_gluino *
149 H2(m_bs * m_bs / m_gluino / m_gluino, m_b2s * m_b2s / m_gluino / m_gluino);
150 double term2 = -0.5 * (
B(m_gluino, m_bs,
MSOFT) +
B(m_gluino, m_b2s,
MSOFT)) / tan_beta;
151 double term3 = 1.0 / alpha_em / sw2 / 4.0 / M_PI * (mu_Q * M_2) *
152 (sbot_mix_00 * sbot_mix_00 *
H2(M_2 * M_2 / m_bs / m_bs, mu_Q * mu_Q / m_bs / m_bs) / m_bs / m_bs / 2.0 +
153 sbot_mix_01 * sbot_mix_01 *
H2(M_2 * M_2 / m_b2s / m_b2s, mu_Q * mu_Q / m_b2s / m_b2s) / m_b2s / m_b2s / 2.0);
156 double epsilon_0 = factor * (term1 + term2) + term3;
159 term1 = yu_22 * yu_22 / 16.0 / M_PI / M_PI *
160 (mu_Q / tan_beta - au_22) *
161 ((umix_01 * vmix_01 / m_c1 *
162 H2(m_ts * m_ts / m_c1 / m_c1, m_t2s * m_t2s / m_c1 / m_c1)) +
163 (umix_11 * vmix_11 / m_c2 *
164 H2(m_ts * m_ts / m_c2 / m_c2, m_t2s * m_t2s / m_c2 / m_c2)));
166 term2 = 1.0 / alpha_em / sw2 / 4.0 / M_PI * (mu_Q * M_2) *
167 ((stop_mix_00 * stop_mix_00 *
168 H2(M_2 * M_2 / m_ts / m_ts, mu_Q * mu_Q / m_ts / m_ts) / m_ts / m_ts) +
169 (stop_mix_01 * stop_mix_01*
170 H2(M_2 * M_2 / m_t2s / m_t2s, mu_Q * mu_Q / m_t2s / m_t2s) / m_t2s / m_t2s));
172 double epsilon_2 = term1 + term2;
176 double epsilon_b = epsilon_0 + epsilon_2;
179 const int nb_neut =
static_cast<int>(m_neutralino.size());
182 double epsilonbp = 2.0 / 3.0 * alphas_MSOFT / M_PI *
183 (ad_22/ tan_beta - mu_Q) / m_gluino *
184 (stop_mix_00 * stop_mix_00 * sbot_mix_00 * sbot_mix_00*
185 H2(m_ts * m_ts / m_gluino / m_gluino, m_b2s * m_b2s / m_gluino / m_gluino) +
186 stop_mix_00 * stop_mix_00 * sbot_mix_01 * sbot_mix_01 *
187 H2(m_ts * m_ts / m_gluino / m_gluino, m_bs * m_bs / m_gluino / m_gluino) +
188 stop_mix_01 * stop_mix_01 * sbot_mix_00 * sbot_mix_00 *
189 H2(m_t2s * m_t2s / m_gluino / m_gluino, m_b2s * m_b2s / m_gluino / m_gluino) +
190 stop_mix_01 * stop_mix_01 * sbot_mix_01 * sbot_mix_01 *
191 H2(m_t2s * m_t2s / m_gluino / m_gluino, m_bs * m_bs / m_gluino / m_gluino));
193 for(
int ie = 0; ie < nb_neut; ++ie) {
194 epsilonbp += yu_22 * yu_22 / 16.0 / M_PI / M_PI *
195 src.get_val(neutralino_mix_block, {ie + 1, 3 + 1}) * src.get_val(neutralino_mix_block, {ie + 1, 2 + 1}) *
196 (au_22 - mu_Q / tan_beta) / m_neutralino[ie] *
197 (stop_mix_00 * stop_mix_00 * sbot_mix_00 * sbot_mix_00 *
198 H2(m_t2s * m_t2s / m_neutralino[ie] / m_neutralino[ie], m_bs * m_bs / m_neutralino[ie] / m_neutralino[ie]) +
199 stop_mix_00 * stop_mix_00 * sbot_mix_01 * sbot_mix_01 *
200 H2(m_t2s * m_t2s / m_neutralino[ie] / m_neutralino[ie], m_b2s * m_b2s / m_neutralino[ie] / m_neutralino[ie]) +
201 stop_mix_01 * stop_mix_01 * sbot_mix_00 * sbot_mix_00 *
202 H2(m_ts * m_ts / m_neutralino[ie] / m_neutralino[ie], m_bs * m_bs / m_neutralino[ie] / m_neutralino[ie]) +
203 stop_mix_01* stop_mix_01 * sbot_mix_01 * sbot_mix_01 *
204 H2(m_ts * m_ts / m_neutralino[ie] / m_neutralino[ie], m_b2s * m_b2s / m_neutralino[ie] / m_neutralino[ie]));
207 epsilonbp += 1.0 / alpha_em / sw2 / 4.0 / M_PI *
209 ((stop_mix_00 * stop_mix_00 *
210 H2(M_2 * M_2 / m_ts / m_ts, mu_Q * mu_Q / m_ts / m_ts) / m_ts / m_ts +
211 stop_mix_01 * stop_mix_01 *
212 H2(M_2 * M_2 / m_t2s / m_t2s, mu_Q * mu_Q / m_t2s / m_t2s) / m_t2s / m_t2s) / 2.0 +
213 (sbot_mix_00 * sbot_mix_00 *
214 H2(M_2 * M_2 / m_bs / m_bs, mu_Q * mu_Q / m_bs / m_bs) / m_bs / m_bs +
215 sbot_mix_01 * sbot_mix_01 *
216 H2(M_2 * M_2 / m_b2s / m_b2s, mu_Q * mu_Q / m_b2s / m_b2s) / m_b2s / m_b2s));
219 double epsilon0p = -2.0 / 3.0 * alphas_MSOFT / M_PI *
220 (mu_Q + au_22 / tan_beta) / m_gluino *
221 (stop_mix_00 * stop_mix_00 *
222 H2(m_t2s * m_t2s / m_gluino / m_gluino, m_ss * m_ss / m_gluino / m_gluino) +
223 stop_mix_01 * stop_mix_01 *
224 H2(m_ts * m_ts / m_gluino / m_gluino, m_ss * m_ss / m_gluino / m_gluino));
226 for(
int ie = 0; ie < nb_neut; ++ie) {
227 epsilon0p += yd_22 * yd_22 / 16.0 / M_PI / M_PI *
228 src.get_val(neutralino_mix_block, {ie+1, 3+1}) * src.get_val(neutralino_mix_block, {ie+1, 2+1}) *
229 (mu_Q / tan_beta) / m_neutralino[ie] *
230 (stop_mix_00 * stop_mix_00 * sbot_mix_00 * sbot_mix_00 *
231 H2(m_ts * m_ts / m_neutralino[ie] / m_neutralino[ie], m_b2s * m_b2s / m_neutralino[ie] / m_neutralino[ie]) +
232 stop_mix_00 * stop_mix_00 * sbot_mix_01 * sbot_mix_01 *
233 H2(m_ts * m_ts / m_neutralino[ie] / m_neutralino[ie], m_bs * m_bs / m_neutralino[ie] / m_neutralino[ie]) +
234 stop_mix_01 * stop_mix_01 * sbot_mix_00 * sbot_mix_00 *
235 H2(m_t2s * m_t2s / m_neutralino[ie] / m_neutralino[ie], m_b2s * m_b2s / m_neutralino[ie] / m_neutralino[ie]) +
236 stop_mix_01 * stop_mix_01 * sbot_mix_01* sbot_mix_01 *
237 H2(m_t2s * m_t2s / m_neutralino[ie] / m_neutralino[ie], m_bs * m_bs / m_neutralino[ie] / m_neutralino[ie]));
241 term1 = 1.0 / 16.0 / M_PI / M_PI *
242 (yd_22 * yd_22 * ad_22 / mu_Q *
243 H2(std::pow(mqL3 / mu_Q, 2), std::pow(mbR / mu_Q, 2)));
245 term2 = -g2 * g2 * M_2 / mu_Q *
246 H2(std::pow(mqL3 / mu_Q, 2), std::pow(M_2 / mu_Q, 2)) / 16.0 / M_PI / M_PI;
248 double epsilon_1p = term1 + term2;
250 double epsfac=
pow((1.+epsilon_b*tan_beta),2.);
252 dep_block->store_or_assign({0,1}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"EPSILON_SUSY", {0,1}}, epsilon_0, 0., 0.));
253 dep_block->store_or_assign({0,2}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"EPSILON_SUSY", {0,2}}, epsilon0p, 0., 0.));
262 iblock_c->compose_block(
"EPSILON_SUSY", src, func);
267 std::unordered_map<ParameterType, std::vector<std::string>> src = {{
ParameterType::SM, {
"MASS",
"GAUGE",
"VCKM"}}, {
ParameterType::BSM, {
"MASS",
"HMIX",
"STOPMIX",
"USQMIX"}}};
269 auto func = [] (
const BlockSrc& src, std::shared_ptr<DependentBlock> dep_block) {
270 double mW = src.get_val(
"MASS", 24);
272 double ag = 1.0 - 7.0 / (12.0 *
Pi) * alphas_mg;
273 double aY = 1.0 + alphas_mg / (4.0 *
Pi);
275 double kappa = 1.0 / (
pow(src.get_val(
"GAUGE", 2), 2.) *
276 std::real((src.get_val(
"VCKM", {2,2}))*(src.get_val(
"VCKM", {2,1}))));
279 double kappaFactor = -0.5 * kappa;
281 double tanb = src.get_val(
"HMIX", 2);
282 double beta = std::atan(tanb);
283 double z =
pow(src.get_val(
"MASS", 37) / mW, 2.);
284 double sinb = std::sin(std::atan(tanb));
285 double cosb = std::cos(std::atan(tanb));
286 double ct = src.get_val(
"STOPMIX", {2,2});
287 double st = src.get_val(
"STOPMIX", {1,2});
292 Array1D_4 ME = {src.get_val(
"MASS", 11), src.get_val(
"MASS", 13), src.get_val(
"MASS", 15)};
294 Array1D_3 Mch = {src.get_val(
"MASS", 1000024), src.get_val(
"MASS", 1000037)};
296 Array1D_7 MsqU = {src.get_val(
"MASS", 1000002), src.get_val(
"MASS", 1000004), src.get_val(
"MASS", 1000006),
297 src.get_val(
"MASS", 2000002), src.get_val(
"MASS", 2000004), src.get_val(
"MASS", 2000006)};
299 Array1D_7 MsqD = {src.get_val(
"MASS", 1000001), src.get_val(
"MASS", 1000003), src.get_val(
"MASS", 1000005),
300 src.get_val(
"MASS", 2000001), src.get_val(
"MASS", 2000003), src.get_val(
"MASS", 2000005)};
302 Array1D_4 Msn = {src.get_val(
"MASS", 1000012), src.get_val(
"MASS", 1000014), src.get_val(
"MASS", 1000016)};
304 const size_t NumSquarks = 6;
306 bool isNonZeroMix =
true;
308 for (
size_t j = 0; j < NumSquarks; ++j) {
310 if (src.get_val(
"USQMIX", {size_t(1), j+1}) == 0.0) {
311 isNonZeroMix =
false;
317 std::sort(MsqU.begin(), MsqU.end());
331 dep_block->store_or_assign({12, 0}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{12, 0}}, ME[0], 0., 0.));
332 dep_block->store_or_assign({12, 1}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM", {12, 1}}, ME[1], 0., 0.));
333 dep_block->store_or_assign({12, 2}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM", {12, 2}}, ME[2], 0., 0.));
334 dep_block->store_or_assign({13, 0}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{13, 0}}, Mch[0], 0., 0.));
335 dep_block->store_or_assign({13, 1}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM", {13, 1}}, Mch[1], 0., 0.));
336 dep_block->store_or_assign({14, 0}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{14, 0}}, MsqU[0], 0., 0.));
337 dep_block->store_or_assign({14, 1}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{14, 1}}, MsqU[1], 0., 0.));
338 dep_block->store_or_assign({14, 2}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{14, 2}}, MsqU[2], 0., 0.));
339 dep_block->store_or_assign({14, 3}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{14, 3}}, MsqU[3], 0., 0.));
340 dep_block->store_or_assign({14, 4}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{14, 4}}, MsqU[4], 0., 0.));
341 dep_block->store_or_assign({14, 5}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM", {14, 5}}, MsqU[5], 0., 0.));
342 dep_block->store_or_assign({15, 0}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{15, 0}}, MsqD[0], 0., 0.));
343 dep_block->store_or_assign({15, 1}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{15, 1}}, MsqD[1], 0., 0.));
344 dep_block->store_or_assign({15, 2}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{15, 2}}, MsqD[2], 0., 0.));
345 dep_block->store_or_assign({15, 3}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{15, 3}}, MsqD[3], 0., 0.));
346 dep_block->store_or_assign({15, 4}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{15, 4}}, MsqD[4], 0., 0.));
347 dep_block->store_or_assign({15, 5}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM", {15, 5}}, MsqD[5], 0., 0.));
348 dep_block->store_or_assign({16, 0}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM",{16, 0}}, Msn[0], 0., 0.));
349 dep_block->store_or_assign({16, 1}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM", {16, 1}}, Msn[1], 0., 0.));
350 dep_block->store_or_assign({16, 2}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM", {16, 2}}, Msn[2], 0., 0.));
351 dep_block->store_or_assign(17, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_SI_BSM", 17}, (double)isNonZeroMix, 0., 0.));
356 iblock_c->compose_block(
"WPARAM_SI_BSM", src, func);
365 auto func = [] (
const BlockSrc& src, std::shared_ptr<DependentBlock> dep_block) {
366 double yt=
pow(src.get_val(
"WPARAM_MATCH_SM", 6)/src.get_val(
"MASS", 37),2.);
367 Array1D_4 MU = {src.get_val(
"MASS", 2), src.get_val(
"MASS", 4), src.get_val(
"WPARAM_MATCH_SM", 6)};
368 Array1D_4 MD = {src.get_val(
"MASS", 2), src.get_val(
"MASS", 3), src.get_val(
"WPARAM_MATCH_SM", {5,1})};
371 dep_block->store_or_assign({2,0}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_MATCH_BSM", {2,0}}, MU[0], 0., 0.));
372 dep_block->store_or_assign({2,1}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_MATCH_BSM", {2,1}}, MU[1], 0., 0.));
373 dep_block->store_or_assign({2,2}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_MATCH_BSM", {2,2}}, MU[2], 0., 0.));
374 dep_block->store_or_assign({3,0}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_MATCH_BSM", {3,0}}, MD[0], 0., 0.));
375 dep_block->store_or_assign({3,1}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_MATCH_BSM", {3,1}}, MD[1], 0., 0.));
376 dep_block->store_or_assign({3,2}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"WPARAM_MATCH_BSM", {3,2}}, MD[2], 0., 0.));
380 iblock_c->compose_block(
"WPARAM_MATCH_BSM", src, func);
382 std::unordered_map<ParameterType, std::vector<std::string>> src_matrix = {{
ParameterType::SM, {
"MASS",
"VCKM",
"GAUGE"}}, {
ParameterType::BSM, {
"UMIX",
"VMIX",
"USQMIX"}},
385 auto func_matrix = [] (
const BlockSrc& src, std::shared_ptr<DependentBlock> dep_block) {
398 std::array<std::array<std::array<std::array<double, 4>, 4>, 3>, 7> G_aimn;
400 complex_t c11 = src.get_val(
"VCKM", {0,0});
401 complex_t c12 = src.get_val(
"VCKM", {0,1});
402 complex_t c13 = src.get_val(
"VCKM", {0,2});
403 complex_t c21 = src.get_val(
"VCKM", {1,0});
404 complex_t c22 = src.get_val(
"VCKM", {1,1});
405 complex_t c23 = src.get_val(
"VCKM", {1,2});
406 complex_t c31 = src.get_val(
"VCKM", {2,0});
407 complex_t c32 = src.get_val(
"VCKM", {2,1});
408 complex_t c33 = src.get_val(
"VCKM", {2,2});
429 double B0c1 = 0.0, B0c2 = 0.0, B90c = 0.0, B100c = 0.0, C90c = 0.0, D90c = 0.0;
431 double mW = src.get_val(
"MASS", 24);
432 double g2 = src.get_val(
"GAUGE", 2);
433 if (src.get_val(
"WPARAM_SI_BSM", 17)) {
434 std::cout <<
"SHOULD NOT BE HERE" << std::endl;
435 const int NumSquarks = 6;
436 for (
int ae = 0; ae < NumSquarks; ++ae) {
437 for (
int ie = 0; ie < 3; ++ie) {
439 Gamma_UL[ae][ie] = src.get_val(
"USQMIX", {ae+1, ie+1});
440 Gamma_UR[ae][ie] = src.get_val(
"USQMIX", {ae+1, ie+3+1});
446 Gamma_UL[0][0] = 1.0;
447 Gamma_UL[1][1] = 1.0;
448 Gamma_UL[2][2] = src.get_val(
"WPARAM_SI_BSM", 4);
449 Gamma_UL[5][2] = -src.get_val(
"WPARAM_SI_BSM", 5);
451 Gamma_UR[3][0] = 1.0;
452 Gamma_UR[4][1] = 1.0;
453 Gamma_UR[2][2] = src.get_val(
"WPARAM_SI_BSM", 5);
454 Gamma_UR[5][2] = src.get_val(
"WPARAM_SI_BSM", 4);
457 for (
int ae = 0; ae < 6; ++ae) {
458 for (
int ie = 0; ie < 3; ++ie) {
459 Gamma_U[ae][ie] = Gamma_UL[ae][ie];
460 Gamma_U[ae][ie+3] = Gamma_UR[ae][ie];
461 if (ae <3 && ae==ie) {
462 Gamma_NL[ae][ie] = 1.;
463 Gamma_NR[ae][ie] = 1.;
469 for (
int i = 0; i < 3; ++i) {
471 I_LR[i+3][i+3] = -1.;
474 for (
int ae = 0; ae < 6; ++ae) {
475 for (
int be = 0; be < 6; ++be) {
476 for (
int ce = 0; ce < 6; ++ce) {
477 for (
int de = 0; de < 6; ++de) {
478 P_U[ae][be] = Gamma_U[ae][ce] * I_LR[ce][de] * Gamma_U[be][de];
485 for (
int ie = 0; ie < 2; ++ie) {
486 for (
int ae = 0; ae < 6; ++ae) {
487 for (
int be = 0; be < 3; ++be) {
488 X_UL[ie][ae][be] = 0.0;
489 X_UR[ie][ae][be] = 0.0;
491 for (
int ce = 0; ce < 3; ++ce) {
492 X_UL[ie][ae][be] += -g2 * (
493 src.get_val(
"WPARAM_SI_BSM", 10) * src.get_val(
"VMIX", {ie+1, 0+1}) * Gamma_UL[ae][ce] -
494 src.get_val(
"WPARAM_SI_BSM", 11) * src.get_val(
"VMIX", {ie+1, 1+1}) * Gamma_UR[ae][ce] * src.get_val(
"WPARAM_MATCH_BSM", {2,ce}) / (sqrt(2.0) * mW * src.get_val(
"WPARAM_SI_BSM", 3))
495 ) * std::real(VCKM[ce][be]);
496 X_UR[ie][ae][be] += g2 * src.get_val(
"WPARAM_SI_BSM", 11) * src.get_val(
"UMIX", {ie+1, 1+1}) * Gamma_UL[ae][ce] * std::real(VCKM[ce][be]) * src.get_val(
"WPARAM_MATCH_BSM", {3,be}) / (sqrt(2.0) * mW * src.get_val(
"WPARAM_SI_BSM", 2));
498 G_aimn[ae][ie][be][ce]=0.5/sqrt(2.)*(sqrt(2.)*mW*src.get_val(
"VMIX", {ie+1, 0+1})*Gamma_UL[ae][ce]*src.get_val(
"WPARAM_SI_BSM", 10)-src.get_val(
"WPARAM_MATCH_BSM", {2,ce})*src.get_val(
"VMIX", {ie+1, 1+1})*Gamma_UR[ae][ce]*src.get_val(
"WPARAM_SI_BSM", 11))*(std::real(VCKM[be][2])*std::real(VCKM[ce][1])/std::real(VCKM[2][2])/std::real(VCKM[2][1]));
502 X_NL[ie][ae][be] = -g2 * src.get_val(
"VMIX", {ie+1, 0+1}) * Gamma_NL[ae][be];
504 X_NR[ie][ae][be] = g2 * src.get_val(
"UMIX", {ie+1, 1+1}) * Gamma_NL[ae][be] * src.get_val(
"WPARAM_SI_BSM", {12, be}) / (sqrt(2.0) * mW * src.get_val(
"WPARAM_SI_BSM", 2));
516 for (
int ie = 0; ie < 2; ++ie) {
517 for (
int je = 0; je < 2; ++je) {
518 for (
int ae = 0; ae < 6; ++ae) {
519 double mchRatioSquared =
pow(src.get_val(
"WPARAM_SI_BSM", {13, je}) / src.get_val(
"WPARAM_SI_BSM", {13, ie}), 2.0);
520 double msqOverMchSquared =
pow(src.get_val(
"WPARAM_SI_BSM", {14, ae}) / src.get_val(
"WPARAM_SI_BSM", {13, ie}), 2.0);
522 for (
int be = 0; be < 3; ++be) {
523 double msnOverMchSquared =
pow(src.get_val(
"WPARAM_SI_BSM", {16, be}) / src.get_val(
"WPARAM_SI_BSM", {13, ie}), 2.0);
524 B0c1 += X_UL[je][ae][1] * X_UL[ie][ae][2] / (src.get_val(
"WPARAM_SI_BSM", {13, ie}) * src.get_val(
"WPARAM_SI_BSM", {13, ie})) * (0.5 * X_NL[ie][be][1] * X_NL[je][be][1] *
f50(mchRatioSquared, msqOverMchSquared, msnOverMchSquared));
525 B0c2 += X_UL[je][ae][1] * X_UL[ie][ae][2] / (src.get_val(
"WPARAM_SI_BSM", {13, ie}) * src.get_val(
"WPARAM_SI_BSM", {13, ie})) * (X_NR[ie][be][1] * X_NR[je][be][1] * std::fabs(src.get_val(
"WPARAM_SI_BSM", {13, je}) / src.get_val(
"WPARAM_SI_BSM", {13, ie})) *
f60(mchRatioSquared, msqOverMchSquared, msnOverMchSquared));
528 C90c += X_UL[je][ae][1] * X_UL[ie][ae][2] * (2.0 * std::fabs(src.get_val(
"WPARAM_SI_BSM", {13, je}) / src.get_val(
"WPARAM_SI_BSM", {13, ie})) *
f30(mchRatioSquared, msqOverMchSquared) * src.get_val(
"UMIX", {je+1, 0+1}) * src.get_val(
"UMIX", {ie+1,0+1}) -
f40(mchRatioSquared, msqOverMchSquared) * src.get_val(
"VMIX", {je+1,0+1}) * src.get_val(
"VMIX", {ie+1,0+1}));
531 D90c +=
pow(mW / src.get_val(
"WPARAM_SI_BSM", {13, ie}), 2.0) * X_UL[ie][ae][1] * X_UL[ie][ae][2] *
h30(msqOverMchSquared);
537 for (
int ie = 0; ie < 2; ++ie) {
538 for (
int ae = 0; ae < 6; ++ae) {
539 for (
int be = 0; be < 6; ++be) {
540 double msqOverMchSquaredAe =
pow(src.get_val(
"WPARAM_SI_BSM", {14, ae}) / src.get_val(
"WPARAM_SI_BSM", {13, ie}), 2.0);
541 double msqOverMchSquaredBe =
pow(src.get_val(
"WPARAM_SI_BSM", {14, be}) / src.get_val(
"WPARAM_SI_BSM", {13, ie}), 2.0);
542 for (
int ce = 0; ce < 3; ++ce) {
543 C90c += X_UL[ie][be][1] * X_UL[ie][ae][2] *
f40(msqOverMchSquaredAe, msqOverMchSquaredBe) * Gamma_UL[be][ce] * Gamma_UL[ae][ce];
548 B90c = -(B0c1 - B0c2) * src.get_val(
"WPARAM_SI_BSM", 19) * std::pow(mW, 2.0) / (2.0 * std::pow(g2, 2.0));
549 B100c = (B0c1 + B0c2) * src.get_val(
"WPARAM_SI_BSM", 19) * std::pow(mW, 2.0) / (2.0 * std::pow(g2, 2.0));
550 C90c *= -src.get_val(
"WPARAM_SI_BSM", 19) / 8.0;
551 D90c *= src.get_val(
"WPARAM_SI_BSM", 19);
563 for (
size_t i = 0; i < Gamma_UL.size(); ++i) {
564 for (
size_t j = 0; j < Gamma_UL[i].size(); ++j) {
565 dep_block->store_or_assign({1,i,j}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {1,i,j}}, Gamma_UL[i][j], 0., 0.));
566 dep_block->store_or_assign({2,i,j}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {2,i,j}}, Gamma_UR[i][j], 0., 0.));
570 for (
size_t i = 0; i < X_UL.size(); ++i) {
571 for (
size_t j = 0; j < X_UL[i].size(); ++j) {
572 for (
size_t k = 0; k < X_UL[i][j].size(); ++k) {
573 dep_block->store_or_assign({3,i,j,k}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {3,i,j,k}}, X_UL[i][j][k], 0., 0.));
574 dep_block->store_or_assign({4,i,j,k}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {4,i,j,k}}, X_UR[i][j][k], 0., 0.));
575 dep_block->store_or_assign({5,i,j,k}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {5,i,j,k}}, X_NL[i][j][k], 0., 0.));
576 dep_block->store_or_assign({6,i,j,k}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {6,i,j,k}}, X_NR[i][j][k], 0., 0.));
581 for (
size_t i = 0; i < Gamma_U.size(); ++i) {
582 for (
size_t j = 0; j < Gamma_U[i].size(); ++j) {
583 dep_block->store_or_assign({7,i,j}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {7,i,j}}, Gamma_U[i][j], 0., 0.));
584 dep_block->store_or_assign({8,i,j}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {8,i,j}}, I_LR[i][j], 0., 0.));
585 dep_block->store_or_assign({9,i,j}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {9,i,j}}, P_U[i][j], 0., 0.));
589 for (
size_t i = 0; i < Gamma_NL.size(); ++i) {
590 for (
size_t j = 0; j < Gamma_NL[i].size(); ++j) {
591 dep_block->store_or_assign({10,i,j}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {10,i,j}}, Gamma_NL[i][j], 0., 0.));
592 dep_block->store_or_assign({11,i,j}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {11,i,j}}, Gamma_NR[i][j], 0., 0.));
596 for (
size_t i = 0; i < G_aimn.size(); ++i) {
597 for (
size_t j = 0; j < G_aimn[i].size(); ++j) {
598 for (
size_t k = 0; k < G_aimn[i][j].size(); ++k) {
599 for (
size_t l = 0; l < G_aimn[i][j][k].size(); ++l) {
600 dep_block->store_or_assign({12, i, j, k, l}, std::make_shared<Parameter>(
ParamId{
ParameterType::WILSON,
"MATRIX_BSM", {12, i, j, k, l}}, G_aimn[i][j][k][l], 0., 0.));
612 iblock_c->compose_block(
"MATRIX_BSM", src_matrix, func_matrix);