file DecayBit/SM_Z.hpp
[No description available] More…
Namespaces
Name |
---|
Gambit TODO: see if we can use this one: |
Gambit::DecayBit |
Gambit::DecayBit::SM_Z |
Classes
Name | |
---|---|
class | Gambit::DecayBit::SM_Z::TwoLoop |
Detailed Description
The (Z)-boson observables at two-loop from
Complete electroweak two-loop corrections to (Z) boson production and decay Ievgen Dubovyk, Ayres Freitas, Janusz Gluza, Tord Riemann, Johann Usovitsch arXiv:1804.10236
I refer to tables and equations in v1 (https://arxiv.org/pdf/1804.10236v1).
Source code
// GAMBIT: Global and Modular BSM Inference Tool
// *********************************************
/// \file
///
/// The \f$Z\f$-boson observables at two-loop from
///
/// Complete electroweak two-loop corrections to \f$Z\f$ boson production and
/// decay
/// Ievgen Dubovyk, Ayres Freitas, Janusz Gluza, Tord Riemann, Johann Usovitsch
/// arXiv:1804.10236
///
/// I refer to tables and equations in v1 (https://arxiv.org/pdf/1804.10236v1).
///
/// \example SM_Z.cpp
///
/// *********************************************
///
/// Authors (add name and date if you modify):
///
/// \author Andrew Fowlie
/// (andrew.fowlie@monash.edu)
/// \date 2018 May
///
/// *********************************************
#ifndef DECAYBIT_INCLUDE_GAMBIT_DECAYBIT_SM_Z_HPP_
#define DECAYBIT_INCLUDE_GAMBIT_DECAYBIT_SM_Z_HPP_
#include <cmath>
#include <iostream>
namespace Gambit {
namespace DecayBit {
namespace SM_Z {
/**
@brief <ahref="
http://pdglive.lbl.gov/BranchingRatio.action?desig=9&parCode=S044
">PDG</a> measurement of invisible width of \f$Z\f$ boson in GeV
*/
constexpr struct {
const double mu = 499.0e-3;
const double sigma = 1.5e-3;
} gamma_inv;
/** @brief The central values of nuisances from eq. 13 */
constexpr struct {
const double mh_OS = 125.7; // GeV
const double mt_OS = 173.2;
const double MZ_OS = 91.1876;
const double alpha_s_MSbar_MZ = 0.1184;
const double delta_alpha_OS = 0.059;
} hat;
constexpr int kRows = 12;
constexpr int kCols = 9;
/** @brief Coefficient data in Table 5 with MeV converted to GeV */
constexpr double table_5[kRows][kCols] = {
{83.983e-3, -0.061e-3, 0.810e-3, -0.096e-3, -0.01e-3, 0.25e-3, -1.1e-3, 286e-3, 0.001e-3},
{83.793e-3, -0.060e-3, 0.810e-3, -0.095e-3, -0.01e-3, 0.25e-3, -1.1e-3, 285.e-3, 0.001e-3},
{167.176e-3, -0.071e-3, 1.26e-3, -0.19e-3, -0.02e-3, 0.36e-3, -0.1e-3, 504.e-3, 0.001e-3},
{299.993e-3, -0.38e-3, 4.08e-3, 14.27e-3, 1.6e-3, 1.8e-3, -11.1e-3, 1253.e-3, 0.002e-3},
{299.916e-3, -0.38e-3, 4.08e-3, 14.27e-3, 1.6e-3, 1.8e-3, -11.1e-3, 1253.e-3, 0.002e-3},
{382.828e-3, -0.39e-3, 3.83e-3, 10.20e-3, -2.4e-3, 0.67e-3, -10.1e-3, 1470.e-3, 0.002e-3},
{375.889e-3, -0.36e-3, -2.14e-3, 10.53e-3, -2.4e-3, 1.2e-3, -10.1e-3, 1459.e-3, 0.006e-3},
{2494.74e-3, -2.3e-3, 19.9e-3, 58.61e-3, -4.0e-3, 8.0e-3, -56.0e-3, 9273.e-3, 0.012e-3},
{20751.6, -7.8, -37., 732.3, -44, 5.5, -358, 11696., 0.1 },
{172.22, -0.031, 1.0, 2.3, 1.3, 0.38, -1.2, 37., 0.01},
{215.85, 0.029, -2.92, -1.32, -0.84, 0.032, 0.72, -18., 0.01},
{41489.6, 1.6, 60.0, -579.6, 38., 7.3, 85., 0.1},
};
/**
@brief Data in Table 6, though re-arranged to match columns in Table 5
with MeV converted to GeV
The final entry isn't in the table and instead comes from the text below
eq. 16.
*/
constexpr double table_6[kRows] =
{0.018e-3, 0.018e-3, 0.016e-3, 0.11e-3, 0.11e-3, 0.08e-3, 0.18e-3, 0.4e-3, 6.e-3, 5.e-5, 1.e-4, 6.};
class TwoLoop {
/**
@brief \f$Z\f$-boson observables at two-loop and the residual theory errors
@warning Do not apply any corrections outside the range of validity in p5
*/
public:
// Partial widths in GeV
double gamma_e() const {return observable(0);}
double gamma_mu() const {return gamma_e();}
double gamma_tau() const {return observable(1);}
double gamma_nu_e() const {return observable(2);}
double gamma_nu_mu() const {return gamma_nu_e();}
double gamma_inv() const {return 3. * gamma_nu_e();}
double gamma_nu_tau() const {return observable(2);}
double gamma_u() const {return observable(3);}
double gamma_c() const {return observable(4);}
double gamma_t() const {return 0.;}
double gamma_d() const {return observable(5);}
double gamma_s() const {return gamma_d();}
double gamma_b() const {return observable(6);}
double gamma_total() const {return observable(7);}
// Residual theory error in partial widths in GeV
double error_gamma_e() const {return error(0);}
double error_gamma_mu() const {return error_gamma_e();}
double error_gamma_tau() const {return error(1);}
double error_gamma_nu_e() const {return error(2);}
double error_gamma_nu_mu() const {return error_gamma_nu_e();}
double error_gamma_inv() const {return 3. * error_gamma_nu_e();}
double error_gamma_nu_tau() const {return error(2);}
double error_gamma_u() const {return error(3);}
double error_gamma_c() const {return error(4);}
double error_gamma_t() const {return 0.;}
double error_gamma_d() const {return error(5);}
double error_gamma_s() const {return error_gamma_d();}
double error_gamma_b() const {return error(6);}
double error_gamma_total() const {return error(7);}
// Branching ratios
double BR_e() const {return BR(0);}
double BR_mu() const {return BR_e();}
double BR_tau() const {return BR(1);}
double BR_nu_e() const {return BR(2);}
double BR_nu_mu() const {return BR_nu_e();}
double BR_inv() const {return 3. * BR_nu_e();}
double BR_nu_tau() const {return BR(2);}
double BR_u() const {return BR(3);}
double BR_c() const {return BR(4);}
double BR_t() const {return 0.;}
double BR_d() const {return BR(5);}
double BR_s() const {return BR_d();}
double BR_b() const {return BR(6);}
// Residual theory error in branching ratios
double error_BR_e() const {return error_BR(0);}
double error_BR_mu() const {return error_BR_e();}
double error_BR_tau() const {return error_BR(1);}
double error_BR_nu_e() const {return error_BR(2);}
double error_BR_nu_mu() const {return error_BR_nu_e();}
double error_BR_inv() const {return 3. * error_BR_nu_e();}
double error_BR_nu_tau() const {return error_BR(2);}
double error_BR_u() const {return error_BR(3);}
double error_BR_c() const {return error_BR(4);}
double error_BR_t() const {return 0.;}
double error_BR_d() const {return error_BR(5);}
double error_BR_s() const {return error_BR_d();}
double error_BR_b() const {return error_BR(6);}
// Ratios of partial widths, defined in eq. 27
double Rl() const {return 1.e-3 * observable(8);}
double Rc() const {return 1.e-3 * observable(9);}
double Rb() const {return 1.e-3 * observable(10);}
// Residual theory error in ratios of partial widths
double error_Rl() const {return 1.e-3 * error(8);}
double error_Rc() const {return 1.e-3 * error(9);}
double error_Rb() const {return 1.e-3 * error(10);}
// Hadronic peak cross section in pb, defined in eq. 10
double sigma_0_had() const {return observable(11);}
// Residual theory error in hadronic peak cross section in pb
double error_sigma_0_had() const {return error(11);}
// Nuisance parameters
double mh_OS;
double mt_OS;
double MZ_OS;
double alpha_s_MSbar_MZ;
double delta_alpha_OS;
bool nuisances_outside_ranges() {
/**
@returns Whether nuisance parameters are outside the ranges of validity
in p5
*/
return !((std::fabs(mh_OS - 125.1) < 5.) &&
(std::fabs(mt_OS - 173.2) < 4.) &&
(std::fabs(alpha_s_MSbar_MZ - 0.1184) < 0.005) &&
(std::fabs(delta_alpha_OS - 0.059) < 0.0005) &&
(std::fabs(MZ_OS - 91.1876) < 0.0042));
}
TwoLoop(double mh_OS = hat.mh_OS,
double mt_OS = hat.mt_OS,
double MZ_OS = hat.MZ_OS,
double alpha_s_MSbar_MZ = hat.alpha_s_MSbar_MZ,
double delta_alpha_OS = hat.delta_alpha_OS):
mh_OS{mh_OS},
mt_OS{mt_OS},
MZ_OS{MZ_OS},
alpha_s_MSbar_MZ{alpha_s_MSbar_MZ},
delta_alpha_OS{delta_alpha_OS}
{
/**
@param mh_OS Higgs mass in OS scheme
@param mt_OS Top quark mass in OS scheme
@param MZ_OS \f$Z\f$-mass in OS scheme
@param alpha_s_MSbar_MZ Strong coupling in MS-bar scheme at \f$Q = M_Z\f$
@param delta_alpha_OS \f$\Delta\alpha\f$ parameter in OS scheme. Defined on p9
*/
if (nuisances_outside_ranges()) {
std::cerr << "SM nuisance parameters outside range of validity for "
"two-loop Z formulas. Not accounting for variation in "
"SM nuisance parameters" << std::endl;
L_H = 0.;
delta_t = 0.;
delta_z = 0.;
delta_alpha_s = 0.;
delta_delta_alpha = 0.;
} else {
L_H = std::log(mh_OS / hat.mh_OS);
delta_t = pow(mt_OS / hat.mt_OS, 2) - 1.;
delta_z = MZ_OS / hat.MZ_OS - 1.;
delta_alpha_s = alpha_s_MSbar_MZ / hat.alpha_s_MSbar_MZ - 1.;
delta_delta_alpha = delta_alpha_OS / hat.delta_alpha_OS - 1.;
}
}
private:
double L_H;
double delta_t;
double delta_z;
double delta_alpha_s;
double delta_delta_alpha;
double error(int row) const {
/**
@brief Error in observable calculated from eq. 13
We add the error from the parametric formula and theory error in
quadrature.
@param row Row number of Table 5 corresponding to quantity
@returns Error in quantity
*/
return std::sqrt(pow(table_5[row][8], 2) + pow(table_6[row], 2));
}
double observable(int row) const {
/**
@returns The observable calculated from eq. 13
@param row Row number of Table 5 corresponding to quantity
*/
return table_5[row][0] +
table_5[row][1] * L_H +
table_5[row][2] * delta_t +
table_5[row][3] * delta_alpha_s +
table_5[row][4] * pow(delta_alpha_s, 2) +
table_5[row][5] * delta_alpha_s * delta_t +
table_5[row][6] * delta_delta_alpha +
table_5[row][7] * delta_z;
}
double BR(int row) const {
/*
@param row Row number of Table 7 corresponding to quantity
@returns Branching ratio
*/
return observable(row) / gamma_total();
}
double error_BR(int row) const {
/**
@warning We propagate an error in \f$f = x / y\f$. In fact, though, we
should propagate an error in \f$f = x / (x + y)\f$, since the partial
width in the numerator contributes to the total width. Thus this formula
is reliable only for small branching ratios.
@param row Row number of Table 7 corresponding to quantity
@returns Error in a branching ratio found by propagating errors
*/
const double frac_error_sq = pow(error_gamma_total() / gamma_total(), 2)
+ pow(error(row) / observable(row), 2);
return std::sqrt(frac_error_sq) * BR(row);
}
};
} // namespace SM_Z
} // namespace DecayBit
} // namespace Gambit
#endif // DECAYBIT_INCLUDE_GAMBIT_DECAYBIT_SM_Z_HPP_
Updated on 2024-07-18 at 13:53:34 +0000