GCC Code Coverage Report


Directory: ./
File: src/iguana/algorithms/clas12/TrajLinker/Algorithm.cc
Date: 2025-09-02 18:26:12
Exec Total Coverage
Lines: 93 93 100.0%
Functions: 4 4 100.0%
Branches: 61 94 64.9%

Line Branch Exec Source
1 #include "Algorithm.h"
2 #include "iguana/algorithms/TypeDefs.h"
3
4 namespace iguana::clas12 {
5
6 REGISTER_IGUANA_ALGORITHM(TrajLinker, "REC::Particle::Traj");
7
8 3 void TrajLinker::Start(hipo::banklist& banks)
9 {
10
2/4
✓ Branch 0 (3→4) taken 3 times.
✗ Branch 1 (3→39) not taken.
✓ Branch 2 (4→5) taken 3 times.
✗ Branch 3 (4→7) not taken.
3 b_particle = GetBankIndex(banks,"REC::Particle");
11
2/4
✓ Branch 0 (10→11) taken 3 times.
✗ Branch 1 (10→45) not taken.
✓ Branch 2 (11→12) taken 3 times.
✗ Branch 3 (11→14) not taken.
3 b_traj = GetBankIndex(banks,"REC::Traj");
12
1/2
✓ Branch 0 (17→18) taken 3 times.
✗ Branch 1 (17→51) not taken.
3 auto result_schema = CreateBank(banks, b_result,"REC::Particle::Traj");
13
1/2
✓ Branch 0 (23→24) taken 3 times.
✗ Branch 1 (23→57) not taken.
3 i_pindex = result_schema.getEntryOrder("pindex");
14
1/2
✓ Branch 0 (24→25) taken 3 times.
✗ Branch 1 (24→57) not taken.
3 i_sector = result_schema.getEntryOrder("sector");
15
1/2
✓ Branch 0 (25→26) taken 3 times.
✗ Branch 1 (25→57) not taken.
3 i_r1_found = result_schema.getEntryOrder("r1_found");
16
1/2
✓ Branch 0 (26→27) taken 3 times.
✗ Branch 1 (26→57) not taken.
3 i_r1_x = result_schema.getEntryOrder("r1_x");
17
1/2
✓ Branch 0 (27→28) taken 3 times.
✗ Branch 1 (27→57) not taken.
3 i_r1_y = result_schema.getEntryOrder("r1_y");
18
1/2
✓ Branch 0 (28→29) taken 3 times.
✗ Branch 1 (28→57) not taken.
3 i_r1_z = result_schema.getEntryOrder("r1_z");
19
1/2
✓ Branch 0 (29→30) taken 3 times.
✗ Branch 1 (29→57) not taken.
3 i_r2_found = result_schema.getEntryOrder("r2_found");
20
1/2
✓ Branch 0 (30→31) taken 3 times.
✗ Branch 1 (30→57) not taken.
3 i_r2_x = result_schema.getEntryOrder("r2_x");
21
1/2
✓ Branch 0 (31→32) taken 3 times.
✗ Branch 1 (31→57) not taken.
3 i_r2_y = result_schema.getEntryOrder("r2_y");
22
1/2
✓ Branch 0 (32→33) taken 3 times.
✗ Branch 1 (32→57) not taken.
3 i_r2_z = result_schema.getEntryOrder("r2_z");
23
1/2
✓ Branch 0 (33→34) taken 3 times.
✗ Branch 1 (33→57) not taken.
3 i_r3_found = result_schema.getEntryOrder("r3_found");
24
1/2
✓ Branch 0 (34→35) taken 3 times.
✗ Branch 1 (34→57) not taken.
3 i_r3_x = result_schema.getEntryOrder("r3_x");
25
1/2
✓ Branch 0 (35→36) taken 3 times.
✗ Branch 1 (35→57) not taken.
3 i_r3_y = result_schema.getEntryOrder("r3_y");
26
1/2
✓ Branch 0 (36→37) taken 3 times.
✗ Branch 1 (36→57) not taken.
3 i_r3_z = result_schema.getEntryOrder("r3_z");
27 3 }
28
29 3000 void TrajLinker::Run(hipo::banklist& banks) const
30 {
31
1/2
✓ Branch 0 (3→4) taken 3000 times.
✗ Branch 1 (3→113) not taken.
3000 auto& bank_particle = GetBank(banks, b_particle, "REC::Particle");
32
1/2
✓ Branch 0 (10→11) taken 3000 times.
✗ Branch 1 (10→119) not taken.
3000 auto& bank_traj = GetBank(banks, b_traj, "REC::Traj");
33
1/2
✓ Branch 0 (17→18) taken 3000 times.
✗ Branch 1 (17→125) not taken.
3000 auto& bank_result = GetBank(banks, b_result, "REC::Particle::Traj");
34
35
1/2
✓ Branch 0 (26→27) taken 3000 times.
✗ Branch 1 (26→131) not taken.
6000 ShowBank(bank_particle, Logger::Header("INPUT PARTICLE BANK"));
36
1/2
✓ Branch 0 (35→36) taken 3000 times.
✗ Branch 1 (35→137) not taken.
9000 ShowBank(bank_traj, Logger::Header("INPUT TRAJECTORY BANK"));
37
38 // sync new bank with particle bank, and fill it with zeroes
39 3000 bank_result.setRows(bank_particle.getRows());
40 3000 bank_result.getMutableRowList().setList(bank_particle.getRowList());
41
2/2
✓ Branch 0 (60→45) taken 21429 times.
✓ Branch 1 (60→61) taken 3000 times.
24429 for(int row = 0; row < bank_result.getRows(); row++) {
42 21429 bank_result.putShort(i_pindex, row, static_cast<int16_t>(row));
43 21429 bank_result.putInt(i_sector, row, 0);
44 21429 bank_result.putByte(i_r1_found, row, 0);
45 21429 bank_result.putFloat(i_r1_x, row, 0);
46 21429 bank_result.putFloat(i_r1_y, row, 0);
47 21429 bank_result.putFloat(i_r1_z, row, 0);
48 21429 bank_result.putByte(i_r2_found, row, 0);
49 21429 bank_result.putFloat(i_r2_x, row, 0);
50 21429 bank_result.putFloat(i_r2_y, row, 0);
51 21429 bank_result.putFloat(i_r2_z, row, 0);
52 21429 bank_result.putByte(i_r3_found, row, 0);
53 21429 bank_result.putFloat(i_r3_x, row, 0);
54 21429 bank_result.putFloat(i_r3_y, row, 0);
55 21429 bank_result.putFloat(i_r3_z, row, 0);
56 }
57
58 // map particle `pindex` -> `TrajLinkerVars` object
59 std::map<int, TrajLinkerVars> link_map;
60
61 // loop over particle rows
62
3/4
✓ Branch 0 (61→62) taken 3000 times.
✗ Branch 1 (61→149) not taken.
✓ Branch 2 (101→63) taken 16634 times.
✓ Branch 3 (101→102) taken 3000 times.
19634 for(auto const& row_particle : bank_particle.getRowList()) {
63 // create new `TrajLinkerVars` object for this particle
64
1/2
✓ Branch 0 (63→64) taken 16634 times.
✗ Branch 1 (63→149) not taken.
16634 auto& link_particle = link_map[row_particle];
65 // loop over `REC::Traj` rows, setting elements of linked `TrajLinkerVars`
66
3/4
✓ Branch 0 (64→65) taken 16634 times.
✗ Branch 1 (64→149) not taken.
✓ Branch 2 (86→66) taken 745254 times.
✓ Branch 3 (86→87) taken 16634 times.
761888 for(auto const& row_traj : bank_traj.getRowList()) {
67
2/2
✓ Branch 0 (67→68) taken 101794 times.
✓ Branch 1 (67→85) taken 643460 times.
745254 if(row_particle == bank_traj.getShort("pindex", row_traj)) {
68
2/2
✓ Branch 0 (69→70) taken 15234 times.
✓ Branch 1 (69→85) taken 86560 times.
101794 if(bank_traj.getByte("detector", row_traj) == DetectorType::DC) { // only apply to DC
69
3/4
✓ Branch 0 (71→72) taken 5078 times.
✓ Branch 1 (71→76) taken 5078 times.
✓ Branch 2 (71→81) taken 5078 times.
✗ Branch 3 (71→85) not taken.
15234 switch(bank_traj.getInt("layer", row_traj)) {
70 5078 case 6: // region 1
71 5078 link_particle.r1_found = 1;
72 5078 link_particle.r1_x = bank_traj.getFloat("x", row_traj);
73 5078 link_particle.r1_y = bank_traj.getFloat("y", row_traj);
74 5078 link_particle.r1_z = bank_traj.getFloat("z", row_traj);
75 5078 break;
76 5078 case 18: // region 2
77 5078 link_particle.r2_found = 1;
78 5078 link_particle.r2_x = bank_traj.getFloat("x", row_traj);
79 5078 link_particle.r2_y = bank_traj.getFloat("y", row_traj);
80 5078 link_particle.r2_z = bank_traj.getFloat("z", row_traj);
81 // Determine Sector from the center of the DC
82
1/2
✓ Branch 0 (79→80) taken 5078 times.
✗ Branch 1 (79→149) not taken.
5078 link_particle.sector = GetSector(link_particle.r2_x, link_particle.r2_y, link_particle.r2_z);
83 5078 break;
84 5078 case 36: // region 3
85 5078 link_particle.r3_found = 1;
86 5078 link_particle.r3_x = bank_traj.getFloat("x", row_traj);
87 5078 link_particle.r3_y = bank_traj.getFloat("y", row_traj);
88 5078 link_particle.r3_z = bank_traj.getFloat("z", row_traj);
89 5078 break;
90 }
91 }
92 }
93 }
94 // fill output bank
95 16634 bank_result.putInt(i_sector, row_particle, link_particle.sector);
96 16634 bank_result.putByte(i_r1_found, row_particle, link_particle.r1_found);
97 16634 bank_result.putFloat(i_r1_x, row_particle, link_particle.r1_x);
98 16634 bank_result.putFloat(i_r1_y, row_particle, link_particle.r1_y);
99 16634 bank_result.putFloat(i_r1_z, row_particle, link_particle.r1_z);
100 16634 bank_result.putByte(i_r2_found, row_particle, link_particle.r2_found);
101 16634 bank_result.putFloat(i_r2_x, row_particle, link_particle.r2_x);
102 16634 bank_result.putFloat(i_r2_y, row_particle, link_particle.r2_y);
103 16634 bank_result.putFloat(i_r2_z, row_particle, link_particle.r2_z);
104 16634 bank_result.putByte(i_r3_found, row_particle, link_particle.r3_found);
105 16634 bank_result.putFloat(i_r3_x, row_particle, link_particle.r3_x);
106 16634 bank_result.putFloat(i_r3_y, row_particle, link_particle.r3_y);
107 16634 bank_result.putFloat(i_r3_z, row_particle, link_particle.r3_z);
108 }
109
2/4
✓ Branch 0 (102→103) taken 3000 times.
✗ Branch 1 (102→149) not taken.
✓ Branch 2 (105→106) taken 3000 times.
✗ Branch 3 (105→143) not taken.
9000 ShowBank(bank_result, Logger::Header("CREATED BANK"));
110 3000 }
111
112 3 void TrajLinker::Stop()
113 {
114 3 }
115
116 5078 int TrajLinker::GetSector(float const& x, float const& y, float const& z) const
117 {
118 5078 float phi = 180 / M_PI * atan2(y / sqrt(pow(x,2) + pow(y,2) + pow(z,2)),
119 5078 x /sqrt(pow(x,2) + pow(y,2) + pow(z,2)));
120
4/4
✓ Branch 0 (2→3) taken 2944 times.
✓ Branch 1 (2→4) taken 2134 times.
✓ Branch 2 (3→4) taken 2102 times.
✓ Branch 3 (3→13) taken 842 times.
5078 if(phi<30 && phi>=-30) return 1;
121
4/4
✓ Branch 0 (4→5) taken 2927 times.
✓ Branch 1 (4→6) taken 1309 times.
✓ Branch 2 (5→6) taken 2102 times.
✓ Branch 3 (5→13) taken 825 times.
4236 else if(phi<90 && phi>=30) return 2;
122
4/4
✓ Branch 0 (6→7) taken 3012 times.
✓ Branch 1 (6→8) taken 399 times.
✓ Branch 2 (7→9) taken 2102 times.
✓ Branch 3 (7→13) taken 910 times.
3411 else if(phi<150 && phi>=90) return 3;
123
3/4
✗ Branch 0 (8→9) not taken.
✓ Branch 1 (8→13) taken 399 times.
✓ Branch 2 (9→10) taken 1736 times.
✓ Branch 3 (9→13) taken 366 times.
2501 else if(phi>=150 || phi<-150) return 4;
124
2/2
✓ Branch 0 (10→11) taken 862 times.
✓ Branch 1 (10→13) taken 874 times.
1736 else if(phi<-90 && phi>=-150) return 5;
125
1/2
✓ Branch 0 (11→12) taken 862 times.
✗ Branch 1 (11→13) not taken.
862 else if(phi<-30 && phi>=-90) return 6;
126 return -1;
127 }
128
129 }
130