GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/physics/Depolarization/Validator.cc
Date: 2025-11-25 17:57:04
Coverage Exec Excl Total
Lines: 100.0% 72 0 72
Functions: 100.0% 8 0 8
Branches: 49.1% 112 0 228

Line Branch Exec Source
1 #include "Validator.h"
2
3 namespace iguana::physics {
4
5 REGISTER_IGUANA_VALIDATOR(DepolarizationValidator);
6
7 1 void DepolarizationValidator::Start(hipo::banklist& banks)
8 {
9 // define the algorithm sequence
10 2 m_algo_seq = std::make_unique<AlgorithmSequence>();
11
3/8
✓ Branch 7 → 8 taken 1 time.
✗ Branch 7 → 208 not taken.
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 202 not taken.
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 17 not taken.
✗ Branch 208 → 209 not taken.
✗ Branch 208 → 211 not taken.
2 m_algo_seq->Add("physics::InclusiveKinematics");
12
3/8
✓ Branch 20 → 21 taken 1 time.
✗ Branch 20 → 220 not taken.
✓ Branch 21 → 22 taken 1 time.
✗ Branch 21 → 214 not taken.
✓ Branch 27 → 28 taken 1 time.
✗ Branch 27 → 30 not taken.
✗ Branch 220 → 221 not taken.
✗ Branch 220 → 223 not taken.
2 m_algo_seq->Add("physics::Depolarization");
13
2/6
✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 232 not taken.
✓ Branch 43 → 44 taken 1 time.
✗ Branch 43 → 46 not taken.
✗ Branch 232 → 233 not taken.
✗ Branch 232 → 235 not taken.
3 m_algo_seq->SetOption("physics::Depolarization", "log", m_log->GetLevel());
14 1 m_algo_seq->Start(banks);
15
16 // get bank indices
17
2/4
✓ Branch 50 → 51 taken 1 time.
✗ Branch 50 → 238 not taken.
✗ Branch 51 → 52 not taken.
✓ Branch 51 → 54 taken 1 time.
1 b_inc_kin = GetBankIndex(banks, "physics::InclusiveKinematics");
18
2/4
✓ Branch 57 → 58 taken 1 time.
✗ Branch 57 → 244 not taken.
✗ Branch 58 → 59 not taken.
✓ Branch 58 → 61 taken 1 time.
1 b_depol = GetBankIndex(banks, "physics::Depolarization");
19
20 // set an output file
21 1 auto output_dir = GetOutputDirectory();
22
1/2
✓ Branch 64 → 65 taken 1 time.
✗ Branch 64 → 79 not taken.
1 if(output_dir) {
23
3/6
✓ Branch 65 → 66 taken 1 time.
✗ Branch 65 → 346 not taken.
✓ Branch 66 → 67 taken 1 time.
✗ Branch 66 → 250 not taken.
✓ Branch 72 → 73 taken 1 time.
✗ Branch 72 → 346 not taken.
2 m_output_file_basename = output_dir.value() + "/depolarization";
24
2/4
✓ Branch 73 → 74 taken 1 time.
✗ Branch 73 → 258 not taken.
✓ Branch 76 → 77 taken 1 time.
✗ Branch 76 → 256 not taken.
2 m_output_file = new TFile(m_output_file_basename + ".root", "RECREATE");
25 }
26
27 // plot binning
28 int const n_bins = 100;
29 std::pair<double, double> const depol_range = {-0.5, 2.5};
30 std::map<TString, std::pair<double, double>> const kin_range = {
31
1/2
✓ Branch 79 → 80 taken 1 time.
✗ Branch 79 → 270 not taken.
1 {"Q2", {0, 10}},
32
1/2
✓ Branch 81 → 82 taken 1 time.
✗ Branch 81 → 268 not taken.
2 {"x", {0, 1}},
33
4/8
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 266 not taken.
✗ Branch 85 → 86 not taken.
✓ Branch 85 → 87 taken 1 time.
✓ Branch 88 → 89 taken 3 times.
✓ Branch 88 → 91 taken 1 time.
✗ Branch 260 → 261 not taken.
✗ Branch 260 → 263 not taken.
5 {"y", {0, 1}}};
34
35 // plot names, in preferred order for the canvas
36 std::vector<TString> const depol_names = {
37 "A",
38 "B",
39 "C",
40 "V",
41 "W",
42 "epsilon",
43 "BA",
44 "CA",
45 "VA",
46
1/2
✓ Branch 94 → 95 taken 1 time.
✗ Branch 94 → 344 not taken.
1 "WA"};
47
48 // plot titles
49 std::map<TString, TString> const depol_titles = {
50 {"epsilon", "#varepsilon"},
51 {"A", "A"},
52 {"B", "B"},
53 {"C", "C"},
54 {"V", "V"},
55 {"W", "W"},
56 {"BA", "B/A"},
57 {"CA", "C/A"},
58 {"VA", "V/A"},
59
4/8
✗ Branch 105 → 106 not taken.
✓ Branch 105 → 107 taken 1 time.
✓ Branch 108 → 109 taken 10 times.
✓ Branch 108 → 112 taken 1 time.
✓ Branch 112 → 113 taken 1 time.
✗ Branch 112 → 289 not taken.
✗ Branch 275 → 276 not taken.
✗ Branch 275 → 279 not taken.
11 {"WA", "W/A"}};
60
61 // bank accessors
62 std::map<TString, std::function<double(hipo::bank const&, int const)>> const accessors = {
63 {"epsilon", [](auto const& b, auto const r) { return b.getDouble("epsilon", r); }},
64 429 {"A", [](auto const& b, auto const r) { return b.getDouble("A", r); }},
65 429 {"B", [](auto const& b, auto const r) { return b.getDouble("B", r); }},
66 429 {"C", [](auto const& b, auto const r) { return b.getDouble("C", r); }},
67 429 {"V", [](auto const& b, auto const r) { return b.getDouble("V", r); }},
68 429 {"W", [](auto const& b, auto const r) { return b.getDouble("W", r); }},
69 429 {"BA", [](auto const& b, auto const r) { return b.getDouble("B", r) / b.getDouble("A", r); }},
70 429 {"CA", [](auto const& b, auto const r) { return b.getDouble("C", r) / b.getDouble("A", r); }},
71 429 {"VA", [](auto const& b, auto const r) { return b.getDouble("V", r) / b.getDouble("A", r); }},
72
3/6
✗ Branch 122 → 123 not taken.
✓ Branch 122 → 124 taken 1 time.
✓ Branch 125 → 126 taken 10 times.
✓ Branch 125 → 127 taken 1 time.
✗ Branch 286 → 287 not taken.
✗ Branch 286 → 288 not taken.
440 {"WA", [](auto const& b, auto const r) { return b.getDouble("W", r) / b.getDouble("A", r); }}};
73
74 // construct plots
75
2/2
✓ Branch 195 → 128 taken 10 times.
✓ Branch 195 → 196 taken 1 time.
11 for(auto const& name : depol_names) {
76
9/18
✓ Branch 128 → 129 taken 10 times.
✗ Branch 128 → 338 not taken.
✓ Branch 129 → 130 taken 10 times.
✗ Branch 129 → 305 not taken.
✓ Branch 130 → 131 taken 10 times.
✗ Branch 130 → 303 not taken.
✓ Branch 131 → 132 taken 10 times.
✗ Branch 131 → 303 not taken.
✓ Branch 132 → 133 taken 10 times.
✗ Branch 132 → 301 not taken.
✓ Branch 133 → 134 taken 10 times.
✗ Branch 133 → 300 not taken.
✓ Branch 134 → 135 taken 10 times.
✗ Branch 134 → 300 not taken.
✓ Branch 137 → 138 taken 10 times.
✗ Branch 137 → 298 not taken.
✓ Branch 140 → 141 taken 10 times.
✗ Branch 140 → 296 not taken.
40 plots_vs_Q2.push_back({new TH2D(name + "_vs_Q2", depol_titles.at(name) + " vs. Q^{2}", n_bins, kin_range.at("Q2").first, kin_range.at("Q2").second, n_bins, depol_range.first, depol_range.second),
77 10 accessors.at(name)});
78
9/18
✓ Branch 150 → 151 taken 10 times.
✗ Branch 150 → 338 not taken.
✓ Branch 151 → 152 taken 10 times.
✗ Branch 151 → 320 not taken.
✓ Branch 152 → 153 taken 10 times.
✗ Branch 152 → 318 not taken.
✓ Branch 153 → 154 taken 10 times.
✗ Branch 153 → 318 not taken.
✓ Branch 154 → 155 taken 10 times.
✗ Branch 154 → 316 not taken.
✓ Branch 155 → 156 taken 10 times.
✗ Branch 155 → 315 not taken.
✓ Branch 156 → 157 taken 10 times.
✗ Branch 156 → 315 not taken.
✓ Branch 159 → 160 taken 10 times.
✗ Branch 159 → 313 not taken.
✓ Branch 162 → 163 taken 10 times.
✗ Branch 162 → 311 not taken.
40 plots_vs_x.push_back({new TH2D(name + "_vs_x", depol_titles.at(name) + " vs. x", n_bins, kin_range.at("x").first, kin_range.at("x").second, n_bins, depol_range.first, depol_range.second),
79 10 accessors.at(name)});
80
9/18
✓ Branch 172 → 173 taken 10 times.
✗ Branch 172 → 338 not taken.
✓ Branch 173 → 174 taken 10 times.
✗ Branch 173 → 335 not taken.
✓ Branch 174 → 175 taken 10 times.
✗ Branch 174 → 333 not taken.
✓ Branch 175 → 176 taken 10 times.
✗ Branch 175 → 333 not taken.
✓ Branch 176 → 177 taken 10 times.
✗ Branch 176 → 331 not taken.
✓ Branch 177 → 178 taken 10 times.
✗ Branch 177 → 330 not taken.
✓ Branch 178 → 179 taken 10 times.
✗ Branch 178 → 330 not taken.
✓ Branch 181 → 182 taken 10 times.
✗ Branch 181 → 328 not taken.
✓ Branch 184 → 185 taken 10 times.
✗ Branch 184 → 326 not taken.
40 plots_vs_y.push_back({new TH2D(name + "_vs_y", depol_titles.at(name) + " vs. y", n_bins, kin_range.at("y").first, kin_range.at("y").second, n_bins, depol_range.first, depol_range.second),
81 10 accessors.at(name)});
82 }
83
16/44
✓ Branch 95 → 96 taken 1 time.
✗ Branch 95 → 280 not taken.
✓ Branch 96 → 97 taken 1 time.
✗ Branch 96 → 280 not taken.
✓ Branch 97 → 98 taken 1 time.
✗ Branch 97 → 280 not taken.
✓ Branch 98 → 99 taken 1 time.
✗ Branch 98 → 280 not taken.
✓ Branch 99 → 100 taken 1 time.
✗ Branch 99 → 280 not taken.
✓ Branch 100 → 101 taken 1 time.
✗ Branch 100 → 280 not taken.
✓ Branch 101 → 102 taken 1 time.
✗ Branch 101 → 280 not taken.
✓ Branch 102 → 103 taken 1 time.
✗ Branch 102 → 280 not taken.
✓ Branch 103 → 104 taken 1 time.
✗ Branch 103 → 280 not taken.
✓ Branch 104 → 105 taken 1 time.
✗ Branch 104 → 280 not taken.
✓ Branch 141 → 142 taken 10 times.
✗ Branch 141 → 296 not taken.
✓ Branch 142 → 143 taken 10 times.
✗ Branch 142 → 296 not taken.
✓ Branch 163 → 164 taken 10 times.
✗ Branch 163 → 311 not taken.
✓ Branch 164 → 165 taken 10 times.
✗ Branch 164 → 311 not taken.
✓ Branch 185 → 186 taken 10 times.
✗ Branch 185 → 326 not taken.
✓ Branch 186 → 187 taken 10 times.
✗ Branch 186 → 326 not taken.
✗ Branch 271 → 272 not taken.
✗ Branch 271 → 274 not taken.
✗ Branch 281 → 282 not taken.
✗ Branch 281 → 285 not taken.
✗ Branch 290 → 291 not taken.
✗ Branch 290 → 292 not taken.
✗ Branch 305 → 306 not taken.
✗ Branch 305 → 307 not taken.
✗ Branch 320 → 321 not taken.
✗ Branch 320 → 322 not taken.
✗ Branch 335 → 336 not taken.
✗ Branch 335 → 337 not taken.
33 }
84
85
86 1000 bool DepolarizationValidator::Run(hipo::banklist& banks) const
87 {
88 // calculate kinematics
89 1000 m_algo_seq->Run(banks);
90
2/4
✓ Branch 3 → 4 taken 1000 times.
✗ Branch 3 → 65 not taken.
✓ Branch 4 → 5 taken 1000 times.
✗ Branch 4 → 59 not taken.
1000 auto& inc_kin_bank = GetBank(banks, b_inc_kin, "physics::InclusiveKinematics");
91
2/4
✓ Branch 10 → 11 taken 1000 times.
✗ Branch 10 → 72 not taken.
✓ Branch 11 → 12 taken 1000 times.
✗ Branch 11 → 66 not taken.
1000 auto& depol_bank = GetBank(banks, b_depol, "physics::Depolarization");
92
93 // skip events with empty bank(s)
94
3/4
✓ Branch 20 → 21 taken 143 times.
✓ Branch 20 → 25 taken 857 times.
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 27 taken 143 times.
2143 if(inc_kin_bank.getRowList().size() == 0 || depol_bank.getRowList().size() == 0) {
95 857 m_log->Debug("skip this event, since it has no kinematics results");
96 857 return false;
97 }
98
99 // lock mutex and fill the plots
100 143 std::scoped_lock<std::mutex> lock(m_mutex);
101
3/4
✓ Branch 28 → 29 taken 143 times.
✗ Branch 28 → 73 not taken.
✓ Branch 55 → 30 taken 143 times.
✓ Branch 55 → 56 taken 143 times.
286 for(auto const& row : inc_kin_bank.getRowList()) {
102
2/2
✓ Branch 37 → 31 taken 1430 times.
✓ Branch 37 → 38 taken 143 times.
1573 for(auto& plot : plots_vs_Q2)
103
2/4
✗ Branch 31 → 32 not taken.
✓ Branch 31 → 33 taken 1430 times.
✓ Branch 35 → 36 taken 1430 times.
✗ Branch 35 → 73 not taken.
2860 plot.hist->Fill(inc_kin_bank.getDouble("Q2", row), plot.get_val(depol_bank, row));
104
2/2
✓ Branch 45 → 39 taken 1430 times.
✓ Branch 45 → 46 taken 143 times.
1573 for(auto& plot : plots_vs_x)
105
2/4
✗ Branch 39 → 40 not taken.
✓ Branch 39 → 41 taken 1430 times.
✓ Branch 43 → 44 taken 1430 times.
✗ Branch 43 → 73 not taken.
2860 plot.hist->Fill(inc_kin_bank.getDouble("x", row), plot.get_val(depol_bank, row));
106
2/2
✓ Branch 53 → 47 taken 1430 times.
✓ Branch 53 → 54 taken 143 times.
1573 for(auto& plot : plots_vs_y)
107
2/4
✗ Branch 47 → 48 not taken.
✓ Branch 47 → 49 taken 1430 times.
✓ Branch 51 → 52 taken 1430 times.
✗ Branch 51 → 73 not taken.
2860 plot.hist->Fill(inc_kin_bank.getDouble("y", row), plot.get_val(depol_bank, row));
108 }
109 return true;
110 }
111
112
113 1 void DepolarizationValidator::Stop()
114 {
115
1/2
✓ Branch 4 → 5 taken 1 time.
✗ Branch 4 → 19 not taken.
2 if(GetOutputDirectory()) {
116
117
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 3 times.
3 auto make_plots = [this](TString const& name, std::vector<Plot2D> const& plot_list) {
118 int const n_cols = 5;
119 3 int const n_rows = (plot_list.size() - 1) / n_cols + 1;
120
3/6
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 3 times.
✓ Branch 8 → 9 taken 3 times.
✗ Branch 8 → 37 not taken.
✓ Branch 11 → 12 taken 3 times.
✗ Branch 11 → 35 not taken.
9 auto canv = new TCanvas("canv_" + name, name, n_cols * 800, n_rows * 1000);
121 3 canv->Divide(n_cols, n_rows);
122 int pad_num = 0;
123
2/2
✓ Branch 23 → 15 taken 30 times.
✓ Branch 23 → 24 taken 3 times.
33 for(auto& plot : plot_list) {
124 30 auto pad = canv->GetPad(++pad_num);
125 30 pad->cd();
126 30 pad->SetGrid(1, 1);
127 30 pad->SetLeftMargin(0.12);
128 30 pad->SetRightMargin(0.15);
129 30 pad->SetBottomMargin(0.12);
130 30 plot.hist->Draw("colz");
131 }
132
3/6
✓ Branch 26 → 27 taken 3 times.
✗ Branch 26 → 43 not taken.
✓ Branch 27 → 28 taken 3 times.
✗ Branch 27 → 41 not taken.
✓ Branch 30 → 31 taken 3 times.
✗ Branch 30 → 39 not taken.
6 canv->SaveAs(m_output_file_basename + "_" + canv->GetTitle() + ".png");
133 3 };
134
135
1/2
✓ Branch 6 → 7 taken 1 time.
✗ Branch 6 → 20 not taken.
1 make_plots("Q2", plots_vs_Q2);
136
1/2
✓ Branch 9 → 10 taken 1 time.
✗ Branch 9 → 22 not taken.
1 make_plots("x", plots_vs_x);
137
1/2
✓ Branch 12 → 13 taken 1 time.
✗ Branch 12 → 24 not taken.
1 make_plots("y", plots_vs_y);
138
139 1 m_output_file->Write();
140 1 m_log->Info("Wrote output file {}", m_output_file->GetName());
141 1 m_output_file->Close();
142 }
143 1 }
144
145 }
146