Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
LhaDBNodeProvider.cpp
Go to the documentation of this file.
1#include "LhaDBNodeProvider.h"
2
3static bool valid_opt_idx(int idx, size_t itemCount) {
4 return idx == -1 || (idx >= 0 && static_cast<size_t>(idx) < itemCount);
5}
6
7static bool conflicts_with_value(int idx, size_t valueIdx) {
8 return idx >= 0 && static_cast<size_t>(idx) == valueIdx;
9}
10
11static bool conflicts(int a, int b) {
12 return a >= 0 && b >= 0 && a == b;
13}
14
15std::shared_ptr<DBNode> LhaDBNodeProvider::provide_db_as_node() {
16 return DBManager().read_from_file(this->src_path);
17}
18
20 size_t itemCount,
21 size_t valueIdx,
22 int scaleIdx,
23 int rgIdx,
24 int binIdx,
25 bool globalScale)
26{
27 bool input_ok = true;
28
29 input_ok &= (valueIdx < itemCount);
30
31 input_ok &= valid_opt_idx(scaleIdx, itemCount);
32 input_ok &= valid_opt_idx(rgIdx, itemCount);
33 input_ok &= valid_opt_idx(binIdx, itemCount);
34
35 if (binIdx != -1) {
36 input_ok &= (binIdx >= 0);
37 input_ok &= (static_cast<size_t>(binIdx + 1) < itemCount);
38 }
39
40 input_ok &= !conflicts_with_value(scaleIdx, valueIdx);
41 input_ok &= !conflicts_with_value(rgIdx, valueIdx);
42 input_ok &= !conflicts_with_value(binIdx, valueIdx);
43 if (binIdx != -1) {
44 input_ok &= (static_cast<size_t>(binIdx + 1) != valueIdx);
45 }
46
47 input_ok &= !conflicts(scaleIdx, rgIdx);
48 input_ok &= !conflicts(scaleIdx, binIdx);
49 input_ok &= !(binIdx != -1 && scaleIdx >= 0 && scaleIdx == binIdx + 1);
50 input_ok &= !conflicts(rgIdx, binIdx);
51 input_ok &= !(binIdx != -1 && rgIdx >= 0 && rgIdx == binIdx + 1);
52
53 const size_t minCols =
54 2
55 + (scaleIdx != -1 ? 1 : 0)
56 + (rgIdx != -1 ? 1 : 0)
57 + (binIdx != -1 ? 2 : 0);
58
59 input_ok &= (itemCount >= minCols);
60
61 if (!input_ok) {
62 LOG_ERROR("ValueError", "Invalid LHA Block prototype.");
63 return;
64 }
65
66 DBManager().add_lha_prototype(blockName, itemCount, valueIdx, scaleIdx, rgIdx, binIdx, globalScale);
67}
IDBNodeProvider implementation backed by an LHA/SLHA/FLHA file.
#define LOG_ERROR(type,...)
Macro for logging error messages and terminating the application.
Definition Logger.h:41
Block identifier with alias support.
Definition BlockName.h:59
Front-end for reading and writing structured data as DBNodetrees.
Definition DBManager.h:46
void add_lha_prototype(BlockName blockName, size_t itemCount=2, size_t valueIdx=1, int scaleIdx=-1, int rgIdx=-1, int binIdx=-1, bool globalScale=false)
Adds or overrides an LHA block prototype used by LhaParser.
std::shared_ptr< DBNode > read_from_file(fs::path file_path)
Reads a structured file and returns its DBNoderepresentation.
Definition DBManager.cpp:62
std::shared_ptr< DBNode > provide_db_as_node() override
Loads the underlying LHA file and returns it as a DBNode tree.
void add_lha_prototype(BlockName blockName, size_t itemCount=2, size_t valueIdx=1, int scaleIdx=-1, int rgIdx=-1, int binIdx=-1, bool globalScale=false)
Adds a new LHA block prototype to the global set.