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