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