GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/physics/SingleHadronKinematics/Validator.cc
Date: 2025-11-25 17:57:04
Coverage Exec Excl Total
Lines: 100.0% 62 0 62
Functions: 100.0% 4 0 4
Branches: 47.8% 66 0 138

Line Branch Exec Source
1 #include "Validator.h"
2 #include "TypeDefs.h"
3 #include "iguana/algorithms/physics/Tools.h"
4
5 #include <Math/Vector3D.h>
6
7 namespace iguana::physics {
8
9 REGISTER_IGUANA_VALIDATOR(SingleHadronKinematicsValidator);
10
11 1 void SingleHadronKinematicsValidator::Start(hipo::banklist& banks)
12 {
13 // define the algorithm sequence
14 2 m_algo_seq = std::make_unique<AlgorithmSequence>();
15
3/8
✓ Branch 7 → 8 taken 1 time.
✗ Branch 7 → 133 not taken.
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 127 not taken.
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 17 not taken.
✗ Branch 133 → 134 not taken.
✗ Branch 133 → 136 not taken.
2 m_algo_seq->Add("physics::InclusiveKinematics");
16
3/8
✓ Branch 20 → 21 taken 1 time.
✗ Branch 20 → 145 not taken.
✓ Branch 21 → 22 taken 1 time.
✗ Branch 21 → 139 not taken.
✓ Branch 27 → 28 taken 1 time.
✗ Branch 27 → 30 not taken.
✗ Branch 145 → 146 not taken.
✗ Branch 145 → 148 not taken.
2 m_algo_seq->Add("physics::SingleHadronKinematics");
17
2/6
✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 157 not taken.
✓ Branch 43 → 44 taken 1 time.
✗ Branch 43 → 46 not taken.
✗ Branch 157 → 158 not taken.
✗ Branch 157 → 160 not taken.
3 m_algo_seq->SetOption("physics::SingleHadronKinematics", "log", m_log->GetLevel());
18
5/14
✓ Branch 49 → 50 taken 1 time.
✗ Branch 49 → 175 not taken.
✓ Branch 50 → 51 taken 1 time.
✗ Branch 50 → 169 not taken.
✓ Branch 51 → 52 taken 1 time.
✗ Branch 51 → 163 not taken.
✓ Branch 57 → 58 taken 1 time.
✗ Branch 57 → 60 not taken.
✓ Branch 62 → 63 taken 1 time.
✗ Branch 62 → 65 not taken.
✗ Branch 169 → 170 not taken.
✗ Branch 169 → 172 not taken.
✗ Branch 175 → 176 not taken.
✗ Branch 175 → 178 not taken.
4 m_algo_seq->SetOption<std::vector<int>>("physics::SingleHadronKinematics", "hadron_list", {particle::pi_plus});
19 1 m_algo_seq->Start(banks);
20
21 // get bank indices
22
2/4
✓ Branch 67 → 68 taken 1 time.
✗ Branch 67 → 179 not taken.
✗ Branch 68 → 69 not taken.
✓ Branch 68 → 71 taken 1 time.
1 b_result = GetBankIndex(banks, "physics::SingleHadronKinematics");
23
24 // set an output file
25 1 auto output_dir = GetOutputDirectory();
26
1/2
✓ Branch 74 → 75 taken 1 time.
✗ Branch 74 → 89 not taken.
1 if(output_dir) {
27
3/6
✓ Branch 75 → 76 taken 1 time.
✗ Branch 75 → 227 not taken.
✓ Branch 76 → 77 taken 1 time.
✗ Branch 76 → 185 not taken.
✓ Branch 82 → 83 taken 1 time.
✗ Branch 82 → 227 not taken.
2 m_output_file_basename = output_dir.value() + "/single_hadron_kinematics";
28
2/4
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 193 not taken.
✓ Branch 86 → 87 taken 1 time.
✗ Branch 86 → 191 not taken.
2 m_output_file = new TFile(m_output_file_basename + ".root", "RECREATE");
29 }
30
31 // define plots
32 int const n_bins = 100;
33 plot_list = {
34
1/2
✓ Branch 90 → 91 taken 1 time.
✗ Branch 90 → 213 not taken.
1 {new TH1D("z_dist", "z", n_bins, 0, 1),
35 71 [](auto const& b, auto const r) { return b.getDouble("z", r); }},
36
1/2
✓ Branch 92 → 93 taken 1 time.
✗ Branch 92 → 211 not taken.
1 {new TH1D("PhPerp_dist", "P_{h}^{{}^{#perp}}", n_bins, 0, 2),
37 71 [](auto const& b, auto const r) { return b.getDouble("PhPerp", r); }},
38
1/2
✓ Branch 94 → 95 taken 1 time.
✗ Branch 94 → 209 not taken.
1 {new TH1D("MX_dist", "Missing mass: M_{X} [GeV];", n_bins, 0, 4),
39
1/2
✓ Branch 3 → 4 taken 71 times.
✗ Branch 3 → 5 not taken.
71 [](auto const& b, auto const r) { auto MX2 = b.getDouble("MX2", r); return MX2 >= 0 ? std::sqrt(MX2) : tools::UNDEF; }},
40
1/2
✓ Branch 96 → 97 taken 1 time.
✗ Branch 96 → 207 not taken.
1 {new TH1D("xF_dist", "Feynman-x: x_{F};", n_bins, -1, 1),
41 71 [](auto const& b, auto const r) { return b.getDouble("xF", r); }},
42
1/2
✓ Branch 98 → 99 taken 1 time.
✗ Branch 98 → 205 not taken.
1 {new TH1D("yB_dist", "Breit frame rapidity: y_{B};", n_bins, -4, 4),
43 71 [](auto const& b, auto const r) { return b.getDouble("yB", r); }},
44
1/2
✓ Branch 100 → 101 taken 1 time.
✗ Branch 100 → 203 not taken.
1 {new TH1D("phiH_dist", "#phi_{h};", n_bins, -M_PI, M_PI),
45 71 [](auto const& b, auto const r) { return b.getDouble("phiH", r); }},
46
1/2
✓ Branch 102 → 103 taken 1 time.
✗ Branch 102 → 201 not taken.
1 {new TH1D("xi_dist", "#xi", n_bins, -1, 1),
47 71 [](auto const& b, auto const r) { return b.getDouble("xi", r); }},
48
4/10
✓ Branch 103 → 104 taken 1 time.
✗ Branch 103 → 195 not taken.
✓ Branch 105 → 106 taken 7 times.
✓ Branch 105 → 109 taken 1 time.
✓ Branch 106 → 107 taken 7 times.
✗ Branch 106 → 108 not taken.
✗ Branch 196 → 197 not taken.
✗ Branch 196 → 200 not taken.
✗ Branch 197 → 198 not taken.
✗ Branch 197 → 199 not taken.
9 };
49
50 // format plots
51
2/2
✓ Branch 124 → 110 taken 7 times.
✓ Branch 124 → 125 taken 1 time.
8 for(auto& plot : plot_list) {
52
1/2
✓ Branch 110 → 111 taken 7 times.
✗ Branch 110 → 227 not taken.
7 plot.hist->SetLineColor(kGreen + 1);
53
1/2
✓ Branch 111 → 112 taken 7 times.
✗ Branch 111 → 227 not taken.
7 plot.hist->SetFillColor(kGreen + 1);
54
1/2
✓ Branch 119 → 120 taken 7 times.
✗ Branch 119 → 221 not taken.
7 plot.hist->SetTitle(
55
2/4
✓ Branch 113 → 114 taken 7 times.
✗ Branch 113 → 227 not taken.
✓ Branch 114 → 115 taken 7 times.
✗ Branch 114 → 227 not taken.
14 TString(particle::title.at(particle::pi_plus)) +
56
3/6
✓ Branch 112 → 113 taken 7 times.
✗ Branch 112 → 227 not taken.
✓ Branch 115 → 116 taken 7 times.
✗ Branch 115 → 225 not taken.
✓ Branch 116 → 117 taken 7 times.
✗ Branch 116 → 223 not taken.
28 " " + plot.hist->GetTitle());
57 }
58
7/18
✓ Branch 91 → 92 taken 1 time.
✗ Branch 91 → 215 not taken.
✓ Branch 93 → 94 taken 1 time.
✗ Branch 93 → 215 not taken.
✓ Branch 95 → 96 taken 1 time.
✗ Branch 95 → 215 not taken.
✓ Branch 97 → 98 taken 1 time.
✗ Branch 97 → 215 not taken.
✓ Branch 99 → 100 taken 1 time.
✗ Branch 99 → 215 not taken.
✓ Branch 101 → 102 taken 1 time.
✗ Branch 101 → 215 not taken.
✓ Branch 103 → 104 taken 1 time.
✗ Branch 103 → 195 not taken.
✗ Branch 216 → 217 not taken.
✗ Branch 216 → 220 not taken.
✗ Branch 217 → 218 not taken.
✗ Branch 217 → 219 not taken.
8 }
59
60
61 1000 bool SingleHadronKinematicsValidator::Run(hipo::banklist& banks) const
62 {
63 // calculate kinematics
64 1000 m_algo_seq->Run(banks);
65
2/4
✓ Branch 3 → 4 taken 1000 times.
✗ Branch 3 → 37 not taken.
✓ Branch 4 → 5 taken 1000 times.
✗ Branch 4 → 31 not taken.
1000 auto& result_bank = GetBank(banks, b_result, "physics::SingleHadronKinematics");
66
67 // skip events with no hadrons
68
2/2
✓ Branch 13 → 14 taken 942 times.
✓ Branch 13 → 16 taken 58 times.
2000 if(result_bank.getRowList().size() == 0) {
69 942 m_log->Debug("skip this event, since it has no kinematics results");
70 942 return false;
71 }
72
73 // lock mutex and fill the plots
74 58 std::scoped_lock<std::mutex> lock(m_mutex);
75
3/4
✓ Branch 17 → 18 taken 58 times.
✗ Branch 17 → 38 not taken.
✓ Branch 27 → 19 taken 71 times.
✓ Branch 27 → 28 taken 58 times.
129 for(auto const& row : result_bank.getRowList()) {
76
2/2
✓ Branch 25 → 20 taken 497 times.
✓ Branch 25 → 26 taken 71 times.
568 for(auto& plot : plot_list)
77
2/4
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 497 times.
✓ Branch 23 → 24 taken 497 times.
✗ Branch 23 → 38 not taken.
994 plot.hist->Fill(plot.get_val(result_bank, row));
78 }
79 return true;
80 }
81
82
83 1 void SingleHadronKinematicsValidator::Stop()
84 {
85
1/2
✓ Branch 4 → 5 taken 1 time.
✗ Branch 4 → 29 not taken.
2 if(GetOutputDirectory()) {
86 int const n_cols = 4;
87 1 int const n_rows = (plot_list.size() - 1) / n_cols + 1;
88
1/2
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 30 not taken.
1 auto canv = new TCanvas("canv", "canv", n_cols * 800, n_rows * 600);
89 1 canv->Divide(n_cols, n_rows);
90 int pad_num = 0;
91
2/2
✓ Branch 19 → 11 taken 7 times.
✓ Branch 19 → 20 taken 1 time.
8 for(auto& plot : plot_list) {
92 7 auto pad = canv->GetPad(++pad_num);
93 7 pad->cd();
94 7 pad->SetGrid(1, 1);
95 7 pad->SetLeftMargin(0.12);
96 7 pad->SetRightMargin(0.12);
97 7 pad->SetBottomMargin(0.12);
98 7 plot.hist->Draw();
99 }
100
1/2
✓ Branch 23 → 24 taken 1 time.
✗ Branch 23 → 32 not taken.
2 canv->SaveAs(m_output_file_basename + ".png");
101 1 m_output_file->Write();
102 1 m_log->Info("Wrote output file {}", m_output_file->GetName());
103 1 m_output_file->Close();
104 }
105 1 }
106
107 }
108