18 ds.
vars.reserve(scan_params_.size());
23 std::vector<double> x(ds.
vars.size(), 0.0);
24 std::vector<double> cache(ds.
vars.size(), 0.0);
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);
30 recurse_dim(0, ds, x, spec);
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]);
40void ScanRunner::recurse_dim(
size_t dim,
DataSet& ds, std::vector<double>& x,
const OutputSpec& spec) {
41 if (dim >= scan_params_.size()) {
44 if (extractor_) extractor_->extract(p.
y, spec);
45 ds.
points.push_back(std::move(p));
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);
53 recurse_dim(dim + 1, ds, x, spec);
ScanVar to_scan_var(const YamlScanParam &p)
ScanVar to_scan_var(const YamlScanParam &p)
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::unordered_map< std::string, Value > y
std::vector< DataPoint > points
std::vector< std::string > outputs_schema
std::vector< ScanVar > vars