GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/physics/Depolarization/Validator.cc
Date: 2025-05-30 18:32:38
Exec Total Coverage
Lines: 77 77 100.0%
Functions: 8 8 100.0%
Branches: 112 228 49.1%

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