MaCh3  2.5.1
Reference Guide
Public Member Functions | Private Attributes | List of all members
BinningHandler Class Reference

KS: Class handling binning for multiple samples. More...

#include <Samples/BinningHandler.h>

Collaboration diagram for BinningHandler:
[legend]

Public Member Functions

 BinningHandler ()
 Constructor. More...
 
virtual ~BinningHandler ()
 destructor More...
 
int FindGlobalBin (const int iSample, const std::vector< const double * > &KinVar, const std::vector< int > &NomBin) const
 Find Global bin including. More...
 
int FindNominalBin (const int iSample, const int iDim, const double Var) const
 Find the nominal bin for a given variable in a given sample and dimension. More...
 
int GetGlobalBinSafe (const int iSample, const std::vector< int > &Bins) const
 Get gloabl bin based on sample, and dimension of each sample with additional checks. More...
 
int GetBinSafe (const int iSample, const std::vector< int > &Bins) const
 Get gloabl bin based on sample, and dimension of each sample without any safety checks. More...
 
int GetNBins () const
 Get total number of bins over all samples/kinematic bins etc. More...
 
int GetNBins (const int iSample) const
 Get total number of bins over for a given sample. More...
 
int GetNDim (const int iSample) const
 Get total number of dimensions for sample iSample. More...
 
std::string GetBinName (const int GlobalBin) const
 Get fancy name for a given bin, to help match it with global properties. More...
 
std::string GetBinName (const int iSample, const int SampleBin) const
 Get fancy name for a given bin, to help match it with global properties. More...
 
std::string GetBinName (const int iSample, const std::vector< int > &Bins) const
 Get fancy name for a given bin, to help match it with global properties. More...
 
int GetSampleIndex (const int GlobalBin) const
 Returns sample index based on global bin. More...
 
std::vector< double > GetBinEdges (const int iSample, const int iDim) const
 Get N-dim bin edges for a given sample. More...
 
int GetNAxisBins (const int iSample, const int iDim) const
 Get Number of N-axis bins for a given sample. More...
 
bool IsUniform (const int iSample) const
 Tells whether given sample is using unform binning. More...
 
int GetSampleStartBin (const int iSample) const
 Get bin number corresponding to where given sample starts. More...
 
int GetSampleEndBin (const int iSample) const
 Get bin number corresponding to where given sample ends. More...
 
const std::vector< BinInfoGetNonUniformBins (const int iSample) const
 Return NonUnifomr bins to for example check extent etc. More...
 
void SetGlobalBinNumbers ()
 Sets the GlobalOffset for each SampleBinningInfo to enable linearization of multiple 2D binning samples. More...
 
void SetupSampleBinning (const YAML::Node &Settings, SampleInfo &SingleSample)
 Function to setup the binning of your sample histograms and the underlying arrays that get handled in fillArray() and fillArray_MP(). More...
 

Private Attributes

int TotalNumberOfBins
 Total number of bins. More...
 
std::vector< SampleBinningInfoSampleBinning
 Binning info for individual sample. More...
 

Detailed Description

KS: Class handling binning for multiple samples.

Introduction

Each sample can define its own binning in an arbitrary number of dimensions. Internally, every sample's multi-dimensional binning is linearised into a single 1D array. All samples are then concatenated into one global bin index space, allowing the entire analysis to be treated as a single large vector of bins.

The concept of a "global bin" refers to the position of a bin in this linearised, analysis-wide bin index space. Local (sample) bins are always enumerated starting from zero, while global bins span all samples consecutively.

Example layout of global bins with offsets:

Sample 0 (GlobalOffset = 0, nBins = 4):
Local bins: [0] [1] [2] [3]
Global bins: [0] [1] [2] [3]
Sample 1 (GlobalOffset = 4, nBins = 3):
Local bins: [0] [1] [2]
Global bins: [4] [5] [6]
Sample 2 (GlobalOffset = 7, nBins = 2):
Local bins: [0] [1]
Global bins: [7] [8]
Global bin index space:
------------------------------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
------------------------------------------------

Uniform and Non-Uniform Binning Scheme

MaCh3 supports Uniform and Non-Uniform binning scheme

Uniform binning uses a regular Cartesian grid. Bins are constructed as the Cartesian product of 1D bin edges, forming axis-aligned rectangles (or hyper-rectangles in higher dimensions). Bin widths may be equal or variable, but the grid structure is regular.

In the non-uniform scheme, bin sizes may vary and bins may span different ranges along each dimension. However, all bins must remain axis-aligned hyper-rectangles. Arbitrary or irregular bin shapes (e.g. curved or "banana-shaped" bins) are not supported.

Example of Uniform

+--------+--------+--------+--------+
| Bin 0 | Bin 1 | Bin 2 | Bin 3 |
| (0,0) | (1,0) | (2,0) | (3,0) |
+--------+--------+--------+--------+
| Bin 4 | Bin 5 | Bin 6 | Bin 7 |
| (0,1) | (1,1) | (2,1) | (3,1) |
+--------+--------+--------+--------+
| Bin 8 | Bin 9 | Bin 10 | Bin 11 |
| (0,2) | (1,2) | (2,2) | (3,2) |
+--------+--------+--------+--------+

Example of Non-Uniform

+--------+------------+-------+---------------------+
| Bin 0 | Bin 1 | Bin 2 | Bin 3 |
| | | | |
+--------+------------+-------+---------------------+
| Bin 4 | | | |
| | | Bin 6 | |
+--------+ Bin 5 +-------+ |
| Bin 7 | | | Bin 9 |
| | | Bin 8 | |
+--------+------------+-------+---------------------+

Bin Finding Algorithm

Since MaCh3 supports event migration bin finding algorithm must be fast to efficiently be able find bin during running fit. MaCh3 is caching nominal bin with idea that during fit migration should be around this nominal bin. Thus MaCh3 first checks if after shift event falls into Nom-bin and later adjacent. If not backs to binary search.

Uniform

In case of uniform binning above algorithm is easy to test as one performs it for every dimension independently i.e. find X-bin, then Y etc. After which can find bin in flattened 1D space.

Non-Uniform

Internally, non-uniform binning is implemented using two levels:

  1. MegaBins (mapping bins) These form a coarse, uniform grid that spans the full phase space. Each MegaBin acts as a container for one or more non-uniform bins.
  2. Non-Uniform bins The actual analysis bins, defined as hyper-rectangles with arbitrary extents inside a MegaBin.

Bin finding procedure

For a given event, the bin-finding algorithm proceeds as follows:

  1. Locate the MegaBin using the same fast per-dimension logic as in uniform binning.
  2. Once the MegaBin is identified, loop over all non-uniform bins associated with that MegaBin.
  3. The first bin whose extents fully contain the event is selected.
  4. If no bin matches, the event is assigned to the under/overflow bin.
Author
Kamil Skwarczynski
Dan Barrow
Luke Pickering

Definition at line 130 of file BinningHandler.h.

Constructor & Destructor Documentation

◆ BinningHandler()

BinningHandler::BinningHandler ( )

Constructor.

Definition at line 4 of file BinningHandler.cpp.

4  {
5 // ************************************************
6 }

◆ ~BinningHandler()

virtual BinningHandler::~BinningHandler ( )
inlinevirtual

destructor

Definition at line 137 of file BinningHandler.h.

137 {};

Member Function Documentation

◆ FindGlobalBin()

int BinningHandler::FindGlobalBin ( const int  iSample,
const std::vector< const double * > &  KinVar,
const std::vector< int > &  NomBin 
) const

Find Global bin including.

Parameters
iSampleindex of a given sample
KinVarVector of pointers to kinematic variable like Erec
NomBinVector of nominal bin indices for this event, one per dimension.

Definition at line 148 of file BinningHandler.cpp.

150  {
151 // ************************************************
152  //DB Find the relevant bin in the PDF for each event
153  const int Dim = static_cast<int>(KinVar.size());
154  const SampleBinningInfo& _restrict_ Binning = SampleBinning[NomSample];
155  int GlobalBin = 0;
156 
157  for(int i = 0; i < Dim; ++i) {
158  const double Var = *KinVar[i];
159  const int Bin = Binning.FindBin(i, Var, NomBin[i]);
160  // KS: If we are outside of range in only one dimension this mean out of bounds, we can simply quickly finish
161  if(Bin < 0) return M3::UnderOverFlowBin;
162  // KS: inline GetBin computation to avoid any memory allocation, which in reweight loop is very costly
163  GlobalBin += Bin * Binning.Strides[i];
164  }
165 
166  if(Binning.Uniform) {
167  GlobalBin += static_cast<int>(Binning.GlobalOffset);
168  return GlobalBin;
169  } else {
170  const auto& _restrict_ BinMapping = Binning.BinGridMapping[GlobalBin];
171  const size_t nNonUniBins = BinMapping.size();
172  for(size_t iBin = 0; iBin < nNonUniBins; iBin++) {
173  const int BinNumber = BinMapping[iBin];
174  const auto& _restrict_ NonUniBin = Binning.Bins[BinNumber];
175  if(NonUniBin.IsEventInside(KinVar)){
176  return BinNumber + Binning.GlobalOffset;
177  }
178  }
179  MACH3LOG_DEBUG("Didn't find any bin so returning UnderOverFlowBin");
180  return M3::UnderOverFlowBin;
181  }
182 }
#define _restrict_
KS: Using restrict limits the effects of pointer aliasing, aiding optimizations. While reading I foun...
Definition: Core.h:108
#define MACH3LOG_DEBUG
Definition: MaCh3Logger.h:34
std::vector< SampleBinningInfo > SampleBinning
Binning info for individual sample.
constexpr static const int UnderOverFlowBin
Mark bin which is overflow or underflow in MaCh3 binning.
Definition: Core.h:91
KS: Struct storing all information required for sample binning.

◆ FindNominalBin()

int BinningHandler::FindNominalBin ( const int  iSample,
const int  iDim,
const double  Var 
) const

Find the nominal bin for a given variable in a given sample and dimension.

Parameters
iSampleSample index
iDimDimension index (0 = X, 1 = Y, ...)
VarKinematic variable value

Definition at line 185 of file BinningHandler.cpp.

187  {
188 // ************************************************
189  const SampleBinningInfo& info = SampleBinning[iSample];
190 
191  const auto& edges = info.BinEdges[iDim];
192 
193  // Outside binning range
194  if (Var < edges.front() || Var >= edges.back()) {
195  return M3::UnderOverFlowBin;
196  }
197  return static_cast<int>(std::distance(edges.begin(), std::upper_bound(edges.begin(), edges.end(), Var)) - 1);
198 }
std::vector< std::vector< double > > BinEdges
Vector to hold N-axis bin-edges.

◆ GetBinEdges()

std::vector<double> BinningHandler::GetBinEdges ( const int  iSample,
const int  iDim 
) const
inline

Get N-dim bin edges for a given sample.

Parameters
iSampleindex of a given sample
iDimdimension for which we extract bin edges

Definition at line 184 of file BinningHandler.h.

184 {return SampleBinning[iSample].BinEdges.at(iDim);};

◆ GetBinName() [1/3]

std::string BinningHandler::GetBinName ( const int  GlobalBin) const

Get fancy name for a given bin, to help match it with global properties.

Parameters
GlobalBinGlobal Bin integrated over all samples

Definition at line 316 of file BinningHandler.cpp.

316  {
317 // ************************************************
318  int SampleBin = GetSampleIndex(GlobalBin);
319  int LocalBin = GetLocalBinFromGlobalBin(SampleBinning, GlobalBin);
320  return GetBinName(SampleBin, LocalBin);
321 }
int GetLocalBinFromGlobalBin(const std::vector< SampleBinningInfo > &BinningInfo, const int GlobalBin)
Get the local (sample) bin index from a global bin number.
std::string GetBinName(const int GlobalBin) const
Get fancy name for a given bin, to help match it with global properties.
int GetSampleIndex(const int GlobalBin) const
Returns sample index based on global bin.

◆ GetBinName() [2/3]

std::string BinningHandler::GetBinName ( const int  iSample,
const int  SampleBin 
) const

Get fancy name for a given bin, to help match it with global properties.

Parameters
iSampleindex of a given sample
SampleBinGlobal Bin for a given sample

Definition at line 262 of file BinningHandler.cpp.

262  {
263 // ************************************************
264  const auto& Binning = SampleBinning[iSample];
265 
266  // Safety checks
267  if (SampleBin < 0 || SampleBin >= static_cast<int>(Binning.nBins)) {
268  MACH3LOG_ERROR("Requested bin {} is out of range for sample {}", SampleBin, iSample);
269  throw MaCh3Exception(__FILE__, __LINE__);
270  }
271  std::string BinName;
272 
273  if(Binning.Uniform) {
274  int Dim = static_cast<int>(Binning.Strides.size());
275  std::vector<int> Bins(Dim, 0);
276  int Remaining = SampleBin;
277 
278  // Convert the flat/global bin index into per-dimension indices
279  // Dim0 is the fastest-changing axis, Dim1 the next, etc.
280  //
281  // For example (2D):
282  // x = bin % Nx
283  // y = bin / Nx
284  //
285  // For 3D:
286  // x = bin % Nx
287  // y = (bin / Nx) % Ny
288  // z = bin / (Nx * Ny)
289  for (int i = 0; i < Dim; ++i) {
290  const int nBinsDim = static_cast<int>(Binning.BinEdges[i].size()) - 1;
291  Bins[i] = Remaining % nBinsDim;
292  Remaining /= nBinsDim;
293  }
294 
295  for (int i = 0; i < Dim; ++i) {
296  if (i > 0) BinName += ", ";
297  const double min = Binning.BinEdges[i].at(Bins[i]);
298  const double max = Binning.BinEdges[i].at(Bins[i] + 1);
299  BinName += fmt::format("Dim{} ({:g}, {:g})", i, min, max);
300  }
301  } else{
302  const BinInfo& bin = Binning.Bins[SampleBin];
303  const int Dim = static_cast<int>(bin.Extent.size());
304 
305  for (int i = 0; i < Dim; ++i) {
306  if (i > 0) BinName += ", ";
307  const double min = bin.Extent[i][0];
308  const double max = bin.Extent[i][1];
309  BinName += fmt::format("Dim{} ({:g}, {:g})", i, min, max);
310  }
311  }
312  return BinName;
313 }
#define MACH3LOG_ERROR
Definition: MaCh3Logger.h:37
Custom exception class used throughout MaCh3.
KS: This hold bin extents in N-Dimensions allowing to check if Bin falls into.
std::vector< std::array< double, 2 > > Extent

◆ GetBinName() [3/3]

std::string BinningHandler::GetBinName ( const int  iSample,
const std::vector< int > &  Bins 
) const

Get fancy name for a given bin, to help match it with global properties.

Parameters
iSampleindex of a given sample
BinsVector of bin indices along each dimension

Definition at line 250 of file BinningHandler.cpp.

250  {
251 // ************************************************
252  const auto& Binning = SampleBinning[iSample];
253  if(!Binning.Uniform) {
254  MACH3LOG_ERROR("When using Non-Uniform binning for sample {} please use One bin instead of Axis bins", iSample);
255  throw MaCh3Exception(__FILE__, __LINE__);
256  }
257  return GetBinName(iSample, GetBinSafe(iSample, Bins));
258 }
int GetBinSafe(const int iSample, const std::vector< int > &Bins) const
Get gloabl bin based on sample, and dimension of each sample without any safety checks.

◆ GetBinSafe()

int BinningHandler::GetBinSafe ( const int  iSample,
const std::vector< int > &  Bins 
) const

Get gloabl bin based on sample, and dimension of each sample without any safety checks.

Parameters
iSampleindex of a given sample
BinsVector of bin indices along each dimension

Definition at line 201 of file BinningHandler.cpp.

201  {
202 // ************************************************
203  const int GlobalBin = SampleBinning[Sample].GetBinSafe(Bins);
204  return GlobalBin;
205 }

◆ GetGlobalBinSafe()

int BinningHandler::GetGlobalBinSafe ( const int  iSample,
const std::vector< int > &  Bins 
) const

Get gloabl bin based on sample, and dimension of each sample with additional checks.

Parameters
iSampleindex of a given sample
BinsVector of bin indices along each dimension

Definition at line 208 of file BinningHandler.cpp.

208  {
209 // ************************************************
210  const int GlobalBin = SampleBinning[Sample].GetBinSafe(Bins) + static_cast<int>(SampleBinning[Sample].GlobalOffset);
211  return GlobalBin;
212 }

◆ GetNAxisBins()

int BinningHandler::GetNAxisBins ( const int  iSample,
const int  iDim 
) const

Get Number of N-axis bins for a given sample.

Parameters
iSampleindex of a given sample
iDimdimension for which we extract number of bins

Definition at line 331 of file BinningHandler.cpp.

331  {
332 // ************************************************
333  const auto& Binning = SampleBinning[iSample];
334  if(!Binning.Uniform) {
335  MACH3LOG_ERROR("When using Non-Uniform binning for sample {} please use global bin instead of {}", iSample, __func__);
336  throw MaCh3Exception(__FILE__, __LINE__);
337  } else{
338  return static_cast<int>(Binning.AxisNBins.at(iDim));
339  }
340 }

◆ GetNBins() [1/2]

int BinningHandler::GetNBins ( ) const
inline

Get total number of bins over all samples/kinematic bins etc.

Definition at line 162 of file BinningHandler.h.

162 {return TotalNumberOfBins;};
int TotalNumberOfBins
Total number of bins.

◆ GetNBins() [2/2]

int BinningHandler::GetNBins ( const int  iSample) const
inline

Get total number of bins over for a given sample.

Definition at line 164 of file BinningHandler.h.

164 {return static_cast<int>(SampleBinning[iSample].nBins);};

◆ GetNDim()

int BinningHandler::GetNDim ( const int  iSample) const
inline

Get total number of dimensions for sample iSample.

Definition at line 166 of file BinningHandler.h.

166 { return int(SampleBinning[iSample].BinEdges.size()); }

◆ GetNonUniformBins()

const std::vector< BinInfo > BinningHandler::GetNonUniformBins ( const int  iSample) const

Return NonUnifomr bins to for example check extent etc.

Definition at line 350 of file BinningHandler.cpp.

350  {
351 // ************************************************
352  const auto& Binning = SampleBinning[iSample];
353  if(!Binning.Uniform) {
354  return Binning.Bins;
355  } else{
356  MACH3LOG_ERROR("{} for sample {} will not work becasue binnin is unfiorm", __func__, iSample);
357  throw MaCh3Exception(__FILE__, __LINE__);
358  }
359 }

◆ GetSampleEndBin()

int BinningHandler::GetSampleEndBin ( const int  iSample) const

Get bin number corresponding to where given sample ends.

Parameters
iSampleindex of a given sample

Definition at line 221 of file BinningHandler.cpp.

221  {
222 // ************************************************
223  if (Sample == static_cast<int>(SampleBinning.size()) - 1) {
224  return GetNBins();
225  } else {
226  return static_cast<int>(SampleBinning[Sample+1].GlobalOffset);
227  }
228 }
int GetNBins() const
Get total number of bins over all samples/kinematic bins etc.

◆ GetSampleIndex()

int BinningHandler::GetSampleIndex ( const int  GlobalBin) const

Returns sample index based on global bin.

Parameters
GlobalBinbin for which we will return sample index

Definition at line 324 of file BinningHandler.cpp.

324  {
325 // ************************************************
326  int SampleBin = GetSampleFromGlobalBin(SampleBinning, GlobalBin);
327  return SampleBin;
328 }
int GetSampleFromGlobalBin(const std::vector< SampleBinningInfo > &BinningInfo, const int GlobalBin)
Get the sample index corresponding to a global bin number.

◆ GetSampleStartBin()

int BinningHandler::GetSampleStartBin ( const int  iSample) const

Get bin number corresponding to where given sample starts.

Parameters
iSampleindex of a given sample

Definition at line 215 of file BinningHandler.cpp.

215  {
216 // ************************************************
217  return static_cast<int>(SampleBinning[Sample].GlobalOffset);
218 }

◆ IsUniform()

bool BinningHandler::IsUniform ( const int  iSample) const

Tells whether given sample is using unform binning.

Parameters
iSampleindex of a given sample

Definition at line 343 of file BinningHandler.cpp.

343  {
344 // ************************************************
345  const auto& Binning = SampleBinning[iSample];
346  return Binning.Uniform;
347 }

◆ SetGlobalBinNumbers()

void BinningHandler::SetGlobalBinNumbers ( )

Sets the GlobalOffset for each SampleBinningInfo to enable linearization of multiple 2D binning samples.

Definition at line 232 of file BinningHandler.cpp.

232  {
233 // ************************************************
234  if (SampleBinning.empty()) {
235  MACH3LOG_ERROR("No binning samples provided.");
236  throw MaCh3Exception(__FILE__, __LINE__);
237  }
238 
239  int GlobalOffsetCounter = 0;
240  for(size_t iSample = 0; iSample < SampleBinning.size(); iSample++){
241  SampleBinning[iSample].GlobalOffset = GlobalOffsetCounter;
242  GlobalOffsetCounter += SampleBinning[iSample].nBins;
243  }
244  // lastly modify total number of bins
245  TotalNumberOfBins = GlobalOffsetCounter;
246 }

◆ SetupSampleBinning()

void BinningHandler::SetupSampleBinning ( const YAML::Node &  Settings,
SampleInfo SingleSample 
)

Function to setup the binning of your sample histograms and the underlying arrays that get handled in fillArray() and fillArray_MP().

Definition at line 80 of file BinningHandler.cpp.

80  {
81 // ************************************************
82  MACH3LOG_INFO("Setting up Sample Binning");
83  //Binning
84  SingleSample.VarStr = (Settings["VarStr"] && Settings["VarStr"].IsScalar())
85  ? std::vector<std::string>{Get<std::string>(
86  Settings["VarStr"], __FILE__, __LINE__)}
87  : Get<std::vector<std::string>>(Settings["VarStr"],
88  __FILE__, __LINE__);
89  SingleSample.nDimensions = static_cast<int>(SingleSample.VarStr.size());
90 
91  SampleBinningInfo SingleBinning;
92  bool Uniform = Get<bool>(Settings["Uniform"], __FILE__ , __LINE__);
93  bool found_range_specifier = false;
94  if(Uniform == false) {
95  if(Settings["Bins"].IsSequence()) {
96  SingleBinning.InitNonUniform(Get<std::vector<std::vector<std::vector<double>>>>(Settings["Bins"], __FILE__, __LINE__));
97  } else if(Settings["Bins"].IsMap()){
98  // Load binning from external file
99  auto file = Get<std::string>(Settings["Bins"]["File"], __FILE__, __LINE__);
100  M3::AddPath(file);
101  auto key = Get<std::string>(Settings["Bins"]["Key"], __FILE__, __LINE__);
102  auto binfile = LoadYamlConfig(file, __FILE__, __LINE__);
103  SingleBinning.InitNonUniform(Get<std::vector<std::vector<std::vector<double>>>>(binfile[key], __FILE__, __LINE__));
104  } else {
105  std::stringstream ss;
106  ss << Settings["Bins"];
108  "When parsing binning, expected to find a YAML map or sequence, "
109  "but found:\n{}",
110  ss.str());
111  throw MaCh3Exception(__FILE__, __LINE__);
112  }
113  } else {
114  YAML::Node const & bin_edges_node = Settings["BinEdges"] ? Settings["BinEdges"] : Settings["VarBins"];
115  if(!bin_edges_node){
116  MACH3LOG_ERROR("When setting up Uniform sample binning, didn't find expected key: BinEdges (or VarBins for backward compatibility).");
117  throw MaCh3Exception(__FILE__, __LINE__);
118  }
119  SingleBinning.InitUniform(UniformBinEdgeConfigParser(bin_edges_node, found_range_specifier));
120  }
121  if(SingleSample.VarStr.size() != SingleBinning.BinEdges.size()) {
122  MACH3LOG_ERROR("Number of variables ({}) does not match number of bin edge sets ({}) in sample config '{}'",
123  SingleSample.VarStr.size(), SingleBinning.BinEdges.size(),SingleSample.SampleTitle);
124  if(found_range_specifier){
125  std::stringstream ss;
126  ss << (Settings["BinEdges"] ? Settings["BinEdges"] : Settings["VarBins"]);
127  MACH3LOG_ERROR(R"(A bin range specifier was found in node:
128 
129  {}
130 
131  Please carefully check the number of square brackets used, a 2D binning
132  comprised of just 2 range specifiers must explicitly include the axis
133  list specifier like:
134 
135  BinEdges: [ [ {{linspace: {{nb:10, low:0, up: 10}}}} ], [ {{linspace: {{nb:5, low:10, up: 100}}}} ] ]
136  )", ss.str());
137  }
138  throw MaCh3Exception(__FILE__, __LINE__);
139  }
140 
141  SampleBinning.emplace_back(SingleBinning);
142 
143  // now setup global numbering
145 }
std::vector< std::vector< double > > UniformBinEdgeConfigParser(YAML::Node const &bin_edges_node, bool &found_range_specifier)
Parses YAML node describing multidim uniform binning.
#define MACH3LOG_INFO
Definition: MaCh3Logger.h:35
YAML::Node LoadYamlConfig(const std::string &filename, const std::string &File, const int Line)
Open YAML file.
Definition: YamlHelper.h:356
Type Get(const YAML::Node &node, const std::string File, const int Line)
Get content of config file.
Definition: YamlHelper.h:291
void SetGlobalBinNumbers()
Sets the GlobalOffset for each SampleBinningInfo to enable linearization of multiple 2D binning sampl...
void AddPath(std::string &FilePath)
Prepends the MACH3 environment path to FilePath if it is not already present.
Definition: Monitor.cpp:382
void InitUniform(const std::vector< std::vector< double >> &InputEdges)
Initialise Uniform Binning.
void InitNonUniform(const std::vector< std::vector< std::vector< double >>> &InputBins)
Initialise Non-Uniform Binning.
int nDimensions
Keep track of the dimensions of the sample binning.
Definition: SampleInfo.h:60
std::vector< std::string > VarStr
the strings associated with the variables used for the binning e.g. "RecoNeutrinoEnergy"
Definition: SampleInfo.h:52
std::string SampleTitle
the name of this sample e.g."muon-like" used for printing
Definition: SampleInfo.h:55

Member Data Documentation

◆ SampleBinning

std::vector<SampleBinningInfo> BinningHandler::SampleBinning
private

Binning info for individual sample.

Definition at line 212 of file BinningHandler.h.

◆ TotalNumberOfBins

int BinningHandler::TotalNumberOfBins
private

Total number of bins.

Definition at line 210 of file BinningHandler.h.


The documentation for this class was generated from the following files: