GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/clas12/PhotonGBTFilter/Validator.cc
Date: 2025-05-30 18:32:38
Exec Total Coverage
Lines: 99 99 100.0%
Functions: 6 6 100.0%
Branches: 91 176 51.7%

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