GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/clas12/rga/MomentumCorrection/Validator.cc
Date: 2025-11-25 17:57:04
Coverage Exec Excl Total
Lines: 100.0% 71 0 71
Functions: 100.0% 3 0 3
Branches: 49.4% 87 0 176

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