GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 50 / 0 / 50
Functions: 100.0% 11 / 0 / 11
Branches: 60.5% 46 / 0 / 76

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