5#include "TrigScint/Firmware/objdef.h"
6#include "TrigScint/Firmware/trackproducer.h"
11#ifdef TS_NOT_EMULATION
12#pragma HLS ARRAY_PARTITION variable = pad1 dim = 0 complete
13#pragma HLS ARRAY_PARTITION variable = pad2 dim = 0 complete
14#pragma HLS ARRAY_PARTITION variable = pad3 dim = 0 complete
15#pragma HLS ARRAY_PARTITION variable = outTrk dim = 0 complete
16#pragma HLS ARRAY_PARTITION variable = lookup dim = 0 complete
17#pragma HLS PIPELINE II = 10
20#ifdef TS_NOT_EMULATION
21#pragma HLS ARRAY_PARTITION variable = test complete
35 for (
int i = 0; i < NTRK; i++) {
36 if (2 * pad1[i].seed_.b_id_ > 2 * NCHAN) {
39 for (
int j = 0; j < COMBO; j++) {
41 if (not(pad1[i].seed_.amp_ > 0)) {
45 if (pad1[i].sec_.amp_ > 0) {
48 cpyCluster(test.pad1_, pad1[i]);
49 if ((lookup[centroid][j][0] == -1) or (lookup[centroid][j][1] == -1)) {
52 if (not(pad2[lookup[centroid][j][0] / 4].seed_.amp_ > 0)) {
55 if ((lookup[centroid][j][0] % 4 == 0) and
56 ((pad2[lookup[centroid][j][0] / 4].sec_.b_id_ >= 0) or
57 (pad2[lookup[centroid][j][0] / 4].seed_.b_id_ % 2 == 1))) {
60 if ((lookup[centroid][j][0] % 4 == 1) and
61 ((pad2[lookup[centroid][j][0] / 4].sec_.b_id_ < 0) or
62 (pad2[lookup[centroid][j][0] / 4].seed_.b_id_ % 2 == 1))) {
65 if ((lookup[centroid][j][0] % 4 == 2) and
66 ((pad2[lookup[centroid][j][0] / 4].sec_.b_id_ >= 0) or
67 (pad2[lookup[centroid][j][0] / 4].seed_.b_id_ % 2 == 0))) {
70 if ((lookup[centroid][j][0] % 4 == 3) and
71 ((pad2[lookup[centroid][j][0] / 4].sec_.b_id_ < 0) or
72 (pad2[lookup[centroid][j][0] / 4].seed_.b_id_ % 2 == 0))) {
75 if (not(pad3[lookup[centroid][j][1] / 4].seed_.amp_ > 0)) {
78 if ((lookup[centroid][j][1] % 4 == 0) and
79 ((pad3[lookup[centroid][j][1] / 4].sec_.b_id_ >= 0) or
80 (pad3[lookup[centroid][j][1] / 4].seed_.b_id_ % 2 == 1))) {
83 if ((lookup[centroid][j][1] % 4 == 1) and
84 ((pad3[lookup[centroid][j][1] / 4].sec_.b_id_ < 0) or
85 (pad3[lookup[centroid][j][1] / 4].seed_.b_id_ % 2 == 1))) {
88 if ((lookup[centroid][j][1] % 4 == 2) and
89 ((pad3[lookup[centroid][j][1] / 4].sec_.b_id_ >= 0) or
90 (pad3[lookup[centroid][j][1] / 4].seed_.b_id_ % 2 == 0))) {
93 if ((lookup[centroid][j][1] % 4 == 3) and
94 ((pad3[lookup[centroid][j][1] / 4].sec_.b_id_ < 0) or
95 (pad3[lookup[centroid][j][1] / 4].seed_.b_id_ % 2 == 0))) {
98 cpyCluster(test.pad2_, pad2[lookup[centroid][j][0] / 4]);
99 cpyCluster(test.pad3_, pad3[lookup[centroid][j][1] / 4]);
101 if (test.resid_ < outTrk[i].resid_) {
102 cpyTrack(outTrk[i], test);
110 for (
int i = 1; i < NTRK - 1; i++) {
111 if ((outTrk[i - 1].pad2_.seed_.b_id_ == outTrk[i].pad2_.seed_.b_id_) and
112 (outTrk[i].pad2_.seed_.b_id_ >= 0)) {
113 if (outTrk[i - 1].resid_ <= outTrk[i].resid_) {
114 clearTrack(outTrk[i]);
116 clearTrack(outTrk[i - 1]);
119 if ((outTrk[i].pad2_.seed_.b_id_ == outTrk[i + 1].pad2_.seed_.b_id_) and
120 (outTrk[i + 1].pad2_.seed_.b_id_ >= 0)) {
121 if (outTrk[i + 1].resid_ <= outTrk[i].resid_) {
122 clearTrack(outTrk[i]);
124 clearTrack(outTrk[i + 1]);
127 if ((outTrk[i - 1].pad2_.seed_.b_id_ == outTrk[i + 1].pad2_.seed_.b_id_) and
128 (outTrk[i + 1].pad2_.seed_.b_id_ >= 0)) {
129 if (outTrk[i - 1].resid_ <= outTrk[i + 1].resid_) {
130 clearTrack(outTrk[i + 1]);
132 clearTrack(outTrk[i - 1]);
136 for (
int i = 1; i < NTRK - 1; i++) {
137 if ((outTrk[i - 1].pad3_.seed_.b_id_ == outTrk[i].pad3_.seed_.b_id_) and
138 (outTrk[i].pad3_.seed_.b_id_ >= 0)) {
139 if (outTrk[i - 1].resid_ <= outTrk[i].resid_) {
140 clearTrack(outTrk[i]);
142 clearTrack(outTrk[i - 1]);
145 if ((outTrk[i].pad3_.seed_.b_id_ == outTrk[i + 1].pad3_.seed_.b_id_) and
146 (outTrk[i + 1].pad3_.seed_.b_id_ >= 0)) {
147 if (outTrk[i + 1].resid_ <= outTrk[i].resid_) {
148 clearTrack(outTrk[i]);
150 clearTrack(outTrk[i + 1]);
153 if ((outTrk[i - 1].pad3_.seed_.b_id_ == outTrk[i + 1].pad3_.seed_.b_id_) and
154 (outTrk[i + 1].pad3_.seed_.b_id_ >= 0)) {
155 if (outTrk[i - 1].resid_ <= outTrk[i + 1].resid_) {
156 clearTrack(outTrk[i + 1]);
158 clearTrack(outTrk[i - 1]);
Sign Arbitrary Precision Type.