Skip to content

Commit 34c9b04

Browse files
committed
Add RNTuple LHCB benchmark
1 parent a5442c1 commit 34c9b04

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

root/tree/tree/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,10 @@ if(ROOT_root7_FOUND AND rootbench-datafiles)
3232
SETUP "hadd -f404 ${RB_DATASETDIR}/h1dst-lz4.root ${RB_DATASETDIR}/h1dst-lzma.root"
3333
SETUP "hadd -f506 ${RB_DATASETDIR}/h1dst-zstd.root ${RB_DATASETDIR}/h1dst-lzma.root"
3434
SETUP "hadd -f0 ${RB_DATASETDIR}/h1dst-none.root ${RB_DATASETDIR}/h1dst-lzma.root")
35+
36+
RB_ADD_GBENCHMARK(RNTupleLHCBBenchmarks
37+
RNTupleLHCBBenchmarks.cxx
38+
LABEL short
39+
LIBRARIES Core Hist MathCore RIO Tree ROOTNTuple
40+
DOWNLOAD_DATAFILES B2HHH~none.ntuple)
3541
endif()
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#include <ROOT/RNTuple.hxx>
2+
#include <TH1D.h>
3+
#include <benchmark/benchmark.h>
4+
#include <rootbench/RBConfig.h>
5+
6+
namespace {
7+
constexpr double kKaonMassMeV = 493.677;
8+
9+
double GetP2(double px, double py, double pz)
10+
{
11+
return px * px + py * py + pz * pz;
12+
}
13+
14+
double GetKE(double px, double py, double pz)
15+
{
16+
double p2 = GetP2(px, py, pz);
17+
return sqrt(p2 + kKaonMassMeV * kKaonMassMeV);
18+
}
19+
} // namespace
20+
21+
static void BM_RNTuple_LHCB(benchmark::State &state)
22+
{
23+
using RNTupleReader = ROOT::Experimental::RNTupleReader;
24+
using RNTupleModel = ROOT::Experimental::RNTupleModel;
25+
26+
auto model = RNTupleModel::Create();
27+
auto ntuple = RNTupleReader::Open(std::move(model), "DecayTree", RB::GetDataDir() + "/B2HHH~none.ntuple");
28+
auto viewH1IsMuon = ntuple->GetView<int>("H1_isMuon");
29+
auto viewH2IsMuon = ntuple->GetView<int>("H2_isMuon");
30+
auto viewH3IsMuon = ntuple->GetView<int>("H3_isMuon");
31+
32+
auto viewH1PX = ntuple->GetView<double>("H1_PX");
33+
auto viewH1PY = ntuple->GetView<double>("H1_PY");
34+
auto viewH1PZ = ntuple->GetView<double>("H1_PZ");
35+
auto viewH1ProbK = ntuple->GetView<double>("H1_ProbK");
36+
auto viewH1ProbPi = ntuple->GetView<double>("H1_ProbPi");
37+
38+
auto viewH2PX = ntuple->GetView<double>("H2_PX");
39+
auto viewH2PY = ntuple->GetView<double>("H2_PY");
40+
auto viewH2PZ = ntuple->GetView<double>("H2_PZ");
41+
auto viewH2ProbK = ntuple->GetView<double>("H2_ProbK");
42+
auto viewH2ProbPi = ntuple->GetView<double>("H2_ProbPi");
43+
44+
auto viewH3PX = ntuple->GetView<double>("H3_PX");
45+
auto viewH3PY = ntuple->GetView<double>("H3_PY");
46+
auto viewH3PZ = ntuple->GetView<double>("H3_PZ");
47+
auto viewH3ProbK = ntuple->GetView<double>("H3_ProbK");
48+
auto viewH3ProbPi = ntuple->GetView<double>("H3_ProbPi");
49+
50+
auto hMass = new TH1D("B_mass", "", 500, 5050, 5500);
51+
52+
for (auto _ : state) {
53+
hMass->Reset();
54+
for (auto i : ntuple->GetEntryRange()) {
55+
if (viewH1IsMuon(i) || viewH2IsMuon(i) || viewH3IsMuon(i)) {
56+
continue;
57+
}
58+
59+
constexpr double prob_k_cut = 0.5;
60+
if (viewH1ProbK(i) < prob_k_cut)
61+
continue;
62+
if (viewH2ProbK(i) < prob_k_cut)
63+
continue;
64+
if (viewH3ProbK(i) < prob_k_cut)
65+
continue;
66+
67+
constexpr double prob_pi_cut = 0.5;
68+
if (viewH1ProbPi(i) > prob_pi_cut)
69+
continue;
70+
if (viewH2ProbPi(i) > prob_pi_cut)
71+
continue;
72+
if (viewH3ProbPi(i) > prob_pi_cut)
73+
continue;
74+
75+
double b_px = viewH1PX(i) + viewH2PX(i) + viewH3PX(i);
76+
double b_py = viewH1PY(i) + viewH2PY(i) + viewH3PY(i);
77+
double b_pz = viewH1PZ(i) + viewH2PZ(i) + viewH3PZ(i);
78+
double b_p2 = GetP2(b_px, b_py, b_pz);
79+
double k1_E = GetKE(viewH1PX(i), viewH1PY(i), viewH1PZ(i));
80+
double k2_E = GetKE(viewH2PX(i), viewH2PY(i), viewH2PZ(i));
81+
double k3_E = GetKE(viewH3PX(i), viewH3PY(i), viewH3PZ(i));
82+
double b_E = k1_E + k2_E + k3_E;
83+
double b_mass = sqrt(b_E * b_E - b_p2);
84+
hMass->Fill(b_mass);
85+
}
86+
}
87+
RB::Ensure(int(hMass->GetMean()) == 5262);
88+
RB::Ensure(int(hMass->GetEntries()) == 23895);
89+
delete hMass;
90+
}
91+
BENCHMARK(BM_RNTuple_LHCB)->Unit(benchmark::kMicrosecond)->Iterations(3);
92+
93+
BENCHMARK_MAIN();
94+

0 commit comments

Comments
 (0)