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 |