Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
WilsonCoefficientRegistry.cpp
Go to the documentation of this file.
2#include "BWilson.h"
3#include "BPrimeWilson.h"
4#include "BScalarWilson.h"
10#include "MartyWilson.h"
11#include "BWilsonSUSY.h"
12#include "BWilsonTHDM.h"
21#include "KWilson.h"
22
23#include "Include.h"
24
25#define REG(c,m,b,body) \
26 reg.register_creator((c),(m),(b), \
27 []([[maybe_unused]] const BuildContext& ctx, [[maybe_unused]] WCoef coef) -> CoefPtr { \
28 return (body); \
29 })
30
31
32static LhaID flhaid(WCoef c, QCDOrder ord, ContributionType ct) {
33 return WCoefMapper::flha_full(c, ord, ct);
34}
35
36static bool is_split_regprop_marty_target(WCoef c) {
37 return c == WCoef::C9 || c == WCoef::CP9 || c == WCoef::CP10;
38}
39
40static CoefPtr make_marty(const BuildContext& ctx, WCoef c) {
41 std::string output_name = "SM";
42 std::string generation_name = "SM";
43 fs::path path = ctx.adapters.sm_path;
44 bool sm_like_filter = false;
45 bool bsm_split_generation = false;
46 bool full_target_generation = false;
47
48 if (ctx.contrib == ContributionType::TOTAL && ctx.model != Model::SM) {
49 // Explicit diagnostic path only. The normal WilsonBuilder stores a
50 // pure BSM group and composes TOTAL = SM + BSM, because cross-backend
51 // TOTAL - SM subtraction is not safe for C9/C10 conventions.
52 output_name = ctx.adapters.marty_model_name->get();
53 generation_name = output_name;
54 path = ctx.adapters.marty_model_path->get();
55 full_target_generation = true;
56 bsm_split_generation = is_split_regprop_marty_target(c);
57 } else if (ctx.contrib == ContributionType::BSM && ctx.model != Model::SM) {
58 output_name = ctx.adapters.marty_model_name->get();
59 generation_name = output_name;
60 path = ctx.adapters.marty_model_path->get();
61
62 // A BSM contribution must never contain the SM diagrams of the target
63 // model. Otherwise CoefficientManager later forms TOTAL = SM + BSM and
64 // doubles the SM matching (most visibly C2 ~= 2). The MARTY modifier
65 // uses a generic non-SM-particle diagram filter for ordinary
66 // coefficients and keeps the specialised reg_prop split only for the
67 // semileptonic targets selected by is_split_regprop_marty_target().
68 bsm_split_generation = true;
69 } else if (ctx.contrib != ContributionType::SM) {
70 output_name = ctx.adapters.marty_model_name->get();
71 generation_name = output_name;
72 path = ctx.adapters.marty_model_path->get();
73 }
74
75 std::string block= GroupMapper::str(ctx.group_id, ScaleType::MATCHING);
76 LhaID id = flhaid(c, QCDOrder::LO, ctx.contrib);
78 output_name,
79 generation_name,
80 sm_like_filter,
81 bsm_split_generation,
82 full_target_generation,
83 id,
84 block,
85 path,
87 ctx.marty_paths
88 };
89 return std::make_shared<MartyWilson>(cfg);
90}
91
92
93static CoefPtr make_c9_marty_compatible(const BuildContext& ctx) {
94 // The four-fermion photon-penguin projection for C9 is not a stable
95 // short-distance matching coefficient in MARTY: it contains the regulated
96 // photon propagator and is very sensitive to reg_prop. For the SM branch
97 // we therefore keep the HyperIso/SuperIso analytic C9. For a BSM branch
98 // we still use MARTY, but C9 is generated as two BSM components: the
99 // non-photon part and a photon-linker C9_A part. The numeric wrapper
100 // evaluates them with different reg_prop values and writes their sum.
101 if (ctx.contrib == ContributionType::SM) {
102 return std::make_shared<C9>();
103 }
104 return make_marty(ctx, WCoef::C9);
105}
106
107static CoefPtr make_cp9_marty_compatible(const BuildContext& ctx) {
108 // Same separation as C9. The SM CP9 is zero in the builtin basis, while
109 // BSM CP9 follows the same split-regulator policy as C9.
110 if (ctx.contrib == ContributionType::SM) {
111 return std::make_shared<CP9>();
112 }
113 return make_marty(ctx, WCoef::CP9);
114}
115
116static CoefPtr make_cp10_marty_compatible(const BuildContext& ctx) {
117 // In the SuperIso convention the SM primed C10 coefficient is zero at the
118 // matching scale. Do not use a MARTY SM-like 4-fermion projection for it.
119 if (ctx.contrib == ContributionType::SM) {
120 return std::make_shared<CP10>();
121 }
122 return make_marty(ctx, WCoef::CP10);
123}
124
126 if (auto it = table_.find(key(c, ctx.model, ctx.backend)); it != table_.end())
127 return it->second(ctx, c);
128
129 // MARTY generations for a user/BSM model are implemented by the generic
130 // SM/MARTY factory, but it must receive the original context (ctx.model !=
131 // SM). The normal builder requests BSM here; TOTAL remains an explicit
132 // diagnostic mode. Resolve this before hardcoded THDM/SUSY fallbacks.
133 if (ctx.backend == Backend::Marty
134 && ctx.model != Model::SM
137 || ctx.contrib == ContributionType::TOTAL)) {
138 if (auto it_sm_marty = table_.find(key(c, Model::SM, Backend::Marty)); it_sm_marty != table_.end())
139 return it_sm_marty->second(ctx, c);
140 }
141
142 // fallback Marty -> Builtin
143 if (ctx.backend == Backend::Marty) {
144 if (auto it2 = table_.find(key(c, ctx.model, Backend::Builtin)); it2 != table_.end())
145 return it2->second(ctx, c);
146 }
147 // fallback modèle -> SM
148 if (ctx.model != Model::SM) {
149 if (auto it3 = table_.find(key(c, Model::SM, ctx.backend)); it3 != table_.end())
150 return it3->second(ctx, c);
151 }
152 throw std::runtime_error("No factory registered for coefficient");
153}
154
156 using enum Model; using enum Backend;
157
158 REG(WCoef::C1, SM, Builtin, std::make_shared<C1>());
159 REG(WCoef::C2, SM, Builtin, std::make_shared<C2>());
160 REG(WCoef::C3, SM, Builtin, std::make_shared<C3>());
161 REG(WCoef::C4, SM, Builtin, std::make_shared<C4>());
162 REG(WCoef::C5, SM, Builtin, std::make_shared<C5>());
163 REG(WCoef::C6, SM, Builtin, std::make_shared<C6>());
164 REG(WCoef::C7, SM, Builtin, std::make_shared<C7>());
165 REG(WCoef::C8, SM, Builtin, std::make_shared<C8>());
166 REG(WCoef::C9, SM, Builtin, std::make_shared<C9>());
167 REG(WCoef::C10, SM, Builtin, std::make_shared<C10>());
168
169 REG(WCoef::C1, SUSY, Builtin, std::make_shared<C1_susy>());
170 REG(WCoef::C2, SUSY, Builtin, std::make_shared<C2_susy>());
171 REG(WCoef::C3, SUSY, Builtin, std::make_shared<C3_susy>());
172 REG(WCoef::C4, SUSY, Builtin, std::make_shared<C4_susy>());
173 REG(WCoef::C5, SUSY, Builtin, std::make_shared<C5_susy>());
174 REG(WCoef::C6, SUSY, Builtin, std::make_shared<C6_susy>());
175 REG(WCoef::C7, SUSY, Builtin, std::make_shared<C7_susy>());
176 REG(WCoef::C8, SUSY, Builtin, std::make_shared<C8_susy>());
177 REG(WCoef::C9, SUSY, Builtin, std::make_shared<C9_susy>());
178 REG(WCoef::C10, SUSY, Builtin, std::make_shared<C10_susy>());
179
180 REG(WCoef::C1, THDM, Builtin, std::make_shared<C1_THDM>());
181 REG(WCoef::C2, THDM, Builtin, std::make_shared<C2_THDM>());
182 REG(WCoef::C3, THDM, Builtin, std::make_shared<C3_THDM>());
183 REG(WCoef::C4, THDM, Builtin, std::make_shared<C4_THDM>());
184 REG(WCoef::C5, THDM, Builtin, std::make_shared<C5_THDM>());
185 REG(WCoef::C6, THDM, Builtin, std::make_shared<C6_THDM>());
186 REG(WCoef::C7, THDM, Builtin, std::make_shared<C7_THDM>());
187 REG(WCoef::C8, THDM, Builtin, std::make_shared<C8_THDM>());
188 REG(WCoef::C9, THDM, Builtin, std::make_shared<C9_THDM>());
189 REG(WCoef::C10, THDM, Builtin, std::make_shared<C10_THDM>());
190
191 REG(WCoef::C1, SM, Marty, make_marty(ctx, WCoef::C1));
192 REG(WCoef::C2, SM, Marty, make_marty(ctx, WCoef::C2));
193 REG(WCoef::C3, SM, Marty, make_marty(ctx, WCoef::C3));
194 REG(WCoef::C4, SM, Marty, make_marty(ctx, WCoef::C4));
195 REG(WCoef::C5, SM, Marty, make_marty(ctx, WCoef::C5));
196 REG(WCoef::C6, SM, Marty, make_marty(ctx, WCoef::C6));
197 REG(WCoef::C7, SM, Marty, make_marty(ctx, WCoef::C7));
198 REG(WCoef::C8, SM, Marty, make_marty(ctx, WCoef::C8));
199 REG(WCoef::C9, SM, Marty, make_c9_marty_compatible(ctx));
200 REG(WCoef::C10, SM, Marty, make_marty(ctx, WCoef::C10));
201
202
203}
204
206 using enum Model; using enum Backend;
207
208 REG(WCoef::CP1, SM, Builtin, std::make_shared<CP1>());
209 REG(WCoef::CP2, SM, Builtin, std::make_shared<CP2>());
210 REG(WCoef::CP3, SM, Builtin, std::make_shared<CP3>());
211 REG(WCoef::CP4, SM, Builtin, std::make_shared<CP4>());
212 REG(WCoef::CP5, SM, Builtin, std::make_shared<CP5>());
213 REG(WCoef::CP6, SM, Builtin, std::make_shared<CP6>());
214 REG(WCoef::CP7, SM, Builtin, std::make_shared<CP7>());
215 REG(WCoef::CP8, SM, Builtin, std::make_shared<CP8>());
216 REG(WCoef::CP9, SM, Builtin, std::make_shared<CP9>());
217 REG(WCoef::CP10, SM, Builtin, std::make_shared<CP10>());
219 REG(c, SM, Builtin, std::make_shared<CPQ1>(coef));
221 REG(c, SM, Builtin, std::make_shared<CPQ2>(coef));
222
223 REG(WCoef::CP1, SUSY, Builtin, std::make_shared<CP1_susy>());
224 REG(WCoef::CP2, SUSY, Builtin, std::make_shared<CP2_susy>());
225 REG(WCoef::CP3, SUSY, Builtin, std::make_shared<CP3_susy>());
226 REG(WCoef::CP4, SUSY, Builtin, std::make_shared<CP4_susy>());
227 REG(WCoef::CP5, SUSY, Builtin, std::make_shared<CP5_susy>());
228 REG(WCoef::CP6, SUSY, Builtin, std::make_shared<CP6_susy>());
229 REG(WCoef::CP7, SUSY, Builtin, std::make_shared<CP7_susy>());
230 REG(WCoef::CP8, SUSY, Builtin, std::make_shared<CP8_susy>());
231 REG(WCoef::CP9, SUSY, Builtin, std::make_shared<CP9_susy>());
232 REG(WCoef::CP10, SUSY, Builtin, std::make_shared<CP10_susy>());
234 REG(c, SUSY, Builtin, std::make_shared<CPQ1_susy>(coef));
236 REG(c, SUSY, Builtin, std::make_shared<CPQ2_susy>(coef));
237
238 // THDM builtin
239 REG(WCoef::CP1, THDM, Builtin, std::make_shared<CP1_THDM>());
240 REG(WCoef::CP2, THDM, Builtin, std::make_shared<CP2_THDM>());
241 REG(WCoef::CP3, THDM, Builtin, std::make_shared<CP3_THDM>());
242 REG(WCoef::CP4, THDM, Builtin, std::make_shared<CP4_THDM>());
243 REG(WCoef::CP5, THDM, Builtin, std::make_shared<CP5_THDM>());
244 REG(WCoef::CP6, THDM, Builtin, std::make_shared<CP6_THDM>());
245 REG(WCoef::CP7, THDM, Builtin, std::make_shared<CP7_THDM>());
246 REG(WCoef::CP8, THDM, Builtin, std::make_shared<CP8_THDM>());
247 REG(WCoef::CP9, THDM, Builtin, std::make_shared<CP9_THDM>());
248 REG(WCoef::CP10, THDM, Builtin, std::make_shared<CP10_THDM>());
250 REG(c, THDM, Builtin, std::make_shared<CPQ1_THDM>(coef));
252 REG(c, THDM, Builtin, std::make_shared<CPQ2_THDM>(coef));
253
258 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
259 }
260 REG(WCoef::CP9, Model::SM, Backend::Marty, make_cp9_marty_compatible(ctx));
261 REG(WCoef::CP10, Model::SM, Backend::Marty, make_cp10_marty_compatible(ctx));
262
263 REG(WCoef::CPQ1, SM, Builtin, std::make_shared<CPQ1>(WCoef::CPQ1_MU));
264 REG(WCoef::CPQ2, SM, Builtin, std::make_shared<CPQ2>(WCoef::CPQ2_MU));
265 REG(WCoef::CPQ1, SUSY, Builtin, std::make_shared<CPQ1_susy>(WCoef::CPQ1_MU));
266 REG(WCoef::CPQ2, SUSY, Builtin, std::make_shared<CPQ2_susy>(WCoef::CPQ2_MU));
267 REG(WCoef::CPQ1, THDM, Builtin, std::make_shared<CPQ1_THDM>(WCoef::CPQ1_MU));
268 REG(WCoef::CPQ2, THDM, Builtin, std::make_shared<CPQ2_THDM>(WCoef::CPQ2_MU));
269
270}
271
273 using enum Model; using enum Backend;
274
276 REG(c, SM, Builtin, std::make_shared<CQ1>(coef));
278 REG(c, SM, Builtin, std::make_shared<CQ2>(coef));
279
281 REG(c, SUSY, Builtin, std::make_shared<CQ1_susy>(coef));
283 REG(c, SUSY, Builtin, std::make_shared<CQ2_susy>(coef));
284
286 REG(c, THDM, Builtin, std::make_shared<CQ1_THDM>(coef));
288 REG(c, THDM, Builtin, std::make_shared<CQ2_THDM>(coef));
289
292 REG(c, SM, Marty, make_marty(ctx, coef));
293
294 // Backward-compatible muonic aliases. They are intentionally not part of
295 // the built-in BScalar/BPrime groups, but still resolve when requested.
296 REG(WCoef::CQ1, SM, Builtin, std::make_shared<CQ1>(WCoef::CQ1_MU));
297 REG(WCoef::CQ2, SM, Builtin, std::make_shared<CQ2>(WCoef::CQ2_MU));
298 REG(WCoef::CQ1, SUSY, Builtin, std::make_shared<CQ1_susy>(WCoef::CQ1_MU));
299 REG(WCoef::CQ2, SUSY, Builtin, std::make_shared<CQ2_susy>(WCoef::CQ2_MU));
300 REG(WCoef::CQ1, THDM, Builtin, std::make_shared<CQ1_THDM>(WCoef::CQ1_MU));
301 REG(WCoef::CQ2, THDM, Builtin, std::make_shared<CQ2_THDM>(WCoef::CQ2_MU));
302
303
304}
305
307 using enum Model; using enum Backend;
308
309 REG(WCoef::C_V1_bc, SM, Builtin, std::make_shared<C_V1_bc>());
310 REG(WCoef::C_V2_bc, SM, Builtin, std::make_shared<C_V2_bc>());
311 REG(WCoef::C_S1_bc, SM, Builtin, std::make_shared<C_S1_bc>());
312 REG(WCoef::C_S2_bc, SM, Builtin, std::make_shared<C_S2_bc>());
313 REG(WCoef::C_T_bc, SM, Builtin, std::make_shared<C_T_bc>());
314
315 REG(WCoef::C_V1_bc, SUSY, Builtin, std::make_shared<C_V1_bc_SUSY>());
316 REG(WCoef::C_V2_bc, SUSY, Builtin, std::make_shared<C_V2_bc_SUSY>());
317 REG(WCoef::C_S1_bc, SUSY, Builtin, std::make_shared<C_S1_bc_SUSY>());
318 REG(WCoef::C_S2_bc, SUSY, Builtin, std::make_shared<C_S2_bc_SUSY>());
319 REG(WCoef::C_T_bc, SUSY, Builtin, std::make_shared<C_T_bc_SUSY>());
320
321 REG(WCoef::C_V1_bc, THDM, Builtin, std::make_shared<C_V1_bc_THDM>());
322 REG(WCoef::C_V2_bc, THDM, Builtin, std::make_shared<C_V2_bc_THDM>());
323 REG(WCoef::C_S1_bc, THDM, Builtin, std::make_shared<C_S1_bc_THDM>());
324 REG(WCoef::C_S2_bc, THDM, Builtin, std::make_shared<C_S2_bc_THDM>());
325 REG(WCoef::C_T_bc, THDM, Builtin, std::make_shared<C_T_bc_THDM>());
326
328 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
329
330
331}
332
334 using enum Model; using enum Backend;
335
336 REG(WCoef::C_V1_bu, SM, Builtin, std::make_shared<C_V1_bu>());
337 REG(WCoef::C_V2_bu, SM, Builtin, std::make_shared<C_V2_bu>());
338 REG(WCoef::C_S1_bu, SM, Builtin, std::make_shared<C_S1_bu>());
339 REG(WCoef::C_S2_bu, SM, Builtin, std::make_shared<C_S2_bu>());
340 REG(WCoef::C_T_bu, SM, Builtin, std::make_shared<C_T_bu>());
341
342 REG(WCoef::C_V1_bu, SUSY, Builtin, std::make_shared<C_V1_bu_SUSY>());
343 REG(WCoef::C_V2_bu, SUSY, Builtin, std::make_shared<C_V2_bu_SUSY>());
344 REG(WCoef::C_S1_bu, SUSY, Builtin, std::make_shared<C_S1_bu_SUSY>());
345 REG(WCoef::C_S2_bu, SUSY, Builtin, std::make_shared<C_S2_bu_SUSY>());
346 REG(WCoef::C_T_bu, SUSY, Builtin, std::make_shared<C_T_bu_SUSY>());
347
348 REG(WCoef::C_V1_bu, THDM, Builtin, std::make_shared<C_V1_bu_THDM>());
349 REG(WCoef::C_V2_bu, THDM, Builtin, std::make_shared<C_V2_bu_THDM>());
350 REG(WCoef::C_S1_bu, THDM, Builtin, std::make_shared<C_S1_bu_THDM>());
351 REG(WCoef::C_S2_bu, THDM, Builtin, std::make_shared<C_S2_bu_THDM>());
352 REG(WCoef::C_T_bu, THDM, Builtin, std::make_shared<C_T_bu_THDM>());
353
355 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
356
357
358}
359
361 using enum Model; using enum Backend;
362
363 REG(WCoef::C_V1_cs, SM, Builtin, std::make_shared<C_V1_cs>());
364 REG(WCoef::C_V2_cs, SM, Builtin, std::make_shared<C_V2_cs>());
365 REG(WCoef::C_S1_cs, SM, Builtin, std::make_shared<C_S1_cs>());
366 REG(WCoef::C_S2_cs, SM, Builtin, std::make_shared<C_S2_cs>());
367 REG(WCoef::C_T_cs, SM, Builtin, std::make_shared<C_T_cs>());
368
369 REG(WCoef::C_V1_cs, SUSY, Builtin, std::make_shared<C_V1_cs_SUSY>());
370 REG(WCoef::C_V2_cs, SUSY, Builtin, std::make_shared<C_V2_cs_SUSY>());
371 REG(WCoef::C_S1_cs, SUSY, Builtin, std::make_shared<C_S1_cs_SUSY>());
372 REG(WCoef::C_S2_cs, SUSY, Builtin, std::make_shared<C_S2_cs_SUSY>());
373 REG(WCoef::C_T_cs, SUSY, Builtin, std::make_shared<C_T_cs_SUSY>());
374
375 REG(WCoef::C_V1_cs, THDM, Builtin, std::make_shared<C_V1_cs_THDM>());
376 REG(WCoef::C_V2_cs, THDM, Builtin, std::make_shared<C_V2_cs_THDM>());
377 REG(WCoef::C_S1_cs, THDM, Builtin, std::make_shared<C_S1_cs_THDM>());
378 REG(WCoef::C_S2_cs, THDM, Builtin, std::make_shared<C_S2_cs_THDM>());
379 REG(WCoef::C_T_cs, THDM, Builtin, std::make_shared<C_T_cs_THDM>());
380
382 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
383
384
385}
386
388 using enum Model; using enum Backend;
389
390 REG(WCoef::C_V1_cd, SM, Builtin, std::make_shared<C_V1_cd>());
391 REG(WCoef::C_V2_cd, SM, Builtin, std::make_shared<C_V2_cd>());
392 REG(WCoef::C_S1_cd, SM, Builtin, std::make_shared<C_S1_cd>());
393 REG(WCoef::C_S2_cd, SM, Builtin, std::make_shared<C_S2_cd>());
394 REG(WCoef::C_T_cd, SM, Builtin, std::make_shared<C_T_cd>());
395
396 REG(WCoef::C_V1_cd, SUSY, Builtin, std::make_shared<C_V1_cd_SUSY>());
397 REG(WCoef::C_V2_cd, SUSY, Builtin, std::make_shared<C_V2_cd_SUSY>());
398 REG(WCoef::C_S1_cd, SUSY, Builtin, std::make_shared<C_S1_cd_SUSY>());
399 REG(WCoef::C_S2_cd, SUSY, Builtin, std::make_shared<C_S2_cd_SUSY>());
400 REG(WCoef::C_T_cd, SUSY, Builtin, std::make_shared<C_T_cd_SUSY>());
401
402 REG(WCoef::C_V1_cd, THDM, Builtin, std::make_shared<C_V1_cd_THDM>());
403 REG(WCoef::C_V2_cd, THDM, Builtin, std::make_shared<C_V2_cd_THDM>());
404 REG(WCoef::C_S1_cd, THDM, Builtin, std::make_shared<C_S1_cd_THDM>());
405 REG(WCoef::C_S2_cd, THDM, Builtin, std::make_shared<C_S2_cd_THDM>());
406 REG(WCoef::C_T_cd, THDM, Builtin, std::make_shared<C_T_cd_THDM>());
407
409 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
410
411
412}
413
415 using enum Model; using enum Backend;
416
417 REG(WCoef::C_V1_su, SM, Builtin, std::make_shared<C_V1_su>());
418 REG(WCoef::C_V2_su, SM, Builtin, std::make_shared<C_V2_su>());
419 REG(WCoef::C_S1_su, SM, Builtin, std::make_shared<C_S1_su>());
420 REG(WCoef::C_S2_su, SM, Builtin, std::make_shared<C_S2_su>());
421 REG(WCoef::C_T_su, SM, Builtin, std::make_shared<C_T_su>());
422
423 REG(WCoef::C_V1_su, SUSY, Builtin, std::make_shared<C_V1_su_SUSY>());
424 REG(WCoef::C_V2_su, SUSY, Builtin, std::make_shared<C_V2_su_SUSY>());
425 REG(WCoef::C_S1_su, SUSY, Builtin, std::make_shared<C_S1_su_SUSY>());
426 REG(WCoef::C_S2_su, SUSY, Builtin, std::make_shared<C_S2_su_SUSY>());
427 REG(WCoef::C_T_su, SUSY, Builtin, std::make_shared<C_T_su_SUSY>());
428
429 REG(WCoef::C_V1_su, THDM, Builtin, std::make_shared<C_V1_su_THDM>());
430 REG(WCoef::C_V2_su, THDM, Builtin, std::make_shared<C_V2_su_THDM>());
431 REG(WCoef::C_S1_su, THDM, Builtin, std::make_shared<C_S1_su_THDM>());
432 REG(WCoef::C_S2_su, THDM, Builtin, std::make_shared<C_S2_su_THDM>());
433 REG(WCoef::C_T_su, THDM, Builtin, std::make_shared<C_T_su_THDM>());
434
436 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
437
438
439}
440
442 using enum Model; using enum Backend;
443
444 REG(WCoef::C_V1_du, SM, Builtin, std::make_shared<C_V1_du>());
445 REG(WCoef::C_V2_du, SM, Builtin, std::make_shared<C_V2_du>());
446 REG(WCoef::C_S1_du, SM, Builtin, std::make_shared<C_S1_du>());
447 REG(WCoef::C_S2_du, SM, Builtin, std::make_shared<C_S2_du>());
448 REG(WCoef::C_T_du, SM, Builtin, std::make_shared<C_T_du>());
449
450 REG(WCoef::C_V1_du, SUSY, Builtin, std::make_shared<C_V1_du_SUSY>());
451 REG(WCoef::C_V2_du, SUSY, Builtin, std::make_shared<C_V2_du_SUSY>());
452 REG(WCoef::C_S1_du, SUSY, Builtin, std::make_shared<C_S1_du_SUSY>());
453 REG(WCoef::C_S2_du, SUSY, Builtin, std::make_shared<C_S2_du_SUSY>());
454 REG(WCoef::C_T_du, SUSY, Builtin, std::make_shared<C_T_du_SUSY>());
455
456 REG(WCoef::C_V1_du, THDM, Builtin, std::make_shared<C_V1_du_THDM>());
457 REG(WCoef::C_V2_du, THDM, Builtin, std::make_shared<C_V2_du_THDM>());
458 REG(WCoef::C_S1_du, THDM, Builtin, std::make_shared<C_S1_du_THDM>());
459 REG(WCoef::C_S2_du, THDM, Builtin, std::make_shared<C_S2_du_THDM>());
460 REG(WCoef::C_T_du, THDM, Builtin, std::make_shared<C_T_du_THDM>());
461
463 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
464
465
466}
467
468
470 using enum Backend;using enum Model;
471 REG(WCoef::C_BD_1, SM, Builtin, std::make_shared<C_mix_bd_1>());
472 REG(WCoef::CT_BD_1, SM, Builtin, std::make_shared<C_mix_bd_1_tilde>());
473 REG(WCoef::C_BD_2, SM, Builtin, std::make_shared<C_mix_bd_2>());
474 REG(WCoef::CT_BD_2, SM, Builtin, std::make_shared<C_mix_bd_2_tilde>());
475 REG(WCoef::C_BD_3, SM, Builtin, std::make_shared<C_mix_bd_3>());
476 REG(WCoef::CT_BD_3, SM, Builtin, std::make_shared<C_mix_bd_3_tilde>());
477 REG(WCoef::C_BD_4, SM, Builtin, std::make_shared<C_mix_bd_4>());
478 REG(WCoef::C_BD_5, SM, Builtin, std::make_shared<C_mix_bd_5>());
479
480 REG(WCoef::C_BS_1, SM, Builtin, std::make_shared<C_mix_bs_1>());
481 REG(WCoef::CT_BS_1, SM, Builtin, std::make_shared<C_mix_bs_1_tilde>());
482 REG(WCoef::C_BS_2, SM, Builtin, std::make_shared<C_mix_bs_2>());
483 REG(WCoef::CT_BS_2, SM, Builtin, std::make_shared<C_mix_bs_2_tilde>());
484 REG(WCoef::C_BS_3, SM, Builtin, std::make_shared<C_mix_bs_3>());
485 REG(WCoef::CT_BS_3, SM, Builtin, std::make_shared<C_mix_bs_3_tilde>());
486 REG(WCoef::C_BS_4, SM, Builtin, std::make_shared<C_mix_bs_4>());
487 REG(WCoef::C_BS_5, SM, Builtin, std::make_shared<C_mix_bs_5>());
488
489 REG(WCoef::C_SD_1, SM, Builtin, std::make_shared<C_mix_sd_1>());
490 REG(WCoef::CT_SD_1, SM, Builtin, std::make_shared<C_mix_sd_1_tilde>());
491 REG(WCoef::C_SD_2, SM, Builtin, std::make_shared<C_mix_sd_2>());
492 REG(WCoef::CT_SD_2, SM, Builtin, std::make_shared<C_mix_sd_2_tilde>());
493 REG(WCoef::C_SD_3, SM, Builtin, std::make_shared<C_mix_sd_3>());
494 REG(WCoef::CT_SD_3, SM, Builtin, std::make_shared<C_mix_sd_3_tilde>());
495 REG(WCoef::C_SD_4, SM, Builtin, std::make_shared<C_mix_sd_4>());
496 REG(WCoef::C_SD_5, SM, Builtin, std::make_shared<C_mix_sd_5>());
497
498 REG(WCoef::C_CU_1, SM, Builtin, std::make_shared<C_mix_cu_1>());
499 REG(WCoef::CT_CU_1, SM, Builtin, std::make_shared<C_mix_cu_1_tilde>());
500 REG(WCoef::C_CU_2, SM, Builtin, std::make_shared<C_mix_cu_2>());
501 REG(WCoef::CT_CU_2, SM, Builtin, std::make_shared<C_mix_cu_2_tilde>());
502 REG(WCoef::C_CU_3, SM, Builtin, std::make_shared<C_mix_cu_3>());
503 REG(WCoef::CT_CU_3, SM, Builtin, std::make_shared<C_mix_cu_3_tilde>());
504 REG(WCoef::C_CU_4, SM, Builtin, std::make_shared<C_mix_cu_4>());
505 REG(WCoef::C_CU_5, SM, Builtin, std::make_shared<C_mix_cu_5>());
506
508 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
509 }
510}
511
513 using enum Model; using enum Backend;
514
515 REG(WCoef::CK9, SM, Builtin, std::make_shared<CK9>());
516 REG(WCoef::CK10, SM, Builtin, std::make_shared<CK10>());
517 REG(WCoef::CKQ1, SM, Builtin, std::make_shared<CKQ1>());
518 REG(WCoef::CKQ2, SM, Builtin, std::make_shared<CKQ2>());
519 REG(WCoef::CPK9, SM, Builtin, std::make_shared<CPK9>());
520 REG(WCoef::CPK10, SM, Builtin, std::make_shared<CPK10>());
521 REG(WCoef::CPKQ1, SM, Builtin, std::make_shared<CPKQ1>());
522 REG(WCoef::CPKQ2, SM, Builtin, std::make_shared<CPKQ2>());
523 REG(WCoef::CK_L, SM, Builtin, std::make_shared<CK_L>());
524
526 REG(c, Model::SM, Backend::Marty, make_marty(ctx, coef));
527
528
529}
Model
QCDOrder
ContributionType
WCoef
@ MESON_MIXING
Backend
const Prototype THDM
WilsonCoefficient implementation whose matching is produced by a MARTY backend.
void register_CC_su(CoefficientRegistry &reg)
Registers coefficient factories for charged-current s->u (C_V1_su, ...).
void register_BScalar(CoefficientRegistry &reg)
Registers coefficient factories for the scalar B group (CQ1, CQ2).
void register_CC_du(CoefficientRegistry &reg)
Registers coefficient factories for charged-current d->u (C_V1_du, ...).
#define REG(c, m, b, body)
void register_BPrime(CoefficientRegistry &reg)
Registers coefficient factories for the B' group (CP1..CP10, CPQ1, CPQ2).
void register_CC_bc(CoefficientRegistry &reg)
Registers coefficient factories for charged-current b->c (C_V1_bc, ...).
void register_CC_cd(CoefficientRegistry &reg)
Registers coefficient factories for charged-current c->d (C_V1_cd, ...).
void register_K(CoefficientRegistry &reg)
Registers coefficient factories for the K group (CK9, CK10, ...).
void register_MesonMixing(CoefficientRegistry &reg)
Registers coefficient factories for meson mixing coefficients.
void register_CC_bu(CoefficientRegistry &reg)
Registers coefficient factories for charged-current b->u (C_V1_bu, ...).
void register_B(CoefficientRegistry &reg)
Registers coefficient factories for the B group (C1..C10).
void register_CC_cs(CoefficientRegistry &reg)
Registers coefficient factories for charged-current c->s (C_V1_cs, ...).
Factory registry for creating concrete WilsonCoefficient objects by (coefficient, model,...
std::shared_ptr< WilsonCoefficient > CoefPtr
Shared pointer type used to store coefficients in groups.
Registry mapping (WCoef, Model, Backend) -> coefficient factory function.
CoefPtr create(const BuildContext &ctx, WCoef c) const
Creates a coefficient instance according to the provided build context.
static std::string str(const WGroupId &gid, ScaleType s, WilsonBasis b=WilsonBasis::B_STANDARD)
Builds a composite block name using a WGroupId, scale and basis.
static LhaID flha_full(WCoef e, QCDOrder q, ContributionType c)
static std::vector< WCoef > get_group(WGroup g)
Returns the list of Wilson coefficients belonging to a WGroup.
Build-time context passed to group setup hooks.
Backend backend
Backend selection used to compute or fetch coefficients.
WGroupId group_id
Identifier of the group being built.
ContributionType contrib
Contribution type used for this build (SM/BSM/TOTAL, etc.).
WilsonGroupAdapterConfig adapters
Adapter bundle used by domain objects (storage proxy, composer, core APIs, optional MARTY proxy).
Model model
Active model used by the core (SM / SUSY / THDM / MARTY).
std::shared_ptr< IMartyWilsonPathProxy > marty_paths
Optional path provider used by MARTY-backed Wilson coefficients.
Represents an identifier of a LHA element, possibly containing several sub-ids.
Definition LhaID.h:56
Configuration bundle for constructing a MartyWilson coefficient.
Definition MartyWilson.h:65
std::shared_ptr< IMartyWilsonProxy< InterpretedParam > > marty_proxy
Optional MARTY Wilson proxy used to compute coefficients and fetch dependencies.
std::shared_ptr< ICoreAPI< fs::path > > marty_model_path
Core API: provides current MARTY model header path.
std::shared_ptr< ICoreAPI< std::string > > marty_model_name
Core API: provides current MARTY model name.
fs::path sm_path
Default path to the SM MARTY header under assets.