GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/clas12/SectorFinder/Validator.cc
Date: 2025-05-30 18:32:38
Exec Total Coverage
Lines: 82 82 100.0%
Functions: 3 3 100.0%
Branches: 101 200 50.5%

Line Branch Exec Source
1 #include "Validator.h"
2
3 #include <TProfile.h>
4
5 namespace iguana::clas12 {
6
7 REGISTER_IGUANA_VALIDATOR(SectorFinderValidator);
8
9 1 void SectorFinderValidator::Start(hipo::banklist& banks)
10 {
11 // define the algorithm sequence
12 2 m_algo_seq = std::make_unique<AlgorithmSequence>();
13
3/8
✓ Branch 0 (7→8) taken 1 times.
✗ Branch 1 (7→181) not taken.
✓ Branch 2 (8→9) taken 1 times.
✗ Branch 3 (8→175) not taken.
✓ Branch 4 (14→15) taken 1 times.
✗ Branch 5 (14→17) not taken.
✗ Branch 6 (181→182) not taken.
✗ Branch 7 (181→184) not taken.
2 m_algo_seq->Add("clas12::EventBuilderFilter");
14
3/8
✓ Branch 0 (20→21) taken 1 times.
✗ Branch 1 (20→193) not taken.
✓ Branch 2 (21→22) taken 1 times.
✗ Branch 3 (21→187) not taken.
✓ Branch 4 (27→28) taken 1 times.
✗ Branch 5 (27→30) not taken.
✗ Branch 6 (193→194) not taken.
✗ Branch 7 (193→196) not taken.
2 m_algo_seq->Add("clas12::SectorFinder");
15
5/14
✓ Branch 0 (33→34) taken 1 times.
✗ Branch 1 (33→211) not taken.
✓ Branch 2 (34→35) taken 1 times.
✗ Branch 3 (34→205) not taken.
✓ Branch 4 (35→36) taken 1 times.
✗ Branch 5 (35→199) 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 (205→206) not taken.
✗ Branch 11 (205→208) not taken.
✗ Branch 12 (211→212) not taken.
✗ Branch 13 (211→214) not taken.
4 m_algo_seq->SetOption<std::vector<int>>("clas12::EventBuilderFilter", "pids", u_pdg_list);
16
5/14
✓ Branch 0 (50→51) taken 1 times.
✗ Branch 1 (50→227) not taken.
✓ Branch 2 (51→52) taken 1 times.
✗ Branch 3 (51→221) not taken.
✓ Branch 4 (52→53) taken 1 times.
✗ Branch 5 (52→215) not taken.
✓ Branch 6 (58→59) taken 1 times.
✗ Branch 7 (58→61) not taken.
✓ Branch 8 (63→64) taken 1 times.
✗ Branch 9 (63→66) not taken.
✗ Branch 10 (221→222) not taken.
✗ Branch 11 (221→224) not taken.
✗ Branch 12 (227→228) not taken.
✗ Branch 13 (227→230) not taken.
4 m_algo_seq->SetOption<std::string>("clas12::SectorFinder", "bank_charged", "REC::Track");
17
5/14
✓ Branch 0 (69→70) taken 1 times.
✗ Branch 1 (69→245) not taken.
✓ Branch 2 (70→71) taken 1 times.
✗ Branch 3 (70→239) not taken.
✓ Branch 4 (71→72) taken 1 times.
✗ Branch 5 (71→233) not taken.
✓ Branch 6 (77→78) taken 1 times.
✗ Branch 7 (77→80) not taken.
✓ Branch 8 (82→83) taken 1 times.
✗ Branch 9 (82→85) not taken.
✗ Branch 10 (239→240) not taken.
✗ Branch 11 (239→242) not taken.
✗ Branch 12 (245→246) not taken.
✗ Branch 13 (245→248) not taken.
4 m_algo_seq->SetOption<std::string>("clas12::SectorFinder", "bank_uncharged", "default");
18 1 m_algo_seq->Start(banks);
19
20
21
2/4
✓ Branch 0 (89→90) taken 1 times.
✗ Branch 1 (89→251) not taken.
✓ Branch 2 (90→91) taken 1 times.
✗ Branch 3 (90→93) not taken.
1 b_particle = GetBankIndex(banks, "REC::Particle");
22
2/4
✓ Branch 0 (96→97) taken 1 times.
✗ Branch 1 (96→257) not taken.
✗ Branch 2 (97→98) not taken.
✓ Branch 3 (97→100) taken 1 times.
1 b_cal = GetBankIndex(banks, "REC::Calorimeter");
23
2/4
✓ Branch 0 (103→104) taken 1 times.
✗ Branch 1 (103→263) not taken.
✗ Branch 2 (104→105) not taken.
✓ Branch 3 (104→107) taken 1 times.
1 b_sector = GetBankIndex(banks, "REC::Particle::Sector");
24
25 // set an output file
26 1 auto output_dir = GetOutputDirectory();
27
1/2
✓ Branch 0 (110→111) taken 1 times.
✗ Branch 1 (110→125) not taken.
1 if(output_dir) {
28
3/6
✓ Branch 0 (111→112) taken 1 times.
✗ Branch 1 (111→312) not taken.
✓ Branch 2 (112→113) taken 1 times.
✗ Branch 3 (112→269) not taken.
✓ Branch 4 (118→119) taken 1 times.
✗ Branch 5 (118→312) not taken.
2 m_output_file_basename = output_dir.value() + "/sector_finder";
29
2/4
✓ Branch 0 (119→120) taken 1 times.
✗ Branch 1 (119→277) not taken.
✓ Branch 2 (122→123) taken 1 times.
✗ Branch 3 (122→275) not taken.
2 m_output_file = new TFile(m_output_file_basename + ".root", "RECREATE");
30 }
31
32 // define plots
33
2/2
✓ Branch 0 (170→126) taken 2 times.
✓ Branch 1 (170→171) taken 1 times.
3 for(auto const& pdg : u_pdg_list) {
34 std::vector<TH2D*> YvsX;
35
2/6
✓ Branch 0 (126→127) taken 2 times.
✗ Branch 1 (126→306) not taken.
✓ Branch 2 (127→128) taken 2 times.
✗ Branch 3 (127→306) not taken.
✗ Branch 4 (306→307) not taken.
✗ Branch 5 (306→309) not taken.
2 TString particle_name = particle::name.at(particle::PDG(pdg));
36
2/4
✓ Branch 0 (128→129) taken 2 times.
✗ Branch 1 (128→304) not taken.
✓ Branch 2 (129→130) taken 2 times.
✗ Branch 3 (129→304) not taken.
2 TString particle_title = particle::title.at(particle::PDG(pdg));
37
2/2
✓ Branch 0 (157→131) taken 12 times.
✓ Branch 1 (157→158) taken 2 times.
14 for(int sec = 1; sec <= 6; sec++) {
38
2/4
✓ Branch 0 (131→132) taken 12 times.
✗ Branch 1 (131→302) not taken.
✓ Branch 2 (132→133) taken 12 times.
✗ Branch 3 (132→302) not taken.
12 TString sector_name = Form("sec%d", sec);
39
2/4
✓ Branch 0 (133→134) taken 12 times.
✗ Branch 1 (133→296) not taken.
✓ Branch 2 (134→135) taken 12 times.
✗ Branch 3 (134→296) not taken.
12 TString sector_title = Form("sector %d", sec);
40
1/2
✓ Branch 0 (147→148) taken 12 times.
✗ Branch 1 (147→279) not taken.
12 YvsX.push_back(new TH2D(
41
3/6
✓ Branch 0 (141→142) taken 12 times.
✗ Branch 1 (141→285) not taken.
✓ Branch 2 (142→143) taken 12 times.
✗ Branch 3 (142→283) not taken.
✓ Branch 4 (143→144) taken 12 times.
✗ Branch 5 (143→281) not taken.
24 "YvsX_" + particle_name + "_" + sector_name,
42
3/8
✓ Branch 0 (136→137) taken 12 times.
✗ Branch 1 (136→291) not taken.
✓ Branch 2 (137→138) taken 12 times.
✗ Branch 3 (137→289) not taken.
✓ Branch 4 (138→139) taken 12 times.
✗ Branch 5 (138→287) not taken.
✗ Branch 6 (291→292) not taken.
✗ Branch 7 (291→293) not taken.
24 particle_title + " Calorimeter Hit Position, " + sector_title + ";X [cm];Y [cm]",
43 50, -500, 500,
44
1/2
✓ Branch 0 (146→147) taken 12 times.
✗ Branch 1 (146→279) not taken.
12 50, -500, 500));
45 12 }
46 2 u_YvsX.insert({pdg, YvsX});
47 2 }
48 1 u_IsInFD = new TH1D(
49 "IsInFD",
50 "e^{-} with #theta>6.5^{o} Sector; e^{-} Sector",
51
1/2
✓ Branch 0 (172→173) taken 1 times.
✗ Branch 1 (172→310) not taken.
1 7, -0.5, 6.5);
52
53 1 }
54
55 1000 void SectorFinderValidator::Run(hipo::banklist& banks) const
56 {
57
58
1/2
✓ Branch 0 (3→4) taken 1000 times.
✗ Branch 1 (3→58) not taken.
1000 auto& particle_bank = GetBank(banks, b_particle, "REC::Particle");
59
2/4
✓ Branch 0 (9→10) taken 1000 times.
✗ Branch 1 (9→70) not taken.
✓ Branch 2 (10→11) taken 1000 times.
✗ Branch 3 (10→64) not taken.
1000 auto& sector_bank = GetBank(banks, b_sector, "REC::Particle::Sector");
60
2/4
✓ Branch 0 (16→17) taken 1000 times.
✗ Branch 1 (16→77) not taken.
✓ Branch 2 (17→18) taken 1000 times.
✗ Branch 3 (17→71) not taken.
2000 auto& cal_bank = GetBank(banks, b_cal, "REC::Calorimeter");
61
62
63 1000 m_algo_seq->Run(banks);
64
65 // lock the mutex, so we can mutate plots
66 1000 std::scoped_lock<std::mutex> lock(m_mutex);
67 // fill the plots
68
3/4
✓ Branch 0 (25→26) taken 1000 times.
✗ Branch 1 (25→78) not taken.
✓ Branch 2 (55→27) taken 2478 times.
✓ Branch 3 (55→56) taken 1000 times.
3478 for(auto const& row : particle_bank.getRowList()) {
69
70 2478 auto pdg = particle_bank.getInt("pid", row);
71 2478 auto sector = sector_bank.getInt("sector", row);
72
73 double x=0,y=0;
74
3/4
✓ Branch 0 (29→30) taken 2478 times.
✗ Branch 1 (29→78) not taken.
✓ Branch 2 (37→31) taken 18264 times.
✓ Branch 3 (37→38) taken 2478 times.
20742 for(auto const& rowcal : cal_bank.getRowList()){
75
2/2
✓ Branch 0 (32→33) taken 2509 times.
✓ Branch 1 (32→36) taken 15755 times.
18264 if(cal_bank.getShort("pindex", rowcal)==row){
76 2509 x=cal_bank.getFloat("x", rowcal);
77 2509 y=cal_bank.getFloat("y", rowcal);
78 }
79 }
80
81
2/2
✓ Branch 0 (38→39) taken 639 times.
✓ Branch 1 (38→47) taken 1839 times.
2478 if(pdg==11){
82 639 double Px=particle_bank.getFloat("px", row);
83 639 double Py=particle_bank.getFloat("py", row);
84 639 double Pz=particle_bank.getFloat("pz", row);
85 639 double P=sqrt(Px*Px+Py*Py+Pz*Pz);
86 639 double Theta=acos(Pz/P) * 180./M_PI ;
87 //electrons are in FT or FD
88 //sector should always be 1 if theta is larger than 5.5 degrees
89
2/2
✓ Branch 0 (42→43) taken 149 times.
✓ Branch 1 (42→47) taken 490 times.
639 if (Theta>6.5){
90
1/2
✓ Branch 0 (43→44) taken 149 times.
✗ Branch 1 (43→78) not taken.
149 u_IsInFD->Fill(sector);
91
2/2
✓ Branch 0 (44→45) taken 4 times.
✓ Branch 1 (44→49) taken 145 times.
149 if(sector==0){
92 4 m_log->Trace("e' with theta={} and sector==0, this should not happen", Theta);
93 }
94 }
95 }
96
97 // skip central particle, or unknown sector
98
2/2
✓ Branch 0 (47→48) taken 827 times.
✓ Branch 1 (47→49) taken 1506 times.
2333 if(sector == 0)
99 827 continue;
100
2/4
✓ Branch 0 (49→50) taken 1651 times.
✗ Branch 1 (49→78) not taken.
✓ Branch 2 (50→51) taken 1651 times.
✗ Branch 3 (50→78) not taken.
1651 m_log->Trace("Filling SectorFinder Validator, pdg {} sector {} pindex {}", pdg, sector, row);
101
2/4
✓ Branch 0 (51→52) taken 1651 times.
✗ Branch 1 (51→78) not taken.
✓ Branch 2 (52→53) taken 1651 times.
✗ Branch 3 (52→78) not taken.
1651 u_YvsX.at(pdg).at(sector - 1)->Fill(x, y);
102 }
103
104 1000 }
105
106
107 1 void SectorFinderValidator::Stop()
108 {
109
1/2
✓ Branch 0 (4→5) taken 1 times.
✗ Branch 1 (4→55) not taken.
2 if(GetOutputDirectory()) {
110
2/2
✓ Branch 0 (42→6) taken 2 times.
✓ Branch 1 (42→43) taken 1 times.
3 for(auto const& [pdg, plots] : u_YvsX) {
111 int n_cols = 3;
112 int n_rows = 2;
113 2 TString canv_name = Form("canv%d", pdg);
114
1/2
✓ Branch 0 (11→12) taken 2 times.
✗ Branch 1 (11→56) not taken.
2 auto canv = new TCanvas(canv_name, canv_name, n_cols * 800, n_rows * 600);
115
1/2
✓ Branch 0 (12→13) taken 2 times.
✗ Branch 1 (12→72) not taken.
2 canv->Divide(n_cols, n_rows);
116 int pad_num = 0;
117
2/2
✓ Branch 0 (22→14) taken 12 times.
✓ Branch 1 (22→23) taken 2 times.
14 for(auto const& plot : plots) {
118
1/2
✓ Branch 0 (14→15) taken 12 times.
✗ Branch 1 (14→72) not taken.
12 auto pad = canv->GetPad(++pad_num);
119
1/2
✓ Branch 0 (15→16) taken 12 times.
✗ Branch 1 (15→72) not taken.
12 pad->cd();
120
1/2
✓ Branch 0 (16→17) taken 12 times.
✗ Branch 1 (16→72) not taken.
12 pad->SetGrid(1, 1);
121
1/2
✓ Branch 0 (17→18) taken 12 times.
✗ Branch 1 (17→72) not taken.
12 pad->SetLeftMargin(0.12);
122
1/2
✓ Branch 0 (18→19) taken 12 times.
✗ Branch 1 (18→72) not taken.
12 pad->SetRightMargin(0.12);
123
1/2
✓ Branch 0 (19→20) taken 12 times.
✗ Branch 1 (19→72) not taken.
12 pad->SetBottomMargin(0.12);
124
1/2
✓ Branch 0 (20→21) taken 12 times.
✗ Branch 1 (20→72) not taken.
12 plot->Draw("colz");
125 }
126
5/10
✓ Branch 0 (24→25) taken 2 times.
✗ Branch 1 (24→66) not taken.
✓ Branch 2 (25→26) taken 2 times.
✗ Branch 3 (25→64) not taken.
✓ Branch 4 (26→27) taken 2 times.
✗ Branch 5 (26→62) not taken.
✓ Branch 6 (27→28) taken 2 times.
✗ Branch 7 (27→60) not taken.
✓ Branch 8 (30→31) taken 2 times.
✗ Branch 9 (30→58) not taken.
4 canv->SaveAs(m_output_file_basename + "_" + std::to_string(pdg) + ".png");
127
128 2 }
129
130
1/2
✓ Branch 0 (44→45) taken 1 times.
✗ Branch 1 (44→74) not taken.
1 auto canv1D = new TCanvas("1D canvas","1D canvas",800, 600);
131 1 u_IsInFD->Draw();
132
1/2
✓ Branch 0 (49→50) taken 1 times.
✗ Branch 1 (49→76) not taken.
2 canv1D->SaveAs(m_output_file_basename+"_elIsInFD.png");
133
134 1 m_output_file->Write();
135 1 m_log->Info("Wrote output file {}", m_output_file->GetName());
136 1 m_output_file->Close();
137 }
138 1 }
139
140 }
141