ndmspc  v1.2.0-0.1.rc3
NBinning.h
1 #ifndef Ndmspc_NBinning_H
2 #define Ndmspc_NBinning_H
3 #include <TObject.h>
4 #include <THnSparse.h>
5 #include <TAxis.h>
6 #include <cstddef>
7 #include <vector>
8 #include <map>
9 #include "TObjArray.h"
10 #include "NBinningDef.h"
11 #include "NBinningPoint.h"
12 
13 namespace Ndmspc {
14 
19 enum class Binning {
20  kSingle = 0,
21  kMultiple = 1,
22  kUser = 2,
23  kUndefined = 3
24 };
25 
30 enum class AxisType {
31  kFixed = 0,
32  kVariable = 1,
33  kUndefined = 2,
34 };
35 
45 class NBinning : public TObject {
46  public:
50  NBinning();
51 
56  NBinning(TObjArray * axes);
57 
62  NBinning(std::vector<TAxis *> axes);
63 
67  virtual ~NBinning();
68 
72  void Initialize();
73 
77  void Reset();
78 
83  virtual void Print(Option_t * option = "") const;
84 
89  void PrintContent(Option_t * option = "") const;
90 
96  Long64_t FillAll(NBinningDef * def = nullptr);
97 
103  std::vector<std::vector<int>> GetCoordsRange(std::vector<int> c) const;
104 
110  std::vector<std::vector<int>> GetAxisRanges(std::vector<int> c) const;
111 
120  bool GetAxisRange(size_t axisId, double & min, double & max, std::vector<int> c) const;
121 
130  bool GetAxisRangeInBase(size_t axisId, int & min, int & max, std::vector<int> c) const;
131 
136  TObjArray * GenerateListOfAxes();
137 
144  std::vector<int> GetAxisBinning(size_t axisId, const std::vector<int> & c) const;
145 
151  std::vector<int> GetAxisIndexes(AxisType type) const;
152 
158  std::vector<int> GetAxisIndexesByNames(std::vector<std::string> axisNames) const;
159 
165  std::vector<std::string> GetAxisNamesByType(AxisType type) const;
166 
172  std::vector<std::string> GetAxisNamesByIndexes(std::vector<int> axisIds) const;
173 
181  bool AddBinning(size_t id, std::vector<int> binning, size_t n = 1);
182 
189  bool AddBinningVariable(size_t id, std::vector<int> mins);
190 
197  bool AddBinningViaBinWidths(size_t id, std::vector<std::vector<int>> widths);
198 
205  bool SetAxisType(size_t id, AxisType type);
206 
211  THnSparse * GetMap() const { return fMap; }
212 
217  THnSparse * GetContent() const { return fContent; }
218 
223  std::vector<TAxis *> GetAxes() const { return fAxes; }
224 
230  std::vector<TAxis *> GetAxesByType(AxisType type) const;
231 
237  Binning GetBinningType(size_t i) const;
238 
244  AxisType GetAxisType(size_t i) const;
245 
251  char GetAxisTypeChar(size_t i) const;
252 
258  NBinningDef * GetDefinition(const std::string & name = "");
259 
264  std::map<std::string, NBinningDef *> GetDefinitions() const { return fDefinitions; }
265 
270  std::vector<std::string> GetDefinitionNames() const { return fDefinitionNames; }
271 
276  std::string GetCurrentDefinitionName() const { return fCurrentDefinitionName; }
277 
282  void SetCurrentDefinitionName(const std::string & name);
283 
290  void AddBinningDefinition(std::string name, std::map<std::string, std::vector<std::vector<int>>> binning,
291  bool forceDefault = false);
292 
298 
305  NBinningPoint * GetPoint(size_t id, const std::string binning = "");
306 
311  void SetPoint(NBinningPoint * point) { fPoint = point; }
312 
318  bool SetCfg(const json & cfg);
319 
320  private:
321  THnSparse * fMap{nullptr};
322  THnSparse * fContent{nullptr};
323  std::vector<TAxis *> fAxes;
324  std::vector<Binning> fBinningTypes;
325  std::vector<AxisType> fAxisTypes;
326  std::string fCurrentDefinitionName{""};
327  std::map<std::string, NBinningDef *> fDefinitions;
328  std::vector<std::string> fDefinitionNames;
329  NBinningPoint * fPoint{nullptr};
330 
332  ClassDef(NBinning, 1);
334 };
335 } // namespace Ndmspc
336 #endif
Defines binning mapping and content for NDMSPC histograms.
Definition: NBinningDef.h:26
Represents a single point in multi-dimensional binning.
Definition: NBinningPoint.h:21
NBinning object for managing multi-dimensional binning and axis definitions.
Definition: NBinning.h:45
NBinningDef * GetDefinition(const std::string &name="")
Get binning definition by name.
Definition: NBinning.cxx:1024
std::vector< std::string > GetDefinitionNames() const
Get all definition names.
Definition: NBinning.h:270
std::vector< std::string > GetAxisNamesByType(AxisType type) const
Get axis names by type.
Definition: NBinning.cxx:988
std::vector< int > GetAxisIndexes(AxisType type) const
Get indexes of axes by type.
Definition: NBinning.cxx:934
std::vector< std::string > GetAxisNamesByIndexes(std::vector< int > axisIds) const
Get axis names by indexes.
Definition: NBinning.cxx:1006
std::vector< AxisType > fAxisTypes
Axis types.
Definition: NBinning.h:325
std::vector< TAxis * > fAxes
List of axes.
Definition: NBinning.h:323
std::string GetCurrentDefinitionName() const
Get current definition name.
Definition: NBinning.h:276
NBinningPoint * GetPoint()
Get the current binning point.
Definition: NBinning.cxx:1128
std::vector< int > GetAxisIndexesByNames(std::vector< std::string > axisNames) const
Get axis indexes by axis names.
Definition: NBinning.cxx:970
bool GetAxisRange(size_t axisId, double &min, double &max, std::vector< int > c) const
Get axis range for a specific axis and coordinates.
Definition: NBinning.cxx:809
std::vector< std::vector< int > > GetAxisRanges(std::vector< int > c) const
Get axis ranges for given coordinates.
Definition: NBinning.cxx:721
TObjArray * GenerateListOfAxes()
Generate a list of axes as TObjArray.
Definition: NBinning.cxx:850
bool AddBinningVariable(size_t id, std::vector< int > mins)
Add variable binning for a specific axis.
Definition: NBinning.cxx:593
NBinning()
Default constructor.
Definition: NBinning.cxx:19
virtual void Print(Option_t *option="") const
Print binning information.
Definition: NBinning.cxx:245
AxisType GetAxisType(size_t i) const
Get axis type for a specific axis.
Definition: NBinning.cxx:909
bool AddBinningViaBinWidths(size_t id, std::vector< std::vector< int >> widths)
Add binning via bin widths for a specific axis.
Definition: NBinning.cxx:634
void Initialize()
Initialize the binning object.
Definition: NBinning.cxx:90
std::vector< TAxis * > GetAxes() const
Get vector of axis pointers.
Definition: NBinning.h:223
bool SetCfg(const json &cfg)
Set configuration from JSON.
Definition: NBinning.cxx:1174
std::vector< std::string > fDefinitionNames
Binning definition names.
Definition: NBinning.h:328
THnSparse * fContent
Content histogram.
Definition: NBinning.h:322
void AddBinningDefinition(std::string name, std::map< std::string, std::vector< std::vector< int >>> binning, bool forceDefault=false)
Add a binning definition.
Definition: NBinning.cxx:1053
std::string fCurrentDefinitionName
Current definition name.
Definition: NBinning.h:326
std::map< std::string, NBinningDef * > fDefinitions
Binning definitions.
Definition: NBinning.h:327
Binning GetBinningType(size_t i) const
Get binning type for a specific axis.
Definition: NBinning.cxx:712
void PrintContent(Option_t *option="") const
Print binning content.
Definition: NBinning.cxx:341
bool GetAxisRangeInBase(size_t axisId, int &min, int &max, std::vector< int > c) const
Get axis range in base for a specific axis and coordinates.
Definition: NBinning.cxx:823
std::vector< int > GetAxisBinning(size_t axisId, const std::vector< int > &c) const
Get binning for a specific axis and coordinates.
Definition: NBinning.cxx:761
virtual ~NBinning()
Destructor.
Definition: NBinning.cxx:56
THnSparse * GetMap() const
Get the mapping histogram.
Definition: NBinning.h:211
std::map< std::string, NBinningDef * > GetDefinitions() const
Get all binning definitions.
Definition: NBinning.h:264
THnSparse * GetContent() const
Get the content histogram.
Definition: NBinning.h:217
void SetPoint(NBinningPoint *point)
Set the current binning point.
Definition: NBinning.h:311
NBinningPoint * fPoint
! Binning point object
Definition: NBinning.h:329
char GetAxisTypeChar(size_t i) const
Get axis type as character for a specific axis.
Definition: NBinning.cxx:920
void Reset()
Reset the binning object to initial state.
Definition: NBinning.cxx:78
std::vector< std::vector< int > > GetCoordsRange(std::vector< int > c) const
Get coordinate ranges for given coordinates.
Definition: NBinning.cxx:665
bool SetAxisType(size_t id, AxisType type)
Set axis type for a specific axis.
Definition: NBinning.cxx:896
std::vector< TAxis * > GetAxesByType(AxisType type) const
Get axes by type.
Definition: NBinning.cxx:952
void SetCurrentDefinitionName(const std::string &name)
Set current definition name.
Definition: NBinning.cxx:1184
THnSparse * fMap
Mapping histogram.
Definition: NBinning.h:321
std::vector< Binning > fBinningTypes
Binning types.
Definition: NBinning.h:324
bool AddBinning(size_t id, std::vector< int > binning, size_t n=1)
Add binning for a specific axis.
Definition: NBinning.cxx:560
Long64_t FillAll(NBinningDef *def=nullptr)
Fill all bins according to definition.
Definition: NBinning.cxx:416