Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
WilsonRunningValidation.h
Go to the documentation of this file.
1#ifndef WILSON_RUNNING_VALIDATION_H
2#define WILSON_RUNNING_VALIDATION_H
3
4#include <algorithm>
5#include <functional>
6#include <map>
7#include <sstream>
8#include <stdexcept>
9#include <unordered_map>
10#include <vector>
11
12#include "Include.h"
13#include "Wilson.h"
14#include "SourcesView.h"
15
17
18inline std::string context(const std::string& group_name, WilsonBasis basis, QCDOrder order) {
19 std::ostringstream os;
20 os << "group=" << group_name
21 << ", basis=" << WilsonBasisMapper::str(basis)
22 << ", order=" << OrderMapper::str(order);
23 return os.str();
24}
25
27 const std::map<QCDOrder,
28 std::function<std::unordered_map<WCoefId, scalar_t>(
29 const std::unordered_map<QCDOrder, std::unordered_map<WCoefId, scalar_t>>&,
30 const BlockSrc&)>>& funcs,
31 QCDOrder order,
32 const std::string& group_name,
33 WilsonBasis basis)
34{
35 const auto it = funcs.find(order);
36 if (it == funcs.end() || !it->second) {
37 throw std::invalid_argument(
38 "Missing Wilson running function for " + context(group_name, basis, order));
39 }
40}
41
43 const std::unordered_map<QCDOrder, std::unordered_map<WCoefId, scalar_t>>& matching,
44 const std::vector<WCoefId>& members,
45 QCDOrder order,
46 const std::string& group_name,
47 WilsonBasis basis)
48{
49 const auto it = matching.find(order);
50 if (it == matching.end()) {
51 throw std::invalid_argument(
52 "Missing Wilson matching input order for " + context(group_name, basis, order));
53 }
54
55 for (const auto& coef_id : members) {
56 if (!it->second.contains(coef_id)) {
57 throw std::invalid_argument(
58 "Missing Wilson matching input coefficient '" + coef_id.str() +
59 "' for " + context(group_name, basis, order));
60 }
61 }
62}
63
65 const std::unordered_map<WCoefId, scalar_t>& result,
66 const std::vector<WCoefId>& members,
67 QCDOrder order,
68 const std::string& group_name,
69 WilsonBasis basis)
70{
71 for (const auto& [coef_id, _] : result) {
72 if (std::find(members.begin(), members.end(), coef_id) == members.end()) {
73 throw std::invalid_argument(
74 "Wilson running function returned coefficient '" + coef_id.str() +
75 "' outside the group member list for " + context(group_name, basis, order));
76 }
77 }
78}
79
80} // namespace WilsonRunningValidation
81
82#endif // WILSON_RUNNING_VALIDATION_H
QCDOrder
WilsonBasis
Domain objects representing Wilson coefficients and their matching metadata.
Lightweight view over a set of source blocks.
Definition SourcesView.h:71
static std::string str(const IdOf< WilsonBasisTag > &id)
Returns the string representation associated with an identifier.
std::string context(const std::string &group_name, WilsonBasis basis, QCDOrder order)
void require_matching_input_complete(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &matching, const std::vector< WCoefId > &members, QCDOrder order, const std::string &group_name, WilsonBasis basis)
void require_running_function(const std::map< QCDOrder, std::function< std::unordered_map< WCoefId, scalar_t >(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &, const BlockSrc &)> > &funcs, QCDOrder order, const std::string &group_name, WilsonBasis basis)
void require_running_result_known_members(const std::unordered_map< WCoefId, scalar_t > &result, const std::vector< WCoefId > &members, QCDOrder order, const std::string &group_name, WilsonBasis basis)