Belle II Software development
PostRawCOPPERFormat_v2.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 <rawdata/dataobjects/PostRawCOPPERFormat_v2.h>
10
11
12using namespace std;
13using namespace Belle2;
14
15//#define DESY
16//#define NO_ERROR_STOP
17//ClassImp(PostRawCOPPERFormat_v2);
18
20{
21}
22
24{
25}
26
27
29{
30 int nwords = 0;
31 if (GetFINESSENwords(n, finesse_num) > 0) {
32 nwords = GetFINESSENwords(n, finesse_num)
33 - (static_cast<int>(SIZE_B2LHSLB_HEADER) + SIZE_B2LHSLB_TRAILER + SIZE_B2LFEE_HEADER + SIZE_B2LFEE_TRAILER);
34 }
35 return nwords;
36}
37
38
40{
41 char err_buf[500];
42 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
43 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
44 printf("[DEBUG] %s\n", err_buf);
45 B2FATAL(err_buf);
46 return 0;
47}
48
49
51{
52 int pos_nwords_0, pos_nwords_1;
53 int nwords = 0;
54 switch (finesse_num) {
55 case 0 :
56 pos_nwords_0 = GetBufferPos(n) + tmp_header.POS_OFFSET_1ST_FINESSE;
57 pos_nwords_1 = GetBufferPos(n) + tmp_header.POS_OFFSET_2ND_FINESSE;
58 nwords = m_buffer[ pos_nwords_1 ] - m_buffer[ pos_nwords_0 ];
59 break;
60 case 1 :
61 pos_nwords_0 = GetBufferPos(n) + tmp_header.POS_OFFSET_2ND_FINESSE;
62 pos_nwords_1 = GetBufferPos(n) + tmp_header.POS_OFFSET_3RD_FINESSE;
63 nwords = m_buffer[ pos_nwords_1 ] - m_buffer[ pos_nwords_0 ];
64 break;
65 case 2 :
66 pos_nwords_0 = GetBufferPos(n) + tmp_header.POS_OFFSET_3RD_FINESSE;
67 pos_nwords_1 = GetBufferPos(n) + tmp_header.POS_OFFSET_4TH_FINESSE;
68 nwords = m_buffer[ pos_nwords_1 ] - m_buffer[ pos_nwords_0 ];
69 break;
70 case 3 :
71 pos_nwords_0 = GetBufferPos(n) + tmp_header.POS_OFFSET_4TH_FINESSE;
72 {
73 int nwords_1 = GetBlockNwords(n)
74 - SIZE_COPPER_DRIVER_TRAILER
76 nwords = nwords_1 - m_buffer[ pos_nwords_0 ];
77 }
78 break;
79 default :
80 char err_buf[500];
81 sprintf(err_buf, "[FATAL] Invalid finesse # : %s %s %d\n",
82 __FILE__, __PRETTY_FUNCTION__, __LINE__);
83 printf("[DEBUG] %s\n", err_buf);
84 B2FATAL(err_buf);
85 }
86
87 if (nwords < 0 || nwords > 1e6) {
88 char err_buf[500];
89 char hostname[128];
90 GetNodeName(n, hostname, sizeof(hostname));
91 sprintf(err_buf, "[FATAL] %s ch=%d : ERROR_EVENT : # of words is strange. %d : eve 0x%x exp %d run %d sub %d\n %s %s %d\n",
92 hostname, finesse_num,
93 nwords,
95 __FILE__, __PRETTY_FUNCTION__, __LINE__);
96 printf("[DEBUG] %s\n", err_buf);
97 B2FATAL(err_buf);
98 }
99
100 return nwords;
101
102}
103
104
105
106
108{
109 char err_buf[500];
110 char hostname[128];
111 GetNodeName(n, hostname, sizeof(hostname));
112 sprintf(err_buf,
113 "[FATAL] %s ch=%d : ERROR_EVENT : No event # in B2LFEE header. (block %d) Exiting... : eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
114 hostname, -1,
115 n,
116 GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
117 __FILE__, __PRETTY_FUNCTION__, __LINE__);
118 printf("[DEBUG] %s\n", err_buf);
119 B2FATAL(err_buf);
120 return 0;
121}
122
123
124
126 unsigned int prev_evenum, unsigned int* cur_evenum_rawcprhdr,
127 unsigned int prev_copper_ctr, unsigned int* cur_copper_ctr,
128 unsigned int prev_exprunsubrun_no, unsigned int* cur_exprunsubrun_no)
129{
130 char err_buf[500];
131 int err_flag = 0;
132
133 //
134 // Check incrementation of event #
135 //
136 *cur_evenum_rawcprhdr = GetEveNo(n);
137 *cur_exprunsubrun_no = GetExpRunSubrun(n);
138
139 if (prev_exprunsubrun_no == *cur_exprunsubrun_no) {
140 if ((unsigned int)(prev_evenum + 1) != *cur_evenum_rawcprhdr) {
141 sprintf(err_buf, "CORRUPTED DATA: Event # jump : i %d prev 0x%x cur 0x%x : Exiting...\n%s %s %d\n",
142 n, prev_evenum, *cur_evenum_rawcprhdr,
143 __FILE__, __PRETTY_FUNCTION__, __LINE__);
144 err_flag = 1;
145 }
146 }
147
148
149 //
150 // Check checksum calculated by DeSerializerCOPPER()
151 //
153 unsigned int xor_chksum = CalcXORChecksum(GetBuffer(n), GetBlockNwords(n) - tmp_trailer.GetTrlNwords());
154 if (tmp_trailer.GetChksum() != xor_chksum) {
155 char hostname[128];
156 GetNodeName(n, hostname, sizeof(hostname));
157 sprintf(err_buf,
158 "[FATAL] %s ch=%d : ERROR_EVENT : checksum error : block %d : length %d eve 0x%x : Trailer chksum 0x%.8x : calcd. now 0x%.8x : eve 0x%x exp %d run %d sub %d\n %s %s %d\n",
159 hostname, -1,
160 n, GetBlockNwords(n), *cur_evenum_rawcprhdr, tmp_trailer.GetChksum(), xor_chksum,
161 GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
162 __FILE__, __PRETTY_FUNCTION__, __LINE__);
163 err_flag = 1;
164 }
165
166
167 if (err_flag == 1) {
168 printf("[DEBUG] %s\n", err_buf);
169 printf("[DEBUG] ========== dump a data blcok : block # %d==========\n", n);
171 printf("Print out variables to reduce unused-variables-warnings : %u %u\n", prev_copper_ctr, *cur_copper_ctr);
172 B2FATAL(err_buf);
173 }
174
175 return;
176
177}
178
180{
181 char err_buf[500];
182 char hostname[128];
183 GetNodeName(n, hostname, sizeof(hostname));
184 sprintf(err_buf,
185 "[FATAL] %s ch=%d : ERROR_EVENT : No magic word # in COPPER header (block %d). Exiting...: eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
186 hostname, -1,
187 n,
188 GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
189 __FILE__, __PRETTY_FUNCTION__, __LINE__);
190 printf("[DEBUG] %s\n", err_buf);
191 B2FATAL(err_buf);
192 return false;
193}
194
196{
197 char err_buf[500];
198 sprintf(err_buf, "[FATAL] This function is not supported (block %d). Exiting...\n%s %s %d\n",
199 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
200 printf("[DEBUG] %s\n", err_buf);
201 B2FATAL(err_buf);
202}
203
204unsigned int PostRawCOPPERFormat_v2::FillTopBlockRawHeader(unsigned int m_node_id, unsigned int prev_eve32,
205 unsigned int prev_exprunsubrun_no, unsigned int* cur_exprunsubrun_no)
206
207{
208 char err_buf[500];
209 sprintf(err_buf, "[FATAL] This function should be called by PrePostRawCOPPERFormat_***. Exiting...\n %s %s %d\n",
210 __FILE__, __PRETTY_FUNCTION__, __LINE__);
211 printf("Print out variables to reduce unused-variables-warnings : %u %u %u %u\n",
212 m_node_id, prev_eve32, prev_exprunsubrun_no, *cur_exprunsubrun_no);
213 printf("[DEBUG] %s\n", err_buf);
214 B2FATAL(err_buf);
215}
216
217
218int PostRawCOPPERFormat_v2::CheckB2LHSLBMagicWords(int* finesse_buf, int finesse_nwords)
219{
220 char err_buf[500];
221 sprintf(err_buf, "[FATAL] This function should be called by PrePostRawCOPPERFormat_***. Exiting...\n %s %s %d\n",
222 __FILE__, __PRETTY_FUNCTION__, __LINE__);
223 printf("Print out variables to reduce unused-variables-warnings : %p %d\n", finesse_buf, finesse_nwords);
224 printf("[DEBUG] %s\n", err_buf);
225 B2FATAL(err_buf);
226}
227
228int PostRawCOPPERFormat_v2::CheckCRC16(int n, int finesse_num)
229{
230
231 //
232 // Calculate CRC16
233 //
234 int finesse_nwords = GetFINESSENwords(n, finesse_num);
235 if (finesse_nwords <= 0) {
236 char err_buf[500];
237 char hostname[128];
238 GetNodeName(n, hostname, sizeof(hostname));
239 sprintf(err_buf,
240 "[FATAL] %s ch=%d : ERROR_EVENT : The specified finesse(%c) seems to be empty(nwords = %d). Cannot calculate CRC16. Exiting...: eve 0x%x exp %d run %d sub %d\n %s %s %d\n",
241 hostname, finesse_num,
242 65 + finesse_num, finesse_nwords,
243 GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
244 __FILE__, __PRETTY_FUNCTION__, __LINE__);
245 printf("%s", err_buf); fflush(stdout);
246 B2FATAL(err_buf);
247 }
248
249 int* copper_buf = GetBuffer(n);
250
251
252 unsigned short temp_crc16 = CalcCRC16LittleEndian(0xffff, &(copper_buf[ tmp_header.POS_TTCTIME_TRGTYPE ]), 1);
253 temp_crc16 = CalcCRC16LittleEndian(temp_crc16, &(copper_buf[ tmp_header.POS_EVE_NO ]), 1);
254 temp_crc16 = CalcCRC16LittleEndian(temp_crc16, &(copper_buf[ tmp_header.POS_TTUTIME ]), 1);
255 temp_crc16 = CalcCRC16LittleEndian(temp_crc16, &(copper_buf[ tmp_header.POS_EXP_RUN_NO ]), 1);
256 int* buf = GetFINESSEBuffer(n, finesse_num) + SIZE_B2LHSLB_HEADER + POS_B2L_CTIME;
257 int pos_nwords = finesse_nwords - (static_cast<int>(SIZE_B2LHSLB_HEADER) + POS_B2L_CTIME + SIZE_B2LFEE_TRAILER +
258 SIZE_B2LHSLB_TRAILER);
259 temp_crc16 = CalcCRC16LittleEndian(temp_crc16, buf, pos_nwords);
260
261 //
262 // Compare CRC16 with B2LCRC16
263 //
264 buf = GetFINESSEBuffer(n, finesse_num) + GetFINESSENwords(n,
265 finesse_num) - ((SIZE_B2LFEE_TRAILER - POS_B2LFEE_ERRCNT_CRC16) + SIZE_B2LHSLB_TRAILER) ;
266
267 if (GetEveNo(n) % 100000 == 0) {
268 printf("#### PostRawCOPPER : Eve %.8x block %d finesse %d B2LCRC16 %.8x calculated CRC16 %.8x\n", GetEveNo(n), n, finesse_num,
269 *buf, temp_crc16);
270 }
271
272 // if ( false ) {
273 if ((unsigned short)(*buf & 0xFFFF) != temp_crc16) {
274
275 // dump an event
276 int copper_nwords = copper_buf[ tmp_header.POS_NWORDS ];
277 PrintData(copper_buf, copper_nwords);
278 // Check whether packet-CRC error has occcured or not.
279 if (copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ] & tmp_header.B2LINK_PACKET_CRC_ERROR) {
280 //
281 // Do not stop data
282 //
283 char err_buf[600];
284 char hostname[128];
285 GetNodeName(n, hostname, sizeof(hostname));
286
287 if ((GetNodeID(n) & DETECTOR_MASK) == ARICH_ID) {
288 sprintf(err_buf,
289 "[WARNING] %s ch=%d : ARICH : POST B2link event CRC16 error with B2link Packet CRC error. data(%x) calc(%x) fns nwords %d type 0x%.8x : This error is ignored and the error event will be recorded in .sroot file acording to request from ARICH group: slot%c eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
290 hostname, finesse_num,
291 *buf, temp_crc16, GetFINESSENwords(n, finesse_num), copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ],
292 65 + finesse_num, GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
293 __FILE__, __PRETTY_FUNCTION__, __LINE__);
294 printf("%s", err_buf); fflush(stdout);
295 PrintData(GetFINESSEBuffer(n, finesse_num), GetFINESSENwords(n, finesse_num));
296 } else {
297 sprintf(err_buf,
298 "[FATAL] %s ch=%d : ERROR_EVENT : POST B2link event CRC16 error with B2link Packet CRC error. data(%x) calc(%x) fns nwords %d type 0x%.8x : slot%c eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
299 hostname, finesse_num,
300 *buf, temp_crc16, GetFINESSENwords(n, finesse_num), copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ],
301 65 + finesse_num, GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
302 __FILE__, __PRETTY_FUNCTION__, __LINE__);
303 printf("%s", err_buf); fflush(stdout);
304 PrintData(GetFINESSEBuffer(n, finesse_num), GetFINESSENwords(n, finesse_num));
305#ifndef NO_ERROR_STOP
306 B2FATAL(err_buf);
307#endif
308 }
309
310
311
312 } else {
313 //
314 // Stop taking data
315 //
316 char err_buf[500];
317 char hostname[128];
318 GetNodeName(n, hostname, sizeof(hostname));
319 sprintf(err_buf,
320 "[FATAL] %s ch=%d : ERROR_EVENT : POST B2link event CRC16 error without B2link Packet CRC error. data(%x) calc(%x) fns nwords %d type 0x%.8x: slot%c eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
321 hostname, finesse_num,
322 *buf, temp_crc16, GetFINESSENwords(n, finesse_num), copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ],
323 65 + finesse_num, GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
324 __FILE__, __PRETTY_FUNCTION__, __LINE__);
325 printf("%s", err_buf); fflush(stdout);
326 PrintData(GetFINESSEBuffer(n, finesse_num), GetFINESSENwords(n, finesse_num));
327#ifndef NO_ERROR_STOP
328 B2FATAL(err_buf);
329#endif
330 }
331 // Modify XOR checksum due to adding a bit flag
332 copper_buf[ copper_nwords - tmp_trailer.RAWTRAILER_NWORDS + tmp_trailer.POS_CHKSUM ]
333 ^= copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ];
334 copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ] |= tmp_header.B2LINK_EVENT_CRC_ERROR;
335 copper_buf[ copper_nwords - tmp_trailer.RAWTRAILER_NWORDS + tmp_trailer.POS_CHKSUM ]
336 ^= copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ];
337 }
338
339 return 1;
340
341
342}
343
344
345int* PostRawCOPPERFormat_v2::PackDetectorBuf(int* packed_buf_nwords,
346 int* detector_buf_1st, int nwords_1st,
347 int* detector_buf_2nd, int nwords_2nd,
348 int* detector_buf_3rd, int nwords_3rd,
349 int* detector_buf_4th, int nwords_4th,
350 RawCOPPERPackerInfo rawcpr_info)
351{
352 int* packed_buf = NULL;
353
354 int poswords_to = 0;
355 int* detector_buf[ 4 ] = { detector_buf_1st, detector_buf_2nd, detector_buf_3rd, detector_buf_4th };
356 const int nwords[ 4 ] = { nwords_1st, nwords_2nd, nwords_3rd, nwords_4th };
357
358 // calculate the event length
359 int length_nwords = tmp_header.GetHdrNwords() + SIZE_COPPER_HEADER + SIZE_COPPER_TRAILER + tmp_trailer.GetTrlNwords();
360
361 for (int i = 0; i < 4; i++) {
362 if (detector_buf[ i ] == NULL || nwords[ i ] <= 0) continue; // for an empty FINESSE slot
363 length_nwords += nwords[ i ];
364 length_nwords += static_cast<int>(SIZE_B2LHSLB_HEADER) + SIZE_B2LFEE_HEADER
365 + SIZE_B2LFEE_TRAILER + SIZE_B2LHSLB_TRAILER;
366 }
367
368 // allocate buffer
369 packed_buf = new int[ length_nwords ];
370 memset(packed_buf, 0, sizeof(int) * length_nwords);
371
372 //
373 // Fill RawHeader
374 //
375 tmp_header.SetBuffer(packed_buf);
376
377 packed_buf[ tmp_header.POS_NWORDS ] = length_nwords; // total length
378 packed_buf[ tmp_header.POS_VERSION_HDRNWORDS ] =
379 0x7f7f0000
380 | ((DATA_FORMAT_VERSION << tmp_header.FORMAT_VERSION_SHIFT) & tmp_header.FORMAT_VERSION__MASK)
381 | tmp_header.RAWHEADER_NWORDS; // ver.#, header length
382 packed_buf[ tmp_header.POS_EXP_RUN_NO ] = (rawcpr_info.exp_num << 22)
383 | (rawcpr_info.run_subrun_num & 0x003FFFFF); // exp. and run #
384 packed_buf[ tmp_header.POS_EVE_NO ] = rawcpr_info.eve_num; // eve #
385 packed_buf[ tmp_header.POS_TTCTIME_TRGTYPE ] = (rawcpr_info.tt_ctime & 0x7FFFFFF) << 4; // tt_ctime
386 packed_buf[ tmp_header.POS_TTUTIME ] = rawcpr_info.tt_utime; // tt_utime
387 packed_buf[ tmp_header.POS_NODE_ID ] = rawcpr_info.node_id; // node ID
388
389 // fill the positions of finesse buffers
390 packed_buf[ tmp_header.POS_OFFSET_1ST_FINESSE ] = static_cast<int>(tmp_header.RAWHEADER_NWORDS) + SIZE_COPPER_HEADER;
391
392 packed_buf[ tmp_header.POS_OFFSET_2ND_FINESSE ] = packed_buf[ tmp_header.POS_OFFSET_1ST_FINESSE ];
393 if (nwords[ 0 ] > 0) {
394 packed_buf[ tmp_header.POS_OFFSET_2ND_FINESSE ] +=
395 nwords[ 0 ] + SIZE_B2LHSLB_HEADER + SIZE_B2LFEE_HEADER + SIZE_B2LFEE_TRAILER + SIZE_B2LHSLB_TRAILER;
396 }
397
398 packed_buf[ tmp_header.POS_OFFSET_3RD_FINESSE ] = packed_buf[ tmp_header.POS_OFFSET_2ND_FINESSE ];
399 if (nwords[ 1 ] > 0) {
400 packed_buf[ tmp_header.POS_OFFSET_3RD_FINESSE ] +=
401 nwords[ 1 ] + SIZE_B2LHSLB_HEADER + SIZE_B2LFEE_HEADER + SIZE_B2LFEE_TRAILER + SIZE_B2LHSLB_TRAILER;
402 }
403
404 packed_buf[ tmp_header.POS_OFFSET_4TH_FINESSE ] = packed_buf[ tmp_header.POS_OFFSET_3RD_FINESSE ];
405 if (nwords[ 2 ] > 0) {
406 packed_buf[ tmp_header.POS_OFFSET_4TH_FINESSE ] += nwords[ 2 ] + SIZE_B2LHSLB_HEADER + SIZE_B2LFEE_HEADER + SIZE_B2LFEE_TRAILER +
407 SIZE_B2LHSLB_TRAILER;
408 }
409 poswords_to += tmp_header.GetHdrNwords();
410
411 // Fill COPPER header
412 poswords_to += SIZE_COPPER_HEADER;
413
414 // Fill FINESSE buffer
415 for (int i = 0; i < 4; i++) {
416
417 if (detector_buf[ i ] == NULL || nwords[ i ] <= 0) continue; // for an empty FINESSE slot
418
419 // Fill b2link HSLB header
420 packed_buf[ poswords_to + POS_B2LHSLB_MAGIC ] = 0xffaa0000 | (0xffff & rawcpr_info.eve_num);
421 poswords_to += SIZE_B2LHSLB_HEADER;
422
423 // Fill b2link FEE header
424 packed_buf[ poswords_to + POS_B2L_CTIME ] = (rawcpr_info.b2l_ctime & 0x7FFFFFF) << 4;
425 poswords_to += SIZE_B2LFEE_HEADER;
426
427 // copy the 1st Detector Buffer
428 memcpy(packed_buf + poswords_to, detector_buf[ i ], nwords[ i ]*sizeof(int));
429 poswords_to += nwords[ i ];
430
431 // Fill b2link FEE trailer
432 unsigned int crc16 = 0;
433 packed_buf[ poswords_to + POS_B2LFEE_ERRCNT_CRC16 ] = crc16 &
434 0xffff; // Error count is stored in this buffer for ver.2 format but it is set to zero here.
435 poswords_to += SIZE_B2LFEE_TRAILER;
436
437 // Fill b2link HSLB trailer
438 poswords_to += SIZE_B2LHSLB_TRAILER;
439
440 }
441
442 // Fill COPPER trailer
443 poswords_to += SIZE_COPPER_TRAILER;
444
445 // Fill RawTrailer
446 packed_buf[ poswords_to + tmp_trailer.POS_TERM_WORD ] = tmp_trailer.MAGIC_WORD_TERM_TRAILER;
447 poswords_to += tmp_trailer.GetTrlNwords();
448
449 *packed_buf_nwords = poswords_to;
450
451 return packed_buf;
452}
453
int CheckB2LHSLBMagicWords(int *finesse_buf, int finesse_nwords)
check magic words
int CheckCRC16(int n, int finesse_num)
check magic words
int * PackDetectorBuf(int *packed_buf_nwords, int *detector_buf_1st, int nwords_1st, int *detector_buf_2nd, int nwords_2nd, int *detector_buf_3rd, int nwords_3rd, int *detector_buf_4th, int nwords_4th, RawCOPPERPackerInfo rawcprpacker_info) OVERRIDE_CPP17
Pack data (format ver. = -1 -> Select the latest format version)
void CheckUtimeCtimeTRGType(int n) OVERRIDE_CPP17
check data contents
unsigned int FillTopBlockRawHeader(unsigned int m_node_id, unsigned int prev_eve32, unsigned int prev_exprunsubrun_no, unsigned int *cur_exprunsubrun_no) OVERRIDE_CPP17
should be called by DeSerializerCOPPER.cc and fill contents in RawHeader
virtual unsigned int GetB2LFEE32bitEventNumber(int n) OVERRIDE_CPP17
get b2l block from "FEE b2link header"
PostRawCOPPERFormat_v2()
Default constructor.
virtual ~PostRawCOPPERFormat_v2()
Constructor using existing pointer to raw data buffer.
int GetDetectorNwords(int n, int finesse_num) OVERRIDE_CPP17
get Detector buffer length
bool CheckCOPPERMagic(int n) OVERRIDE_CPP17
Check if COPPER Magic words are correct.
unsigned int CalcDriverChkSum(int n) OVERRIDE_CPP17
calc COPPER driver's checksum value
int GetFINESSENwords(int n, int finesse) OVERRIDE_CPP17
get data size of FINESSE buffer
void CheckData(int n, unsigned int prev_evenum, unsigned int *cur_evenum, unsigned int prev_copper_ctr, unsigned int *cur_copper_ctr, unsigned int prev_exprunsubrun_no, unsigned int *cur_exprunsubrun_no) OVERRIDE_CPP17
check data contents
RawTrailer_v2 tmp_trailer
trailer ( not recorded )
RawHeader_v2 tmp_header
header ( not recorded )
virtual unsigned int CalcXORChecksum(int *buf, int nwords)
calc XOR checksum
virtual void GetNodeName(int n, char *node_name, int bufsize)
Get hostname of a node from the RawCOPPER header.
virtual int * GetFINESSEBuffer(int n, int finesse_num)
get FINESSE buffer pointer
struct to contain header information used by RawCOPPERFormat::Packer()
unsigned int b2l_ctime
32bit unitx time at trigger timing distributed by FTSW. For details, see Nakao-san's belle2link user ...
unsigned int eve_num
Run # and subrun # ( 22bit )
unsigned int tt_ctime
Node ID (32bit)
unsigned int tt_utime
27bit clock ticks at trigger timing distributed by FTSW. For details, see Nakao-san's belle2link user...
unsigned int node_id
Event Number (32bit)
unsigned int run_subrun_num
Experiment number (10bit)
unsigned int exp_num
Experiment number (10bit)
virtual int GetBlockNwords(int n)
get size of a data block
virtual int GetBufferPos(int n)
get position of data block in word
virtual int * GetBuffer(int n)
get nth buffer pointer
virtual void PrintData(int *buf, int nwords)
print data
void SetBuffer(int *bufin)
set buffer
Definition: RawHeader_v2.h:47
unsigned int GetEveNo(int n) OVERRIDE_CPP17
get subrun #(8bit)
int GetHdrNwords()
get contents of header
Definition: RawHeader_v2.h:360
int GetTrlNwords()
Set magic word.
unsigned int GetExpRunSubrun(int n) OVERRIDE_CPP17
get Experimental # from header
int GetExpNo(int n) OVERRIDE_CPP17
get Experimental # from header
unsigned int GetChksum()
Set # of trailer words.
void SetBuffer(int *bufin)
return buffer
Definition: RawTrailer_v2.h:96
int GetRunNo(int n) OVERRIDE_CPP17
Exp# (10bit) run# (14bit) restart # (8bit)
unsigned int GetNodeID(int n) OVERRIDE_CPP17
get node-ID from data
int * GetRawTrlBufPtr(int n) OVERRIDE_CPP17
get buffer pointer of rawcopper trailer
int GetSubRunNo(int n) OVERRIDE_CPP17
get run # (14bit)
Abstract base class for different kinds of events.
STL namespace.