| 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 |