GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/clas12/MomentumCorrection/Validator.cc
Date: 2025-06-06 22:09:53
Exec Total Coverage
Lines: 71 71 100.0%
Functions: 3 3 100.0%
Branches: 87 176 49.4%

Line Branch Exec Source
1 #include "Validator.h"
2
3 #include <TProfile.h>
4
5 namespace iguana::clas12 {
6
7 REGISTER_IGUANA_VALIDATOR(MomentumCorrectionValidator);
8
9 1 void MomentumCorrectionValidator::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→147) not taken.
✓ Branch 2 (8→9) taken 1 times.
✗ Branch 3 (8→141) not taken.
✓ Branch 4 (14→15) taken 1 times.
✗ Branch 5 (14→17) not taken.
✗ Branch 6 (147→148) not taken.
✗ Branch 7 (147→150) not taken.
2 m_algo_seq->Add("clas12::EventBuilderFilter");
14
3/8
✓ Branch 0 (20→21) taken 1 times.
✗ Branch 1 (20→159) not taken.
✓ Branch 2 (21→22) taken 1 times.
✗ Branch 3 (21→153) not taken.
✓ Branch 4 (27→28) taken 1 times.
✗ Branch 5 (27→30) not taken.
✗ Branch 6 (159→160) not taken.
✗ Branch 7 (159→162) not taken.
2 m_algo_seq->Add("clas12::SectorFinder");
15
3/8
✓ Branch 0 (33→34) taken 1 times.
✗ Branch 1 (33→171) not taken.
✓ Branch 2 (34→35) taken 1 times.
✗ Branch 3 (34→165) not taken.
✓ Branch 4 (40→41) taken 1 times.
✗ Branch 5 (40→43) not taken.
✗ Branch 6 (171→172) not taken.
✗ Branch 7 (171→174) not taken.
2 m_algo_seq->Add("clas12::MomentumCorrection");
16
5/14
✓ Branch 0 (46→47) taken 1 times.
✗ Branch 1 (46→189) not taken.
✓ Branch 2 (47→48) taken 1 times.
✗ Branch 3 (47→183) not taken.
✓ Branch 4 (48→49) taken 1 times.
✗ Branch 5 (48→177) not taken.
✓ Branch 6 (54→55) taken 1 times.
✗ Branch 7 (54→57) not taken.
✓ Branch 8 (59→60) taken 1 times.
✗ Branch 9 (59→62) not taken.
✗ Branch 10 (183→184) not taken.
✗ Branch 11 (183→186) not taken.
✗ Branch 12 (189→190) not taken.
✗ Branch 13 (189→192) not taken.
4 m_algo_seq->SetOption<std::vector<int>>("clas12::EventBuilderFilter", "pids", u_pdg_list);
17 1 m_algo_seq->Start(banks);
18
19 // get bank indices
20
2/4
✓ Branch 0 (64→65) taken 1 times.
✗ Branch 1 (64→193) not taken.
✓ Branch 2 (65→66) taken 1 times.
✗ Branch 3 (65→68) not taken.
1 b_particle = GetBankIndex(banks, "REC::Particle");
21
2/4
✓ Branch 0 (71→72) taken 1 times.
✗ Branch 1 (71→199) not taken.
✗ Branch 2 (72→73) not taken.
✓ Branch 3 (72→75) taken 1 times.
1 b_sector = GetBankIndex(banks, "REC::Particle::Sector");
22
23 // set an output file
24 1 auto output_dir = GetOutputDirectory();
25
1/2
✓ Branch 0 (78→79) taken 1 times.
✗ Branch 1 (78→93) not taken.
1 if(output_dir) {
26
3/6
✓ Branch 0 (79→80) taken 1 times.
✗ Branch 1 (79→246) not taken.
✓ Branch 2 (80→81) taken 1 times.
✗ Branch 3 (80→205) not taken.
✓ Branch 4 (86→87) taken 1 times.
✗ Branch 5 (86→246) not taken.
2 m_output_file_basename = output_dir.value() + "/momentum_corrections";
27
2/4
✓ Branch 0 (87→88) taken 1 times.
✗ Branch 1 (87→213) not taken.
✓ Branch 2 (90→91) taken 1 times.
✗ Branch 3 (90→211) not taken.
2 m_output_file = new TFile(m_output_file_basename + ".root", "RECREATE");
28 }
29
30 // define plots
31
2/2
✓ Branch 0 (138→94) taken 4 times.
✓ Branch 1 (138→139) taken 1 times.
5 for(auto const& pdg : u_pdg_list) {
32 std::vector<TH2D*> deltaPvsP;
33
2/6
✓ Branch 0 (94→95) taken 4 times.
✗ Branch 1 (94→242) not taken.
✓ Branch 2 (95→96) taken 4 times.
✗ Branch 3 (95→242) not taken.
✗ Branch 4 (242→243) not taken.
✗ Branch 5 (242→245) not taken.
4 TString particle_name = particle::name.at(particle::PDG(pdg));
34
2/4
✓ Branch 0 (96→97) taken 4 times.
✗ Branch 1 (96→240) not taken.
✓ Branch 2 (97→98) taken 4 times.
✗ Branch 3 (97→240) not taken.
4 TString particle_title = particle::title.at(particle::PDG(pdg));
35
2/2
✓ Branch 0 (125→99) taken 24 times.
✓ Branch 1 (125→126) taken 4 times.
28 for(int sec = 1; sec <= 6; sec++) {
36
2/4
✓ Branch 0 (99→100) taken 24 times.
✗ Branch 1 (99→238) not taken.
✓ Branch 2 (100→101) taken 24 times.
✗ Branch 3 (100→238) not taken.
24 TString sector_name = Form("sec%d", sec);
37
2/4
✓ Branch 0 (101→102) taken 24 times.
✗ Branch 1 (101→232) not taken.
✓ Branch 2 (102→103) taken 24 times.
✗ Branch 3 (102→232) not taken.
24 TString sector_title = Form("sector %d", sec);
38
1/2
✓ Branch 0 (115→116) taken 24 times.
✗ Branch 1 (115→215) not taken.
24 deltaPvsP.push_back(new TH2D(
39
3/6
✓ Branch 0 (109→110) taken 24 times.
✗ Branch 1 (109→221) not taken.
✓ Branch 2 (110→111) taken 24 times.
✗ Branch 3 (110→219) not taken.
✓ Branch 4 (111→112) taken 24 times.
✗ Branch 5 (111→217) not taken.
48 "deltaPvsP_" + particle_name + "_" + sector_name,
40
2/6
✓ Branch 0 (105→106) taken 24 times.
✗ Branch 1 (105→225) not taken.
✓ Branch 2 (106→107) taken 24 times.
✗ Branch 3 (106→223) not taken.
✗ Branch 4 (227→228) not taken.
✗ Branch 5 (227→229) not taken.
48 particle_title + " momentum correction, " + sector_title + ";p [GeV];#Delta p [GeV]",
41 24 30, 0, m_p_max,
42
2/4
✓ Branch 0 (104→105) taken 24 times.
✗ Branch 1 (104→227) not taken.
✓ Branch 2 (114→115) taken 24 times.
✗ Branch 3 (114→215) not taken.
48 100, -m_deltaP_max, m_deltaP_max));
43 24 }
44 4 u_deltaPvsP.insert({pdg, deltaPvsP});
45 4 }
46 1 }
47
48
49 1000 void MomentumCorrectionValidator::Run(hipo::banklist& banks) const
50 {
51 // get the momenta before
52
1/2
✓ Branch 0 (3→4) taken 1000 times.
✗ Branch 1 (3→49) not taken.
1000 auto& particle_bank = GetBank(banks, b_particle, "REC::Particle");
53
2/4
✓ Branch 0 (10→11) taken 1000 times.
✗ Branch 1 (10→55) not taken.
✓ Branch 2 (16→17) taken 1000 times.
✗ Branch 3 (16→63) not taken.
2000 auto& sector_bank = GetBank(banks, b_sector, "REC::Particle::Sector");
54 std::vector<double> p_measured;
55
3/4
✓ Branch 0 (16→17) taken 1000 times.
✗ Branch 1 (16→63) not taken.
✓ Branch 2 (24→18) taken 6993 times.
✓ Branch 3 (24→25) taken 1000 times.
7993 for(auto const& row : particle_bank.getRowList())
56
1/4
✓ Branch 0 (22→23) taken 6993 times.
✗ Branch 1 (22→63) not taken.
✗ Branch 2 (63→64) not taken.
✗ Branch 3 (63→66) not taken.
13986 p_measured.push_back(std::hypot(
57 particle_bank.getFloat("px", row),
58 particle_bank.getFloat("py", row),
59 particle_bank.getFloat("pz", row)));
60
61 // run the momentum corrections
62
1/2
✓ Branch 0 (25→26) taken 1000 times.
✗ Branch 1 (25→63) not taken.
1000 m_algo_seq->Run(banks);
63
64 // lock the mutex, so we can mutate plots
65
1/2
✓ Branch 0 (26→27) taken 1000 times.
✗ Branch 1 (26→63) not taken.
1000 std::scoped_lock<std::mutex> lock(m_mutex);
66
67 // fill the plots
68
3/4
✓ Branch 0 (27→28) taken 1000 times.
✗ Branch 1 (27→61) not taken.
✓ Branch 2 (43→29) taken 2326 times.
✓ Branch 3 (43→44) taken 1000 times.
3326 for(auto const& row : particle_bank.getRowList()) {
69
70 2326 auto pdg = particle_bank.getInt("pid", row);
71 2326 auto sector = sector_bank.getInt("sector", row);
72
73 // skip central particle, or unknown sector
74
2/2
✓ Branch 0 (31→32) taken 815 times.
✓ Branch 1 (31→33) taken 1511 times.
2326 if(sector == 0)
75 815 continue;
76
77 1511 double p_corrected = std::hypot(
78 particle_bank.getFloat("px", row),
79 particle_bank.getFloat("py", row),
80 1511 particle_bank.getFloat("pz", row));
81
2/4
✓ Branch 0 (37→38) taken 1511 times.
✗ Branch 1 (37→61) not taken.
✓ Branch 2 (38→39) taken 1511 times.
✗ Branch 3 (38→61) not taken.
1511 auto delta_p = p_corrected - p_measured.at(row);
82
2/4
✓ Branch 0 (39→40) taken 1511 times.
✗ Branch 1 (39→61) not taken.
✓ Branch 2 (40→41) taken 1511 times.
✗ Branch 3 (40→61) not taken.
1511 u_deltaPvsP.at(pdg).at(sector - 1)->Fill(p_corrected, delta_p);
83 }
84 1000 }
85
86
87 1 void MomentumCorrectionValidator::Stop()
88 {
89
1/2
✓ Branch 0 (4→5) taken 1 times.
✗ Branch 1 (4→53) not taken.
2 if(GetOutputDirectory()) {
90
2/2
✓ Branch 0 (48→6) taken 4 times.
✓ Branch 1 (48→49) taken 1 times.
5 for(auto const& [pdg, plots] : u_deltaPvsP) {
91 int n_cols = 3;
92 int n_rows = 2;
93 4 TString canv_name = Form("canv%d", pdg);
94
1/2
✓ Branch 0 (11→12) taken 4 times.
✗ Branch 1 (11→54) not taken.
4 auto canv = new TCanvas(canv_name, canv_name, n_cols * 800, n_rows * 600);
95
1/2
✓ Branch 0 (12→13) taken 4 times.
✗ Branch 1 (12→70) not taken.
4 canv->Divide(n_cols, n_rows);
96 int pad_num = 0;
97
2/2
✓ Branch 0 (28→14) taken 24 times.
✓ Branch 1 (28→29) taken 4 times.
28 for(auto const& plot : plots) {
98
1/2
✓ Branch 0 (14→15) taken 24 times.
✗ Branch 1 (14→70) not taken.
24 auto pad = canv->GetPad(++pad_num);
99
1/2
✓ Branch 0 (15→16) taken 24 times.
✗ Branch 1 (15→70) not taken.
24 pad->cd();
100
1/2
✓ Branch 0 (16→17) taken 24 times.
✗ Branch 1 (16→70) not taken.
24 pad->SetGrid(1, 1);
101
1/2
✓ Branch 0 (17→18) taken 24 times.
✗ Branch 1 (17→70) not taken.
24 pad->SetLogz();
102
1/2
✓ Branch 0 (18→19) taken 24 times.
✗ Branch 1 (18→70) not taken.
24 pad->SetLeftMargin(0.12);
103
1/2
✓ Branch 0 (19→20) taken 24 times.
✗ Branch 1 (19→70) not taken.
24 pad->SetRightMargin(0.12);
104
1/2
✓ Branch 0 (20→21) taken 24 times.
✗ Branch 1 (20→70) not taken.
24 pad->SetBottomMargin(0.12);
105
1/2
✓ Branch 0 (21→22) taken 24 times.
✗ Branch 1 (21→70) not taken.
24 plot->Draw("colz");
106
1/2
✓ Branch 0 (22→23) taken 24 times.
✗ Branch 1 (22→70) not taken.
24 plot->GetYaxis()->SetRangeUser(-m_deltaP_zoom, m_deltaP_zoom);
107
1/2
✓ Branch 0 (23→24) taken 24 times.
✗ Branch 1 (23→70) not taken.
24 auto prof = plot->ProfileX("_pfx", 1, -1, "s");
108
1/2
✓ Branch 0 (24→25) taken 24 times.
✗ Branch 1 (24→70) not taken.
24 prof->SetLineColor(kBlack);
109
1/2
✓ Branch 0 (25→26) taken 24 times.
✗ Branch 1 (25→70) not taken.
24 prof->SetLineWidth(5);
110
1/2
✓ Branch 0 (26→27) taken 24 times.
✗ Branch 1 (26→70) not taken.
24 prof->Draw("same");
111 }
112
5/10
✓ Branch 0 (30→31) taken 4 times.
✗ Branch 1 (30→64) not taken.
✓ Branch 2 (31→32) taken 4 times.
✗ Branch 3 (31→62) not taken.
✓ Branch 4 (32→33) taken 4 times.
✗ Branch 5 (32→60) not taken.
✓ Branch 6 (33→34) taken 4 times.
✗ Branch 7 (33→58) not taken.
✓ Branch 8 (36→37) taken 4 times.
✗ Branch 9 (36→56) not taken.
8 canv->SaveAs(m_output_file_basename + "_" + std::to_string(pdg) + ".png");
113 4 }
114 1 m_output_file->Write();
115 1 m_log->Info("Wrote output file {}", m_output_file->GetName());
116 1 m_output_file->Close();
117 }
118 1 }
119
120 }
121