12 return std::make_shared<MesonMixingCoefficientGroup>(*
this);
17void MesonMixingCoefficientGroup::init_running_parameter_blocks() {
20 LOG_DEBUG(
"Init running matrices blocks of Meson Mixing Coefficient group");
21 std::unordered_map<ParameterType, std::vector<std::string>> eta_powers_src = {{
ParameterType::WILSON, {
"WPARAM_RUN_SM"}}};
23 auto eta_powers_func = [] (
const BlockSrc& src, std::shared_ptr<DependentBlock> dep_block) {
24 double eta5 = src.
get_val(
"WPARAM_RUN_SM",2);
25 double eta4 = src.
get_val(
"WPARAM_RUN_SM",3);
33 std::unordered_map<ParameterType, std::vector<std::string>> mtx_src = {{
ParameterType::WILSON, {
"WPARAM_RUN_SM",
"ETA_POWS_MIXING"}}};
35 auto U_5_func = [] (
const BlockSrc& src, std::shared_ptr<DependentBlock> dep_block) {
36 double eta_5 = src.
get_val(
"WPARAM_RUN_SM",2);
37 auto pid = [] (
int n,
int k,
int l) {
46 double eta_V = src.
get_val(
"ETA_POWS_MIXING",
LhaID(1, 0));
49 dep_block->store_or_assign(
LhaID(0, 0, 0), std::make_shared<Parameter>(pid(0, 0, 0), U0, 0., 0.));
50 dep_block->store_or_assign(
LhaID(0, 5, 5), std::make_shared<Parameter>(pid(0, 5, 5), U0, 0., 0.));
51 dep_block->store_or_assign(
LhaID(1, 0, 0), std::make_shared<Parameter>(pid(1, 0, 0), U1, 0., 0.));
52 dep_block->store_or_assign(
LhaID(1, 5, 5), std::make_shared<Parameter>(pid(1, 5, 5), U1, 0., 0.));
55 std::array<double, 2> eta_LR {
60 for (
int i = 0; i < 2; ++i) {
61 for (
int j = 0; j < 2; ++j) {
63 for (
int k = 0; k < 2; ++k) {
67 dep_block->store_or_assign(
LhaID(0, 1+i, 1+j), std::make_shared<Parameter>(pid(0, 1+i, 1+j), U0, 0., 0.));
68 dep_block->store_or_assign(
LhaID(1, 1+i, 1+j), std::make_shared<Parameter>(pid(1, 1+i, 1+j), U1, 0., 0.));
73 std::array<double, 2> eta_S {
78 for (
int i = 0; i < 2; ++i) {
79 for (
int j = 0; j < 2; ++j) {
81 for (
int k = 0; k < 2; ++k) {
85 dep_block->store_or_assign(
LhaID(0, 3+i, 3+j), std::make_shared<Parameter>(pid(0, 3+i, 3+j), U0, 0., 0.));
86 dep_block->store_or_assign(
LhaID(1, 3+i, 3+j), std::make_shared<Parameter>(pid(1, 3+i, 3+j), U1, 0., 0.));
87 dep_block->store_or_assign(
LhaID(0, 6+i, 6+j), std::make_shared<Parameter>(pid(0, 6+i, 6+j), U0, 0., 0.));
88 dep_block->store_or_assign(
LhaID(1, 6+i, 6+j), std::make_shared<Parameter>(pid(1, 6+i, 6+j), U1, 0., 0.));
93 auto U_4_func = [] (
const BlockSrc& src, std::shared_ptr<DependentBlock> dep_block) {
94 double eta_5 = src.
get_val(
"WPARAM_RUN_SM",2);
95 double eta_4 = src.
get_val(
"WPARAM_RUN_SM",3);
96 auto pid = [] (
int n,
int k,
int l) {
105 double eta_5_V = src.
get_val(
"ETA_POWS_MIXING",
LhaID(1, 0));
106 double eta_4_V = src.
get_val(
"ETA_POWS_MIXING",
LhaID(2, 0));
109 dep_block->store_or_assign(
LhaID(0, 0, 0), std::make_shared<Parameter>(pid(0, 0, 0), U0, 0., 0.));
110 dep_block->store_or_assign(
LhaID(0, 5, 5), std::make_shared<Parameter>(pid(0, 5, 5), U0, 0., 0.));
111 dep_block->store_or_assign(
LhaID(1, 0, 0), std::make_shared<Parameter>(pid(1, 0, 0), U1, 0., 0.));
112 dep_block->store_or_assign(
LhaID(1, 5, 5), std::make_shared<Parameter>(pid(1, 5, 5), U1, 0., 0.));
115 std::array<double, 2> eta_5_LR {
120 std::array<double, 2> eta_4_LR {
125 for (
int i = 0; i < 2; ++i) {
126 for (
int j = 0; j < 2; ++j) {
128 for (
int k = 0; k < 2; ++k)
for (
int l = 0; l < 2; ++l) {
132 dep_block->store_or_assign(
LhaID(0, 1+i, 1+j), std::make_shared<Parameter>(pid(0, 1+i, 1+j), U0, 0., 0.));
133 dep_block->store_or_assign(
LhaID(1, 1+i, 1+j), std::make_shared<Parameter>(pid(1, 1+i, 1+j), U1, 0., 0.));
138 std::array<double, 2> eta_5_S {
143 std::array<double, 2> eta_4_S {
148 for (
int i = 0; i < 2; ++i) {
149 for (
int j = 0; j < 2; ++j) {
151 for (
int k = 0; k < 2; ++k)
for (
int l = 0; l < 2; ++l) {
152 U0 +=
MMRP::a0_S_4[i][j][k][l] * eta_4_S[k] * eta_5_S[l];
155 dep_block->store_or_assign(
LhaID(0, 3+i, 3+j), std::make_shared<Parameter>(pid(0, 3+i, 3+j), U0, 0., 0.));
156 dep_block->store_or_assign(
LhaID(1, 3+i, 3+j), std::make_shared<Parameter>(pid(1, 3+i, 3+j), U1, 0., 0.));
157 dep_block->store_or_assign(
LhaID(0, 6+i, 6+j), std::make_shared<Parameter>(pid(0, 6+i, 6+j), U0, 0., 0.));
158 dep_block->store_or_assign(
LhaID(1, 6+i, 6+j), std::make_shared<Parameter>(pid(1, 6+i, 6+j), U1, 0., 0.));
163 adapters.
iblock_c->compose_block(
"ETA_POWS_MIXING", eta_powers_src, eta_powers_func);
168std::unordered_map<WCoefId, scalar_t>
170 const std::unordered_map<
QCDOrder, std::unordered_map<WCoefId, scalar_t>>& coef_matching,
174 std::string src_block = n_f_final < 5 ?
"UM_MATRIX_4" :
"UM_MATRIX_5";
176 std::array<complex_t, 32> Ci_match_BMU = {};
177 std::array<complex_t, 8> Ci_match_temp = {};
179 for (
size_t n = 0; n < 4; n++) {
180 for (
size_t k = 0; k < 8; k++) {
184 for (
size_t k = 0; k < 8; k++) {
185 Ci_match_BMU[8 * n + k] = Ci_match_temp[k];
190 double fact = 4. *
PI / src.
get_val(
"WPARAM_RUN_SM",1);
192 std::array<complex_t, 32> Ci_run {};
194 for (
size_t k = 0; k < 8; k++) {
195 for (
size_t l = 0; l < 8; l++) {
196 double U0 = src.
raw().at(src_block)->contains(
LhaID(0, k, l)) ? src.
raw().at(src_block)->retrieve(
LhaID(0, k, l))->get_val() :
scalar_t();
197 double U1 = src.
raw().at(src_block)->contains(
LhaID(1, k, l)) ? src.
raw().at(src_block)->retrieve(
LhaID(1, k, l))->get_val() :
scalar_t();
198 double U = U0 + fact * U1;
199 Ci_run[k] += U * Ci_match_BMU[l];
200 Ci_run[k + 8] += U * Ci_match_BMU[l + 8];
201 Ci_run[k + 16] += U * Ci_match_BMU[l + 16];
202 Ci_run[k + 24] += U * Ci_match_BMU[l + 24];
206 std::unordered_map<WCoefId, scalar_t> Ci_run_map {};
207 for (
size_t k = 0; k < 32; k++) {
#define LOG_DEBUG(...)
Macro for logging debug messages.
Lightweight view over a set of source blocks.
const std::unordered_map< std::string, std::shared_ptr< Block > > & raw() const
Returns the underlying map reference.
scalar_t get_val(std::string_view blk, std::initializer_list< long > code) const
Retrieves the value of a parameter given as an initializer_list.
Polymorphic container of WilsonCoefficient objects representing a coefficient group.
WilsonGroupAdapterConfig adapters
Adapter configuration bundle (proxies, composers, core APIs, MARTY hooks).
static IdOf< WGroupTag > to_id(WGroup e)
Converts an enum value to an IdOf<Tag>.
static std::unordered_map< WCoefId, scalar_t > base_1_LO_calculation(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &coef_matching, const BlockSrc &src)
MesonMixingCoefficientGroup(WilsonGroupAdapterConfig adapters)
std::shared_ptr< CoefficientGroup > clone() const override
Polymorphic clone.
static int get_nf(double mu, MassType mass_b_type=MassType::POLE, MassType mass_t_type=MassType::POLE)
Returns the number of active flavors n_f at scale μ.
static std::vector< WCoef > get_group(WGroup g)
Returns the list of Wilson coefficients belonging to a WGroup.
Represents an identifier of a LHA element, possibly containing several sub-ids.
static constexpr std::array< double, n_pows > bi
Exponents for nf=4 evolution (eta_4^bi).
static const std::array< std::array< std::array< std::array< double, 2 >, 2 >, 2 >, 2 > c_S_4
static const std::array< std::array< std::array< double, 2 >, 2 >, 2 > a1_LR_5
static const std::array< std::array< std::array< std::array< double, 2 >, 2 >, 2 >, 2 > a1_LR_4
static constexpr double b_V_5
static const std::array< std::array< std::array< std::array< double, 2 >, 2 >, 2 >, 2 > a0_S_4
static const std::array< std::array< std::array< double, 2 >, 2 >, 2 > a0_S_5
static constexpr double a0_V_4
static const std::array< std::array< std::array< std::array< double, 2 >, 2 >, 2 >, 2 > a0_LR_4
static const std::array< std::array< std::array< double, 2 >, 2 >, 2 > a1_S_5
static constexpr std::array< double, n_pows > ai
Exponents for nf=5 evolution (eta_5^ai).
static constexpr double a0_V_5
static const std::array< std::array< std::array< double, 2 >, 2 >, 2 > a0_LR_5
static const std::array< std::array< double, n_coefs >, n_coefs > SUSY_to_BMU
Change of basis matrix from SUSY basis to BMU basis.
static const std::array< std::array< std::array< std::array< double, 2 >, 2 >, 2 >, 2 > a1_S_4
static constexpr double b_V_4
static const std::array< std::array< std::array< std::array< double, 2 >, 2 >, 2 >, 2 > b_LR_4
static constexpr double a1_V_4
static const std::array< std::array< std::array< std::array< double, 2 >, 2 >, 2 >, 2 > c_LR_4
static const std::array< std::array< std::array< double, 2 >, 2 >, 2 > b_LR_5
static const std::array< std::array< std::array< double, 2 >, 2 >, 2 > b_S_5
static constexpr double c_V_4
static const std::array< std::array< double, n_coefs >, n_coefs > BMU_to_SUSY
Change of basis matrix from BMU basis to SUSY basis.
static std::array< complex_t, n_coefs > change_basis(const std::array< complex_t, n_coefs > &Ci_in, const std::array< std::array< double, n_coefs >, n_coefs > &P)
Applies a basis change Ci_out = P * Ci_in.
static constexpr double a1_V_5
static const std::array< std::array< std::array< std::array< double, 2 >, 2 >, 2 >, 2 > b_S_4
static constexpr int n_pows
Number of exponent entries stored in ai / bi (for eta power vectors).
Composite identifier for a single parameter.
Dependency injection bundle for CoefficientGroup.
std::shared_ptr< IBlockComposer > iblock_c
Composer used to register dependent parameters / dependent blocks.