GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/physics/DihadronKinematics/Validator.cc
Date: 2025-05-30 18:32:38
Exec Total Coverage
Lines: 67 67 100.0%
Functions: 4 4 100.0%
Branches: 78 166 47.0%

Line Branch Exec Source
1 #include "Validator.h"
2 #include "TypeDefs.h"
3
4 #include <Math/Vector3D.h>
5
6 namespace iguana::physics {
7
8 REGISTER_IGUANA_VALIDATOR(DihadronKinematicsValidator);
9
10 1 void DihadronKinematicsValidator::Start(hipo::banklist& banks)
11 {
12 // define the algorithm sequence
13 2 m_algo_seq = std::make_unique<AlgorithmSequence>();
14
3/8
✓ Branch 0 (7→8) taken 1 times.
✗ Branch 1 (7→159) not taken.
✓ Branch 2 (8→9) taken 1 times.
✗ Branch 3 (8→153) not taken.
✓ Branch 4 (14→15) taken 1 times.
✗ Branch 5 (14→17) not taken.
✗ Branch 6 (159→160) not taken.
✗ Branch 7 (159→162) not taken.
2 m_algo_seq->Add("physics::InclusiveKinematics");
15
3/8
✓ Branch 0 (20→21) taken 1 times.
✗ Branch 1 (20→171) not taken.
✓ Branch 2 (21→22) taken 1 times.
✗ Branch 3 (21→165) not taken.
✓ Branch 4 (27→28) taken 1 times.
✗ Branch 5 (27→30) not taken.
✗ Branch 6 (171→172) not taken.
✗ Branch 7 (171→174) not taken.
2 m_algo_seq->Add("physics::DihadronKinematics");
16
2/6
✓ Branch 0 (34→35) taken 1 times.
✗ Branch 1 (34→183) not taken.
✓ Branch 2 (43→44) taken 1 times.
✗ Branch 3 (43→46) not taken.
✗ Branch 4 (183→184) not taken.
✗ Branch 5 (183→186) not taken.
3 m_algo_seq->SetOption("physics::DihadronKinematics", "log", m_log->GetLevel());
17
5/14
✓ Branch 0 (49→50) taken 1 times.
✗ Branch 1 (49→201) not taken.
✓ Branch 2 (50→51) taken 1 times.
✗ Branch 3 (50→195) not taken.
✓ Branch 4 (51→52) taken 1 times.
✗ Branch 5 (51→189) 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 (195→196) not taken.
✗ Branch 11 (195→198) not taken.
✗ Branch 12 (201→202) not taken.
✗ Branch 13 (201→204) not taken.
4 m_algo_seq->SetOption<std::vector<int>>("physics::DihadronKinematics", "hadron_a_list", {particle::pi_plus});
18
5/14
✓ Branch 0 (66→67) taken 1 times.
✗ Branch 1 (66→217) not taken.
✓ Branch 2 (67→68) taken 1 times.
✗ Branch 3 (67→211) not taken.
✓ Branch 4 (68→69) taken 1 times.
✗ Branch 5 (68→205) not taken.
✓ Branch 6 (74→75) taken 1 times.
✗ Branch 7 (74→77) not taken.
✓ Branch 8 (79→80) taken 1 times.
✗ Branch 9 (79→82) not taken.
✗ Branch 10 (211→212) not taken.
✗ Branch 11 (211→214) not taken.
✗ Branch 12 (217→218) not taken.
✗ Branch 13 (217→220) not taken.
4 m_algo_seq->SetOption<std::vector<int>>("physics::DihadronKinematics", "hadron_b_list", {particle::pi_minus});
19 1 m_algo_seq->Start(banks);
20
21 // get bank indices
22
2/4
✓ Branch 0 (84→85) taken 1 times.
✗ Branch 1 (84→221) not taken.
✗ Branch 2 (85→86) not taken.
✓ Branch 3 (85→88) taken 1 times.
1 b_result = GetBankIndex(banks, "physics::DihadronKinematics");
23
24 // set an output file
25 1 auto output_dir = GetOutputDirectory();
26
1/2
✓ Branch 0 (91→92) taken 1 times.
✗ Branch 1 (91→106) not taken.
1 if(output_dir) {
27
3/6
✓ Branch 0 (92→93) taken 1 times.
✗ Branch 1 (92→277) not taken.
✓ Branch 2 (93→94) taken 1 times.
✗ Branch 3 (93→227) not taken.
✓ Branch 4 (99→100) taken 1 times.
✗ Branch 5 (99→277) not taken.
2 m_output_file_basename = output_dir.value() + "/dihadron_kinematics";
28
2/4
✓ Branch 0 (100→101) taken 1 times.
✗ Branch 1 (100→235) not taken.
✓ Branch 2 (103→104) taken 1 times.
✗ Branch 3 (103→233) 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 (107→108) taken 1 times.
✗ Branch 1 (107→259) not taken.
1 new TH1D("Mh_dist", "invariant mass M_{h} [GeV]", n_bins, 0, 4),
36 11 [](auto const& b, auto const r) { return b.getDouble("Mh", r); }
37 },
38 {
39
1/2
✓ Branch 0 (109→110) taken 1 times.
✗ Branch 1 (109→257) not taken.
1 new TH1D("z_dist", "z", n_bins, 0, 1),
40 11 [](auto const& b, auto const r) { return b.getDouble("z", r); }
41 },
42 {
43
1/2
✓ Branch 0 (111→112) taken 1 times.
✗ Branch 1 (111→255) not taken.
1 new TH1D("PhPerp_dist", "P_{h}^{{}^{#perp}}", n_bins, 0, 2),
44 11 [](auto const& b, auto const r) { return b.getDouble("PhPerp", r); }
45 },
46 {
47
1/2
✓ Branch 0 (113→114) taken 1 times.
✗ Branch 1 (113→253) not taken.
1 new TH1D("MX_dist", "Missing mass: M_{X} [GeV];", n_bins, 0, 4),
48
1/2
✓ Branch 0 (3→4) taken 11 times.
✗ Branch 1 (3→5) not taken.
11 [](auto const& b, auto const r) { auto MX2 = b.getDouble("MX2", r); return MX2 >= 0 ? std::sqrt(MX2) : -100; } // FIXME: handle space-like case better
49 },
50 {
51
1/2
✓ Branch 0 (115→116) taken 1 times.
✗ Branch 1 (115→251) not taken.
1 new TH1D("xF_dist", "Feynman-x: x_{F};", n_bins, -1, 1),
52 11 [](auto const& b, auto const r) { return b.getDouble("xF", r); }
53 },
54 {
55
1/2
✓ Branch 0 (117→118) taken 1 times.
✗ Branch 1 (117→249) not taken.
1 new TH1D("yB_dist", "Breit frame rapidity: y_{B};", n_bins, -4, 4),
56 11 [](auto const& b, auto const r) { return b.getDouble("yB", r); }
57 },
58 {
59
1/2
✓ Branch 0 (119→120) taken 1 times.
✗ Branch 1 (119→247) not taken.
1 new TH1D("phiH_dist", "#phi_{h};", n_bins, -M_PI, M_PI),
60 11 [](auto const& b, auto const r) { return b.getDouble("phiH", r); }
61 },
62 {
63
1/2
✓ Branch 0 (121→122) taken 1 times.
✗ Branch 1 (121→245) not taken.
1 new TH1D("phiR_dist", "#phi_{R}", n_bins, -M_PI, M_PI),
64 11 [](auto const& b, auto const r) { return b.getDouble("phiR", r); }
65 },
66 {
67
1/2
✓ Branch 0 (123→124) taken 1 times.
✗ Branch 1 (123→243) not taken.
1 new TH1D("theta_dist", "#theta;", n_bins, 0, M_PI),
68 11 [](auto const& b, auto const r) { return b.getDouble("theta", r); }
69 }
70
4/10
✓ Branch 0 (124→125) taken 1 times.
✗ Branch 1 (124→237) not taken.
✓ Branch 2 (126→127) taken 9 times.
✓ Branch 3 (126→130) taken 1 times.
✓ Branch 4 (127→128) taken 9 times.
✗ Branch 5 (127→129) not taken.
✗ Branch 6 (238→239) not taken.
✗ Branch 7 (238→242) not taken.
✗ Branch 8 (239→240) not taken.
✗ Branch 9 (239→241) not taken.
11 };
71
72 // format plots
73
2/2
✓ Branch 0 (150→131) taken 9 times.
✓ Branch 1 (150→151) taken 1 times.
10 for(auto& plot : plot_list) {
74
1/2
✓ Branch 0 (131→132) taken 9 times.
✗ Branch 1 (131→277) not taken.
9 plot.hist->SetLineColor(kRed);
75
1/2
✓ Branch 0 (132→133) taken 9 times.
✗ Branch 1 (132→277) not taken.
9 plot.hist->SetFillColor(kRed);
76
1/2
✓ Branch 0 (143→144) taken 9 times.
✗ Branch 1 (143→267) not taken.
9 plot.hist->SetTitle(
77
2/4
✓ Branch 0 (136→137) taken 9 times.
✗ Branch 1 (136→275) not taken.
✓ Branch 2 (137→138) taken 9 times.
✗ Branch 3 (137→275) not taken.
18 TString(particle::title.at(particle::pi_plus)) +
78
3/6
✓ Branch 0 (134→135) taken 9 times.
✗ Branch 1 (134→277) not taken.
✓ Branch 2 (135→136) taken 9 times.
✗ Branch 3 (135→277) not taken.
✓ Branch 4 (138→139) taken 9 times.
✗ Branch 5 (138→273) not taken.
36 TString(particle::title.at(particle::pi_minus)) +
79
3/6
✓ Branch 0 (133→134) taken 9 times.
✗ Branch 1 (133→277) not taken.
✓ Branch 2 (139→140) taken 9 times.
✗ Branch 3 (139→271) not taken.
✓ Branch 4 (140→141) taken 9 times.
✗ Branch 5 (140→269) not taken.
36 " " + plot.hist->GetTitle());
80 }
81
9/22
✓ Branch 0 (108→109) taken 1 times.
✗ Branch 1 (108→261) not taken.
✓ Branch 2 (110→111) taken 1 times.
✗ Branch 3 (110→261) not taken.
✓ Branch 4 (112→113) taken 1 times.
✗ Branch 5 (112→261) not taken.
✓ Branch 6 (114→115) taken 1 times.
✗ Branch 7 (114→261) not taken.
✓ Branch 8 (116→117) taken 1 times.
✗ Branch 9 (116→261) not taken.
✓ Branch 10 (118→119) taken 1 times.
✗ Branch 11 (118→261) not taken.
✓ Branch 12 (120→121) taken 1 times.
✗ Branch 13 (120→261) not taken.
✓ Branch 14 (122→123) taken 1 times.
✗ Branch 15 (122→261) not taken.
✓ Branch 16 (124→125) taken 1 times.
✗ Branch 17 (124→237) not taken.
✗ Branch 18 (262→263) not taken.
✗ Branch 19 (262→266) not taken.
✗ Branch 20 (263→264) not taken.
✗ Branch 21 (263→265) not taken.
10 }
82
83
84 1000 void DihadronKinematicsValidator::Run(hipo::banklist& banks) const
85 {
86 // calculate kinematics
87 1000 m_algo_seq->Run(banks);
88
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::DihadronKinematics");
89
90 // skip events with no dihadrons
91
2/2
✓ Branch 0 (13→14) taken 992 times.
✓ Branch 1 (13→16) taken 8 times.
2000 if(result_bank.getRowList().size() == 0) {
92 992 m_log->Debug("skip this event, since it has no kinematics results");
93 return;
94 }
95
96 // lock mutex and fill the plots
97 8 std::scoped_lock<std::mutex> lock(m_mutex);
98
3/4
✓ Branch 0 (17→18) taken 8 times.
✗ Branch 1 (17→37) not taken.
✓ Branch 2 (27→19) taken 11 times.
✓ Branch 3 (27→28) taken 8 times.
19 for(auto const& row : result_bank.getRowList()) {
99
2/2
✓ Branch 0 (25→20) taken 99 times.
✓ Branch 1 (25→26) taken 11 times.
110 for(auto& plot : plot_list)
100
2/4
✗ Branch 0 (20→21) not taken.
✓ Branch 1 (20→22) taken 99 times.
✓ Branch 2 (23→24) taken 99 times.
✗ Branch 3 (23→37) not taken.
198 plot.hist->Fill(plot.get_val(result_bank, row));
101 }
102 }
103
104
105 1 void DihadronKinematicsValidator::Stop()
106 {
107
1/2
✓ Branch 0 (4→5) taken 1 times.
✗ Branch 1 (4→29) not taken.
2 if(GetOutputDirectory()) {
108 int const n_cols = 4;
109 1 int const n_rows = (plot_list.size() - 1) / n_cols + 1;
110
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);
111 1 canv->Divide(n_cols, n_rows);
112 int pad_num = 0;
113
2/2
✓ Branch 0 (19→11) taken 9 times.
✓ Branch 1 (19→20) taken 1 times.
10 for(auto& plot : plot_list) {
114 9 auto pad = canv->GetPad(++pad_num);
115 9 pad->cd();
116 9 pad->SetGrid(1, 1);
117 9 pad->SetLeftMargin(0.12);
118 9 pad->SetRightMargin(0.12);
119 9 pad->SetBottomMargin(0.12);
120 9 plot.hist->Draw();
121 }
122
1/2
✓ Branch 0 (23→24) taken 1 times.
✗ Branch 1 (23→32) not taken.
2 canv->SaveAs(m_output_file_basename + ".png");
123 1 m_output_file->Write();
124 1 m_log->Info("Wrote output file {}", m_output_file->GetName());
125 1 m_output_file->Close();
126 }
127 1 }
128
129 }
130