Process the event and put new data products into it.
40 {
41
42
43
44
45
46
47
48
49
50
51
52 if (verbose_) {
53 ldmx_log(debug)
54 << "TrigScintFirmwareTracker: produce() starts! Event number: "
55 << event.getEventHeader().getEventNumber();
56 }
57
58
61
62
63 for (int i = 0; i < NCENT; ++i) {
64 for (int j = 0; j < COMBO; ++j) {
65 for (int k = 0; k < 2; ++k) {
67 }
68 }
69 }
70
71
72
73
74
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]);
79 if (j / 3 == 0) {
80 lookup[i][j][0] -= 1;
81 } else if (j / 3 == 2) {
82 lookup[i][j][0] += 1;
83 }
84 if (j % 3 == 0) {
85 lookup[i][j][1] -= 1;
86 } else if (j % 3 == 2) {
87 lookup[i][j][1] += 1;
88 }
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))) {
91 lookup[i][j][0] = -1;
92 lookup[i][j][1] = -1;
93 }
94 }
95 }
96
100
101
102
107
108 for (int j = 0; j < NHITS; j++) {
109 clearHit(h_pad1[j]);
110 clearHit(h_pad2[j]);
111 clearHit(h_pad3[j]);
112 }
113 for (int j = 0; j < NCLUS; j++) {
114 if (j < NTRK) {
115 clearClus(pad1[j]);
116 }
117 clearClus(pad2[j]);
118 clearClus(pad3[j]);
119 }
120 for (int j = 0; j < NTRK; j++) {
121 clearTrack(out_trk[j]);
122 }
123
124 const auto &digis1{
126 const auto &digis2{
128 const auto &digis3{
130
131 if (verbose_) {
132 ldmx_log(debug) << "Got digi collection " << digis1_collection_ << "_"
133 << pass_name_ << " with " << digis1.size() << " entries ";
134 }
135
136
137
138
139 int occupied[NCHAN];
140 for (int i = 0; i < NCHAN; i++) {
141 occupied[i] = -1;
142 }
143 int count = 0;
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_ =
158 }
159 } else {
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;
165 count++;
166 }
167 }
168 }
169
170 for (int i = 0; i < NCHAN; i++) {
171 occupied[i] = -1;
172 }
173 count = 0;
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_ =
188 }
189 } else {
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;
195 count++;
196 }
197 }
198 }
199 for (int i = 0; i < NCHAN; i++) {
200 occupied[i] = -1;
201 }
202 count = 0;
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_ =
217 }
218 } else {
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;
224 count++;
225 }
226 }
227 }
228
229
230
231
232 int counter_n = 0;
233 std::array<Cluster, NCLUS> point1 = clusterproducerSw(h_pad1);
234 int top_seed = 0;
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]);
244 counter_n++;
245 top_seed = point1[i].seed_.b_id_;
246 }
247 }
248 }
249 std::array<Cluster, NCLUS> point2 = clusterproducerSw(h_pad2);
250 top_seed = 0;
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_);
258 calcCent(pad2[i]);
259 top_seed = point2[i].seed_.b_id_;
260 }
261 }
262 }
263 std::array<Cluster, NCLUS> point3 = clusterproducerSw(h_pad3);
264 top_seed = 0;
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_);
272 calcCent(pad3[i]);
273 top_seed = point3[i].seed_.b_id_;
274 }
275 }
276 }
277
278
279
280
281
282
283
284
285
286
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);
294 }
295 }
296 event.add(output_collection_, tracks_);
297 tracks_.resize(0);
298
299 return;
300}
Sign Arbitrary Precision Type.