GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/physics/SingleHadronKinematics/Validator.cc
Date: 2025-05-30 18:32:38
Exec Total Coverage
Lines: 61 61 100.0%
Functions: 4 4 100.0%
Branches: 66 138 47.8%

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