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