Line | Branch | Exec | Source |
---|---|---|---|
1 | #include "Validator.h" | ||
2 | #include "TypeDefs.h" | ||
3 | #include "iguana/algorithms/physics/Tools.h" | ||
4 | |||
5 | #include <Math/Vector3D.h> | ||
6 | |||
7 | namespace iguana::physics { | ||
8 | |||
9 | REGISTER_IGUANA_VALIDATOR(SingleHadronKinematicsValidator); | ||
10 | |||
11 | 1 | void SingleHadronKinematicsValidator::Start(hipo::banklist& banks) | |
12 | { | ||
13 | // define the algorithm sequence | ||
14 | 2 | m_algo_seq = std::make_unique<AlgorithmSequence>(); | |
15 |
3/8✓ Branch 0 (7→8) taken 1 times.
✗ Branch 1 (7→133) not taken.
✓ Branch 2 (8→9) taken 1 times.
✗ Branch 3 (8→127) not taken.
✓ Branch 4 (14→15) taken 1 times.
✗ Branch 5 (14→17) not taken.
✗ Branch 6 (133→134) not taken.
✗ Branch 7 (133→136) not taken.
|
2 | m_algo_seq->Add("physics::InclusiveKinematics"); |
16 |
3/8✓ Branch 0 (20→21) taken 1 times.
✗ Branch 1 (20→145) not taken.
✓ Branch 2 (21→22) taken 1 times.
✗ Branch 3 (21→139) not taken.
✓ Branch 4 (27→28) taken 1 times.
✗ Branch 5 (27→30) not taken.
✗ Branch 6 (145→146) not taken.
✗ Branch 7 (145→148) not taken.
|
2 | m_algo_seq->Add("physics::SingleHadronKinematics"); |
17 |
2/6✓ Branch 0 (34→35) taken 1 times.
✗ Branch 1 (34→157) not taken.
✓ Branch 2 (43→44) taken 1 times.
✗ Branch 3 (43→46) not taken.
✗ Branch 4 (157→158) not taken.
✗ Branch 5 (157→160) not taken.
|
3 | m_algo_seq->SetOption("physics::SingleHadronKinematics", "log", m_log->GetLevel()); |
18 |
5/14✓ Branch 0 (49→50) taken 1 times.
✗ Branch 1 (49→175) not taken.
✓ Branch 2 (50→51) taken 1 times.
✗ Branch 3 (50→169) not taken.
✓ Branch 4 (51→52) taken 1 times.
✗ Branch 5 (51→163) not taken.
✓ Branch 6 (57→58) taken 1 times.
✗ Branch 7 (57→60) not taken.
✓ Branch 8 (62→63) taken 1 times.
✗ Branch 9 (62→65) not taken.
✗ Branch 10 (169→170) not taken.
✗ Branch 11 (169→172) not taken.
✗ Branch 12 (175→176) not taken.
✗ Branch 13 (175→178) not taken.
|
4 | m_algo_seq->SetOption<std::vector<int>>("physics::SingleHadronKinematics", "hadron_list", {particle::pi_plus}); |
19 | 1 | m_algo_seq->Start(banks); | |
20 | |||
21 | // get bank indices | ||
22 |
2/4✓ Branch 0 (67→68) taken 1 times.
✗ Branch 1 (67→179) not taken.
✗ Branch 2 (68→69) not taken.
✓ Branch 3 (68→71) taken 1 times.
|
1 | b_result = GetBankIndex(banks, "physics::SingleHadronKinematics"); |
23 | |||
24 | // set an output file | ||
25 | 1 | auto output_dir = GetOutputDirectory(); | |
26 |
1/2✓ Branch 0 (74→75) taken 1 times.
✗ Branch 1 (74→89) not taken.
|
1 | if(output_dir) { |
27 |
3/6✓ Branch 0 (75→76) taken 1 times.
✗ Branch 1 (75→227) not taken.
✓ Branch 2 (76→77) taken 1 times.
✗ Branch 3 (76→185) not taken.
✓ Branch 4 (82→83) taken 1 times.
✗ Branch 5 (82→227) not taken.
|
2 | m_output_file_basename = output_dir.value() + "/single_hadron_kinematics"; |
28 |
2/4✓ Branch 0 (83→84) taken 1 times.
✗ Branch 1 (83→193) not taken.
✓ Branch 2 (86→87) taken 1 times.
✗ Branch 3 (86→191) not taken.
|
2 | m_output_file = new TFile(m_output_file_basename + ".root", "RECREATE"); |
29 | } | ||
30 | |||
31 | // define plots | ||
32 | const int n_bins = 100; | ||
33 | plot_list = { | ||
34 | { | ||
35 |
1/2✓ Branch 0 (90→91) taken 1 times.
✗ Branch 1 (90→213) not taken.
|
1 | new TH1D("z_dist", "z", n_bins, 0, 1), |
36 | 64 | [](auto const& b, auto const r) { return b.getDouble("z", r); } | |
37 | }, | ||
38 | { | ||
39 |
1/2✓ Branch 0 (92→93) taken 1 times.
✗ Branch 1 (92→211) not taken.
|
1 | new TH1D("PhPerp_dist", "P_{h}^{{}^{#perp}}", n_bins, 0, 2), |
40 | 64 | [](auto const& b, auto const r) { return b.getDouble("PhPerp", r); } | |
41 | }, | ||
42 | { | ||
43 |
1/2✓ Branch 0 (94→95) taken 1 times.
✗ Branch 1 (94→209) not taken.
|
1 | new TH1D("MX_dist", "Missing mass: M_{X} [GeV];", n_bins, 0, 4), |
44 |
1/2✓ Branch 0 (3→4) taken 64 times.
✗ Branch 1 (3→5) not taken.
|
64 | [](auto const& b, auto const r) { auto MX2 = b.getDouble("MX2", r); return MX2 >= 0 ? std::sqrt(MX2) : tools::UNDEF; } |
45 | }, | ||
46 | { | ||
47 |
1/2✓ Branch 0 (96→97) taken 1 times.
✗ Branch 1 (96→207) not taken.
|
1 | new TH1D("xF_dist", "Feynman-x: x_{F};", n_bins, -1, 1), |
48 | 64 | [](auto const& b, auto const r) { return b.getDouble("xF", r); } | |
49 | }, | ||
50 | { | ||
51 |
1/2✓ Branch 0 (98→99) taken 1 times.
✗ Branch 1 (98→205) not taken.
|
1 | new TH1D("yB_dist", "Breit frame rapidity: y_{B};", n_bins, -4, 4), |
52 | 64 | [](auto const& b, auto const r) { return b.getDouble("yB", r); } | |
53 | }, | ||
54 | { | ||
55 |
1/2✓ Branch 0 (100→101) taken 1 times.
✗ Branch 1 (100→203) not taken.
|
1 | new TH1D("phiH_dist", "#phi_{h};", n_bins, -M_PI, M_PI), |
56 | 64 | [](auto const& b, auto const r) { return b.getDouble("phiH", r); } | |
57 | }, | ||
58 | { | ||
59 |
1/2✓ Branch 0 (102→103) taken 1 times.
✗ Branch 1 (102→201) not taken.
|
1 | new TH1D("xi_dist", "#xi", n_bins, -1, 1), |
60 | 64 | [](auto const& b, auto const r) { return b.getDouble("xi", r); } | |
61 | }, | ||
62 |
4/10✓ Branch 0 (103→104) taken 1 times.
✗ Branch 1 (103→195) not taken.
✓ Branch 2 (105→106) taken 7 times.
✓ Branch 3 (105→109) taken 1 times.
✓ Branch 4 (106→107) taken 7 times.
✗ Branch 5 (106→108) not taken.
✗ Branch 6 (196→197) not taken.
✗ Branch 7 (196→200) not taken.
✗ Branch 8 (197→198) not taken.
✗ Branch 9 (197→199) not taken.
|
9 | }; |
63 | |||
64 | // format plots | ||
65 |
2/2✓ Branch 0 (124→110) taken 7 times.
✓ Branch 1 (124→125) taken 1 times.
|
8 | for(auto& plot : plot_list) { |
66 |
1/2✓ Branch 0 (110→111) taken 7 times.
✗ Branch 1 (110→227) not taken.
|
7 | plot.hist->SetLineColor(kGreen+1); |
67 |
1/2✓ Branch 0 (111→112) taken 7 times.
✗ Branch 1 (111→227) not taken.
|
7 | plot.hist->SetFillColor(kGreen+1); |
68 |
1/2✓ Branch 0 (119→120) taken 7 times.
✗ Branch 1 (119→221) not taken.
|
7 | plot.hist->SetTitle( |
69 |
2/4✓ Branch 0 (113→114) taken 7 times.
✗ Branch 1 (113→227) not taken.
✓ Branch 2 (114→115) taken 7 times.
✗ Branch 3 (114→227) not taken.
|
14 | TString(particle::title.at(particle::pi_plus)) + |
70 |
3/6✓ Branch 0 (112→113) taken 7 times.
✗ Branch 1 (112→227) not taken.
✓ Branch 2 (115→116) taken 7 times.
✗ Branch 3 (115→225) not taken.
✓ Branch 4 (116→117) taken 7 times.
✗ Branch 5 (116→223) not taken.
|
28 | " " + plot.hist->GetTitle()); |
71 | } | ||
72 |
7/18✓ Branch 0 (91→92) taken 1 times.
✗ Branch 1 (91→215) not taken.
✓ Branch 2 (93→94) taken 1 times.
✗ Branch 3 (93→215) not taken.
✓ Branch 4 (95→96) taken 1 times.
✗ Branch 5 (95→215) not taken.
✓ Branch 6 (97→98) taken 1 times.
✗ Branch 7 (97→215) not taken.
✓ Branch 8 (99→100) taken 1 times.
✗ Branch 9 (99→215) not taken.
✓ Branch 10 (101→102) taken 1 times.
✗ Branch 11 (101→215) not taken.
✓ Branch 12 (103→104) taken 1 times.
✗ Branch 13 (103→195) not taken.
✗ Branch 14 (216→217) not taken.
✗ Branch 15 (216→220) not taken.
✗ Branch 16 (217→218) not taken.
✗ Branch 17 (217→219) not taken.
|
8 | } |
73 | |||
74 | |||
75 | 1000 | void SingleHadronKinematicsValidator::Run(hipo::banklist& banks) const | |
76 | { | ||
77 | // calculate kinematics | ||
78 | 1000 | m_algo_seq->Run(banks); | |
79 |
2/4✓ Branch 0 (3→4) taken 1000 times.
✗ Branch 1 (3→36) not taken.
✓ Branch 2 (4→5) taken 1000 times.
✗ Branch 3 (4→30) not taken.
|
1000 | auto& result_bank = GetBank(banks, b_result, "physics::SingleHadronKinematics"); |
80 | |||
81 | // skip events with no hadrons | ||
82 |
2/2✓ Branch 0 (13→14) taken 948 times.
✓ Branch 1 (13→16) taken 52 times.
|
2000 | if(result_bank.getRowList().size() == 0) { |
83 | 948 | m_log->Debug("skip this event, since it has no kinematics results"); | |
84 | return; | ||
85 | } | ||
86 | |||
87 | // lock mutex and fill the plots | ||
88 | 52 | std::scoped_lock<std::mutex> lock(m_mutex); | |
89 |
3/4✓ Branch 0 (17→18) taken 52 times.
✗ Branch 1 (17→37) not taken.
✓ Branch 2 (27→19) taken 64 times.
✓ Branch 3 (27→28) taken 52 times.
|
116 | for(auto const& row : result_bank.getRowList()) { |
90 |
2/2✓ Branch 0 (25→20) taken 448 times.
✓ Branch 1 (25→26) taken 64 times.
|
512 | for(auto& plot : plot_list) |
91 |
2/4✗ Branch 0 (20→21) not taken.
✓ Branch 1 (20→22) taken 448 times.
✓ Branch 2 (23→24) taken 448 times.
✗ Branch 3 (23→37) not taken.
|
896 | plot.hist->Fill(plot.get_val(result_bank, row)); |
92 | } | ||
93 | } | ||
94 | |||
95 | |||
96 | 1 | void SingleHadronKinematicsValidator::Stop() | |
97 | { | ||
98 |
1/2✓ Branch 0 (4→5) taken 1 times.
✗ Branch 1 (4→29) not taken.
|
2 | if(GetOutputDirectory()) { |
99 | int const n_cols = 4; | ||
100 | 1 | int const n_rows = (plot_list.size() - 1) / n_cols + 1; | |
101 |
1/2✓ Branch 0 (8→9) taken 1 times.
✗ Branch 1 (8→30) not taken.
|
1 | auto canv = new TCanvas("canv", "canv", n_cols * 800, n_rows * 600); |
102 | 1 | canv->Divide(n_cols, n_rows); | |
103 | int pad_num = 0; | ||
104 |
2/2✓ Branch 0 (19→11) taken 7 times.
✓ Branch 1 (19→20) taken 1 times.
|
8 | for(auto& plot : plot_list) { |
105 | 7 | auto pad = canv->GetPad(++pad_num); | |
106 | 7 | pad->cd(); | |
107 | 7 | pad->SetGrid(1, 1); | |
108 | 7 | pad->SetLeftMargin(0.12); | |
109 | 7 | pad->SetRightMargin(0.12); | |
110 | 7 | pad->SetBottomMargin(0.12); | |
111 | 7 | plot.hist->Draw(); | |
112 | } | ||
113 |
1/2✓ Branch 0 (23→24) taken 1 times.
✗ Branch 1 (23→32) not taken.
|
2 | canv->SaveAs(m_output_file_basename + ".png"); |
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 |