src/iguana/algorithms/clas12/ZVertexFilter/Algorithm.cc
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "Algorithm.h" | ||
| 2 | #include "iguana/algorithms/TypeDefs.h" | ||
| 3 | |||
| 4 | namespace iguana::clas12 { | ||
| 5 | |||
| 6 | REGISTER_IGUANA_ALGORITHM(ZVertexFilter); | ||
| 7 | |||
| 8 | 8 | void ZVertexFilter::ConfigHook() | |
| 9 | { | ||
| 10 | // get configuration | ||
| 11 |
4/8✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 27 not taken.
✓ Branch 4 → 5 taken 8 times.
✗ Branch 4 → 25 not taken.
✓ Branch 13 → 14 taken 8 times.
✓ Branch 13 → 16 taken 8 times.
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 31 not taken.
|
24 | o_particle_bank = GetOptionScalar<std::string>({"particle_bank"}); |
| 12 | 8 | o_runnum = ConcurrentParamFactory::Create<int>(); | |
| 13 | 8 | o_electron_vz_cuts = ConcurrentParamFactory::Create<std::vector<double>>(); | |
| 14 | 8 | } | |
| 15 | |||
| 16 | 8 | void ZVertexFilter::StartHook(hipo::banklist& banks) | |
| 17 | { | ||
| 18 | // get expected bank indices | ||
| 19 | 8 | b_particle = GetBankIndex(banks, o_particle_bank); | |
| 20 |
2/4✓ Branch 4 → 5 taken 8 times.
✗ Branch 4 → 11 not taken.
✓ Branch 5 → 6 taken 8 times.
✗ Branch 5 → 8 not taken.
|
8 | b_config = GetBankIndex(banks, "RUN::config"); |
| 21 | 8 | } | |
| 22 | |||
| 23 | 2000 | bool ZVertexFilter::RunHook(hipo::banklist& banks) const | |
| 24 | { | ||
| 25 |
1/2✓ Branch 5 → 6 taken 2000 times.
✗ Branch 5 → 12 not taken.
|
2000 | return Run( |
| 26 |
1/2✓ Branch 4 → 5 taken 2000 times.
✗ Branch 4 → 12 not taken.
|
2000 | GetBank(banks, b_particle, o_particle_bank), |
| 27 |
1/2✓ Branch 3 → 4 taken 2000 times.
✗ Branch 3 → 12 not taken.
|
4000 | GetBank(banks, b_config, "RUN::config")); |
| 28 | } | ||
| 29 | |||
| 30 | 2000 | bool ZVertexFilter::Run(hipo::bank& particleBank, hipo::bank const& configBank) const | |
| 31 | { | ||
| 32 | // dump the bank | ||
| 33 |
1/2✓ Branch 5 → 6 taken 2000 times.
✗ Branch 5 → 28 not taken.
|
4000 | ShowBank(particleBank, Logger::Header("INPUT PARTICLES")); |
| 34 | |||
| 35 | // prepare the event, reloading configuration parameters, if necessary | ||
| 36 | 2000 | auto key = PrepareEvent(configBank.getInt("run", 0)); | |
| 37 | |||
| 38 | // filter the input bank for requested PDG code(s) | ||
| 39 |
1/2✓ Branch 14 → 15 taken 2000 times.
✗ Branch 14 → 34 not taken.
|
2000 | particleBank.getMutableRowList().filter([this, key](auto bank, auto row) { |
| 40 | 13986 | auto zvertex = bank.getFloat("vz", row); | |
| 41 | 13986 | auto pid = bank.getInt("pid", row); | |
| 42 | 13986 | auto status = bank.getShort("status", row); | |
| 43 | 13986 | auto accept = Filter(zvertex, pid, status, key); | |
| 44 | 13986 | m_log->Debug("input vz {} pid {} status {} -- accept = {}", zvertex, pid, status, accept); | |
| 45 |
2/2✓ Branch 7 → 8 taken 42 times.
✓ Branch 7 → 9 taken 13944 times.
|
13986 | return accept ? 1 : 0; |
| 46 | }); | ||
| 47 | |||
| 48 | // dump the modified bank | ||
| 49 |
1/2✓ Branch 20 → 21 taken 2000 times.
✗ Branch 20 → 37 not taken.
|
4000 | ShowBank(particleBank, Logger::Header("OUTPUT PARTICLES")); |
| 50 | 2000 | return !particleBank.getRowList().empty(); | |
| 51 | } | ||
| 52 | |||
| 53 | 2005 | concurrent_key_t ZVertexFilter::PrepareEvent(int const runnum) const | |
| 54 | { | ||
| 55 |
2/2✓ Branch 3 → 4 taken 1005 times.
✓ Branch 3 → 8 taken 1000 times.
|
2005 | m_log->Trace("calling PrepareEvent({})", runnum); |
| 56 |
2/2✓ Branch 3 → 4 taken 1005 times.
✓ Branch 3 → 8 taken 1000 times.
|
2005 | if(o_runnum->NeedsHashing()) { |
| 57 | std::hash<int> hash_ftn; | ||
| 58 | auto hash_key = hash_ftn(runnum); | ||
| 59 |
2/2✓ Branch 5 → 6 taken 6 times.
✓ Branch 5 → 7 taken 999 times.
|
1005 | if(!o_runnum->HasKey(hash_key)) |
| 60 | 6 | Reload(runnum, hash_key); | |
| 61 | return hash_key; | ||
| 62 | } | ||
| 63 | else { | ||
| 64 |
3/4✓ Branch 8 → 9 taken 999 times.
✓ Branch 8 → 11 taken 1 time.
✗ Branch 10 → 11 not taken.
✓ Branch 10 → 12 taken 999 times.
|
1000 | if(o_runnum->IsEmpty() || o_runnum->Load(0) != runnum) |
| 65 | 1 | Reload(runnum, 0); | |
| 66 | 1000 | return 0; | |
| 67 | } | ||
| 68 | } | ||
| 69 | |||
| 70 | 7 | void ZVertexFilter::Reload(int const runnum, concurrent_key_t key) const | |
| 71 | { | ||
| 72 | 7 | std::lock_guard<std::mutex> const lock(m_mutex); // NOTE: be sure to lock successive `ConcurrentParam::Save` calls !!! | |
| 73 |
2/4✓ Branch 3 → 4 taken 7 times.
✗ Branch 3 → 57 not taken.
✓ Branch 4 → 5 taken 7 times.
✗ Branch 4 → 57 not taken.
|
7 | m_log->Trace("-> calling Reload({}, {})", runnum, key); |
| 74 |
1/2✓ Branch 4 → 5 taken 7 times.
✗ Branch 4 → 57 not taken.
|
7 | o_runnum->Save(runnum, key); |
| 75 |
9/18✓ Branch 5 → 6 taken 7 times.
✗ Branch 5 → 52 not taken.
✓ Branch 6 → 7 taken 7 times.
✗ Branch 6 → 52 not taken.
✓ Branch 7 → 8 taken 7 times.
✗ Branch 7 → 52 not taken.
✓ Branch 8 → 9 taken 7 times.
✗ Branch 8 → 46 not taken.
✓ Branch 12 → 13 taken 7 times.
✗ Branch 12 → 38 not taken.
✓ Branch 13 → 14 taken 7 times.
✗ Branch 13 → 36 not taken.
✓ Branch 14 → 15 taken 7 times.
✗ Branch 14 → 32 not taken.
✓ Branch 20 → 21 taken 21 times.
✓ Branch 20 → 23 taken 7 times.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 42 not taken.
|
49 | o_electron_vz_cuts->Save(GetOptionVector<double>({"electron", GetConfig()->InRange("runs", runnum), "vz"}), key); |
| 76 |
0/2✗ Branch 53 → 54 not taken.
✗ Branch 53 → 56 not taken.
|
7 | } |
| 77 | |||
| 78 | 13986 | bool ZVertexFilter::Filter(double const zvertex, int const pid, int const status, concurrent_key_t key) const | |
| 79 | { | ||
| 80 |
4/4✓ Branch 2 → 3 taken 1278 times.
✓ Branch 2 → 14 taken 12708 times.
✓ Branch 3 → 4 taken 290 times.
✓ Branch 3 → 14 taken 988 times.
|
13986 | if(pid == particle::PDG::electron && abs(status) >= 2000) { |
| 81 | 290 | auto zcuts = GetElectronZcuts(key); | |
| 82 |
6/8✓ Branch 5 → 6 taken 290 times.
✗ Branch 5 → 15 not taken.
✓ Branch 6 → 7 taken 286 times.
✓ Branch 6 → 9 taken 4 times.
✓ Branch 7 → 8 taken 286 times.
✗ Branch 7 → 15 not taken.
✓ Branch 8 → 9 taken 38 times.
✓ Branch 8 → 10 taken 248 times.
|
290 | return zvertex > zcuts.at(0) && zvertex < zcuts.at(1); |
| 83 | } | ||
| 84 | return true; // cuts don't apply | ||
| 85 | } | ||
| 86 | |||
| 87 | 1 | int ZVertexFilter::GetRunNum(concurrent_key_t const key) const | |
| 88 | { | ||
| 89 | 1 | return o_runnum->Load(key); | |
| 90 | } | ||
| 91 | |||
| 92 | 302 | std::vector<double> ZVertexFilter::GetElectronZcuts(concurrent_key_t const key) const | |
| 93 | { | ||
| 94 | 302 | return o_electron_vz_cuts->Load(key); | |
| 95 | } | ||
| 96 | |||
| 97 | 1 | void ZVertexFilter::SetElectronZcuts(double zcut_lower, double zcut_upper, concurrent_key_t const key) | |
| 98 | { | ||
| 99 |
1/2✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 8 not taken.
|
1 | o_electron_vz_cuts->Save({zcut_lower, zcut_upper}, key); |
| 100 | 1 | } | |
| 101 | |||
| 102 | } | ||
| 103 |