ATLAS Offline Software
Functions
test-histogram.cxx File Reference
#include "HDF5Utils/histogram.h"
#include "H5Cpp.h"
Include dependency graph for test-histogram.cxx:

Go to the source code of this file.

Functions

int main (int, char *[])
 

Function Documentation

◆ main()

int main ( int  ,
char *  [] 
)

Definition at line 9 of file test-histogram.cxx.

9  {
10 
11  namespace bh = boost::histogram;
12  namespace h5h = H5Utils::hist;
13  using def = bh::use_default;
14 
15  using dax_t = bh::axis::regular<double>;
16  using daxn_t = bh::axis::regular<double, def, def, bh::axis::option::none_t>;
17  using iax_t = bh::axis::integer<int>;
18  using cax_t = bh::axis::category<short, def, bh::axis::option::overflow_t>;
19 
20  H5::H5File out_file("hists.h5", H5F_ACC_TRUNC);
21 
22  // build weighted hist
23  {
24  auto h3dw = bh::make_weighted_histogram(
25  daxn_t(1, -0.5, 0.5, "ax0"),
26  dax_t(1, -0.5, 0.5, "ax1"),
27  iax_t(-1, 1, "ax2"));
28  // this should put a 0.5 at [0, 1, 2] when all the overflows are
29  // accounted for
30  h3dw(0, 0, 0, bh::weight(0.5));
31  // this is to test the overflow bin
32  h3dw(0, 0, 20, bh::weight(10));
33  h5h::write_hist_to_group(out_file, h3dw, "h3dw");
34  }
35 
36  // build unweighted hist
37  {
38  auto h3d = bh::make_histogram(
39  daxn_t(1, -0.5, 0.5, "ax0"),
40  dax_t(1, -0.5, 0.5, "ax1"),
41  iax_t(-1, 1, "ax2"));
42  h3d(0, 0, 0);
43  h5h::write_hist_to_group(out_file, h3d, "h3d");
44  }
45 
46  // build weighted profile hist
47  {
48  auto h3dp = bh::make_weighted_profile(
49  daxn_t(1, -0.5, 0.5, "ax0"),
50  dax_t(1, -0.5, 0.5, "ax1"),
51  iax_t(-1, 1, "ax2"));
52  // we need two calls here to check the variance too
53  h3dp(0, 0, 0, bh::weight(0.5), bh::sample(1.0));
54  h3dp(0, 0, 0, bh::weight(0.5), bh::sample(1.0));
55  h5h::write_hist_to_group(out_file, h3dp, "h3dp");
56  }
57 
58  // build a dyanmic hist
59  {
60  using variant = bh::axis::variant<dax_t, daxn_t, iax_t>;
61  std::vector<variant> axes {
62  daxn_t(1, -0.5, 0.5, "ax0"),
63  dax_t(1, -0.5, 0.5, "ax1"),
64  iax_t(-1, 1, "ax2")
65  };
66  auto hdyn = bh::make_weighted_histogram(axes);
67  // seems we need to do some funny organization to make weighting
68  // work with dynamic axes.
69  std::vector<std::vector<double>> vals { {0}, {0}, {0} };
70  hdyn.fill(vals, bh::weight(0.5));
71  h5h::write_hist_to_group(out_file, hdyn, "hdyn");
72  }
73 
74  // categorical axes test
75  {
76  // flavor labels histogram
77  auto h1c = bh::make_histogram(
78  cax_t({0, 4, 5, 15}, "flavorTruthLabel") );
79  h1c(5); // add a b-hadron
80  h1c(20); // no idea what, test overflow
81  h5h::write_hist_to_group(out_file, h1c, "h1c");
82  }
83 
84 
85  return 0;
86 }
H5Utils::hist::write_hist_to_group
void write_hist_to_group(H5::Group &group, const T &hist, const std::string &name)
plotmaker.hist
hist
Definition: plotmaker.py:148
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:189
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:113
histogram
std::string histogram
Definition: chains.cxx:52
PlotCalibFromCool.vals
vals
Definition: PlotCalibFromCool.py:474