Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
GroupDefinitions.cpp
Go to the documentation of this file.
1#include "GroupDefinition.h"
2
3#include <algorithm>
4
5
6std::vector<GroupDefinition::SetupHook> GroupDefinition::hooks_for(Model model) const {
7 std::vector<SetupHook> hooks = common_setup;
8
9 auto append_unique = [&hooks](const std::vector<SetupHook>& src) {
10 for (const auto& hook : src) {
11 const auto* target = hook.target<void(*)(const BuildContext&, CoefficientGroup&)>();
12 const bool already_present = target && std::any_of(
13 hooks.begin(), hooks.end(),
14 [target](const SetupHook& existing) {
15 const auto* existing_target = existing.target<void(*)(const BuildContext&, CoefficientGroup&)>();
16 return existing_target && (*existing_target == *target);
17 });
18 if (!already_present) {
19 hooks.push_back(hook);
20 }
21 }
22 };
23
24 if (model == Model::MARTY) {
25 if (auto it = setup.find(Model::SM); it != setup.end()) {
26 append_unique(it->second);
27 }
28 }
29
30 if (auto it = setup.find(model); it != setup.end()) {
31 append_unique(it->second);
32 }
33
34 return hooks;
35}
36
37namespace {
38 static std::unordered_map<WGroupId, GroupDefinition> kCustomDefs;
39}
40
41namespace GroupDefinitions {
43 kCustomDefs[def.id] = def;
44 }
46 return kCustomDefs.find(id) != kCustomDefs.end();
47 }
49 auto it = kCustomDefs.find(id);
50 if (it == kCustomDefs.end()) throw std::runtime_error("Unknown custom WGroupId");
51 return it->second;
52 }
53
55 if (auto en = GroupMapper::enum_of(g)) {
56 switch (*en) {
57 case WGroup::B: return B();
58 case WGroup::BPrime: return BPrime();
59 case WGroup::BScalar: return BScalar();
60 case WGroup::CC_bc: return CC_bc();
61 case WGroup::CC_bu: return CC_bu();
62 case WGroup::CC_cs: return CC_cs();
63 case WGroup::CC_cd: return CC_cd();
64 case WGroup::CC_su: return CC_su();
65 case WGroup::CC_du: return CC_du();
66 case WGroup::MESON_MIXING: return MesonMixing();
67 case WGroup::K: return K();
68 default: break;
69 }
70 throw std::runtime_error("Unknown built-in WGroup");
71 }
72
73 return get_custom(g);
74 }
75}
Model
@ MESON_MIXING
Declarative registry describing Wilson coefficient groups, their sources, and setup hooks.
Polymorphic container of WilsonCoefficient objects representing a coefficient group.
static std::optional< WGroup > enum_of(const IdOf< WGroupTag > &id)
Attempts to recover the enum value associated with an identifier.
Returns an uppercase copy of the input string.
constexpr double g
Registry/factory of built-in and custom GroupDefinition objects.
Definition GroupDef_B.cpp:6
const GroupDefinition & CC_bu()
bool has_custom(WGroupId id)
Checks if a custom group definition is registered.
const GroupDefinition & BPrime()
const GroupDefinition & B()
Built-in group definition accessors.
Definition GroupDef_B.cpp:7
const GroupDefinition & CC_bc()
const GroupDefinition & BScalar()
const GroupDefinition & CC_cs()
const GroupDefinition & CC_cd()
const GroupDefinition & K()
Definition GroupDef_K.cpp:7
const GroupDefinition & get_custom(WGroupId id)
Retrieves a previously registered custom group definition.
const GroupDefinition & CC_du()
void register_custom(const GroupDefinition &def)
Registers a custom group definition at runtime.
const GroupDefinition & MesonMixing()
const GroupDefinition & get(WGroupId g)
Returns the definition for a given group id.
const GroupDefinition & CC_su()
Build-time context passed to group setup hooks.
Declarative description of a Wilson coefficient group.
WGroupId id
Identifier for this group.
std::unordered_map< Model, std::vector< SetupHook > > setup
Model-specific setup hooks to run during group construction.
std::vector< SetupHook > hooks_for(Model model) const
Returns hooks applicable to model, including common hooks and the explicit Marty -> SM compatibility ...
std::function< void(const BuildContext &, CoefficientGroup &)> SetupHook
Setup hook signature.
std::vector< SetupHook > common_setup
Setup hooks to run for every model/backend during group construction.