MaCh3  2.5.1
Reference Guide
Functions
BinningHandler.cpp File Reference
#include "Samples/BinningHandler.h"
Include dependency graph for BinningHandler.cpp:

Go to the source code of this file.

Functions

std::vector< std::vector< double > > UniformBinEdgeConfigParser (YAML::Node const &bin_edges_node, bool &found_range_specifier)
 Parses YAML node describing multidim uniform binning. More...
 

Function Documentation

◆ UniformBinEdgeConfigParser()

std::vector<std::vector<double> > UniformBinEdgeConfigParser ( YAML::Node const &  bin_edges_node,
bool &  found_range_specifier 
)

Parses YAML node describing multidim uniform binning.

dimensional list implicit for 1D binnings

BinEdges: [<dim0bin0lowedge>, <dim0bin1upedge>, <dim0bin2upedge>, ... <dim0binNupedge>]

BinEdges: [ [<dim0bin0lowedge>, <dim0bin1upedge>, <dim0bin2upedge>, ... <dim0binNupedge>], ... [<dimNbin0lowedge>, <dimNbin1upedge>, <dimNbin2upedge>, ... <dimNbinNupedge>] ]

bin edge list implicit for 1D range-only binnings

BinEdges: { linspace: { nb: 100, low: 0, up: 10} }

mixed syntax binnings allowed

BinEdges: [ { linspace: { nb: 100, low: 0, up: 10} }, 10, 15, { logspace: { nb: 5, low: 15, up: 100} } ] # for ND range-only binnings, lists are required to disambiguate 1D mixed specifier binnings from ND binnings BinEdges: [ [ { linspace: { nb: 100, low: 0, up: 10} } ], ... [<dimNbin0lowedge>, <dimNbin1upedge>, <dimNbin2upedge>, ... <dimNbinNupedge>] ] BinEdges: [ [ { linspace: { nb: 100, low: 0, up: 10} }, 10, 15, { logspace: { nb: 5, low: 15, up: 100} } ], ... [<dimNbin0lowedge>, <dimNbin1upedge>, <dimNbin2upedge>, ... <dimNbinNupedge>] ]

Definition at line 36 of file BinningHandler.cpp.

37  {
38 // ************************************************
39  if (bin_edges_node.IsMap()) {
40  found_range_specifier = true;
41  return std::vector<std::vector<double>>{
42  BinRangeToBinEdges(bin_edges_node),
43  };
44  } else if (bin_edges_node.IsSequence()) {
45  if (!bin_edges_node.size()) {
46  std::stringstream ss;
47  ss << bin_edges_node;
48  MACH3LOG_ERROR("When parsing binning, found an empty sequence:\n{}",
49  ss.str());
50  throw MaCh3Exception(__FILE__, __LINE__);
51  }
52  auto const &first_el = bin_edges_node[0];
53  if (first_el.IsScalar() || first_el.IsMap()) { // 1D binning
54  return std::vector<std::vector<double>>{
55  BuildBinEdgesFromNode(bin_edges_node, found_range_specifier),
56  };
57  }
58  // ND binning
59  std::vector<std::vector<double>> dims;
60  for (auto const &dim_node : bin_edges_node) {
61  dims.push_back(BuildBinEdgesFromNode(dim_node, found_range_specifier));
62  }
63  return dims;
64  } else {
65  std::stringstream ss;
66  ss << bin_edges_node;
68  "When parsing binning, expected to find a YAML map or sequence, "
69  "but found:\n{}",
70  ss.str());
71  throw MaCh3Exception(__FILE__, __LINE__);
72  }
73 }
std::vector< double > BuildBinEdgesFromNode(YAML::Node const &bin_edges_node, bool &found_range_specifier)
Builds a single dimension's bin edges from YAML::Node.
std::vector< double > BinRangeToBinEdges(YAML::Node const &bin_range)
Converts a range (linspace/logspace) to a std::vector<double>
#define MACH3LOG_ERROR
Definition: MaCh3Logger.h:37
Custom exception class used throughout MaCh3.