Belle II Software development
trgrawdataModule.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <trg/trg/modules/trgrawdata/trgrawdataModule.h>
10#include <trg/gdl/dbobjects/TRGGDLDBUnpacker.h>
11#include <framework/dataobjects/EventMetaData.h>
12#include <framework/datastore/StoreArray.h>
13#include <rawdata/dataobjects/RawTRG.h>
14
15#include <string>
16#include <iostream>
17
18using namespace std;
19using namespace Belle2;
20
21
22REG_MODULE(TRGRAWDATA);
23
25{
26
27 setDescription("TRG rawdata analyser");
29
30 addParam("histRecord", m_histRecord,
31 "Recording event by event timing distribution histogram or not",
32 false);
33 addParam("mydebug", m_mydebug, "debug flag", 0);
34 addParam("cc_check", m_cc_check, "cc mode", true);
35 addParam("print_cc", m_print_cc, "Print Disordered clocks", true);
36 addParam("print_clkcyc_err", m_print_clkcyc_err, "Print Errs of Disordered clocks", false);
37 addParam("print_dbmap", m_print_dbmap, "Print Database Bit Map", false);
38
39 addParam("hdr_nwd_2d0", m_hdr_nwd_2d0, "Number of word for 2D0 Header", 3);
40 addParam("hdr_nwd_2d1", m_hdr_nwd_2d1, "Number of word for 2D1 Header", 3);
41 addParam("hdr_nwd_2d2", m_hdr_nwd_2d2, "Number of word for 2D2 Header", 3);
42 addParam("hdr_nwd_2d3", m_hdr_nwd_2d3, "Number of word for 2D3 Header", 3);
43 addParam("hdr_nwd_3d0", m_hdr_nwd_3d0, "Number of word for 3D0 Header", 3);
44 addParam("hdr_nwd_3d1", m_hdr_nwd_3d1, "Number of word for 3D1 Header", 3);
45 addParam("hdr_nwd_3d2", m_hdr_nwd_3d2, "Number of word for 3D2 Header", 3);
46 addParam("hdr_nwd_3d3", m_hdr_nwd_3d3, "Number of word for 3D3 Header", 3);
47 addParam("hdr_nwd_nn0", m_hdr_nwd_nn0, "Number of word for NN0 Header", 3);
48 addParam("hdr_nwd_nn1", m_hdr_nwd_nn1, "Number of word for NN1 Header", 3);
49 addParam("hdr_nwd_nn2", m_hdr_nwd_nn2, "Number of word for NN2 Header", 3);
50 addParam("hdr_nwd_nn3", m_hdr_nwd_nn3, "Number of word for NN3 Header", 3);
51 addParam("hdr_nwd_sl0", m_hdr_nwd_sl0, "Number of word for TSF0 Header", 3);
52 addParam("hdr_nwd_sl1", m_hdr_nwd_sl1, "Number of word for TSF1 Header", 3);
53 addParam("hdr_nwd_sl2", m_hdr_nwd_sl2, "Number of word for TSF2 Header", 3);
54 addParam("hdr_nwd_sl3", m_hdr_nwd_sl3, "Number of word for TSF3 Header", 3);
55 addParam("hdr_nwd_sl4", m_hdr_nwd_sl4, "Number of word for TSF4 Header", 3);
56 addParam("hdr_nwd_sl5", m_hdr_nwd_sl5, "Number of word for TSF5 Header", 3);
57 addParam("hdr_nwd_sl6", m_hdr_nwd_sl6, "Number of word for TSF6 Header", 3);
58 addParam("hdr_nwd_sl8", m_hdr_nwd_sl8, "Number of word for TSF8 Header", 3);
59 addParam("hdr_nwd_etf", m_hdr_nwd_etf, "Number of word for ETF Header", 3);
60 addParam("hdr_nwd_grl", m_hdr_nwd_grl, "Number of word for GRL Header", 3);
61 addParam("hdr_nwd_top", m_hdr_nwd_top, "Number of word for TOP Header", 3);
62 addParam("hdr_nwd_gdl", m_hdr_nwd_gdl, "Number of word for GDL Header", 6);
63
64 addParam("cpr_2d0", m_cpr_2d0, "Copper number of 2D0", 0x11000001U);
65 addParam("cpr_2d1", m_cpr_2d1, "Copper number of 2D1", 0x11000001U);
66 addParam("cpr_2d2", m_cpr_2d2, "Copper number of 2D2", 0x11000002U);
67 addParam("cpr_2d3", m_cpr_2d3, "Copper number of 2D3", 0x11000002U);
68 addParam("cpr_3d0", m_cpr_3d0, "Copper number of 3D0", 0x11000003U);
69 addParam("cpr_3d1", m_cpr_3d1, "Copper number of 3D1", 0x11000003U);
70 addParam("cpr_3d2", m_cpr_3d2, "Copper number of 3D2", 0x11000004U);
71 addParam("cpr_3d3", m_cpr_3d3, "Copper number of 3D3", 0x11000004U);
72 addParam("cpr_nn0", m_cpr_nn0, "Copper number of NN0", 0x11000005U);
73 addParam("cpr_nn1", m_cpr_nn1, "Copper number of NN1", 0x11000005U);
74 addParam("cpr_nn2", m_cpr_nn2, "Copper number of NN2", 0x11000006U);
75 addParam("cpr_nn3", m_cpr_nn3, "Copper number of NN3", 0x11000006U);
76 addParam("cpr_sl0", m_cpr_sl0, "Copper number of SL0", 0x11000007U);
77 addParam("cpr_sl1", m_cpr_sl1, "Copper number of SL1", 0x11000009U);//*
78 addParam("cpr_sl2", m_cpr_sl2, "Copper number of SL2", 0x11000008U);
79 addParam("cpr_sl3", m_cpr_sl3, "Copper number of SL3", 0x11000008U);
80 addParam("cpr_sl4", m_cpr_sl4, "Copper number of SL4", 0x11000007U);//*
81 addParam("cpr_sl5", m_cpr_sl5, "Copper number of SL5", 0x11000009U);
82 addParam("cpr_sl6", m_cpr_sl6, "Copper number of SL6", 0x1100000aU);
83 addParam("cpr_sl7", m_cpr_sl7, "Copper number of SL7", 0x1100000a);
84 addParam("cpr_sl8", m_cpr_sl8, "Copper number of SL8", 0x1100000aU);
85 addParam("cpr_gdl", m_cpr_gdl, "Copper number of GDL", 0x15000001U);
86 addParam("cpr_etf", m_cpr_etf, "Copper number of ETF", 0x15000001U);
87 addParam("cpr_grl", m_cpr_grl, "Copper number of GRL", 0x15000002);
88 addParam("cpr_top", m_cpr_top, "Copper number of TOP", 0x12000001U);
89
90 addParam("on_2d0", m_on_2d0, "ON/OFF of 2D0", true);
91 addParam("on_2d1", m_on_2d1, "ON/OFF of 2D1", true);
92 addParam("on_2d2", m_on_2d2, "ON/OFF of 2D2", true);
93 addParam("on_2d3", m_on_2d3, "ON/OFF of 2D3", true);
94 addParam("on_3d0", m_on_3d0, "ON/OFF of 3D0", true);
95 addParam("on_3d1", m_on_3d1, "ON/OFF of 3D1", true);
96 addParam("on_3d2", m_on_3d2, "ON/OFF of 3D2", true);
97 addParam("on_3d3", m_on_3d3, "ON/OFF of 3D3", true);
98 addParam("on_nn0", m_on_nn0, "ON/OFF of NN0", true);
99 addParam("on_nn1", m_on_nn1, "ON/OFF of NN1", true);
100 addParam("on_nn2", m_on_nn2, "ON/OFF of NN2", true);
101 addParam("on_nn3", m_on_nn3, "ON/OFF of NN3", true);
102 addParam("on_sl0", m_on_sl0, "ON/OFF of SL0", true);
103 addParam("on_sl1", m_on_sl1, "ON/OFF of SL1", true);
104 addParam("on_sl2", m_on_sl2, "ON/OFF of SL2", true);
105 addParam("on_sl3", m_on_sl3, "ON/OFF of SL3", true);
106 addParam("on_sl4", m_on_sl4, "ON/OFF of SL4", true);
107 addParam("on_sl5", m_on_sl5, "ON/OFF of SL5", true);
108 addParam("on_sl6", m_on_sl6, "ON/OFF of SL6", true);
109 addParam("on_sl7", m_on_sl7, "ON/OFF of SL7", true);
110 addParam("on_sl8", m_on_sl8, "ON/OFF of SL8", true);
111 addParam("on_gdl", m_on_gdl, "ON/OFF of GDL", true);
112 addParam("on_etf", m_on_etf, "ON/OFF of ETF", true);
113 addParam("on_grl", m_on_grl, "ON/OFF of GRL", true);
114 addParam("on_top", m_on_top, "ON/OFF of TOP", true);
115
116 addParam("nwd_2ds", m_nwd_2ds, "N word of 2Ds", 3939); // 2624x48
117 addParam("nwd_3ds", m_nwd_3ds, "N word of 3Ds", 3939); // 2624x48
118 addParam("nwd_nns", m_nwd_nns, "N word of NNs", 0xc03); // 2048x48
119 addParam("nwd_sl0", m_nwd_sl0, "N word of SL0", 0xc03); // 2048x48
120 addParam("nwd_sl1", m_nwd_sl1, "N word of SL1", 0x1803); // 4096x48
121 addParam("nwd_sl2", m_nwd_sl2, "N word of SL2", 0x1803); // 4096x48
122 addParam("nwd_sl3", m_nwd_sl3, "N word of SL3", 0x1803); // 4096x48
123 addParam("nwd_sl4", m_nwd_sl4, "N word of SL4", 0xc03); // 2048x48
124 addParam("nwd_sl5", m_nwd_sl5, "N word of SL5", 0x1803); // 4096x48
125 addParam("nwd_sl6", m_nwd_sl6, "N word of SL6", 0xc03); // 2048x48
126 addParam("nwd_sl7", m_nwd_sl7, "N word of SL7", 0x603); // 1024x48
127 addParam("nwd_sl8", m_nwd_sl8, "N word of SL8", 0x603); // 1024x48
128 addParam("nwd_gdl", m_nwd_gdl, "N word of GDL", 646); // 640x32
129 addParam("nwd_etf", m_nwd_etf, "N word of ETF", 1539); // 1024x48
130 addParam("nwd_grl", m_nwd_grl, "N word of GRL", 0xc03); // 1024x48
131 addParam("nwd_top", m_nwd_top, "N word of TOP", 0x303); // 1024*24
132
133 addParam("nclk_2ds", m_nclk_2ds, "N clk of 2Ds", 48);
134 addParam("nclk_3ds", m_nclk_3ds, "N clk of 3Ds", 48);
135 addParam("nclk_nns", m_nclk_nns, "N clk of NNs", 48);
136 addParam("nclk_sl0", m_nclk_sl0, "N clk of SL0", 48);
137 addParam("nclk_sl1", m_nclk_sl1, "N clk of SL1", 48);
138 addParam("nclk_sl2", m_nclk_sl2, "N clk of SL2", 48);
139 addParam("nclk_sl3", m_nclk_sl3, "N clk of SL3", 48);
140 addParam("nclk_sl4", m_nclk_sl4, "N clk of SL4", 48);
141 addParam("nclk_sl5", m_nclk_sl5, "N clk of SL5", 48);
142 addParam("nclk_sl6", m_nclk_sl6, "N clk of SL6", 48);
143 addParam("nclk_sl7", m_nclk_sl7, "N clk of SL7", 48);
144 addParam("nclk_sl8", m_nclk_sl8, "N clk of SL8", 48);
145 addParam("nclk_gdl", m_nclk_gdl, "N clk of GDL", 32);
146 addParam("nclk_etf", m_nclk_etf, "N clk of ETF", 48);
147 addParam("nclk_grl", m_nclk_grl, "N clk of GRL", 48);
148 addParam("nclk_top", m_nclk_top, "N clk of TOP", 24);
149
150 addParam("nclk_cdctrg", m_nclk_cdctrg, "N clock of CDCTRG", 48);
151
152 addParam("scale_2ds", m_scale_2ds, "Scale factor of 2Ds", 256);
153 addParam("scale_3ds", m_scale_3ds, "Scale factor of 3Ds", 256);
154 addParam("scale_nns", m_scale_nns, "Scale factor of NNs", 256);
155 addParam("scale_sl0", m_scale_sl0, "Scale factor of SL0", 256);
156 addParam("scale_sl1", m_scale_sl1, "Scale factor of SL1", 256);
157 addParam("scale_sl2", m_scale_sl2, "Scale factor of SL2", 256);
158 addParam("scale_sl3", m_scale_sl3, "Scale factor of SL3", 256);
159 addParam("scale_sl4", m_scale_sl4, "Scale factor of SL4", 256);
160 addParam("scale_sl5", m_scale_sl5, "Scale factor of SL5", 256);
161 addParam("scale_sl6", m_scale_sl6, "Scale factor of SL6", 256);
162 addParam("scale_sl7", m_scale_sl7, "Scale factor of SL7", 256);
163 addParam("scale_sl8", m_scale_sl8, "Scale factor of SL8", 256);
164 addParam("scale_gdl", m_scale_gdl, "Scale factor of GDL", 1);
165 addParam("scale_etf", m_scale_etf, "Scale factor of ETF", 512);
166 addParam("scale_grl", m_scale_grl, "Scale factor of GRL", 1);
167 addParam("scale_top", m_scale_top, "Scale factor of TOP", 32);
168
169 addParam("fmid_2d0", m_fmid_2d0, "Firmware ID of 2D0", 0x32442020);
170 addParam("fmid_2d1", m_fmid_2d1, "Firmware ID of 2D1", 0x32442020);
171 addParam("fmid_2d2", m_fmid_2d2, "Firmware ID of 2D2", 0x32442020);
172 addParam("fmid_2d3", m_fmid_2d3, "Firmware ID of 2D3", 0x32442020);
173 addParam("fmid_3d0", m_fmid_3d0, "Firmware ID of 3D0", 0x33440001);
174 addParam("fmid_3d1", m_fmid_3d1, "Firmware ID of 3D1", 0x33440001);
175 addParam("fmid_3d2", m_fmid_3d2, "Firmware ID of 3D2", 0x33440001);
176 addParam("fmid_3d3", m_fmid_3d3, "Firmware ID of 3D3", 0x33440001);
177 addParam("fmid_nn0", m_fmid_nn0, "Firmware ID of NN0", 0x4e4e5402);
178 addParam("fmid_nn1", m_fmid_nn1, "Firmware ID of NN1", 0x4e4e5402);
179 addParam("fmid_nn2", m_fmid_nn2, "Firmware ID of NN2", 0x4e4e5402);
180 addParam("fmid_nn3", m_fmid_nn3, "Firmware ID of NN3", 0x4e4e5402);
181 addParam("fmid_sl0", m_fmid_sl0, "Firmware ID of SL0", 0x54534630);
182 addParam("fmid_sl1", m_fmid_sl1, "Firmware ID of SL1", 0x54534631);
183 addParam("fmid_sl2", m_fmid_sl2, "Firmware ID of SL2", 0x54534632);
184 addParam("fmid_sl3", m_fmid_sl3, "Firmware ID of SL3", 0x54534633);
185 addParam("fmid_sl4", m_fmid_sl4, "Firmware ID of SL4", 0x54534634);
186 addParam("fmid_sl5", m_fmid_sl5, "Firmware ID of SL5", 0x54534635);
187 addParam("fmid_sl6", m_fmid_sl6, "Firmware ID of SL6", 0x54534636);
188 addParam("fmid_sl7", m_fmid_sl7, "Firmware ID of SL7", 0x54534637);
189 addParam("fmid_sl8", m_fmid_sl8, "Firmware ID of SL8", 0x54534d38);
190 addParam("fmid_gdl", m_fmid_gdl, "Firmware ID of GDL", 0x47444c20U);
191 addParam("fmid_etf", m_fmid_etf, "Firmware ID of ETF", 0x45544620);
192 addParam("fmid_grl", m_fmid_grl, "Firmware ID of GRL", 0x47824c20);
193 addParam("fmid_top", m_fmid_top, "Firmware ID of TOP", 0);
194
195}
196
198{
199 B2INFO("trgrawdata: initialize() started.");
200 if (! m_unpacker) {
201 B2INFO("no database of gdl unpacker");
202 }
203 if (m_print_dbmap) {
204
205 //const int nword_header = m_unpacker->get_nword_header(); //not used for now
206 //const int n_clocks = m_unpacker->getnClks(); //not used for now
207 //const int nBits = m_unpacker->getnBits(); //not used for now
208 const int n_leafs = m_unpacker->getnLeafs();
209 const int n_leafsExtra = m_unpacker->getnLeafsExtra();
210 //const int conf = m_unpacker->getconf(); //not used for now
211
212 int aBitMap[320][2] = {{0}};
213 int aBitMap_extra[100][3] = {{ -1}};
214 for (int i = 0; i < n_leafsExtra; i++) {
215 aBitMap_extra[i][0] = m_unpacker->getBitMap_extra(i, 0);
216 aBitMap_extra[i][1] = m_unpacker->getBitMap_extra(i, 1);
217 aBitMap_extra[i][2] = m_unpacker->getBitMap_extra(i, 2);
218 }
219
220 char LeafNames[200][100] = {{0}};
221 for (int i = 0; i < 200; i++) {
222 std::cout << "LeafBitMap[" << i << "] = " << m_unpacker->getLeafMap(i) << std::endl;
223 strcpy(LeafNames[i], m_unpacker->getLeafnames(i));
224 std::cout << "LeafNames[" << i << "] = " << m_unpacker->getLeafnames(i) << std::endl;
225 }
226 for (int i = 0; i < n_leafs; i++) {
227 aBitMap[i][0] = m_unpacker->getBitMap(i, 0);
228 aBitMap[i][1] = m_unpacker->getBitMap(i, 1);
229 }
230 for (int i = 0; i < 200; i++) {
231 int bin = m_unpacker->getLeafMap(i) + 1;
232 if (0 < bin && bin <= n_leafs) {
233 std::cout << "leaf(" << i
234 << "), bin(" << bin
235 << "), LeafNames[leaf](" << LeafNames[i]
236 << "), BitMap[bin-1][0](" << aBitMap[bin - 1][0]
237 << "), BitMap[bin-1][1](" << aBitMap[bin - 1][1]
238 << ")" << std::endl;
239 }
240 }
241 // for leafsExtra
242 for (int i = 0; i < 200; i++) {
243 int bin = m_unpacker->getLeafMap(i) + 1;
244 int j = bin - n_leafs - 1;
245 if (n_leafs < bin && bin <= n_leafs + n_leafsExtra) {
246 std::cout << "i(" << i
247 << "), bin(" << bin
248 << "), LeafNames[leaf](" << LeafNames[i]
249 << "), BitMap_extra[j][0](buf[" << aBitMap_extra[j][0]
250 << "]), BitMap_extra[j][1](downto " << aBitMap_extra[j][1]
251 << "), BitMap_extra[j][2](" << aBitMap_extra[j][2]
252 << " bit length)" << std::endl;
253 }
254 }
255
256 }
257
258}
259
261{
262
263 B2INFO("trgrawdata: event() started.");
264 StoreArray<RawTRG> raw_trgarray;
265
267 int _exp = bevt->getExperiment();
268 int _run = bevt->getRun();
269 unsigned _eve = bevt->getEvent();
270 if (0)
271 std::cout << "**************_eve(" << _eve
272 << "), c_nModules(" << c_nModules
273 << "), m_nclk_cdctrg(" << m_nclk_cdctrg
274 << "), _exp(" << _exp
275 << "), _run(" << _run
276 << "), _eve(" << _eve
277 << "), _Form(" << Form("he%010d", (int)_eve)
278 << ")" << std::endl;
279
280 TH2D* h_0 = new TH2D(Form("he%010d", (int)_eve),
281 Form("e%02dr%04d ev %08d", _exp, _run, (int)_eve),
282 c_nModules * 4, 0, c_nModules * 4,
283 m_nclk_cdctrg, 0, m_nclk_cdctrg);
284
285 for (unsigned i = 0; i < c_nModules; ++i) {
286 h_0->GetXaxis()->SetBinLabel(4 * i + 1, Form("%s hdevt", moduleNames[i]));
287 h_0->GetXaxis()->SetBinLabel(4 * i + 2, Form("%s dtevt", moduleNames[i]));
288 h_0->GetXaxis()->SetBinLabel(4 * i + 3, Form("%s L1rvc", moduleNames[i]));
289 h_0->GetXaxis()->SetBinLabel(4 * i + 4, Form("%s cc", moduleNames[i]));
290 }
291
292 /*
293 GDL only. To get gdlrvc12
294 */
295 unsigned gdlrvc12 = -1;
296 for (int i = 0; i < raw_trgarray.getEntries(); i++) {
297 for (int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
298 int cprid = (int)raw_trgarray[i]->GetNodeID(j);
299 unsigned eve20 = (_eve & 0xfffff);
300 for (int hslb = 0; hslb < 2; hslb++) {
301 int nword = raw_trgarray[i]->GetDetectorNwords(j, hslb);
302 int* buf = raw_trgarray[i]->GetDetectorBuffer(j, hslb);
303 if (0x15000001 == cprid && hslb == 0) {
304
305 if (m_mydebug) {
306 printf("aa:GDL start: 0x%x%c exp(%d), run(%d), eve(%u), eve(0x%x), nword(%d)\n",
307 cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword);
308 }
309
310 unsigned buf0 = 0;
311 if (nword > 0) buf0 = (unsigned)buf[0];
312 unsigned buf1 = 0;
313 if (nword > 1) buf1 = (unsigned)buf[1];
314 unsigned buf2 = 0;
315 if (nword > 2) buf2 = (unsigned)buf[2];
316 //unsigned buf2cnttrg20 = (buf2 >> 12) & 0xfffff;
317 //unsigned buf2rvc12 = (buf2 & 0xfff);
318
319 if (nword < 3) {
320 m_cntr_nwe_badnwd[e_gdl]++;
321 printf("ab:GDL(0x%x%c) exp(%d), run(%d), eve(%u), eve(0x%x), nword(%d), ",
322 cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword);
323 printf("buf0(0x%x), buf1(0x%x), buf2(0x%x)\n", buf0, buf1, buf2);
324 continue;
325 }
326
327 if (nword < 8) {
328 printf("ad:GDL(0x%x%c) exp(%d), run(%d), eve(%u), eve(0x%x), nword(%d)\n",
329 cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword);
330 m_cntr_nwe_badnwd[e_gdl]++;
331 } else {
332 unsigned buf5 = (unsigned)buf[m_hdr_nwd_gdl - 1];
333 // 626 = 646 -
334 unsigned buf6 = (unsigned)buf[626]; // 1st wd in the last clock cycle
335 unsigned buf7 = (unsigned)buf[627]; // 2nd wd in the last clock cycle
336 unsigned lastdd = (buf6 >> 24) & 0xff;
337 unsigned last_rvc = (buf6 >> 4) & 0xfff;
338 unsigned cnttrg_data_15to12 = buf6 & (0xf);
339 unsigned cnttrg_data_12 = (buf7 >> 20) & (0xfff);
340 gdlrvc12 = (buf5 & 0xfff);
341 unsigned gdlhdrcnttrg20 = (buf5 >> 12) & 0xfffff;
342
343 //unsigned wdperclk = (m_nwd_gdl - m_hdr_nwd_gdl) / m_nclk_gdl;
344 //unsigned ibuf_lastclk_msw = m_nwd_gdl - wdperclk;
345 //unsigned buf_lastclk_msw = (unsigned)buf[ibuf_lastclk_msw];
346 //unsigned buf_lastclk_msw2 = (unsigned)buf[ibuf_lastclk_msw + 1];
347 //unsigned buf_lastclk_msw3 = (unsigned)buf[ibuf_lastclk_msw + 2];
348 unsigned cnttrg_data_16 = (cnttrg_data_15to12 << 12) + cnttrg_data_12;
349 unsigned eve16 = (_eve & 0xffff);
350
351 h_0->SetBinContent(4 * (int)e_gdl + 1, m_nclk_gdl, gdlhdrcnttrg20);
352 h_0->SetBinContent(4 * (int)e_gdl + 2, m_nclk_gdl, cnttrg_data_16);
353 h_0->SetBinContent(4 * (int)e_gdl + 3, m_nclk_gdl, gdlrvc12);
354
355 if (nword != m_nwd_gdl || buf0 != m_fmid_gdl || lastdd != 0xdd ||
356 gdlhdrcnttrg20 != eve20 ||
357 !(eve16 == cnttrg_data_16 + 1 || (eve16 == 0 && cnttrg_data_16 == 0xffff))
358 ) {
359
360 unsigned diag = 0;
361 diag |= (nword != m_nwd_gdl) ? 1 : 0;
362 diag |= (buf0 != m_fmid_gdl) ? 2 : 0;
363 diag |= (lastdd != 0xdd) ? 4 : 0;
364 diag |= (gdlhdrcnttrg20 != eve20) ? 8 : 0;
365 diag |= !(eve16 == cnttrg_data_16 + 1 || (eve16 == 0 && cnttrg_data_16 == 0xffff)) ? 16 : 0;
366 printf("ae:GDL(0x%x%c) exp(%d), run(%d), evedaq(%u=0x%x), gdlhdrcnttrg20(%u,0x%x), "
367 "cnttrg_data16(%u=0x%x), l1rvc(%u)-lastrvc(%u)=%u, nword(%d), diag(%u)\n",
368 cprid, 'a' + hslb, _exp, _run, _eve, _eve, gdlhdrcnttrg20, gdlhdrcnttrg20,
369 cnttrg_data_16, cnttrg_data_16, gdlrvc12, last_rvc, gdlrvc12 - last_rvc, nword, diag); //TODO can the difference be negative?
370 printf("\n");
371 m_cntr_nwn_badtrg[e_gdl]++;
372 } else {
373 m_cntr_nwn[e_gdl]++;
374 }
375 }
376 }
377 }
378 }
379 }
380
381 /* Other than GDL */
382 for (int i = 0; i < raw_trgarray.getEntries(); i++) {
383 for (int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
384 unsigned cprid = raw_trgarray[i]->GetNodeID(j);
385 //unsigned eve16 = (_eve & 0xffff);
386 unsigned eve20 = (_eve & 0xfffff);
387 for (int hslb = 0; hslb < 2; hslb++) {
388 unsigned e_mdl = -1;
389 unsigned _nwd = -1;
390 unsigned _scale = -1;
391 unsigned _nclk = -1;
392 unsigned _hdr_nwd = 3;
393 if (m_cpr_2d0 == cprid && hslb == 0 && m_on_2d0) {
394 e_mdl = e_2d0; _nwd = m_nwd_2ds; _scale = m_scale_2ds; _nclk = m_nclk_2ds; _hdr_nwd = m_hdr_nwd_2d0;
395 } else if (m_cpr_2d1 == cprid && hslb == 1 && m_on_2d1) {
396 e_mdl = e_2d1; _nwd = m_nwd_2ds; _scale = m_scale_2ds; _nclk = m_nclk_2ds; _hdr_nwd = m_hdr_nwd_2d1;
397 } else if (m_cpr_2d2 == cprid && hslb == 0 && m_on_2d2) {
398 e_mdl = e_2d2; _nwd = m_nwd_2ds; _scale = m_scale_2ds; _nclk = m_nclk_2ds; _hdr_nwd = m_hdr_nwd_2d2;
399 } else if (m_cpr_2d3 == cprid && hslb == 1 && m_on_2d3) {
400 e_mdl = e_2d3; _nwd = m_nwd_2ds; _scale = m_scale_2ds; _nclk = m_nclk_2ds; _hdr_nwd = m_hdr_nwd_2d3;
401 } else if (m_cpr_3d0 == cprid && hslb == 0 && m_on_3d0) {
402 e_mdl = e_3d0; _nwd = m_nwd_3ds; _scale = m_scale_3ds; _nclk = m_nclk_3ds; _hdr_nwd = m_hdr_nwd_3d0;
403 } else if (m_cpr_3d1 == cprid && hslb == 1 && m_on_3d1) {
404 e_mdl = e_3d1; _nwd = m_nwd_3ds; _scale = m_scale_3ds; _nclk = m_nclk_3ds; _hdr_nwd = m_hdr_nwd_3d1;
405 } else if (m_cpr_3d2 == cprid && hslb == 0 && m_on_3d2) {
406 e_mdl = e_3d2; _nwd = m_nwd_3ds; _scale = m_scale_3ds; _nclk = m_nclk_3ds; _hdr_nwd = m_hdr_nwd_3d2;
407 } else if (m_cpr_3d3 == cprid && hslb == 1 && m_on_3d3) {
408 e_mdl = e_3d3; _nwd = m_nwd_3ds; _scale = m_scale_3ds; _nclk = m_nclk_3ds; _hdr_nwd = m_hdr_nwd_3d3;
409 } else if (m_cpr_nn0 == cprid && hslb == 0 && m_on_nn0) {
410 e_mdl = e_nn0; _nwd = m_nwd_nns; _scale = m_scale_nns; _nclk = m_nclk_nns; _hdr_nwd = m_hdr_nwd_nn0;
411 } else if (m_cpr_nn1 == cprid && hslb == 1 && m_on_nn1) {
412 e_mdl = e_nn1; _nwd = m_nwd_nns; _scale = m_scale_nns; _nclk = m_nclk_nns; _hdr_nwd = m_hdr_nwd_nn1;
413 } else if (m_cpr_nn2 == cprid && hslb == 0 && m_on_nn2) {
414 e_mdl = e_nn2; _nwd = m_nwd_nns; _scale = m_scale_nns; _nclk = m_nclk_nns; _hdr_nwd = m_hdr_nwd_nn2;
415 } else if (m_cpr_nn3 == cprid && hslb == 1 && m_on_nn3) {
416 e_mdl = e_nn3; _nwd = m_nwd_nns; _scale = m_scale_nns; _nclk = m_nclk_nns; _hdr_nwd = m_hdr_nwd_nn3;
417 } else if (m_cpr_sl0 == cprid && hslb == 0 && m_on_sl0) {
418 e_mdl = e_sl0; _nwd = m_nwd_sl0; _scale = m_scale_sl0; _nclk = m_nclk_sl0; _hdr_nwd = m_hdr_nwd_sl0;
419 } else if (m_cpr_sl1 == cprid && hslb == 0 && m_on_sl1) { //ex w/ 1
420 e_mdl = e_sl1; _nwd = m_nwd_sl1; _scale = m_scale_sl1; _nclk = m_nclk_sl1; _hdr_nwd = m_hdr_nwd_sl1;
421 } else if (m_cpr_sl2 == cprid && hslb == 0 && m_on_sl2) {
422 e_mdl = e_sl2; _nwd = m_nwd_sl2; _scale = m_scale_sl2; _nclk = m_nclk_sl2; _hdr_nwd = m_hdr_nwd_sl2;
423 } else if (m_cpr_sl3 == cprid && hslb == 1 && m_on_sl3) {
424 e_mdl = e_sl3; _nwd = m_nwd_sl3; _scale = m_scale_sl3; _nclk = m_nclk_sl3; _hdr_nwd = m_hdr_nwd_sl3;
425 } else if (m_cpr_sl4 == cprid && hslb == 1 && m_on_sl4) { //ex w/ 4
426 e_mdl = e_sl4; _nwd = m_nwd_sl4; _scale = m_scale_sl4; _nclk = m_nclk_sl4; _hdr_nwd = m_hdr_nwd_sl4;
427 } else if (m_cpr_sl5 == cprid && hslb == 1 && m_on_sl5) {
428 e_mdl = e_sl5; _nwd = m_nwd_sl5; _scale = m_scale_sl5; _nclk = m_nclk_sl5; _hdr_nwd = m_hdr_nwd_sl5;
429 } else if (m_cpr_sl6 == cprid && hslb == 0 && m_on_sl6) {
430 e_mdl = e_sl6; _nwd = m_nwd_sl6; _scale = m_scale_sl6; _nclk = m_nclk_sl6; _hdr_nwd = m_hdr_nwd_sl6;
431 } else if (m_cpr_sl8 == cprid && hslb == 0 && m_on_sl8) {
432 e_mdl = e_sl8; _nwd = m_nwd_sl8; _scale = m_scale_sl8; _nclk = m_nclk_sl8; _hdr_nwd = m_hdr_nwd_sl8;
433 } else if (m_cpr_etf == cprid && hslb == 1 && m_on_etf) {
434 e_mdl = e_etf; _nwd = m_nwd_etf; _scale = m_scale_etf; _nclk = m_nclk_etf; _hdr_nwd = m_hdr_nwd_etf;
435 } else if (m_cpr_top == cprid && hslb == 0 && m_on_top) {
436 e_mdl = e_top; _nwd = m_nwd_top; _scale = m_scale_top; _nclk = m_nclk_top; _hdr_nwd = m_hdr_nwd_top;
437 } else {
438 continue;
439 }
440
441 unsigned nword = raw_trgarray[i]->GetDetectorNwords(j, hslb);
442 int* buf = raw_trgarray[i]->GetDetectorBuffer(j, hslb);
443 unsigned buf0 = 0;
444 if (nword > 0) buf0 = (unsigned)buf[0];
445 unsigned buf1 = 0;
446 if (nword > 1) buf1 = (unsigned)buf[1];
447 unsigned buf2 = 0;
448 if (nword > 2) buf2 = (unsigned)buf[2];
449 unsigned buf2cnttrg20 = (buf2 >> 12) & 0xfffff;
450 unsigned buf2rvc12 = (buf2 & 0xfff);
451
452 if (nword < 3) {
453 // err
454 m_cntr_nwe_badnwd[e_mdl]++;
455 printf("ah:%s(0x%x%c) exp(%d), run(%d), eve(%u), eve(0x%x), nword(%u), ",
456 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword);
457 printf("buf0(0x%x), buf1(0x%x), buf2(0x%x)\n", buf0, buf1, buf2);
458 continue;
459 } else if (nword == _hdr_nwd) {
460 // header-only event
461 if (gdlrvc12 != buf2rvc12) {
462 printf("ai:%s(0x%x%c) exp(%d), run(%d), eve(%u,0x%x), nword(%u), gdlrvc12(0x%x), buf2rvc12(0x%x)\n",
463 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword, gdlrvc12, buf2rvc12);
464 m_cntr_nw3_badrvc[e_mdl]++;
465 } else if (eve20 != buf2cnttrg20) {
466 printf("aj:%s(0x%x%c) exp(%d), run(%d), eve(%u,0x%x), nword(%u), cnttrg20(0x%x)\n",
467 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword, buf2cnttrg20);
468 m_cntr_nw3_badtrg[e_mdl]++;
469 } else if ((_eve % _scale) == 0) {
470 m_cntr_nw3_badvet[e_mdl]++;
471 } else {
472 m_cntr_nw3[e_mdl]++;
473 }
474 continue;
475 } else if (nword != _nwd) {
476 // err
477 printf("bo:wrong nword: %s(0x%x%c) exp(%d), run(%d), eve(%u,0x%x), nword(%u), buf0(0x%x), buf2(0x%x)\n",
478 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword, buf0, buf2);
479 m_cntr_nwe_badnwd[e_mdl]++;
480 continue;
481 }
482
483 unsigned buf3 = (unsigned)buf[_hdr_nwd];
484 unsigned buf3dddd = ((buf3 >> 16) & 0xffff);
485 unsigned buf4 = (unsigned)buf[_hdr_nwd + 1];
486 unsigned buf5 = (unsigned)buf[_hdr_nwd + 2];
487 unsigned wdperclk = (_nwd - _hdr_nwd) / _nclk;
488 //unsigned ibuf_lsw = _nwd - 1;
489 unsigned ibuf_lastclk_msw = _nwd - wdperclk;
490 //unsigned buf_lastclk_msw = (unsigned)buf[ibuf_lastclk_msw];
491 unsigned buf_lastclk_msw2 = (unsigned)buf[ibuf_lastclk_msw + 1];
492 unsigned buf_lastclk_msw3 = (unsigned)buf[ibuf_lastclk_msw + 2];
493 //unsigned dddd_lastclk = ((buf_lastclk_msw >> 16) & 0xffff);
494 unsigned datacnttrg32 = 0;
495 unsigned buf4_msb16 = (buf4 & 0xffff);
496 unsigned buf5_lsb16 = ((buf5 >> 16) & 0xffff);
497
498 if (m_mydebug) {
499 printf("af:Debug0: %s(0x%x%c) exp(%d), run(%d), eve(%u), eve(0x%x), nword(%u)\n",
500 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword);
501 }
502
503 /*
504 *
505 * Module Start
506 *
507 *
508 */
509
510 if ((0x11000009 == cprid && hslb == 0) || // SL1
511 (0x11000008 == cprid && hslb == 1) || // SL1
512 (0x11000009 == cprid && hslb == 1) // SL5
513 ) {
514 /* SL1 SL3 SL5 4096x48
515 data_b2l_r(4095 downto 4048) <= x"dddd" & "00000" & revoclk & m_cntr125M(15 downto 0);--i=0..5
516 data_b2l_r(4031 downto 4000) <= cnttrg;--i=6..9
517 buf[3] = dddd * revoclk
518 buf[4] = m_cntr125M & x"0000"
519 buf[5] = cnttrg
520 */
521 datacnttrg32 = buf5;
522
523 } else if ((0x11000007 == cprid && hslb == 0) || // SL0
524 (0x11000007 == cprid && hslb == 1) || // SL4
525 (0x1100000a == cprid && hslb == 0) // SL6
526 ) {
527 /* SL0 SL4 SL6 2048*48
528 data_b2l_r(2047 downto 2000) <= x"dddd" &"00000"& revoclk & m_cntr125M(15 downto 0);
529 data_b2l_r(1999 downto 1968) <= cnttrg;
530
531 data_b2l(2047, 2016) <= buf[3]
532 data_b2l(2015, 1984) <= buf[4]
533 data_b2l(1983, 1952) <= buf[5]
534 data_b2l(1999, 1968) <= cnttrg;
535 */
536 datacnttrg32 = (buf4_msb16 << 16) + buf5_lsb16;
537
538 } else if ((m_cpr_2d0 == cprid && hslb == 0 && m_on_2d0) ||
539 (m_cpr_2d1 == cprid && hslb == 1 && m_on_2d1) ||
540 (m_cpr_2d2 == cprid && hslb == 0 && m_on_2d2) ||
541 (m_cpr_2d3 == cprid && hslb == 1 && m_on_2d3)) {
542 /*
543 2D2D2D: 2048 bit x 48 clock = 64 word x 48 clock
544 */
545
546 unsigned buf_lastclk_lsb = (unsigned)buf[_nwd - 1];
547 unsigned buf_lastclk_lsb2 = (unsigned)buf[_nwd - 2];
548 //unsigned nworking = (buf_lastclk_lsb2 >> 24) & 0xff;
549 //unsigned idbuf = (buf_lastclk_lsb2 >> 16) & 0xff;
550 //unsigned ihdr = (buf_lastclk_lsb2 >> 8) & 0xff;
551 datacnttrg32 = ((buf_lastclk_lsb2 & 0xff) << 24) + (buf_lastclk_lsb >> 8);
552
553 } else if ((m_cpr_3d0 == cprid && hslb == 0 && m_on_3d0) ||
554 (m_cpr_3d1 == cprid && hslb == 1 && m_on_3d1) ||
555 (m_cpr_3d2 == cprid && hslb == 0 && m_on_3d2) ||
556 (m_cpr_3d3 == cprid && hslb == 1 && m_on_3d3)) {
557 /*
558 3D3D3D: 2048 bit x 48 clock = 64 word x 48 clock
559 */
560
561 // data_b2l_r(2623 downto 2576) <= x"dddd" &"00000"& revoclk & m_cntr125M(15 downto 0);
562 // data_b2l_r(2575 downto 2544) <= cnttrg;
563 // [3] (2623, 2592)
564 // [4] (2591, 2560)
565 // [5] (2559, 2528)
566 unsigned datacnttrg_msb16 = (buf_lastclk_msw2 & 0xffff);
567 unsigned datacnttrg_lsb16 = ((buf_lastclk_msw3 >> 16) & 0xffff);
568 datacnttrg32 = (datacnttrg_msb16 << 16) + datacnttrg_lsb16;
569
570 } else if ((m_cpr_nn0 == cprid && hslb == 0 && m_on_nn0) ||
571 (m_cpr_nn1 == cprid && hslb == 1 && m_on_nn1) ||
572 (m_cpr_nn2 == cprid && hslb == 0 && m_on_nn2) ||
573 (m_cpr_nn3 == cprid && hslb == 1 && m_on_nn3)) {
574 /*
575 int e_mdl = -1;
576 if (m_cpr_nn0 == cprid && hslb == 0 && m_on_nn0) e_mdl = e_nn0;
577 if (m_cpr_nn1 == cprid && hslb == 1 && m_on_nn1) e_mdl = e_nn1;
578 if (m_cpr_nn2 == cprid && hslb == 0 && m_on_nn2) e_mdl = e_nn2;
579 if (m_cpr_nn3 == cprid && hslb == 1 && m_on_nn3) e_mdl = e_nn3;
580 */
581 /*
582 NNNNNN: 2048 bit x 48 clock = 64 word x 48 clock
583 data_b2l_r(1999 downto 1968) <= cnttrg;
584 */
585
586 // [3] 2047 2016
587 // [4] 2015 1984
588 // [5] 1983 1952
589 // [3 + 64] = [m_hdr_nwd + wdperclk]
590 // [3 + 65] = [m_hdr_nwd + wdperclk + 1]
591 // [3 + 66] = [m_hdr_nwd + wdperclk + 2]
592 // [3 + 64 * 47] = [m_hdr_nwd + wdperclk * (_nclk - 1)]
593 // [3 + 65 * 47] = [m_hdr_nwd + wdperclk * (_nclk - 1) + 1]
594 // [3 + 66 * 47] = [m_hdr_nwd + wdperclk * (_nclk - 1) + 2]
595 unsigned datacnttrg_msb16 = (buf_lastclk_msw2 & 0xffff);
596 unsigned datacnttrg_lsb16 = ((buf_lastclk_msw3 >> 16) & 0xffff);
597 datacnttrg32 = (datacnttrg_msb16 << 16) + datacnttrg_lsb16;
598 } else if (m_cpr_top == cprid && hslb == 0 && m_on_top) {
599 // TOPTRG
600 } // Modules
601
602 bool something_bad = false;
603 h_0->SetBinContent(4 * e_mdl + 1, _nclk, buf2cnttrg20);
604 h_0->SetBinContent(4 * e_mdl + 2, _nclk, datacnttrg32);
605 h_0->SetBinContent(4 * e_mdl + 3, _nclk, buf2rvc12);
606 if (gdlrvc12 != buf2rvc12) {
607 printf("ba:%s(0x%x%c) exp(%d), run(%d), eve(%u,0x%x), nword(%u), gdlrvc12(0x%x), buf2rvc12(0x%x)\n",
608 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword, gdlrvc12, buf2rvc12);
609 m_cntr_nwn_badrvc[e_mdl]++;
610 something_bad = true;
611 }
612 if (buf3dddd == 0xbbbb) {
613 m_cntr_nwn_badbbb[e_mdl]++;
614 printf("bv:%s(0x%x%c) exp(%d), run(%d), eve(%u,0x%x), nword(%u), cnttrg20(0x%x), dddd(0x%x), datacnttrg32(0x%x)\n",
615 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword, buf2cnttrg20, buf3dddd, datacnttrg32);
616 something_bad = true;
617 }
618 if (buf3dddd != 0xdddd) {
619 m_cntr_nwn_badddd[e_mdl]++;
620 printf("bb:%s(0x%x%c) exp(%d), run(%d), eve(%u,0x%x), nword(%u), cnttrg20(0x%x), dddd(0x%x), datacnttrg32(0x%x)\n",
621 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword, buf2cnttrg20, buf3dddd, datacnttrg32);
622 something_bad = true;
623 }
624 if (datacnttrg32 + 1 != _eve) {
625 if (!(
626 (m_cpr_top == cprid) ||
627 (m_cpr_3d0 <= cprid && cprid <= m_cpr_3d3)
628 )
629 ) {
630 printf("bc:%s(0x%x%c) exp(%d), run(%d), eve(%u,0x%x), nword(%u), cnttrg20(0x%x), dddd(0x%x), datacnttrg32(0x%x)\n",
631 moduleNames[e_mdl], cprid, 'a' + hslb, _exp, _run, _eve, _eve, nword, buf2cnttrg20, buf3dddd, datacnttrg32);
632 m_cntr_nwn_badtrg[e_mdl]++;
633 something_bad = true;
634 }
635 }
636 if (! something_bad) m_cntr_nwn[e_mdl]++;
637
638 } // for hslb
639 }
640 }
641
642 if (m_cc_check) {
643 for (int i = 0; i < raw_trgarray.getEntries(); i++) {
644 for (int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
645 unsigned cprid = raw_trgarray[i]->GetNodeID(j);
646// int _exp = raw_trgarray[i]->GetExpNo(j);
647// int _run = raw_trgarray[i]->GetRunNo(j);
648 unsigned _eveRaw = raw_trgarray[i]->GetEveNo(j);
649 if ((0x11000001 <= cprid && cprid <= 0x1100000a) ||
650 (0x15000001 <= cprid && cprid <= 0x15000002) ||
651 (0x12000001 == cprid) // TOPTRG
652 ) {
653 } else {
654 continue;
655 }
656 for (int hslb = 0; hslb < 2; hslb++) {
657 int nclks = m_nclk_cdctrg;
658 unsigned _hdr_nwd = 3;
659 unsigned e_mdl = -1;
660 unsigned _nwd = -1;
661 if (m_cpr_top == cprid && hslb == 0 && m_on_top) {
662 e_mdl = e_top; _nwd = m_nwd_top;
663 nclks = m_nclk_top; _hdr_nwd = m_hdr_nwd_top;
664 } else if (m_cpr_2d0 == cprid && hslb == 0 && m_on_2d0) {
665 e_mdl = e_2d0; _nwd = m_nwd_2ds; _hdr_nwd = m_hdr_nwd_2d0;
666 } else if (m_cpr_2d1 == cprid && hslb == 1 && m_on_2d1) {
667 e_mdl = e_2d1; _nwd = m_nwd_2ds; _hdr_nwd = m_hdr_nwd_2d1;
668 } else if (m_cpr_2d2 == cprid && hslb == 0 && m_on_2d2) {
669 e_mdl = e_2d2; _nwd = m_nwd_2ds; _hdr_nwd = m_hdr_nwd_2d2;
670 } else if (m_cpr_2d3 == cprid && hslb == 1 && m_on_2d3) {
671 e_mdl = e_2d3; _nwd = m_nwd_2ds; _hdr_nwd = m_hdr_nwd_2d3;
672 } else if (m_cpr_3d0 == cprid && hslb == 0 && m_on_3d0) {
673 e_mdl = e_3d0; _nwd = m_nwd_3ds; _hdr_nwd = m_hdr_nwd_3d0;
674 } else if (m_cpr_3d1 == cprid && hslb == 1 && m_on_3d1) {
675 e_mdl = e_3d1; _nwd = m_nwd_3ds; _hdr_nwd = m_hdr_nwd_3d1;
676 } else if (m_cpr_3d2 == cprid && hslb == 0 && m_on_3d2) {
677 e_mdl = e_3d2; _nwd = m_nwd_3ds; _hdr_nwd = m_hdr_nwd_3d2;
678 } else if (m_cpr_3d3 == cprid && hslb == 1 && m_on_3d3) {
679 e_mdl = e_3d3; _nwd = m_nwd_3ds; _hdr_nwd = m_hdr_nwd_3d3;
680 } else if (m_cpr_nn0 == cprid && hslb == 0 && m_on_nn0) {
681 e_mdl = e_nn0; _nwd = m_nwd_nns; _hdr_nwd = m_hdr_nwd_nn0;
682 } else if (m_cpr_nn1 == cprid && hslb == 1 && m_on_nn1) {
683 e_mdl = e_nn1; _nwd = m_nwd_nns; _hdr_nwd = m_hdr_nwd_nn1;
684 } else if (m_cpr_nn2 == cprid && hslb == 0 && m_on_nn2) {
685 e_mdl = e_nn2; _nwd = m_nwd_nns; _hdr_nwd = m_hdr_nwd_nn2;
686 } else if (m_cpr_nn3 == cprid && hslb == 1 && m_on_nn3) {
687 e_mdl = e_nn3; _nwd = m_nwd_nns; _hdr_nwd = m_hdr_nwd_nn3;
688 } else if (m_cpr_sl0 == cprid && hslb == 0 && m_on_sl0) {
689 e_mdl = e_sl0; _nwd = m_nwd_sl0; _hdr_nwd = m_hdr_nwd_sl0;
690 } else if (m_cpr_sl1 == cprid && hslb == 0 && m_on_sl1) {//ex w/ 4
691 e_mdl = e_sl1; _nwd = m_nwd_sl1; _hdr_nwd = m_hdr_nwd_sl1;
692 } else if (m_cpr_sl2 == cprid && hslb == 0 && m_on_sl2) {
693 e_mdl = e_sl2; _nwd = m_nwd_sl2; _hdr_nwd = m_hdr_nwd_sl2;
694 } else if (m_cpr_sl3 == cprid && hslb == 1 && m_on_sl3) {
695 e_mdl = e_sl3; _nwd = m_nwd_sl3; _hdr_nwd = m_hdr_nwd_sl3;
696 } else if (m_cpr_sl4 == cprid && hslb == 1 && m_on_sl4) {//ex w/ 1
697 e_mdl = e_sl4; _nwd = m_nwd_sl4; _hdr_nwd = m_hdr_nwd_sl4;
698 } else if (m_cpr_sl5 == cprid && hslb == 1 && m_on_sl5) {
699 e_mdl = e_sl5; _nwd = m_nwd_sl5; _hdr_nwd = m_hdr_nwd_sl5;
700 } else if (m_cpr_sl6 == cprid && hslb == 0 && m_on_sl6) {
701 e_mdl = e_sl6; _nwd = m_nwd_sl6; _hdr_nwd = m_hdr_nwd_sl6;
702 } else if (m_cpr_sl8 == cprid && hslb == 0 && m_on_sl8) {
703 e_mdl = e_sl8; _nwd = m_nwd_sl8; _hdr_nwd = m_hdr_nwd_sl8;
704 } else if (m_cpr_etf == cprid && hslb == 1 && m_on_etf) {
705 e_mdl = e_etf; _nwd = m_nwd_etf; _hdr_nwd = m_hdr_nwd_etf;
706 } else if (m_cpr_gdl == cprid && hslb == 0 && m_on_gdl) {
707 e_mdl = e_gdl; _nwd = m_nwd_gdl;
708 nclks = m_nclk_gdl; _hdr_nwd = 6;
709 } else {
710 continue;
711 }
712 unsigned nword = raw_trgarray[i]->GetDetectorNwords(j, hslb);
713 if (nword == _hdr_nwd) continue;
714 if (nword != _nwd) {
715 printf("bu:Nword mismatch:nword(%u),expected(%u). eve(%u), %s(0x%x%c), nword(%u)\n",
716 nword, _nwd, _eveRaw, moduleNames[e_mdl], cprid, 'a' + hslb, nword);
717 }
718 int* buf = raw_trgarray[i]->GetDetectorBuffer(j, hslb);
719 int i47 = _hdr_nwd + (nclks - 1) * (_nwd - _hdr_nwd) / nclks;
720 if (i47 > int(nword) - 1) {
721 if (m_print_clkcyc_err)
722 printf("bp:data truncation. eve(%u), %s(0x%x%c), nword(%u)\n",
723 _eveRaw, moduleNames[e_mdl], cprid, 'a' + hslb, nword);
724 break;
725 }
726 unsigned buf47 = buf[i47];
727 bool break_this_module = false;
728 bool cc_disorder = false;
729
730 unsigned prev_cc = buf47 & 0xffff;
731 if (e_mdl == e_gdl) {
732 prev_cc = (buf47 >> 4) & 0xfff;
733 }
734 char ccc[400];
735 sprintf(ccc, "i47(%d),buf47(0x%x),%x", i47, buf47, prev_cc);
736 std::string ccs(ccc);
737 for (int clk = 0; clk < nclks; clk++) {
738 unsigned ibuf = _hdr_nwd + clk * (nword - _hdr_nwd) / nclks;
739 if (ibuf > nword - 1) {
740 if (m_print_clkcyc_err)
741 printf("bq:data truncation. eve(%u), %s(0x%x%c), nword(%u)\n",
742 _eveRaw, moduleNames[e_mdl], cprid, 'a' + hslb, nword);
743 break_this_module = true;
744 m_cntr_bad_nwd[e_mdl]++;
745 break;
746 }
747 unsigned ddddcc = buf[ibuf];
748 unsigned dddd = (ddddcc >> 16) & 0xffff;
749 unsigned cc = ddddcc & 0xffff;
750 if (e_mdl == e_gdl) {
751 cc = (ddddcc >> 4) & 0xfff;
752 }
753 h_0->SetBinContent(4 * e_mdl + 4, clk + 1, cc);
754 sprintf(ccc, ",%x", cc);
755 if ((int)e_2d0 <= (int)e_mdl && (int)e_mdl <= (int)e_2d3 &&
756 m_nwd_2ds == 3939/* =2624bit */) {
757 // (downto) = wd i
758 // ( ) = 75 300
759 // ( ) = 76 304
760 // ( ) = 79 316
761 // (79, 72) = 79 318 addr_o
762 // (71, 64) = 79 319 addr_i
763 // (63, 56) = 80 320 nworking
764 // (55, 48) = 80 321 rennum
765 // (47, 40) = 80 322 itarget
766 // (39, 8) = 80 323-326 = cnttrg
767 // ( 7, 0) = 81
768 int i_addr = ibuf + 79; // addr_i and addr_o
769 int val_addr = buf[i_addr];
770 int addr_o = (val_addr >> 8) & 0xff;
771 int addr_i = val_addr & 0xff;
772 sprintf(ccc, ",%x(%d,%d)", cc, addr_i, addr_o);
773 }
774 ccs += ccc;
775 if (e_mdl == e_gdl) {
776 dddd = (ddddcc >> 24);
777 if (dddd != 0xdd) {
778 if (m_print_clkcyc_err)
779 printf("br:dddd not found. eve(%u), %s(0x%x%c), nword(%u)\n",
780 _eveRaw, moduleNames[e_mdl], cprid, 'a' + hslb, nword);
781 break_this_module = true;
782 m_cntr_bad_ddd[e_mdl]++;
783 break;
784 }
785 } else if (dddd != 0xdddd) {
786 if (m_print_clkcyc_err)
787 printf("bs:dddd not found. eve(%u), %s(0x%x%c), nword(%u)\n",
788 _eveRaw, moduleNames[e_mdl], cprid, 'a' + hslb, nword);
789 break_this_module = true;
790 m_cntr_bad_ddd[e_mdl]++;
791 break;
792 }
793 // 0x500 == 1280
794 if (!(cc == prev_cc + 4 || prev_cc == cc + 4 * (nclks - 1) || prev_cc + 0x500 == cc + 4 * (nclks - 1)
795 || cc + 0x500 == prev_cc + 4)) {
796 cc_disorder = true;
797 ccs += "*";
798 }
799 prev_cc = cc;
800 } // clk
801 if (break_this_module) continue; // bad dddd
802 if (cc_disorder) {
803 m_cntr_bad_odr[e_mdl]++;
804 if (m_print_cc) {
805 printf("bt:ccdisorder: eve(%u), %s(0x%x%c), nword(%u), %s\n",
806 _eveRaw, moduleNames[e_mdl], cprid, 'a' + hslb, nword, ccs.c_str());
807 }
808 } else {
809 m_cntr_good_odr[e_mdl]++;
810 }
811 } // hslb
812 } // j < raw_trgarray[i]->GetNumEntries()
813 } // i < raw_trgarray.getEntries()
814 }
815
816 if (! m_histRecord) {
817 h_0->Delete();
818 }
819}
820
HistoModule()
Constructor.
Definition HistoModule.h:32
void setDescription(const std::string &description)
Sets the description of the module.
Definition Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition Module.cc:208
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition Module.h:80
Accessor to arrays stored in the data store.
Definition StoreArray.h:113
int getEntries() const
Get the number of objects in the array.
Definition StoreArray.h:216
Type-safe access to single objects in the data store.
Definition StoreObjPtr.h:96
static const unsigned int c_nModules
number of modules
virtual void initialize() override
initialize
virtual void event() override
Event.
virtual void defineHisto() override
Define Histogram.
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition Module.h:559
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition Module.h:649
Abstract base class for different kinds of events.
STL namespace.