Line | Branch | Exec | Source |
---|---|---|---|
1 | #include "Validator.h" | ||
2 | #include "TypeDefs.h" | ||
3 | |||
4 | #include <Math/Vector3D.h> | ||
5 | |||
6 | namespace iguana::physics { | ||
7 | |||
8 | REGISTER_IGUANA_VALIDATOR(DihadronKinematicsValidator); | ||
9 | |||
10 | 1 | void DihadronKinematicsValidator::Start(hipo::banklist& banks) | |
11 | { | ||
12 | // define the algorithm sequence | ||
13 | 2 | m_algo_seq = std::make_unique<AlgorithmSequence>(); | |
14 |
3/8✓ Branch 0 (7→8) taken 1 times.
✗ Branch 1 (7→159) not taken.
✓ Branch 2 (8→9) taken 1 times.
✗ Branch 3 (8→153) not taken.
✓ Branch 4 (14→15) taken 1 times.
✗ Branch 5 (14→17) not taken.
✗ Branch 6 (159→160) not taken.
✗ Branch 7 (159→162) not taken.
|
2 | m_algo_seq->Add("physics::InclusiveKinematics"); |
15 |
3/8✓ Branch 0 (20→21) taken 1 times.
✗ Branch 1 (20→171) not taken.
✓ Branch 2 (21→22) taken 1 times.
✗ Branch 3 (21→165) not taken.
✓ Branch 4 (27→28) taken 1 times.
✗ Branch 5 (27→30) not taken.
✗ Branch 6 (171→172) not taken.
✗ Branch 7 (171→174) not taken.
|
2 | m_algo_seq->Add("physics::DihadronKinematics"); |
16 |
2/6✓ Branch 0 (34→35) taken 1 times.
✗ Branch 1 (34→183) not taken.
✓ Branch 2 (43→44) taken 1 times.
✗ Branch 3 (43→46) not taken.
✗ Branch 4 (183→184) not taken.
✗ Branch 5 (183→186) not taken.
|
3 | m_algo_seq->SetOption("physics::DihadronKinematics", "log", m_log->GetLevel()); |
17 |
5/14✓ Branch 0 (49→50) taken 1 times.
✗ Branch 1 (49→201) not taken.
✓ Branch 2 (50→51) taken 1 times.
✗ Branch 3 (50→195) not taken.
✓ Branch 4 (51→52) taken 1 times.
✗ Branch 5 (51→189) 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 (195→196) not taken.
✗ Branch 11 (195→198) not taken.
✗ Branch 12 (201→202) not taken.
✗ Branch 13 (201→204) not taken.
|
4 | m_algo_seq->SetOption<std::vector<int>>("physics::DihadronKinematics", "hadron_a_list", {particle::pi_plus}); |
18 |
5/14✓ Branch 0 (66→67) taken 1 times.
✗ Branch 1 (66→217) not taken.
✓ Branch 2 (67→68) taken 1 times.
✗ Branch 3 (67→211) not taken.
✓ Branch 4 (68→69) taken 1 times.
✗ Branch 5 (68→205) not taken.
✓ Branch 6 (74→75) taken 1 times.
✗ Branch 7 (74→77) not taken.
✓ Branch 8 (79→80) taken 1 times.
✗ Branch 9 (79→82) not taken.
✗ Branch 10 (211→212) not taken.
✗ Branch 11 (211→214) not taken.
✗ Branch 12 (217→218) not taken.
✗ Branch 13 (217→220) not taken.
|
4 | m_algo_seq->SetOption<std::vector<int>>("physics::DihadronKinematics", "hadron_b_list", {particle::pi_minus}); |
19 | 1 | m_algo_seq->Start(banks); | |
20 | |||
21 | // get bank indices | ||
22 |
2/4✓ Branch 0 (84→85) taken 1 times.
✗ Branch 1 (84→221) not taken.
✗ Branch 2 (85→86) not taken.
✓ Branch 3 (85→88) taken 1 times.
|
1 | b_result = GetBankIndex(banks, "physics::DihadronKinematics"); |
23 | |||
24 | // set an output file | ||
25 | 1 | auto output_dir = GetOutputDirectory(); | |
26 |
1/2✓ Branch 0 (91→92) taken 1 times.
✗ Branch 1 (91→106) not taken.
|
1 | if(output_dir) { |
27 |
3/6✓ Branch 0 (92→93) taken 1 times.
✗ Branch 1 (92→277) not taken.
✓ Branch 2 (93→94) taken 1 times.
✗ Branch 3 (93→227) not taken.
✓ Branch 4 (99→100) taken 1 times.
✗ Branch 5 (99→277) not taken.
|
2 | m_output_file_basename = output_dir.value() + "/dihadron_kinematics"; |
28 |
2/4✓ Branch 0 (100→101) taken 1 times.
✗ Branch 1 (100→235) not taken.
✓ Branch 2 (103→104) taken 1 times.
✗ Branch 3 (103→233) 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 (107→108) taken 1 times.
✗ Branch 1 (107→259) not taken.
|
1 | new TH1D("Mh_dist", "invariant mass M_{h} [GeV]", n_bins, 0, 4), |
36 | 11 | [](auto const& b, auto const r) { return b.getDouble("Mh", r); } | |
37 | }, | ||
38 | { | ||
39 |
1/2✓ Branch 0 (109→110) taken 1 times.
✗ Branch 1 (109→257) not taken.
|
1 | new TH1D("z_dist", "z", n_bins, 0, 1), |
40 | 11 | [](auto const& b, auto const r) { return b.getDouble("z", r); } | |
41 | }, | ||
42 | { | ||
43 |
1/2✓ Branch 0 (111→112) taken 1 times.
✗ Branch 1 (111→255) not taken.
|
1 | new TH1D("PhPerp_dist", "P_{h}^{{}^{#perp}}", n_bins, 0, 2), |
44 | 11 | [](auto const& b, auto const r) { return b.getDouble("PhPerp", r); } | |
45 | }, | ||
46 | { | ||
47 |
1/2✓ Branch 0 (113→114) taken 1 times.
✗ Branch 1 (113→253) not taken.
|
1 | new TH1D("MX_dist", "Missing mass: M_{X} [GeV];", n_bins, 0, 4), |
48 |
1/2✓ Branch 0 (3→4) taken 11 times.
✗ Branch 1 (3→5) not taken.
|
11 | [](auto const& b, auto const r) { auto MX2 = b.getDouble("MX2", r); return MX2 >= 0 ? std::sqrt(MX2) : -100; } // FIXME: handle space-like case better |
49 | }, | ||
50 | { | ||
51 |
1/2✓ Branch 0 (115→116) taken 1 times.
✗ Branch 1 (115→251) not taken.
|
1 | new TH1D("xF_dist", "Feynman-x: x_{F};", n_bins, -1, 1), |
52 | 11 | [](auto const& b, auto const r) { return b.getDouble("xF", r); } | |
53 | }, | ||
54 | { | ||
55 |
1/2✓ Branch 0 (117→118) taken 1 times.
✗ Branch 1 (117→249) not taken.
|
1 | new TH1D("yB_dist", "Breit frame rapidity: y_{B};", n_bins, -4, 4), |
56 | 11 | [](auto const& b, auto const r) { return b.getDouble("yB", r); } | |
57 | }, | ||
58 | { | ||
59 |
1/2✓ Branch 0 (119→120) taken 1 times.
✗ Branch 1 (119→247) not taken.
|
1 | new TH1D("phiH_dist", "#phi_{h};", n_bins, -M_PI, M_PI), |
60 | 11 | [](auto const& b, auto const r) { return b.getDouble("phiH", r); } | |
61 | }, | ||
62 | { | ||
63 |
1/2✓ Branch 0 (121→122) taken 1 times.
✗ Branch 1 (121→245) not taken.
|
1 | new TH1D("phiR_dist", "#phi_{R}", n_bins, -M_PI, M_PI), |
64 | 11 | [](auto const& b, auto const r) { return b.getDouble("phiR", r); } | |
65 | }, | ||
66 | { | ||
67 |
1/2✓ Branch 0 (123→124) taken 1 times.
✗ Branch 1 (123→243) not taken.
|
1 | new TH1D("theta_dist", "#theta;", n_bins, 0, M_PI), |
68 | 11 | [](auto const& b, auto const r) { return b.getDouble("theta", r); } | |
69 | } | ||
70 |
4/10✓ Branch 0 (124→125) taken 1 times.
✗ Branch 1 (124→237) not taken.
✓ Branch 2 (126→127) taken 9 times.
✓ Branch 3 (126→130) taken 1 times.
✓ Branch 4 (127→128) taken 9 times.
✗ Branch 5 (127→129) not taken.
✗ Branch 6 (238→239) not taken.
✗ Branch 7 (238→242) not taken.
✗ Branch 8 (239→240) not taken.
✗ Branch 9 (239→241) not taken.
|
11 | }; |
71 | |||
72 | // format plots | ||
73 |
2/2✓ Branch 0 (150→131) taken 9 times.
✓ Branch 1 (150→151) taken 1 times.
|
10 | for(auto& plot : plot_list) { |
74 |
1/2✓ Branch 0 (131→132) taken 9 times.
✗ Branch 1 (131→277) not taken.
|
9 | plot.hist->SetLineColor(kRed); |
75 |
1/2✓ Branch 0 (132→133) taken 9 times.
✗ Branch 1 (132→277) not taken.
|
9 | plot.hist->SetFillColor(kRed); |
76 |
1/2✓ Branch 0 (143→144) taken 9 times.
✗ Branch 1 (143→267) not taken.
|
9 | plot.hist->SetTitle( |
77 |
2/4✓ Branch 0 (136→137) taken 9 times.
✗ Branch 1 (136→275) not taken.
✓ Branch 2 (137→138) taken 9 times.
✗ Branch 3 (137→275) not taken.
|
18 | TString(particle::title.at(particle::pi_plus)) + |
78 |
3/6✓ Branch 0 (134→135) taken 9 times.
✗ Branch 1 (134→277) not taken.
✓ Branch 2 (135→136) taken 9 times.
✗ Branch 3 (135→277) not taken.
✓ Branch 4 (138→139) taken 9 times.
✗ Branch 5 (138→273) not taken.
|
36 | TString(particle::title.at(particle::pi_minus)) + |
79 |
3/6✓ Branch 0 (133→134) taken 9 times.
✗ Branch 1 (133→277) not taken.
✓ Branch 2 (139→140) taken 9 times.
✗ Branch 3 (139→271) not taken.
✓ Branch 4 (140→141) taken 9 times.
✗ Branch 5 (140→269) not taken.
|
36 | " " + plot.hist->GetTitle()); |
80 | } | ||
81 |
9/22✓ Branch 0 (108→109) taken 1 times.
✗ Branch 1 (108→261) not taken.
✓ Branch 2 (110→111) taken 1 times.
✗ Branch 3 (110→261) not taken.
✓ Branch 4 (112→113) taken 1 times.
✗ Branch 5 (112→261) not taken.
✓ Branch 6 (114→115) taken 1 times.
✗ Branch 7 (114→261) not taken.
✓ Branch 8 (116→117) taken 1 times.
✗ Branch 9 (116→261) not taken.
✓ Branch 10 (118→119) taken 1 times.
✗ Branch 11 (118→261) not taken.
✓ Branch 12 (120→121) taken 1 times.
✗ Branch 13 (120→261) not taken.
✓ Branch 14 (122→123) taken 1 times.
✗ Branch 15 (122→261) not taken.
✓ Branch 16 (124→125) taken 1 times.
✗ Branch 17 (124→237) not taken.
✗ Branch 18 (262→263) not taken.
✗ Branch 19 (262→266) not taken.
✗ Branch 20 (263→264) not taken.
✗ Branch 21 (263→265) not taken.
|
10 | } |
82 | |||
83 | |||
84 | 1000 | void DihadronKinematicsValidator::Run(hipo::banklist& banks) const | |
85 | { | ||
86 | // calculate kinematics | ||
87 | 1000 | m_algo_seq->Run(banks); | |
88 |
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::DihadronKinematics"); |
89 | |||
90 | // skip events with no dihadrons | ||
91 |
2/2✓ Branch 0 (13→14) taken 992 times.
✓ Branch 1 (13→16) taken 8 times.
|
2000 | if(result_bank.getRowList().size() == 0) { |
92 | 992 | m_log->Debug("skip this event, since it has no kinematics results"); | |
93 | return; | ||
94 | } | ||
95 | |||
96 | // lock mutex and fill the plots | ||
97 | 8 | std::scoped_lock<std::mutex> lock(m_mutex); | |
98 |
3/4✓ Branch 0 (17→18) taken 8 times.
✗ Branch 1 (17→37) not taken.
✓ Branch 2 (27→19) taken 11 times.
✓ Branch 3 (27→28) taken 8 times.
|
19 | for(auto const& row : result_bank.getRowList()) { |
99 |
2/2✓ Branch 0 (25→20) taken 99 times.
✓ Branch 1 (25→26) taken 11 times.
|
110 | for(auto& plot : plot_list) |
100 |
2/4✗ Branch 0 (20→21) not taken.
✓ Branch 1 (20→22) taken 99 times.
✓ Branch 2 (23→24) taken 99 times.
✗ Branch 3 (23→37) not taken.
|
198 | plot.hist->Fill(plot.get_val(result_bank, row)); |
101 | } | ||
102 | } | ||
103 | |||
104 | |||
105 | 1 | void DihadronKinematicsValidator::Stop() | |
106 | { | ||
107 |
1/2✓ Branch 0 (4→5) taken 1 times.
✗ Branch 1 (4→29) not taken.
|
2 | if(GetOutputDirectory()) { |
108 | int const n_cols = 4; | ||
109 | 1 | int const n_rows = (plot_list.size() - 1) / n_cols + 1; | |
110 |
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); |
111 | 1 | canv->Divide(n_cols, n_rows); | |
112 | int pad_num = 0; | ||
113 |
2/2✓ Branch 0 (19→11) taken 9 times.
✓ Branch 1 (19→20) taken 1 times.
|
10 | for(auto& plot : plot_list) { |
114 | 9 | auto pad = canv->GetPad(++pad_num); | |
115 | 9 | pad->cd(); | |
116 | 9 | pad->SetGrid(1, 1); | |
117 | 9 | pad->SetLeftMargin(0.12); | |
118 | 9 | pad->SetRightMargin(0.12); | |
119 | 9 | pad->SetBottomMargin(0.12); | |
120 | 9 | plot.hist->Draw(); | |
121 | } | ||
122 |
1/2✓ Branch 0 (23→24) taken 1 times.
✗ Branch 1 (23→32) not taken.
|
2 | canv->SaveAs(m_output_file_basename + ".png"); |
123 | 1 | m_output_file->Write(); | |
124 | 1 | m_log->Info("Wrote output file {}", m_output_file->GetName()); | |
125 | 1 | m_output_file->Close(); | |
126 | } | ||
127 | 1 | } | |
128 | |||
129 | } | ||
130 |