54 <<
"TrigScintFirmwareTracker: produce() starts! Event number: "
55 <<
event.getEventHeader().getEventNumber();
63 for (
int i = 0; i < NCENT; ++i) {
64 for (
int j = 0; j < COMBO; ++j) {
65 for (
int k = 0; k < 2; ++k) {
75 for (
int i = 0; i < NCENT; i++) {
76 for (
int j = 0; j < COMBO; j++) {
77 lookup[i][j][0] = (i - a[1] + a[0]);
78 lookup[i][j][1] = (i - a[2] + a[0]);
81 }
else if (j / 3 == 2) {
86 }
else if (j % 3 == 2) {
89 if (not((lookup[i][j][0] >= 0) and (lookup[i][j][1] >= 0) and
90 (lookup[i][j][0] < NCENT) and (lookup[i][j][1] < NCENT))) {
108 for (
int j = 0; j < NHITS; j++) {
113 for (
int j = 0; j < NCLUS; j++) {
120 for (
int j = 0; j < NTRK; j++) {
121 clearTrack(out_trk[j]);
132 ldmx_log(debug) <<
"Got digi collection " << digis1_collection_ <<
"_"
133 << pass_name_ <<
" with " << digis1.size() <<
" entries ";
140 for (
int i = 0; i < NCHAN; i++) {
144 for (
const auto &digi : digis1) {
145 if ((digi.getPE() >
min_thr_) and (digi.getBarID() <= NCHAN) and
146 (digi.getBarID() >= 0)) {
149 if (occupied[digi.getBarID()] >= 0) {
150 if (h_pad1[occupied[digi.getBarID()]].amp_ < digi.getPE()) {
151 h_pad1[occupied[digi.getBarID()]].b_id_ =
153 h_pad1[occupied[digi.getBarID()]].m_id_ =
155 h_pad1[occupied[digi.getBarID()]].amp_ = (
ap_int<12>)(digi.getPE());
156 h_pad1[occupied[digi.getBarID()]].time_ =
160 h_pad1[count].b_id_ = (
ap_int<12>)(digi.getBarID());
161 h_pad1[count].m_id_ = (
ap_int<12>)(digi.getModuleID());
162 h_pad1[count].amp_ = (
ap_int<12>)(digi.getPE());
163 h_pad1[count].time_ = (
ap_int<12>)(digi.getTime());
164 occupied[digi.getBarID()] = count;
170 for (
int i = 0; i < NCHAN; i++) {
174 for (
const auto &digi : digis2) {
175 if ((digi.getPE() >
min_thr_) and (digi.getBarID() <= NCHAN) and
176 (digi.getBarID() >= 0)) {
179 if (occupied[digi.getBarID()] >= 0) {
180 if (h_pad2[occupied[digi.getBarID()]].amp_ < digi.getPE()) {
181 h_pad2[occupied[digi.getBarID()]].b_id_ =
183 h_pad2[occupied[digi.getBarID()]].m_id_ =
185 h_pad2[occupied[digi.getBarID()]].amp_ = (
ap_int<12>)(digi.getPE());
186 h_pad2[occupied[digi.getBarID()]].time_ =
190 h_pad2[count].b_id_ = (
ap_int<12>)(digi.getBarID());
191 h_pad2[count].m_id_ = (
ap_int<12>)(digi.getModuleID());
192 h_pad2[count].amp_ = (
ap_int<12>)(digi.getPE());
193 h_pad2[count].time_ = (
ap_int<12>)(digi.getTime());
194 occupied[digi.getBarID()] = count;
199 for (
int i = 0; i < NCHAN; i++) {
203 for (
const auto &digi : digis3) {
204 if ((digi.getPE() >
min_thr_) and (digi.getBarID() <= NCHAN) and
205 (digi.getBarID() >= 0)) {
208 if (occupied[digi.getBarID()] >= 0) {
209 if (h_pad3[occupied[digi.getBarID()]].amp_ < digi.getPE()) {
210 h_pad3[occupied[digi.getBarID()]].b_id_ =
212 h_pad3[occupied[digi.getBarID()]].m_id_ =
214 h_pad3[occupied[digi.getBarID()]].amp_ = (
ap_int<12>)(digi.getPE());
215 h_pad3[occupied[digi.getBarID()]].time_ =
219 h_pad3[count].b_id_ = (
ap_int<12>)(digi.getBarID());
220 h_pad3[count].m_id_ = (
ap_int<12>)(digi.getModuleID());
221 h_pad3[count].amp_ = (
ap_int<12>)(digi.getPE());
222 h_pad3[count].time_ = (
ap_int<12>)(digi.getTime());
223 occupied[digi.getBarID()] = count;
233 std::array<Cluster, NCLUS> point1 = clusterproducerSw(h_pad1);
235 for (
int i = 0; i < NCLUS; i++) {
236 if ((point1[i].seed_.amp_ < 450) and (point1[i].seed_.amp_ > 30) and
237 (point1[i].seed_.b_id_ < (NCHAN + 1)) and
238 (point1[i].seed_.b_id_ >= 0) and (point1[i].sec_.amp_ < 450) and
239 (counter_n < NTRK)) {
240 if (point1[i].seed_.b_id_ >= top_seed) {
241 cpyHit(pad1[counter_n].seed_, point1[i].seed_);
242 cpyHit(pad1[counter_n].sec_, point1[i].sec_);
243 calcCent(pad1[counter_n]);
245 top_seed = point1[i].seed_.b_id_;
249 std::array<Cluster, NCLUS> point2 = clusterproducerSw(h_pad2);
251 for (
int i = 0; i < NCLUS; i++) {
252 if ((point2[i].seed_.amp_ < 450) and (point2[i].seed_.amp_ > 30) and
253 (point2[i].seed_.b_id_ < (NCHAN + 1)) and
254 (point2[i].seed_.b_id_ >= 0) and (point2[i].sec_.amp_ < 450)) {
255 if (point2[i].seed_.b_id_ >= top_seed) {
256 cpyHit(pad2[i].seed_, point2[i].seed_);
257 cpyHit(pad2[i].sec_, point2[i].sec_);
259 top_seed = point2[i].seed_.b_id_;
263 std::array<Cluster, NCLUS> point3 = clusterproducerSw(h_pad3);
265 for (
int i = 0; i < NCLUS; i++) {
266 if ((point3[i].seed_.amp_ < 450) and (point3[i].seed_.amp_ > 30) and
267 (point3[i].seed_.b_id_ < (NCHAN + 1)) and
268 (point3[i].seed_.b_id_ >= 0) and (point3[i].sec_.amp_ < 450)) {
269 if (point3[i].seed_.b_id_ >= top_seed) {
270 cpyHit(pad3[i].seed_, point3[i].seed_);
271 cpyHit(pad3[i].sec_, point3[i].sec_);
273 top_seed = point3[i].seed_.b_id_;
287 trackproducerHw(pad1, pad2, pad3, out_trk, lookup);
288 for (
int i = 0; i < NTRK; i++) {
289 if (out_trk[i].pad1_.seed_.amp_ > 0. && out_trk[i].pad1_.sec_.amp_ >= 0. &&
290 out_trk[i].pad2_.seed_.amp_ > 0. && out_trk[i].pad2_.sec_.amp_ >= 0. &&
291 out_trk[i].pad3_.seed_.amp_ > 0. && out_trk[i].pad3_.sec_.amp_ >= 0.) {
293 tracks_.push_back(trk);
296 event.add(output_collection_, tracks_);