Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
ScanRunner.cpp
Go to the documentation of this file.
1#include "ScanRunner.h"
2
4 ScanVar v;
5 v.block = p.block_name;
6 v.pdg = p.pdg_code;
7 v.name = p.block_name + ":" + std::to_string(p.pdg_code);
8 v.min = p.min_val;
9 v.max = p.max_val;
10 v.step = p.step_val;
11 return v;
12}
13
14
16 DataSet ds;
17
18 ds.vars.reserve(scan_params_.size());
19 for (auto& p : scan_params_) ds.vars.push_back(to_scan_var(p));
20
21 if (extractor_) ds.outputs_schema = extractor_->schema(spec);
22
23 std::vector<double> x(ds.vars.size(), 0.0);
24 std::vector<double> cache(ds.vars.size(), 0.0);
25
26 for (size_t i = 0; i < scan_params_.size(); ++i) {
27 cache[i] = upp_.get_value(scan_params_[i].block_name, scan_params_[i].pdg_code).value_or(0.0);
28 }
29
30 recurse_dim(0, ds, x, spec);
31
32 for (size_t i = 0; i < scan_params_.size(); ++i) {
33 upp_.set_value(scan_params_[i].block_name, scan_params_[i].pdg_code, cache[i]);
34 }
35
36 return ds;
37}
38
39
40void ScanRunner::recurse_dim(size_t dim, DataSet& ds, std::vector<double>& x, const OutputSpec& spec) {
41 if (dim >= scan_params_.size()) {
42 DataPoint p;
43 p.x = x;
44 if (extractor_) extractor_->extract(p.y, spec);
45 ds.points.push_back(std::move(p));
46 return;
47 }
48
49 auto& sp = scan_params_[dim];
50 for (double val = sp.min_val; val < sp.max_val; val += sp.step_val) {
51 upp_.set_value(sp.block_name, sp.pdg_code, val);
52 x[dim] = val;
53 recurse_dim(dim + 1, ds, x, spec);
54 }
55}
ScanVar to_scan_var(const YamlScanParam &p)
Definition ScanRunner.cpp:3
ScanVar to_scan_var(const YamlScanParam &p)
Definition ScanRunner.cpp:3
DataSet run(const OutputSpec &spec)
std::optional< double > get_value(std::string block, LhaID id) override
void set_value(std::string block, LhaID id, double val) override
std::vector< double > x
std::unordered_map< std::string, Value > y
std::vector< DataPoint > points
std::vector< std::string > outputs_schema
std::vector< ScanVar > vars
std::string block_name