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 |