Process the event and put new data products into it.
38 {
39
40
41
42
43
44
45
46
47
48
49
50 if (verbose_) {
51 ldmx_log(debug)
52 << "TrigScintFirmwareTracker: produce() starts! Event number: "
53 << event.getEventHeader().getEventNumber();
54 }
55
56
59
60
61 for (int i = 0; i < NCENT; ++i) {
62 for (int j = 0; j < COMBO; ++j) {
63 for (int k = 0; k < 2; ++k) {
65 }
66 }
67 }
68
69
70
71
72
73 for (int i = 0; i < NCENT; i++) {
74 for (int j = 0; j < COMBO; j++) {
75 lookup[i][j][0] = (i - a[1] + a[0]);
76 lookup[i][j][1] = (i - a[2] + a[0]);
77 if (j / 3 == 0) {
78 lookup[i][j][0] -= 1;
79 } else if (j / 3 == 2) {
80 lookup[i][j][0] += 1;
81 }
82 if (j % 3 == 0) {
83 lookup[i][j][1] -= 1;
84 } else if (j % 3 == 2) {
85 lookup[i][j][1] += 1;
86 }
87 if (not((lookup[i][j][0] >= 0) and (lookup[i][j][1] >= 0) and
88 (lookup[i][j][0] < NCENT) and (lookup[i][j][1] < NCENT))) {
89 lookup[i][j][0] = -1;
90 lookup[i][j][1] = -1;
91 }
92 }
93 }
94
98
99
100
105
106 for (int j = 0; j < NHITS; j++) {
107 clearHit(h_pad1[j]);
108 clearHit(h_pad2[j]);
109 clearHit(h_pad3[j]);
110 }
111 for (int j = 0; j < NCLUS; j++) {
112 if (j < NTRK) {
113 clearClus(pad1[j]);
114 }
115 clearClus(pad2[j]);
116 clearClus(pad3[j]);
117 }
118 for (int j = 0; j < NTRK; j++) {
119 clearTrack(out_trk[j]);
120 }
121
122 const auto& digis1{
124 const auto& digis2{
126 const auto& digis3{
128
129 if (verbose_) {
130 ldmx_log(debug) << "Got digi collection " << digis1_collection_ << "_"
131 << pass_name_ << " with " << digis1.size() << " entries ";
132 }
133
134
135
136
137 int occupied[NCHAN];
138 for (int i = 0; i < NCHAN; i++) {
139 occupied[i] = -1;
140 }
141 int count = 0;
142 for (const auto& digi : digis1) {
143 if ((digi.getPE() >
min_thr_) and (digi.getBarID() <= NCHAN) and
144 (digi.getBarID() >= 0)) {
147 if (occupied[digi.getBarID()] >= 0) {
148 if (h_pad1[occupied[digi.getBarID()]].amp_ < digi.getPE()) {
149 h_pad1[occupied[digi.getBarID()]].b_id_ =
151 h_pad1[occupied[digi.getBarID()]].m_id_ =
153 h_pad1[occupied[digi.getBarID()]].amp_ = (
ap_int<12>)(digi.getPE());
154 h_pad1[occupied[digi.getBarID()]].time_ =
156 }
157 } else {
158 h_pad1[count].b_id_ = (
ap_int<12>)(digi.getBarID());
159 h_pad1[count].m_id_ = (
ap_int<12>)(digi.getModuleID());
160 h_pad1[count].amp_ = (
ap_int<12>)(digi.getPE());
161 h_pad1[count].time_ = (
ap_int<12>)(digi.getTime());
162 occupied[digi.getBarID()] = count;
163 count++;
164 }
165 }
166 }
167
168 for (int i = 0; i < NCHAN; i++) {
169 occupied[i] = -1;
170 }
171 count = 0;
172 for (const auto& digi : digis2) {
173 if ((digi.getPE() >
min_thr_) and (digi.getBarID() <= NCHAN) and
174 (digi.getBarID() >= 0)) {
177 if (occupied[digi.getBarID()] >= 0) {
178 if (h_pad2[occupied[digi.getBarID()]].amp_ < digi.getPE()) {
179 h_pad2[occupied[digi.getBarID()]].b_id_ =
181 h_pad2[occupied[digi.getBarID()]].m_id_ =
183 h_pad2[occupied[digi.getBarID()]].amp_ = (
ap_int<12>)(digi.getPE());
184 h_pad2[occupied[digi.getBarID()]].time_ =
186 }
187 } else {
188 h_pad2[count].b_id_ = (
ap_int<12>)(digi.getBarID());
189 h_pad2[count].m_id_ = (
ap_int<12>)(digi.getModuleID());
190 h_pad2[count].amp_ = (
ap_int<12>)(digi.getPE());
191 h_pad2[count].time_ = (
ap_int<12>)(digi.getTime());
192 occupied[digi.getBarID()] = count;
193 count++;
194 }
195 }
196 }
197 for (int i = 0; i < NCHAN; i++) {
198 occupied[i] = -1;
199 }
200 count = 0;
201 for (const auto& digi : digis3) {
202 if ((digi.getPE() >
min_thr_) and (digi.getBarID() <= NCHAN) and
203 (digi.getBarID() >= 0)) {
206 if (occupied[digi.getBarID()] >= 0) {
207 if (h_pad3[occupied[digi.getBarID()]].amp_ < digi.getPE()) {
208 h_pad3[occupied[digi.getBarID()]].b_id_ =
210 h_pad3[occupied[digi.getBarID()]].m_id_ =
212 h_pad3[occupied[digi.getBarID()]].amp_ = (
ap_int<12>)(digi.getPE());
213 h_pad3[occupied[digi.getBarID()]].time_ =
215 }
216 } else {
217 h_pad3[count].b_id_ = (
ap_int<12>)(digi.getBarID());
218 h_pad3[count].m_id_ = (
ap_int<12>)(digi.getModuleID());
219 h_pad3[count].amp_ = (
ap_int<12>)(digi.getPE());
220 h_pad3[count].time_ = (
ap_int<12>)(digi.getTime());
221 occupied[digi.getBarID()] = count;
222 count++;
223 }
224 }
225 }
226
227
228
229
230 int counter_n = 0;
231 std::array<Cluster, NCLUS> point1 = clusterproducerSw(h_pad1);
232 int top_seed = 0;
233 for (int i = 0; i < NCLUS; i++) {
234 if ((point1[i].seed_.amp_ < 450) and (point1[i].seed_.amp_ > 30) and
235 (point1[i].seed_.b_id_ < (NCHAN + 1)) and
236 (point1[i].seed_.b_id_ >= 0) and (point1[i].sec_.amp_ < 450) and
237 (counter_n < NTRK)) {
238 if (point1[i].seed_.b_id_ >= top_seed) {
239 cpyHit(pad1[counter_n].seed_, point1[i].seed_);
240 cpyHit(pad1[counter_n].sec_, point1[i].sec_);
241 calcCent(pad1[counter_n]);
242 counter_n++;
243 top_seed = point1[i].seed_.b_id_;
244 }
245 }
246 }
247 std::array<Cluster, NCLUS> point2 = clusterproducerSw(h_pad2);
248 top_seed = 0;
249 for (int i = 0; i < NCLUS; i++) {
250 if ((point2[i].seed_.amp_ < 450) and (point2[i].seed_.amp_ > 30) and
251 (point2[i].seed_.b_id_ < (NCHAN + 1)) and
252 (point2[i].seed_.b_id_ >= 0) and (point2[i].sec_.amp_ < 450)) {
253 if (point2[i].seed_.b_id_ >= top_seed) {
254 cpyHit(pad2[i].seed_, point2[i].seed_);
255 cpyHit(pad2[i].sec_, point2[i].sec_);
256 calcCent(pad2[i]);
257 top_seed = point2[i].seed_.b_id_;
258 }
259 }
260 }
261 std::array<Cluster, NCLUS> point3 = clusterproducerSw(h_pad3);
262 top_seed = 0;
263 for (int i = 0; i < NCLUS; i++) {
264 if ((point3[i].seed_.amp_ < 450) and (point3[i].seed_.amp_ > 30) and
265 (point3[i].seed_.b_id_ < (NCHAN + 1)) and
266 (point3[i].seed_.b_id_ >= 0) and (point3[i].sec_.amp_ < 450)) {
267 if (point3[i].seed_.b_id_ >= top_seed) {
268 cpyHit(pad3[i].seed_, point3[i].seed_);
269 cpyHit(pad3[i].sec_, point3[i].sec_);
270 calcCent(pad3[i]);
271 top_seed = point3[i].seed_.b_id_;
272 }
273 }
274 }
275
276
277
278
279
280
281
282
283
284
285 trackproducerHw(pad1, pad2, pad3, out_trk, lookup);
286 for (int i = 0; i < NTRK; i++) {
287 if (out_trk[i].pad1_.seed_.amp_ > 0. && out_trk[i].pad1_.sec_.amp_ >= 0. &&
288 out_trk[i].pad2_.seed_.amp_ > 0. && out_trk[i].pad2_.sec_.amp_ >= 0. &&
289 out_trk[i].pad3_.seed_.amp_ > 0. && out_trk[i].pad3_.sec_.amp_ >= 0.) {
291 tracks_.push_back(trk);
292 }
293 }
294 event.add(output_collection_, tracks_);
295 tracks_.resize(0);
296
297 return;
298}
Sign Arbitrary Precision Type.