GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/clas12/rga/FiducialFilterPass1/Validator.cc
Date: 2025-11-25 17:57:04
Coverage Exec Excl Total
Lines: 98.4% 122 0 124
Functions: 100.0% 3 0 3
Branches: 57.3% 133 0 232

Line Branch Exec Source
1 #include "Validator.h"
2
3 #include <TProfile.h>
4
5 namespace iguana::clas12::rga {
6
7 REGISTER_IGUANA_VALIDATOR(FiducialFilterPass1Validator);
8
9 1 void FiducialFilterPass1Validator::Start(hipo::banklist& banks)
10 {
11 // set algorithm options
12
3/8
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 140 not taken.
✓ Branch 4 → 5 taken 1 time.
✗ Branch 4 → 134 not taken.
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 16 not taken.
✗ Branch 140 → 141 not taken.
✗ Branch 140 → 143 not taken.
2 m_algo_eb.SetOption<std::vector<int>>("pids", u_pdg_list);
13
14 // start algorithms
15 1 m_algo_eb.Start(banks);
16 1 m_algo_traj.Start(banks);
17 1 m_algo_cal.Start(banks);
18 1 m_algo_fidu.Start(banks);
19
20 // get bank indices
21
2/4
✓ Branch 21 → 22 taken 1 time.
✗ Branch 21 → 144 not taken.
✓ Branch 22 → 23 taken 1 time.
✗ Branch 22 → 25 not taken.
1 b_particle = GetBankIndex(banks, "REC::Particle");
22
2/4
✓ Branch 28 → 29 taken 1 time.
✗ Branch 28 → 150 not taken.
✗ Branch 29 → 30 not taken.
✓ Branch 29 → 32 taken 1 time.
1 b_traj = GetBankIndex(banks, "REC::Particle::Traj");
23
2/4
✓ Branch 35 → 36 taken 1 time.
✗ Branch 35 → 156 not taken.
✗ Branch 36 → 37 not taken.
✓ Branch 36 → 39 taken 1 time.
1 b_cal = GetBankIndex(banks, "REC::Particle::Calorimeter");
24
25 // set an output file
26 1 auto output_dir = GetOutputDirectory();
27
1/2
✓ Branch 42 → 43 taken 1 time.
✗ Branch 42 → 57 not taken.
1 if(output_dir) {
28
3/6
✓ Branch 43 → 44 taken 1 time.
✗ Branch 43 → 212 not taken.
✓ Branch 44 → 45 taken 1 time.
✗ Branch 44 → 162 not taken.
✓ Branch 50 → 51 taken 1 time.
✗ Branch 50 → 212 not taken.
2 m_output_file_basename = output_dir.value() + "/fiducial";
29
2/4
✓ Branch 51 → 52 taken 1 time.
✗ Branch 51 → 170 not taken.
✓ Branch 54 → 55 taken 1 time.
✗ Branch 54 → 168 not taken.
2 m_output_file = new TFile(m_output_file_basename + ".root", "RECREATE");
30 }
31
32 // define plots
33
2/2
✓ Branch 131 → 58 taken 4 times.
✓ Branch 131 → 132 taken 1 time.
5 for(auto const& pdg : u_pdg_list) {
34
2/4
✓ Branch 58 → 59 taken 4 times.
✗ Branch 58 → 212 not taken.
✓ Branch 59 → 60 taken 4 times.
✗ Branch 59 → 212 not taken.
4 TString particle_name = particle::name.at(particle::PDG(pdg));
35
3/6
✓ Branch 60 → 61 taken 4 times.
✗ Branch 60 → 210 not taken.
✓ Branch 61 → 62 taken 4 times.
✗ Branch 61 → 210 not taken.
✓ Branch 62 → 63 taken 4 times.
✗ Branch 62 → 208 not taken.
4 TString particle_title = particle::title.at(particle::PDG(pdg));
36
37 TH2D* DC1_before = new TH2D(
38
1/2
✓ Branch 66 → 67 taken 4 times.
✗ Branch 66 → 174 not taken.
8 "DC1_before_" + particle_name,
39
1/2
✓ Branch 72 → 73 taken 4 times.
✗ Branch 72 → 208 not taken.
4 particle_title + " DC1 w/o fiducial cuts; x [cm]; y [cm]",
40 4 100, DC1xleft, DC1xright,
41
2/4
✓ Branch 63 → 64 taken 4 times.
✗ Branch 63 → 176 not taken.
✓ Branch 69 → 70 taken 4 times.
✗ Branch 69 → 172 not taken.
8 100, DC1ybottom, DC1ytop);
42 TH2D* DC1_after = new TH2D(
43
1/2
✓ Branch 76 → 77 taken 4 times.
✗ Branch 76 → 180 not taken.
8 "DC1_after_" + particle_name,
44
1/2
✓ Branch 82 → 83 taken 4 times.
✗ Branch 82 → 208 not taken.
4 particle_title + " DC1 w fiducial cuts; x [cm]; y [cm]",
45 4 100, DC1xleft, DC1xright,
46
2/4
✓ Branch 73 → 74 taken 4 times.
✗ Branch 73 → 182 not taken.
✓ Branch 79 → 80 taken 4 times.
✗ Branch 79 → 178 not taken.
8 100, DC1ybottom, DC1ytop);
47
48 TH2D* DC2_before = new TH2D(
49
1/2
✓ Branch 86 → 87 taken 4 times.
✗ Branch 86 → 186 not taken.
8 "DC2_before_" + particle_name,
50
1/2
✓ Branch 92 → 93 taken 4 times.
✗ Branch 92 → 208 not taken.
4 particle_title + " DC2 w/o fiducial cuts; x [cm]; y [cm]",
51 4 100, DC2xleft, DC2xright,
52
2/4
✓ Branch 83 → 84 taken 4 times.
✗ Branch 83 → 188 not taken.
✓ Branch 89 → 90 taken 4 times.
✗ Branch 89 → 184 not taken.
8 100, DC2ybottom, DC2ytop);
53 TH2D* DC2_after = new TH2D(
54
1/2
✓ Branch 96 → 97 taken 4 times.
✗ Branch 96 → 192 not taken.
8 "DC2_after_" + particle_name,
55
1/2
✓ Branch 102 → 103 taken 4 times.
✗ Branch 102 → 208 not taken.
4 particle_title + " DC2 w fiducial cuts; x [cm]; y [cm]",
56 4 100, DC2xleft, DC2xright,
57
2/4
✓ Branch 93 → 94 taken 4 times.
✗ Branch 93 → 194 not taken.
✓ Branch 99 → 100 taken 4 times.
✗ Branch 99 → 190 not taken.
8 100, DC2ybottom, DC2ytop);
58
59 TH2D* DC3_before = new TH2D(
60
1/2
✓ Branch 106 → 107 taken 4 times.
✗ Branch 106 → 198 not taken.
8 "DC3_before_" + particle_name,
61
1/2
✓ Branch 112 → 113 taken 4 times.
✗ Branch 112 → 208 not taken.
4 particle_title + " DC3 w/o fiducial cuts; x [cm]; y [cm]",
62 4 100, DC3xleft, DC3xright,
63
2/4
✓ Branch 103 → 104 taken 4 times.
✗ Branch 103 → 200 not taken.
✓ Branch 109 → 110 taken 4 times.
✗ Branch 109 → 196 not taken.
8 100, DC3ybottom, DC3ytop);
64 TH2D* DC3_after = new TH2D(
65
1/2
✓ Branch 116 → 117 taken 4 times.
✗ Branch 116 → 204 not taken.
8 "DC3_after_" + particle_name,
66
1/2
✓ Branch 122 → 123 taken 4 times.
✗ Branch 122 → 208 not taken.
4 particle_title + " DC3 w fiducial cuts; x [cm]; y [cm]",
67 4 100, DC3xleft, DC3xright,
68
2/4
✓ Branch 113 → 114 taken 4 times.
✗ Branch 113 → 206 not taken.
✓ Branch 119 → 120 taken 4 times.
✗ Branch 119 → 202 not taken.
8 100, DC3ybottom, DC3ytop);
69
70
1/2
✓ Branch 123 → 124 taken 4 times.
✗ Branch 123 → 208 not taken.
4 u_DC1_before.insert({pdg, DC1_before});
71
1/2
✓ Branch 124 → 125 taken 4 times.
✗ Branch 124 → 208 not taken.
4 u_DC1_after.insert({pdg, DC1_after});
72
1/2
✓ Branch 125 → 126 taken 4 times.
✗ Branch 125 → 208 not taken.
4 u_DC2_before.insert({pdg, DC2_before});
73
1/2
✓ Branch 126 → 127 taken 4 times.
✗ Branch 126 → 208 not taken.
4 u_DC2_after.insert({pdg, DC2_after});
74
1/2
✓ Branch 127 → 128 taken 4 times.
✗ Branch 127 → 208 not taken.
4 u_DC3_before.insert({pdg, DC3_before});
75 4 u_DC3_after.insert({pdg, DC3_after});
76 4 }
77 1 }
78
79
80 1000 bool FiducialFilterPass1Validator::Run(hipo::banklist& banks) const
81 {
82
1/2
✓ Branch 3 → 4 taken 1000 times.
✗ Branch 3 → 77 not taken.
1000 auto& particle_bank = GetBank(banks, b_particle, "REC::Particle");
83
1/2
✓ Branch 10 → 11 taken 1000 times.
✗ Branch 10 → 83 not taken.
1000 auto& traj_bank = GetBank(banks, b_traj, "REC::Particle::Traj");
84
85 // run the EB filter and TrajLinker
86 1000 m_algo_eb.Run(banks);
87 1000 m_algo_traj.Run(banks);
88 1000 m_algo_cal.Run(banks);
89
90 // fill "before" histograms
91
2/2
✓ Branch 46 → 21 taken 2326 times.
✓ Branch 46 → 47 taken 1000 times.
3326 for(auto const& row : particle_bank.getRowList()) {
92 2326 auto pid = particle_bank.getInt("pid", row);
93
5/6
✓ Branch 22 → 23 taken 682 times.
✓ Branch 22 → 26 taken 1644 times.
✓ Branch 23 → 24 taken 236 times.
✓ Branch 23 → 26 taken 446 times.
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 26 taken 236 times.
2326 if(pid != 11 && pid != 211 && pid != -211 && pid != 2212)
94 continue;
95
2/2
✓ Branch 27 → 28 taken 1511 times.
✓ Branch 27 → 32 taken 815 times.
2326 if(traj_bank.getByte("r1_found", row) == 1)
96
1/2
✓ Branch 31 → 32 taken 1511 times.
✗ Branch 31 → 89 not taken.
1511 u_DC1_before.at(pid)->Fill(traj_bank.getFloat("r1_x", row), traj_bank.getFloat("r1_y", row));
97
2/2
✓ Branch 33 → 34 taken 1511 times.
✓ Branch 33 → 38 taken 815 times.
2326 if(traj_bank.getByte("r2_found", row) == 1)
98
1/2
✓ Branch 37 → 38 taken 1511 times.
✗ Branch 37 → 89 not taken.
1511 u_DC2_before.at(pid)->Fill(traj_bank.getFloat("r2_x", row), traj_bank.getFloat("r2_y", row));
99
2/2
✓ Branch 39 → 40 taken 1511 times.
✓ Branch 39 → 44 taken 815 times.
2326 if(traj_bank.getByte("r3_found", row) == 1)
100
1/2
✓ Branch 43 → 44 taken 1511 times.
✗ Branch 43 → 89 not taken.
1511 u_DC3_before.at(pid)->Fill(traj_bank.getFloat("r3_x", row), traj_bank.getFloat("r3_y", row));
101 }
102
103 // apply the fiducial cuts
104 1000 m_algo_fidu.Run(banks);
105
106 // fill "after" histograms (`particle_bank` is now filtered)
107
2/2
✓ Branch 75 → 50 taken 1463 times.
✓ Branch 75 → 76 taken 1000 times.
2463 for(auto const& row : particle_bank.getRowList()) {
108 1463 auto pid = particle_bank.getInt("pid", row);
109
5/6
✓ Branch 51 → 52 taken 488 times.
✓ Branch 51 → 55 taken 975 times.
✓ Branch 52 → 53 taken 137 times.
✓ Branch 52 → 55 taken 351 times.
✗ Branch 53 → 54 not taken.
✓ Branch 53 → 55 taken 137 times.
1463 if(pid != 11 && pid != 211 && pid != -211 && pid != 2212)
110 continue;
111
1/2
✓ Branch 56 → 57 taken 1463 times.
✗ Branch 56 → 61 not taken.
1463 if(traj_bank.getByte("r1_found", row) == 1)
112
1/2
✓ Branch 60 → 61 taken 1463 times.
✗ Branch 60 → 90 not taken.
1463 u_DC1_after.at(pid)->Fill(traj_bank.getFloat("r1_x", row), traj_bank.getFloat("r1_y", row));
113
1/2
✓ Branch 62 → 63 taken 1463 times.
✗ Branch 62 → 67 not taken.
1463 if(traj_bank.getByte("r2_found", row) == 1)
114
1/2
✓ Branch 66 → 67 taken 1463 times.
✗ Branch 66 → 90 not taken.
1463 u_DC2_after.at(pid)->Fill(traj_bank.getFloat("r2_x", row), traj_bank.getFloat("r2_y", row));
115
1/2
✓ Branch 68 → 69 taken 1463 times.
✗ Branch 68 → 73 not taken.
1463 if(traj_bank.getByte("r3_found", row) == 1)
116
1/2
✓ Branch 72 → 73 taken 1463 times.
✗ Branch 72 → 90 not taken.
1463 u_DC3_after.at(pid)->Fill(traj_bank.getFloat("r3_x", row), traj_bank.getFloat("r3_y", row));
117 }
118 1000 return true;
119 }
120
121
122 1 void FiducialFilterPass1Validator::Stop()
123 {
124 1 m_algo_eb.Stop();
125 1 m_algo_traj.Stop();
126 1 m_algo_cal.Stop();
127 1 m_algo_fidu.Stop();
128
1/2
✓ Branch 8 → 53 taken 1 time.
✗ Branch 8 → 103 not taken.
2 if(GetOutputDirectory()) {
129 int n_cols = 2;
130 int n_rows = 2;
131
2/2
✓ Branch 53 → 9 taken 3 times.
✓ Branch 53 → 98 taken 1 time.
4 for(int r = 0; r < 3; r++) {
132 3 TString canv_name = Form("beforecanv%d", r);
133
1/2
✓ Branch 14 → 15 taken 3 times.
✗ Branch 14 → 104 not taken.
3 auto canv = new TCanvas(canv_name, canv_name, n_cols * 800, n_rows * 600);
134
1/2
✓ Branch 15 → 16 taken 3 times.
✗ Branch 15 → 120 not taken.
3 canv->Divide(n_cols, n_rows);
135 int pad_num = 0;
136
2/2
✓ Branch 33 → 17 taken 12 times.
✓ Branch 33 → 34 taken 3 times.
15 for(auto const& pdg : u_pdg_list) {
137
1/2
✓ Branch 17 → 18 taken 12 times.
✗ Branch 17 → 120 not taken.
12 auto pad = canv->GetPad(++pad_num);
138
1/2
✓ Branch 18 → 19 taken 12 times.
✗ Branch 18 → 120 not taken.
12 pad->cd();
139
1/2
✓ Branch 19 → 20 taken 12 times.
✗ Branch 19 → 120 not taken.
12 pad->SetGrid(1, 1);
140
1/2
✓ Branch 20 → 21 taken 12 times.
✗ Branch 20 → 120 not taken.
12 pad->SetLogz();
141
1/2
✓ Branch 21 → 22 taken 12 times.
✗ Branch 21 → 120 not taken.
12 pad->SetLeftMargin(0.12);
142
1/2
✓ Branch 22 → 23 taken 12 times.
✗ Branch 22 → 120 not taken.
12 pad->SetRightMargin(0.12);
143
1/2
✓ Branch 23 → 24 taken 12 times.
✗ Branch 23 → 120 not taken.
12 pad->SetBottomMargin(0.12);
144
2/2
✓ Branch 24 → 25 taken 4 times.
✓ Branch 24 → 27 taken 8 times.
12 if(r == 0) {
145
1/2
✓ Branch 26 → 32 taken 4 times.
✗ Branch 26 → 120 not taken.
4 u_DC1_before.at(pdg)->Draw("colz");
146 }
147
2/2
✓ Branch 27 → 28 taken 4 times.
✓ Branch 27 → 30 taken 4 times.
8 else if(r == 1) {
148
1/2
✓ Branch 29 → 32 taken 4 times.
✗ Branch 29 → 120 not taken.
4 u_DC2_before.at(pdg)->Draw("colz");
149 }
150 else {
151
1/2
✓ Branch 31 → 32 taken 4 times.
✗ Branch 31 → 120 not taken.
4 u_DC3_before.at(pdg)->Draw("colz");
152 }
153 }
154
5/10
✓ Branch 35 → 36 taken 3 times.
✗ Branch 35 → 114 not taken.
✓ Branch 36 → 37 taken 3 times.
✗ Branch 36 → 112 not taken.
✓ Branch 37 → 38 taken 3 times.
✗ Branch 37 → 110 not taken.
✓ Branch 38 → 39 taken 3 times.
✗ Branch 38 → 108 not taken.
✓ Branch 41 → 42 taken 3 times.
✗ Branch 41 → 106 not taken.
6 canv->SaveAs(m_output_file_basename + "_before_DC" + std::to_string(r + 1) + ".png");
155 3 }
156
157
2/2
✓ Branch 98 → 54 taken 3 times.
✓ Branch 98 → 99 taken 1 time.
4 for(int r = 0; r < 3; r++) {
158 3 TString canv_name = Form("aftercanv%d", r);
159
1/2
✓ Branch 59 → 60 taken 3 times.
✗ Branch 59 → 122 not taken.
3 auto canv = new TCanvas(canv_name, canv_name, n_cols * 800, n_rows * 600);
160
1/2
✓ Branch 60 → 61 taken 3 times.
✗ Branch 60 → 138 not taken.
3 canv->Divide(n_cols, n_rows);
161 int pad_num = 0;
162
2/2
✓ Branch 78 → 62 taken 12 times.
✓ Branch 78 → 79 taken 3 times.
15 for(auto const& pdg : u_pdg_list) {
163
1/2
✓ Branch 62 → 63 taken 12 times.
✗ Branch 62 → 138 not taken.
12 auto pad = canv->GetPad(++pad_num);
164
1/2
✓ Branch 63 → 64 taken 12 times.
✗ Branch 63 → 138 not taken.
12 pad->cd();
165
1/2
✓ Branch 64 → 65 taken 12 times.
✗ Branch 64 → 138 not taken.
12 pad->SetGrid(1, 1);
166
1/2
✓ Branch 65 → 66 taken 12 times.
✗ Branch 65 → 138 not taken.
12 pad->SetLogz();
167
1/2
✓ Branch 66 → 67 taken 12 times.
✗ Branch 66 → 138 not taken.
12 pad->SetLeftMargin(0.12);
168
1/2
✓ Branch 67 → 68 taken 12 times.
✗ Branch 67 → 138 not taken.
12 pad->SetRightMargin(0.12);
169
1/2
✓ Branch 68 → 69 taken 12 times.
✗ Branch 68 → 138 not taken.
12 pad->SetBottomMargin(0.12);
170
2/2
✓ Branch 69 → 70 taken 4 times.
✓ Branch 69 → 72 taken 8 times.
12 if(r == 0) {
171
1/2
✓ Branch 71 → 77 taken 4 times.
✗ Branch 71 → 138 not taken.
4 u_DC1_after.at(pdg)->Draw("colz");
172 }
173
2/2
✓ Branch 72 → 73 taken 4 times.
✓ Branch 72 → 75 taken 4 times.
8 else if(r == 1) {
174
1/2
✓ Branch 74 → 77 taken 4 times.
✗ Branch 74 → 138 not taken.
4 u_DC2_after.at(pdg)->Draw("colz");
175 }
176 else {
177
1/2
✓ Branch 76 → 77 taken 4 times.
✗ Branch 76 → 138 not taken.
4 u_DC3_after.at(pdg)->Draw("colz");
178 }
179 }
180
5/10
✓ Branch 80 → 81 taken 3 times.
✗ Branch 80 → 132 not taken.
✓ Branch 81 → 82 taken 3 times.
✗ Branch 81 → 130 not taken.
✓ Branch 82 → 83 taken 3 times.
✗ Branch 82 → 128 not taken.
✓ Branch 83 → 84 taken 3 times.
✗ Branch 83 → 126 not taken.
✓ Branch 86 → 87 taken 3 times.
✗ Branch 86 → 124 not taken.
6 canv->SaveAs(m_output_file_basename + "_after_DC" + std::to_string(r + 1) + ".png");
181 3 }
182 1 m_output_file->Write();
183 1 m_log->Info("Wrote output file {}", m_output_file->GetName());
184 1 m_output_file->Close();
185 }
186 1 }
187 }
188