3#include "TrigScint/Firmware/objdef.h"
4#include "TrigScint/Firmware/trackproducer.h"
10#pragma HLS ARRAY_PARTITION variable = pad1 dim = 0 complete
11#pragma HLS ARRAY_PARTITION variable = pad2 dim = 0 complete
12#pragma HLS ARRAY_PARTITION variable = pad3 dim = 0 complete
13#pragma HLS ARRAY_PARTITION variable = outTrk dim = 0 complete
14#pragma HLS ARRAY_PARTITION variable = lookup dim = 0 complete
15#pragma HLS PIPELINE II = 10
18#ifdef TS_NOT_EMULATION
19#pragma HLS ARRAY_PARTITION variable = test complete
33 for (
int i = 0; i < NTRK; i++) {
34 if (2 * pad1[i].seed_.b_id_ > 2 * NCHAN) {
37 for (
int j = 0; j < COMBO; j++) {
39 if (not(pad1[i].seed_.amp_ > 0)) {
43 if (pad1[i].sec_.amp_ > 0) {
46 cpyCluster(test.pad1_, pad1[i]);
47 if ((lookup[centroid][j][0] == -1) or (lookup[centroid][j][1] == -1)) {
50 if (not(pad2[lookup[centroid][j][0] / 4].seed_.amp_ > 0)) {
53 if ((lookup[centroid][j][0] % 4 == 0) and
54 ((pad2[lookup[centroid][j][0] / 4].sec_.b_id_ >= 0) or
55 (pad2[lookup[centroid][j][0] / 4].seed_.b_id_ % 2 == 1))) {
58 if ((lookup[centroid][j][0] % 4 == 1) and
59 ((pad2[lookup[centroid][j][0] / 4].sec_.b_id_ < 0) or
60 (pad2[lookup[centroid][j][0] / 4].seed_.b_id_ % 2 == 1))) {
63 if ((lookup[centroid][j][0] % 4 == 2) and
64 ((pad2[lookup[centroid][j][0] / 4].sec_.b_id_ >= 0) or
65 (pad2[lookup[centroid][j][0] / 4].seed_.b_id_ % 2 == 0))) {
68 if ((lookup[centroid][j][0] % 4 == 3) and
69 ((pad2[lookup[centroid][j][0] / 4].sec_.b_id_ < 0) or
70 (pad2[lookup[centroid][j][0] / 4].seed_.b_id_ % 2 == 0))) {
73 if (not(pad3[lookup[centroid][j][1] / 4].seed_.amp_ > 0)) {
76 if ((lookup[centroid][j][1] % 4 == 0) and
77 ((pad3[lookup[centroid][j][1] / 4].sec_.b_id_ >= 0) or
78 (pad3[lookup[centroid][j][1] / 4].seed_.b_id_ % 2 == 1))) {
81 if ((lookup[centroid][j][1] % 4 == 1) and
82 ((pad3[lookup[centroid][j][1] / 4].sec_.b_id_ < 0) or
83 (pad3[lookup[centroid][j][1] / 4].seed_.b_id_ % 2 == 1))) {
86 if ((lookup[centroid][j][1] % 4 == 2) and
87 ((pad3[lookup[centroid][j][1] / 4].sec_.b_id_ >= 0) or
88 (pad3[lookup[centroid][j][1] / 4].seed_.b_id_ % 2 == 0))) {
91 if ((lookup[centroid][j][1] % 4 == 3) and
92 ((pad3[lookup[centroid][j][1] / 4].sec_.b_id_ < 0) or
93 (pad3[lookup[centroid][j][1] / 4].seed_.b_id_ % 2 == 0))) {
96 cpyCluster(test.pad2_, pad2[lookup[centroid][j][0] / 4]);
97 cpyCluster(test.pad3_, pad3[lookup[centroid][j][1] / 4]);
99 if (test.resid_ < outTrk[i].resid_) {
100 cpyTrack(outTrk[i], test);
108 for (
int i = 1; i < NTRK - 1; i++) {
109 if ((outTrk[i - 1].pad2_.seed_.b_id_ == outTrk[i].pad2_.seed_.b_id_) and
110 (outTrk[i].pad2_.seed_.b_id_ >= 0)) {
111 if (outTrk[i - 1].resid_ <= outTrk[i].resid_) {
112 clearTrack(outTrk[i]);
114 clearTrack(outTrk[i - 1]);
117 if ((outTrk[i].pad2_.seed_.b_id_ == outTrk[i + 1].pad2_.seed_.b_id_) and
118 (outTrk[i + 1].pad2_.seed_.b_id_ >= 0)) {
119 if (outTrk[i + 1].resid_ <= outTrk[i].resid_) {
120 clearTrack(outTrk[i]);
122 clearTrack(outTrk[i + 1]);
125 if ((outTrk[i - 1].pad2_.seed_.b_id_ == outTrk[i + 1].pad2_.seed_.b_id_) and
126 (outTrk[i + 1].pad2_.seed_.b_id_ >= 0)) {
127 if (outTrk[i - 1].resid_ <= outTrk[i + 1].resid_) {
128 clearTrack(outTrk[i + 1]);
130 clearTrack(outTrk[i - 1]);
134 for (
int i = 1; i < NTRK - 1; i++) {
135 if ((outTrk[i - 1].pad3_.seed_.b_id_ == outTrk[i].pad3_.seed_.b_id_) and
136 (outTrk[i].pad3_.seed_.b_id_ >= 0)) {
137 if (outTrk[i - 1].resid_ <= outTrk[i].resid_) {
138 clearTrack(outTrk[i]);
140 clearTrack(outTrk[i - 1]);
143 if ((outTrk[i].pad3_.seed_.b_id_ == outTrk[i + 1].pad3_.seed_.b_id_) and
144 (outTrk[i + 1].pad3_.seed_.b_id_ >= 0)) {
145 if (outTrk[i + 1].resid_ <= outTrk[i].resid_) {
146 clearTrack(outTrk[i]);
148 clearTrack(outTrk[i + 1]);
151 if ((outTrk[i - 1].pad3_.seed_.b_id_ == outTrk[i + 1].pad3_.seed_.b_id_) and
152 (outTrk[i + 1].pad3_.seed_.b_id_ >= 0)) {
153 if (outTrk[i - 1].resid_ <= outTrk[i + 1].resid_) {
154 clearTrack(outTrk[i + 1]);
156 clearTrack(outTrk[i - 1]);
Sign Arbitrary Precision Type.