4 LOG_TRACE(
"In BCoefficientGroup constructor");
9 return std::make_shared<BCoefficientGroup>(*
this);
14 const std::unordered_map<
QCDOrder, std::unordered_map<WCoefId, scalar_t>>& coef_matching,
18 LOG_DEBUG(
"Init LO running of BCoefficientGroup in standard basis");
20 auto U0 = [src] (
int k,
int l) ->
double {
24 std::array<complex_t, 10> Ci_match = {};
26 for (
size_t k = 0; k < 10; k++) {
30 std::array<complex_t, 10> Ci_run {};
34 Ci_match[8] *= src.
get_val(
"WPARAM_MATCH_SM", 1)/ (4. *
PI);
37 for (
size_t k = 0; k < 8; k++) {
38 for (
size_t l = 0; l < 8; l++) {
39 Ci_run[k] += U0(k, l) * Ci_match[l];
43 for (
size_t l = 0; l < 9; l++) {
44 Ci_run[8] += 4 *
PI / src.
get_val(
"WPARAM_RUN_SM",1) * U0(8, l) * Ci_match[l];
51 Ci_run[9] = Ci_match[9];
53 std::unordered_map<WCoefId, scalar_t> Ci_run_map {};
54 for (
size_t k = 0; k < 10; k++) {
62 const std::unordered_map<
QCDOrder, std::unordered_map<WCoefId, scalar_t>>& coef_matching,
66 LOG_DEBUG(
"Init LO running of BCoefficientGroup in traditional basis");
68 auto V0 = [src] (
int k,
int l) ->
double {
72 std::array<complex_t, 10> Ci_match_trad = {};
74 for (
size_t k = 0; k < 8; k++) {
75 for (
size_t j = 0; j < 8; j++) {
82 std::array<complex_t, 10> Ci_run {};
84 for (
size_t k = 0; k < 8; k++) {
85 for (
size_t l = 0; l < 8; l++) {
86 Ci_run[k] += V0(k, l) * Ci_match_trad[l];
91 for (
size_t l = 0; l < 9; l++) {
92 Ci_run[8] += 4 *
PI / src.
get_val(
"WPARAM_RUN_SM",1)* V0(8, l) * Ci_match_trad[l];
97 std::unordered_map<WCoefId, scalar_t> Ci_run_map {};
98 for (
size_t k = 0; k < 10; k++) {
106 const std::unordered_map<
QCDOrder, std::unordered_map<WCoefId, scalar_t>>& coef_matching,
110 LOG_DEBUG(
"Init NLO running of BCoefficientGroup in standard basis");
112 auto U0 = [src] (
int k,
int l) ->
double {
116 auto U1 = [src] (
int k,
int l) ->
double {
120 auto C_eff = [] (
const std::array<complex_t, 10>& Ci,
const double* vec) ->
complex_t {
122 for (
size_t k = 0; k < 8; k++) {
128 double eta = src.
get_val(
"WPARAM_RUN_SM",2);
130 std::array<complex_t, 10> Ci_0_match = {};
131 std::array<complex_t, 10> Ci_1_match = {};
133 for (
size_t k = 0; k < 10; k++) {
138 std::array<complex_t, 10> Ci_run {};
140 Ci_0_match[6] = C_eff(Ci_0_match,
BRP::y_std);
141 Ci_0_match[7] = C_eff(Ci_0_match,
BRP::z_std);
142 Ci_1_match[6] = C_eff(Ci_1_match,
BRP::y_std);
143 Ci_1_match[7] = C_eff(Ci_1_match,
BRP::z_std);
144 Ci_0_match[8] *= src.
get_val(
"WPARAM_MATCH_SM",1) / (4 *
PI);
145 Ci_1_match[8] *= src.
get_val(
"WPARAM_MATCH_SM",1) / (4 *
PI);
147 for (
size_t k = 0; k < 8; k++) {
148 for (
size_t l = 0; l < 8; l++) {
149 Ci_run[k] += U0(k, l) * Ci_1_match[l] + U1(k, l) * Ci_0_match[l];
153 for (
size_t l = 0; l < 9; l++) {
154 Ci_run[8] += 4 *
PI / src.
get_val(
"WPARAM_RUN_SM",1) * (U0(8, l) * Ci_1_match[l] + U1(8, l) * Ci_0_match[l]);
159 std::unordered_map<WCoefId, scalar_t> Ci_run_map {};
160 for (
size_t k = 0; k < 10; k++) {
168 const std::unordered_map<
QCDOrder, std::unordered_map<WCoefId, scalar_t>>& coef_matching,
172 LOG_DEBUG(
"Init NLO running of BCoefficientGroup in traditional basis");
174 auto V0 = [src] (
int k,
int l) ->
double {
178 auto V1 = [src] (
int k,
int l) ->
double {
182 std::array<complex_t, 10> Ci_0_match_trad = {};
183 std::array<complex_t, 10> Ci_1_match_trad = {};
185 for (
size_t k = 0; k < 8; k++) {
186 for (
size_t j = 0; j < 8; j++) {
196 std::array<complex_t, 10> Ci_run {};
197 for (
size_t k = 0; k < 8; k++) {
198 for (
size_t l = 0; l < 8; l++) {
199 Ci_run[k] += V0(k, l) * Ci_1_match_trad[l] + V1(k, l) * Ci_0_match_trad[l];
203 for (
size_t l = 0; l < 9; l++) {
204 Ci_run[8] += 4 *
PI / src.
get_val(
"WPARAM_RUN_SM",1) * (V0(8, l) * Ci_1_match_trad[l] + V1(8, l) * Ci_0_match_trad[l]);
209 double eta = src.
get_val(
"WPARAM_RUN_SM",2);
210 std::unordered_map<WCoefId, scalar_t> Ci_run_map {};
211 for (
size_t k = 0; k < 10; k++) {
219 const std::unordered_map<
QCDOrder, std::unordered_map<WCoefId, scalar_t>>& coef_matching,
223 LOG_DEBUG(
"Init NNLO running of BCoefficientGroup in standard basis");
225 auto U = [src] (
int order,
int k,
int l) ->
double {
229 std::array<complex_t, 10> Ci_0_match = {};
230 std::array<complex_t, 10> Ci_1_match = {};
231 std::array<complex_t, 10> Ci_2_match = {};
233 for (
size_t k = 0; k < 10; k++) {
245 Ci_0_match[8] *= src.
get_val(
"WPARAM_MATCH_SM",1) / (4 *
PI);
246 Ci_1_match[8] *= src.
get_val(
"WPARAM_MATCH_SM",1) / (4 *
PI);
247 Ci_2_match[8] *= src.
get_val(
"WPARAM_MATCH_SM",1) / (4 *
PI);
249 std::array<complex_t, 10> Ci_run {};
251 for (
size_t k = 0; k < 8; k++) {
252 for (
size_t l = 0; l < 8; l++) {
253 Ci_run[k] += U(2, k, l) * Ci_0_match[l] + U(1, k, l) * Ci_1_match[l] + U(0, k, l) * Ci_2_match[l];
257 for (
size_t l = 0; l < 9; l++) {
258 Ci_run[8] += 4 *
PI / src.
get_val(
"WPARAM_RUN_SM",1) * (U(2, 8, l) * Ci_0_match[l] + U(1, 8, l) * Ci_1_match[l] + U(0, 8, l) * Ci_2_match[l]);
263 double eta_sq =
pow(src.
get_val(
"WPARAM_RUN_SM",2), 2);
264 std::unordered_map<WCoefId, scalar_t> Ci_run_map {};
265 for (
size_t k = 0; k < 10; k++) {
#define LOG_TRACE(...)
Macro for logging trace messages.
#define LOG_DEBUG(...)
Macro for logging debug messages.
#define LOG_VERBOSE(...)
Macro for logging verbose messages.
std::complex< double > complex_t
Convenience alias for std::complex<double>.
static std::unordered_map< WCoefId, scalar_t > base_1_NNLO_calculation(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &coef_matching, const BlockSrc &src)
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)
std::shared_ptr< CoefficientGroup > clone() const override
Polymorphic clone.
static std::unordered_map< WCoefId, scalar_t > base_2_NLO_calculation(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &coef_matching, const BlockSrc &src)
BCoefficientGroup(WilsonGroupAdapterConfig adapters)
static std::unordered_map< WCoefId, scalar_t > base_1_NLO_calculation(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &coef_matching, const BlockSrc &src)
static std::unordered_map< WCoefId, scalar_t > base_2_LO_calculation(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &coef_matching, const BlockSrc &src)
Lightweight view over a set of source blocks.
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.
static IdOf< WGroupTag > to_id(WGroup e)
Converts an enum value to an IdOf<Tag>.
static std::vector< WCoef > get_group(WGroup g)
Returns the list of Wilson coefficients belonging to a WGroup.
scalar_t pow(const scalar_t &base, const scalar_t &exp)
static constexpr double z_std[8]
static complex_t C8_eff_std(const std::array< complex_t, 10 > &Ci)
static complex_t C7_eff_std(const std::array< complex_t, 10 > &Ci)
static constexpr double y_std[8]
static const std::array< std::array< double, 8 >, 8 > std_to_trad_NLO
static const std::array< std::array< double, 8 >, 8 > std_to_trad_LO
Represents an identifier of a LHA element, possibly containing several sub-ids.
Dependency injection bundle for CoefficientGroup.