GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/clas12/PhotonGBTFilter/Validator.cc
Date: 2025-11-25 17:57:04
Coverage Exec Excl Total
Lines: 100.0% 101 0 101
Functions: 100.0% 6 0 6
Branches: 51.7% 91 0 176

Line Branch Exec Source
1 #include "Validator.h"
2 #include "Algorithm.h"
3 namespace iguana::clas12 {
4
5 REGISTER_IGUANA_VALIDATOR(PhotonGBTFilterValidator);
6
7 1 void PhotonGBTFilterValidator::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 → 82 not taken.
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 76 not taken.
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 17 not taken.
✗ Branch 82 → 83 not taken.
✗ Branch 82 → 85 not taken.
2 m_algo_seq->Add("clas12::PhotonGBTFilter");
12
3/8
✓ Branch 20 → 21 taken 1 time.
✗ Branch 20 → 94 not taken.
✓ Branch 21 → 22 taken 1 time.
✗ Branch 21 → 88 not taken.
✓ Branch 27 → 28 taken 1 time.
✗ Branch 27 → 30 not taken.
✗ Branch 94 → 95 not taken.
✗ Branch 94 → 97 not taken.
2 m_algo_seq->Add("clas12::EventBuilderFilter");
13
5/14
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 112 not taken.
✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 106 not taken.
✓ Branch 35 → 36 taken 1 time.
✗ Branch 35 → 100 not taken.
✓ Branch 41 → 42 taken 1 time.
✗ Branch 41 → 44 not taken.
✓ Branch 46 → 47 taken 1 time.
✗ Branch 46 → 49 not taken.
✗ Branch 106 → 107 not taken.
✗ Branch 106 → 109 not taken.
✗ Branch 112 → 113 not taken.
✗ Branch 112 → 115 not taken.
4 m_algo_seq->SetOption<std::vector<int>>("clas12::EventBuilderFilter", "pids", u_pdg_list);
14 1 m_algo_seq->Start(banks);
15
16 // get bank indices
17
2/4
✓ Branch 51 → 52 taken 1 time.
✗ Branch 51 → 116 not taken.
✓ Branch 52 → 53 taken 1 time.
✗ Branch 52 → 55 not taken.
1 b_particle = GetBankIndex(banks, "REC::Particle");
18
19 // set an output file
20 1 auto output_dir = GetOutputDirectory();
21
1/2
✓ Branch 58 → 59 taken 1 time.
✗ Branch 58 → 73 not taken.
1 if(output_dir) {
22
3/6
✓ Branch 59 → 60 taken 1 time.
✗ Branch 59 → 132 not taken.
✓ Branch 60 → 61 taken 1 time.
✗ Branch 60 → 122 not taken.
✓ Branch 66 → 67 taken 1 time.
✗ Branch 66 → 132 not taken.
2 m_output_file_basename = output_dir.value() + "/photon_gbt";
23
2/4
✓ Branch 67 → 68 taken 1 time.
✗ Branch 67 → 130 not taken.
✓ Branch 70 → 71 taken 1 time.
✗ Branch 70 → 128 not taken.
2 m_output_file = new TFile(m_output_file_basename + ".root", "RECREATE");
24 }
25
26
1/2
✓ Branch 73 → 74 taken 1 time.
✗ Branch 73 → 132 not taken.
1 InitializeHistograms();
27 1 }
28
29 1000 bool PhotonGBTFilterValidator::Run(hipo::banklist& banks) const
30 {
31 // get the particle bank
32
2/4
✓ Branch 3 → 4 taken 1000 times.
✗ Branch 3 → 55 not taken.
✓ Branch 9 → 10 taken 1000 times.
✗ Branch 9 → 71 not taken.
2000 auto& particle_bank = GetBank(banks, b_particle, "REC::Particle");
33
34 std::vector<ROOT::Math::PxPyPzEVector> photons;
35
3/4
✓ Branch 9 → 10 taken 1000 times.
✗ Branch 9 → 71 not taken.
✓ Branch 31 → 11 taken 6993 times.
✓ Branch 31 → 32 taken 1000 times.
7993 for(auto const& row : particle_bank.getRowList()) {
36 6993 auto pid = particle_bank.getInt("pid", row);
37
2/2
✓ Branch 12 → 13 taken 5154 times.
✓ Branch 12 → 14 taken 1839 times.
6993 if(pid != 22)
38 5154 continue;
39 1839 float px = particle_bank.getFloat("px", row);
40 1839 float py = particle_bank.getFloat("py", row);
41 1839 float pz = particle_bank.getFloat("pz", row);
42 float E = std::hypot(px, py, pz);
43
1/2
✓ Branch 18 → 19 taken 1839 times.
✗ Branch 18 → 71 not taken.
1839 ROOT::Math::PxPyPzEVector phot(px, py, pz, E);
44
5/10
✓ Branch 18 → 19 taken 1839 times.
✗ Branch 18 → 71 not taken.
✓ Branch 19 → 20 taken 1839 times.
✗ Branch 19 → 61 not taken.
✓ Branch 21 → 22 taken 1839 times.
✗ Branch 21 → 61 not taken.
✓ Branch 27 → 28 taken 1483 times.
✓ Branch 27 → 29 taken 356 times.
✗ Branch 71 → 72 not taken.
✗ Branch 71 → 74 not taken.
5517 if(m_algo_seq->Get<PhotonGBTFilter>("clas12::PhotonGBTFilter")->ForwardDetectorFilter(phot.Theta()))
45
1/2
✓ Branch 28 → 29 taken 1483 times.
✗ Branch 28 → 71 not taken.
1483 photons.push_back(phot);
46 }
47
48 // run the photon filter
49
1/2
✓ Branch 32 → 33 taken 1000 times.
✗ Branch 32 → 71 not taken.
1000 m_algo_seq->Run(banks);
50
51 std::vector<ROOT::Math::PxPyPzEVector> filtered_photons;
52
3/4
✓ Branch 33 → 34 taken 1000 times.
✗ Branch 33 → 67 not taken.
✓ Branch 45 → 35 taken 1058 times.
✓ Branch 45 → 46 taken 1000 times.
2058 for(auto const& row : particle_bank.getRowList()) {
53 1058 auto pid = particle_bank.getInt("pid", row);
54
2/2
✓ Branch 36 → 37 taken 639 times.
✓ Branch 36 → 38 taken 419 times.
1058 if(pid != 22)
55 639 continue;
56 419 float px = particle_bank.getFloat("px", row);
57 419 float py = particle_bank.getFloat("py", row);
58 419 float pz = particle_bank.getFloat("pz", row);
59 float E = std::hypot(px, py, pz);
60
1/2
✓ Branch 42 → 43 taken 419 times.
✗ Branch 42 → 67 not taken.
419 ROOT::Math::PxPyPzEVector phot(px, py, pz, E);
61
1/2
✓ Branch 42 → 43 taken 419 times.
✗ Branch 42 → 67 not taken.
419 filtered_photons.push_back(phot);
62 }
63
64 // fill the plots
65
1/2
✓ Branch 46 → 47 taken 1000 times.
✗ Branch 46 → 67 not taken.
1000 FillHistograms(photons, 0);
66
1/2
✓ Branch 47 → 48 taken 1000 times.
✗ Branch 47 → 67 not taken.
1000 FillHistograms(filtered_photons, 1);
67
68 1000 return true;
69 }
70
71
1/2
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 59 not taken.
1 void PhotonGBTFilterValidator::InitializeHistograms()
72 {
73 std::vector<std::pair<int, TString>> histInfos = {
74 {0, "before"},
75
3/6
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 1 time.
✓ Branch 9 → 10 taken 2 times.
✓ Branch 9 → 12 taken 1 time.
✗ Branch 55 → 56 not taken.
✗ Branch 55 → 58 not taken.
3 {1, "after"}};
76
77
2/2
✓ Branch 52 → 13 taken 2 times.
✓ Branch 52 → 53 taken 1 time.
3 for(auto const& [idx, label] : histInfos) {
78
4/10
✓ Branch 17 → 18 taken 2 times.
✗ Branch 17 → 64 not taken.
✓ Branch 18 → 19 taken 2 times.
✗ Branch 18 → 64 not taken.
✓ Branch 19 → 20 taken 2 times.
✗ Branch 19 → 64 not taken.
✓ Branch 20 → 21 taken 2 times.
✗ Branch 20 → 76 not taken.
✗ Branch 64 → 65 not taken.
✗ Branch 64 → 66 not taken.
2 h_Mgg[idx] = new TH1F(Form("h_Mgg_%s", label.Data()), ";M_{#gamma#gamma} [GeV]", 100, 0.02, 0.5);
79
4/10
✓ Branch 24 → 25 taken 2 times.
✗ Branch 24 → 67 not taken.
✓ Branch 25 → 26 taken 2 times.
✗ Branch 25 → 67 not taken.
✓ Branch 26 → 27 taken 2 times.
✗ Branch 26 → 67 not taken.
✓ Branch 27 → 28 taken 2 times.
✗ Branch 27 → 76 not taken.
✗ Branch 67 → 68 not taken.
✗ Branch 67 → 69 not taken.
2 h_P[idx] = new TH1F(Form("h_P_%s", label.Data()), ";P(#gamma) [GeV]", 100, 0, 2);
80
4/10
✓ Branch 31 → 32 taken 2 times.
✗ Branch 31 → 70 not taken.
✓ Branch 32 → 33 taken 2 times.
✗ Branch 32 → 70 not taken.
✓ Branch 33 → 34 taken 2 times.
✗ Branch 33 → 70 not taken.
✓ Branch 34 → 35 taken 2 times.
✗ Branch 34 → 76 not taken.
✗ Branch 70 → 71 not taken.
✗ Branch 70 → 72 not taken.
2 h_Th[idx] = new TH1F(Form("h_Th_%s", label.Data()), ";#theta(#gamma) [deg]", 100, 0, 36);
81
3/8
✓ Branch 38 → 39 taken 2 times.
✗ Branch 38 → 73 not taken.
✓ Branch 39 → 40 taken 2 times.
✗ Branch 39 → 73 not taken.
✓ Branch 40 → 41 taken 2 times.
✗ Branch 40 → 73 not taken.
✗ Branch 73 → 74 not taken.
✗ Branch 73 → 75 not taken.
2 h_Phi[idx] = new TH1F(Form("h_Phi_%s", label.Data()), ";#phi(#gamma) [deg]", 100, -180, 180);
82
83
2/2
✓ Branch 41 → 42 taken 1 time.
✓ Branch 41 → 43 taken 1 time.
2 int color = (idx == 0) ? kBlack : kRed;
84
85
2/4
✓ Branch 43 → 44 taken 2 times.
✗ Branch 43 → 76 not taken.
✓ Branch 44 → 45 taken 2 times.
✗ Branch 44 → 76 not taken.
2 ConfigureHistogram(h_Mgg[idx], color);
86
2/4
✓ Branch 45 → 46 taken 2 times.
✗ Branch 45 → 76 not taken.
✓ Branch 46 → 47 taken 2 times.
✗ Branch 46 → 76 not taken.
2 ConfigureHistogram(h_P[idx], color);
87
2/4
✓ Branch 47 → 48 taken 2 times.
✗ Branch 47 → 76 not taken.
✓ Branch 48 → 49 taken 2 times.
✗ Branch 48 → 76 not taken.
2 ConfigureHistogram(h_Th[idx], color);
88
2/4
✓ Branch 49 → 50 taken 2 times.
✗ Branch 49 → 76 not taken.
✓ Branch 50 → 51 taken 2 times.
✗ Branch 50 → 76 not taken.
2 ConfigureHistogram(h_Phi[idx], color);
89 }
90
0/2
✗ Branch 60 → 61 not taken.
✗ Branch 60 → 63 not taken.
1 }
91
92 8 void PhotonGBTFilterValidator::ConfigureHistogram(TH1F* hist, int color)
93 {
94 8 hist->SetLineColor(color);
95 8 hist->SetLineWidth(2);
96 8 hist->GetXaxis()->SetTitleSize(0.06);
97 8 hist->GetYaxis()->SetTitleSize(0.06);
98 8 }
99
100 2000 void PhotonGBTFilterValidator::FillHistograms(std::vector<ROOT::Math::PxPyPzEVector> const& photons, int idx) const
101 {
102
2/2
✓ Branch 14 → 3 taken 1902 times.
✓ Branch 14 → 25 taken 2000 times.
3902 for(auto const& photon : photons) {
103 1902 h_P.at(idx)->Fill(photon.P());
104 1902 h_Th.at(idx)->Fill(photon.Theta() * 180.0 / M_PI);
105
1/2
✗ Branch 9 → 10 not taken.
✓ Branch 9 → 11 taken 1902 times.
3804 h_Phi.at(idx)->Fill(photon.Phi() * 180.0 / M_PI);
106 }
107
108
2/2
✓ Branch 27 → 15 taken 1902 times.
✓ Branch 27 → 28 taken 2000 times.
3902 for(size_t i = 0; i < photons.size(); ++i) {
109
2/2
✓ Branch 24 → 16 taken 1863 times.
✓ Branch 24 → 25 taken 1902 times.
7530 for(size_t j = i + 1; j < photons.size(); ++j) {
110 1863 auto diphoton = photons[i] + photons[j];
111 1863 h_Mgg.at(idx)->Fill(diphoton.M());
112 }
113 }
114 2000 }
115
116 1 void PhotonGBTFilterValidator::Stop()
117 {
118
1/2
✓ Branch 4 → 5 taken 1 time.
✗ Branch 4 → 48 not taken.
2 if(GetOutputDirectory()) {
119 int n_rows = 2;
120 int n_cols = 2;
121
1/2
✓ Branch 6 → 7 taken 1 time.
✗ Branch 6 → 49 not taken.
1 auto canv = new TCanvas("c", "c", n_cols * 800, n_rows * 800);
122 1 canv->Divide(n_cols, n_rows);
123
2/2
✓ Branch 38 → 9 taken 4 times.
✓ Branch 38 → 39 taken 1 time.
5 for(int pad_num = 0; pad_num < 4; pad_num++) {
124 4 auto pad = canv->GetPad(pad_num + 1);
125 4 pad->cd();
126 4 pad->SetGrid(1, 1);
127 4 pad->SetLogz();
128 4 pad->SetLeftMargin(0.12);
129 4 pad->SetRightMargin(0.12);
130 4 pad->SetBottomMargin(0.12);
131
4/4
✓ Branch 16 → 17 taken 1 time.
✓ Branch 16 → 22 taken 1 time.
✓ Branch 16 → 27 taken 1 time.
✓ Branch 16 → 32 taken 1 time.
4 switch(pad_num) {
132 1 case 0:
133 1 h_Mgg[0]->Draw("hist");
134 1 h_Mgg[1]->Draw("hist same");
135 1 break;
136 1 case 1:
137 1 h_P[0]->Draw("hist");
138 1 h_P[1]->Draw("hist same");
139 1 break;
140 1 case 2:
141 1 h_Th[0]->Draw("hist");
142 1 h_Th[1]->Draw("hist same");
143 1 break;
144 1 case 3:
145 1 h_Phi[0]->Draw("hist");
146 1 h_Phi[1]->Draw("hist same");
147 1 break;
148 }
149 }
150
1/2
✓ Branch 42 → 43 taken 1 time.
✗ Branch 42 → 51 not taken.
2 canv->SaveAs(m_output_file_basename + "_plot.png");
151 1 m_output_file->Write();
152 1 m_log->Info("Wrote output file {}", m_output_file->GetName());
153 1 m_output_file->Close();
154 }
155 1 }
156
157 }
158