LDMX Software
clusterproducer_sw.cxx
1#include <stdio.h>
2
3#include <array>
4#include <iostream>
5
6#include "TrigScint/Firmware/clusterproducer.h"
7#include "TrigScint/Firmware/objdef.h"
8
9std::array<Cluster, NCLUS> clusterproducer_sw(Hit inHit[NHITS]) {
10 ap_int<12> SEEDTHR = 30;
11 ap_int<12> CLUSTHR = 30;
12
13 ap_int<12> mapL1[NCHAN];
14
15 std::array<Cluster, NCLUS> outClus;
16
17 for (int i = 0; i < NCLUS; ++i) {
18 clearClus(outClus[i]);
19 }
20
21 // CLEAR THE MAP
22 for (int i = 0; i < NCHAN; ++i) {
23 mapL1[i] = -1;
24 }
25 // MAP TO CHANNELS
26 for (int j = 0; j < NHITS; ++j) {
27 if (inHit[j].bID > -1) {
28 mapL1[inHit[j].bID] = j;
29 }
30 }
31 // NOW WE JUST LOOK FOR HITS EXCEEDING SEED, IF THEY DO WE PAIR 'EM.
32 for (int k = 0; k < NCLUS; ++k) {
33 bool doNextCluster = true;
34 if ((mapL1[2 * k] > -1)) {
35 if (inHit[mapL1[2 * k]].Amp > SEEDTHR) {
36 clearClus(outClus[k]);
37 outClus[k].Seed.mID = inHit[mapL1[2 * k]].mID;
38 outClus[k].Seed.bID = inHit[mapL1[2 * k]].bID;
39 outClus[k].Seed.Amp = inHit[mapL1[2 * k]].Amp;
40 outClus[k].Seed.Time = inHit[mapL1[2 * k]].Time;
41 if (mapL1[2 * k + 1] > -1) {
42 if (inHit[mapL1[2 * k + 1]].Amp > CLUSTHR) {
43 outClus[k].Sec.mID = inHit[mapL1[2 * k + 1]].mID;
44 outClus[k].Sec.bID = inHit[mapL1[2 * k + 1]].bID;
45 outClus[k].Sec.Amp = inHit[mapL1[2 * k + 1]].Amp;
46 outClus[k].Sec.Time = inHit[mapL1[2 * k + 1]].Time;
47 doNextCluster = false;
48 // You can comment this line to turn it into Serialized
49 clearHit(inHit[mapL1[2 * k + 1]]);
50 }
51 }
52 }
53 }
54 if ((mapL1[2 * k + 1] > -1) and (doNextCluster)) {
55 if (inHit[mapL1[2 * k + 1]].Amp > SEEDTHR) {
56 clearClus(outClus[k]);
57 outClus[k].Seed.mID = inHit[mapL1[2 * k + 1]].mID;
58 outClus[k].Seed.bID = inHit[mapL1[2 * k + 1]].bID;
59 outClus[k].Seed.Amp = inHit[mapL1[2 * k + 1]].Amp;
60 outClus[k].Seed.Time = inHit[mapL1[2 * k + 1]].Time;
61 if (k < NCLUS - 1) {
62 if (mapL1[2 * k + 2] > -1) {
63 if (inHit[mapL1[2 * k + 2]].Amp > CLUSTHR) {
64 outClus[k].Sec.mID = inHit[mapL1[2 * k + 2]].mID;
65 outClus[k].Sec.bID = inHit[mapL1[2 * k + 2]].bID;
66 outClus[k].Sec.Amp = inHit[mapL1[2 * k + 2]].Amp;
67 outClus[k].Sec.Time = inHit[mapL1[2 * k + 2]].Time;
68 // You can comment this line to turn it into Serialized
69 clearHit(inHit[mapL1[2 * k + 2]]);
70 }
71 }
72 }
73 }
74 }
75 }
76
77 return outClus;
78}
Definition objdef.h:49
Sign Arbitrary Precision Type.
Definition ap_int.h:28