Belle II Software  release-05-02-19
RawHeader_v0.h
1 //+
2 // File : RawHeader_v0.h
3 // Description : Module to handle RawHeader_v0 attached to raw data from COPPER
4 //
5 // Author : Satoru Yamada, IPNS, KEK
6 // Date : 2 - Aug - 2013
7 //-
8 
9 #ifndef RAWHEADER_V0_H
10 #define RAWHEADER_V0_H
11 
12 #include <stdio.h>
13 #include <string.h>
14 #include <rawdata/switch_basf2_standalone.h>
15 
16 //#include <framework/datastore/DataStore.h>
17 
18 
19 //#define HEADER_SIZE 16
20 
21 namespace Belle2 {
33  // class RawHeader_v0 : public TObject {
34  class RawHeader_v0 {
35  public:
37  RawHeader_v0();
38 
40  RawHeader_v0(int*);
41 
43  ~RawHeader_v0();
44 
46  int* GetBuffer() { return m_buffer; }
47 
49  void SetBuffer(int* bufin) { m_buffer = bufin; }
50 
52  void CheckSetBuffer();
53 
55  void CheckGetBuffer();
56 
58  void Initialize();
59 
61  void SetNwords(int nwords);
62 
64  void SetEveNo(unsigned int eve_no);
65 
66  void SetNodeID(unsigned int node_id);
67 
68  void SetDataType(int data_type);
69 
70  void SetTruncMask(int trunc_mask);
71 
72  // void SetB2LFEEHdrPart(unsigned int word1, unsigned int word2); //! set contents of header
73  // void SetFTSW2Words(int* ftsw_buf);
74 
76  void SetFTSW2Words(unsigned int word1, unsigned int word2);
77 
79  void SetExpRunNumber(int* exprun_buf);
80 
82  void SetOffset1stFINESSE(int offset_1st_FINESSE);
83 
84  void SetOffset2ndFINESSE(int offset_2nd_FINESSE);
85 
86  void SetOffset3rdFINESSE(int offset_3rd_FINESSE);
87 
88  void SetOffset4thFINESSE(int offset_4th_FINESSE);
89 
91 
93  int AddNodeInfo(int node_id);
94 
96  int GetNwords();
97 
98  int GetHdrNwords();
99 
100  unsigned int GetExpRunSubrun();
101 
102  int GetExpNo();
103 
104  int GetRunNo();
105 
106  int GetSubRunNo();
107 
108  unsigned int GetEveNo();
109 
110  unsigned int GetNodeID();
111 
112  int GetDataType();
113 
114  int GetTruncMask();
115 
117  unsigned int GetErrorBitFlag();
118 
120  void AddErrorBitFlag(unsigned int error_bit_flag);
121 
123  int GetOffset1stFINESSE();
124 
126  int GetOffset2ndFINESSE();
127 
129  int GetOffset3rdFINESSE();
130 
132  int GetOffset4thFINESSE();
133 
135  int GetNumNodes();
136 
138  int GetNodeInfo(int node_no, int* node_id);
139 
141  unsigned int GetTTCtimeTRGType();
142 
144  int GetTTCtime();
145 
147  int GetTRGType();
148 
150  unsigned int GetTTUtime();
151 
153  void GetTTTimeVal(struct timeval* tv);
154 
156  unsigned int GetMagicWordEntireHeader();
157 
158  /*
159  Experimental(10bit) #, Run#(14bit), restat# bit mask(8bit)
160  */
161  enum {
162  FORMAT_VERSION__MASK = 0x0000FF00,
163  FORMAT_VERSION_SHIFT = 8
164  };
165 
166  enum {
167  EXP_MASK = 0xFFC00000,
168  EXP_SHIFT = 22,
169  RUNNO_MASK = 0x003FFF00,
170  RUNNO_SHIFT = 8,
171  SUBRUNNO_MASK = 0x000000FF
172  };
173 
174  enum {
175  RAWHEADER_NWORDS = 20
176  };
177 
178  /* Data Format : Fixed length part*/
179  enum {
180  POS_NWORDS = 0,
181  POS_HDR_NWORDS = 1,
182  POS_EXP_RUN_NO = 2,
183  POS_EVE_NO = 3,
184  POS_TTCTIME_TRGTYPE = 4,
185  POS_TTUTIME = 5,
186  POS_NODE_ID = 6,
187  POS_TRUNC_MASK_DATATYPE = 7,
188  POS_OFFSET_1ST_FINESSE = 8,
189  POS_OFFSET_2ND_FINESSE = 9,
190  POS_OFFSET_3RD_FINESSE = 10,
191  POS_OFFSET_4TH_FINESSE = 11,
192  POS_RESVD_1 = 12,
193  POS_RESVD_2 = 13,
194  POS_NUM_NODES = 14,
195  POS_NODES_1 = 15,
196  POS_NODES_2 = 16,
197  POS_NODES_3 = 17,
198  POS_NODES_4 = 18,
199  POS_TERM_HEADER = 19
200  };
201  /* Data Format : Node info */
202  enum {
203  NUM_MAX_NODES = 4 /* (NUM_MAX_NODES + 1) slots are available in m_buffer.
204  (NUM_MAX_NODES +1 )th slot is filled with -1, when the number of total nodes
205  exceeds NUM_MAX_NODES */
206  };
207 
208  /* Data Format : Magic word */
209  enum {
210  MAGIC_WORD_TERM_HEADER = 0x7fff0005
211  };
212 
213  /* To extract ctime */
214  enum {
215  TTCTIME_MASK = 0x7FFFFFF0,
216  TTCTIME_SHIFT = 4,
217  TRGTYPE_MASK = 0xF
218  };
219 
220  private:
222  int* m_buffer;
223 
225  // ver.2 Do not record m_buffer pointer. (Dec.19, 2014)
226  // ClassDef(RawHeader_v0, 2);
227  };
228 
229 
231  {
232  if (m_buffer == NULL) {
233  B2FATAL("m_buffer is NULL. Exiting...");
234  }
235  }
236 
238  {
239  if (m_buffer == NULL) {
240  B2FATAL("m_buffer is NULL. Data is corrupted or header info has not yet filled. Exiting...");
241  } else if (m_buffer[ POS_TERM_HEADER ] != MAGIC_WORD_TERM_HEADER) {
242  B2FATAL("magic word is invalid(0x" << std::hex << m_buffer[ POS_TERM_HEADER ] << "," << m_buffer << " pos " << std::dec <<
243  POS_TERM_HEADER
244  << "). Data is corrupted or header info has not yet filled. Exiting...");
245  }
246  }
247 
248 
249 
250 //
251 // Set info.
252 //
254  {
255  CheckSetBuffer();
256  memset(m_buffer, 0, sizeof(int)*RAWHEADER_NWORDS);
257  m_buffer[ POS_HDR_NWORDS ] = RAWHEADER_NWORDS;
258  m_buffer[ POS_NUM_NODES ] = 0;
259 
260  }
261 
263  {
264  m_buffer[ POS_TERM_HEADER ] = MAGIC_WORD_TERM_HEADER;
265  }
266 
267  inline void RawHeader_v0::SetNwords(int nwords)
268  {
269  CheckSetBuffer();
270  m_buffer[ POS_NWORDS ] = nwords;
271 
272  }
273 
274  inline void RawHeader_v0::SetEveNo(unsigned int eve_no)
275  {
276  CheckSetBuffer();
277  m_buffer[ POS_EVE_NO ] = eve_no;
278  }
279 
280  inline void RawHeader_v0::SetNodeID(unsigned int node_id)
281  {
282  CheckSetBuffer();
283  m_buffer[ POS_NODE_ID ] = node_id;
284  }
285 
286  inline void RawHeader_v0::SetDataType(int data_type)
287  {
288  CheckSetBuffer();
289  m_buffer[ POS_TRUNC_MASK_DATATYPE ] =
290  (data_type & 0x7FFFFFFF) | (m_buffer[ POS_TRUNC_MASK_DATATYPE ] & 0x80000000);
291  }
292 
293  inline void RawHeader_v0::SetTruncMask(int trunc_mask)
294  {
295  CheckSetBuffer();
296  m_buffer[ POS_TRUNC_MASK_DATATYPE ] = (trunc_mask << 31) | (m_buffer[ POS_TRUNC_MASK_DATATYPE ] & 0x7FFFFFFF);
297  }
298 
299  /* inline void RawHeader_v0::SetB2LFEEHdrPart(unsigned int word1, unsigned int word2) */
300  /* { */
301  /* m_buffer[ POS_HSLB_1 ] = word1; */
302  /* m_buffer[ POS_HSLB_2 ] = word2; */
303  /* } */
304 
305 
306  inline void RawHeader_v0::SetOffset1stFINESSE(int offset_1st_FINESSE)
307  {
308  CheckSetBuffer();
309  m_buffer[ POS_OFFSET_1ST_FINESSE ] = offset_1st_FINESSE;
310  }
311 
312  inline void RawHeader_v0::SetOffset2ndFINESSE(int offset_2nd_FINESSE)
313  {
314  CheckSetBuffer();
315  m_buffer[ POS_OFFSET_2ND_FINESSE ] = offset_2nd_FINESSE;
316  }
317 
318  inline void RawHeader_v0::SetOffset3rdFINESSE(int offset_3rd_FINESSE)
319  {
320  CheckSetBuffer();
321  m_buffer[ POS_OFFSET_3RD_FINESSE ] = offset_3rd_FINESSE;
322  }
323 
324  inline void RawHeader_v0::SetOffset4thFINESSE(int offset_4th_FINESSE)
325  {
326  CheckSetBuffer();
327  m_buffer[ POS_OFFSET_4TH_FINESSE ] = offset_4th_FINESSE;
328  }
329 
330  /* inline void RawHeader_v0::SetFTSW2Words(int* ftsw_buf) */
331  /* { */
332  /* CheckSetBuffer(); */
333  /* memcpy(&(m_buffer[ POS_HSLB_1 ]), (char*)ftsw_buf, sizeof(int) * 2); */
334  /* return; */
335  /* } */
336 
337  inline void RawHeader_v0::SetFTSW2Words(unsigned int word1,
338  unsigned int word2)
339  {
340  CheckSetBuffer();
341  m_buffer[ POS_TTCTIME_TRGTYPE ] = word1;
342  m_buffer[ POS_TTUTIME ] = word2;
343  return;
344  }
345 
346 
347  inline void RawHeader_v0::SetExpRunNumber(int* exprun_buf)
348  {
349  CheckSetBuffer();
350  memcpy(&(m_buffer[ POS_EXP_RUN_NO ]), (char*)exprun_buf, sizeof(int) * 1);
351  return;
352  }
353 
354 
355 //
356 // Obtain info
357 //
358 
360  {
361  CheckGetBuffer();
362  return m_buffer[ POS_NWORDS ];
363  }
364 
366  {
367 
368  CheckGetBuffer();
369 
370  return m_buffer[ POS_HDR_NWORDS ];
371  }
372 
374  {
375  CheckGetBuffer();
376  return (((unsigned int)(m_buffer[ POS_EXP_RUN_NO ]) & EXP_MASK)
377  >> EXP_SHIFT);
378  }
379 
380 
382  {
383  CheckGetBuffer();
384  return (((unsigned int)(m_buffer[ POS_EXP_RUN_NO ]) & RUNNO_MASK)
385  >> RUNNO_SHIFT);
386  }
387 
389  {
390  CheckGetBuffer();
391  return (m_buffer[ POS_EXP_RUN_NO ] & SUBRUNNO_MASK);
392  }
393 
394  inline unsigned int RawHeader_v0::GetExpRunSubrun()
395  {
396  CheckGetBuffer();
397  return ((unsigned int)(m_buffer[ POS_EXP_RUN_NO ]));
398  }
399 
400 
401  inline unsigned int RawHeader_v0::GetEveNo()
402  {
403  CheckGetBuffer();
404  return m_buffer[ POS_EVE_NO ];
405  }
406 
407  inline unsigned int RawHeader_v0::GetNodeID()
408  {
409  CheckGetBuffer();
410  return (unsigned int)(m_buffer[ POS_NODE_ID ]);
411  }
412 
414  {
415  CheckGetBuffer();
416  return (m_buffer[ POS_TRUNC_MASK_DATATYPE ] & 0x7FFFFFFF);
417  }
418 
420  {
421  CheckGetBuffer();
422  return (m_buffer[ POS_TRUNC_MASK_DATATYPE ] >> 23) & 0x1;
423  }
424 
425  inline unsigned int RawHeader_v0::GetErrorBitFlag()
426  {
427  CheckGetBuffer();
428  return (unsigned int)(m_buffer[ POS_TRUNC_MASK_DATATYPE ]);
429  }
430 
431  inline void RawHeader_v0::AddErrorBitFlag(unsigned int error_bit_flag)
432  {
433  CheckGetBuffer();
434  m_buffer[ POS_TRUNC_MASK_DATATYPE ] |= (int)error_bit_flag;
435  return;
436  }
437 
439  {
440  CheckGetBuffer();
441  return m_buffer[ POS_OFFSET_1ST_FINESSE ];
442  }
443 
445  {
446  CheckGetBuffer();
447  return m_buffer[ POS_OFFSET_2ND_FINESSE ];
448  }
449 
451  {
452  CheckGetBuffer();
453  return m_buffer[ POS_OFFSET_3RD_FINESSE ];
454  }
455 
457  {
458  CheckGetBuffer();
459  return m_buffer[ POS_OFFSET_4TH_FINESSE ];
460  }
461 
463  {
464  CheckGetBuffer();
465  return m_buffer[ POS_NUM_NODES ];
466  }
467 
468  inline unsigned int RawHeader_v0::GetTTCtimeTRGType()
469  {
470  CheckGetBuffer();
471  return (unsigned int)(m_buffer[ POS_TTCTIME_TRGTYPE ]);
472  }
473 
475  {
476  CheckGetBuffer();
477  return (int)((GetTTCtimeTRGType() & TTCTIME_MASK) >> TTCTIME_SHIFT);
478  }
479 
481  {
482  CheckGetBuffer();
483  return (int)(GetTTCtimeTRGType() & TRGTYPE_MASK);
484  }
485 
486 
487  inline unsigned int RawHeader_v0::GetTTUtime()
488  {
489  CheckGetBuffer();
490  return (unsigned int)(m_buffer[ POS_TTUTIME ]);
491  }
492 
493  inline void RawHeader_v0::GetTTTimeVal(struct timeval* tv)
494  {
495  tv->tv_sec = GetTTUtime();
496  tv->tv_usec = (int)(((double)GetTTCtime()) / 127.216);
497  return ;
498  }
499 
500 
502  {
503  CheckGetBuffer();
504  return m_buffer[ POS_TERM_HEADER ];
505  }
506 
507 
508 
509 
510 
512 }
513 
514 #endif
Belle2::RawHeader_v0::GetDataType
int GetDataType()
get contents of header
Definition: RawHeader_v0.h:413
Belle2::RawHeader_v0::RawHeader_v0
RawHeader_v0()
Default constructor.
Definition: RawHeader_v0.cc:17
Belle2::RawHeader_v0::SetBuffer
void SetBuffer(int *bufin)
set buffer
Definition: RawHeader_v0.h:49
Belle2::RawHeader_v0::GetRunNo
int GetRunNo()
get contents of header
Definition: RawHeader_v0.h:381
Belle2::RawHeader_v0::GetOffset1stFINESSE
int GetOffset1stFINESSE()
get contents of header
Definition: RawHeader_v0.h:438
Belle2::RawHeader_v0::GetNumNodes
int GetNumNodes()
get contents of header
Definition: RawHeader_v0.h:462
Belle2::RawHeader_v0::SetOffset1stFINESSE
void SetOffset1stFINESSE(int offset_1st_FINESSE)
set contents of header
Definition: RawHeader_v0.h:306
Belle2::RawHeader_v0::GetExpNo
int GetExpNo()
get a run/exp number combined word
Definition: RawHeader_v0.h:373
Belle2::RawHeader_v0::GetTRGType
int GetTRGType()
get TRGType
Definition: RawHeader_v0.h:480
Belle2::RawHeader_v0::GetTTCtime
int GetTTCtime()
get contents of header
Definition: RawHeader_v0.h:474
Belle2::RawHeader_v0::GetTTTimeVal
void GetTTTimeVal(struct timeval *tv)
get contents of header
Definition: RawHeader_v0.h:493
Belle2::RawHeader_v0::CheckGetBuffer
void CheckGetBuffer()
check if m_buffer exists
Definition: RawHeader_v0.h:237
Belle2::RawHeader_v0::GetBuffer
int * GetBuffer()
Get header contents.
Definition: RawHeader_v0.h:46
Belle2::RawHeader_v0::SetNodeID
void SetNodeID(unsigned int node_id)
set contents of header
Definition: RawHeader_v0.h:280
Belle2::RawHeader_v0::GetOffset4thFINESSE
int GetOffset4thFINESSE()
get contents of header
Definition: RawHeader_v0.h:456
Belle2::RawHeader_v0::GetTTCtimeTRGType
unsigned int GetTTCtimeTRGType()
get contents of header
Definition: RawHeader_v0.h:468
Belle2::RawHeader_v0
The Raw Header class ver.0 ( from August, 2013 to April, 2014 ) This class defines the format of the ...
Definition: RawHeader_v0.h:34
Belle2::RawHeader_v0::GetTruncMask
int GetTruncMask()
get contents of header
Definition: RawHeader_v0.h:419
Belle2::RawHeader_v0::GetSubRunNo
int GetSubRunNo()
get run # (14bit)
Definition: RawHeader_v0.h:388
Belle2::RawHeader_v0::GetHdrNwords
int GetHdrNwords()
get contents of header
Definition: RawHeader_v0.h:365
Belle2::RawHeader_v0::~RawHeader_v0
~RawHeader_v0()
Destructor.
Definition: RawHeader_v0.cc:29
Belle2::RawHeader_v0::SetEveNo
void SetEveNo(unsigned int eve_no)
set contents of header
Definition: RawHeader_v0.h:274
Belle2::RawHeader_v0::GetNodeInfo
int GetNodeInfo(int node_no, int *node_id)
get contents of header
Definition: RawHeader_v0.cc:48
Belle2::RawHeader_v0::SetMagicWordEntireHeader
void SetMagicWordEntireHeader()
set contents of header
Definition: RawHeader_v0.h:262
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::RawHeader_v0::GetNwords
int GetNwords()
get contents of header
Definition: RawHeader_v0.h:359
Belle2::RawHeader_v0::GetEveNo
unsigned int GetEveNo()
get restart #(8bit)
Definition: RawHeader_v0.h:401
Belle2::RawHeader_v0::Initialize
void Initialize()
initialize header
Definition: RawHeader_v0.h:253
Belle2::RawHeader_v0::CheckSetBuffer
void CheckSetBuffer()
initialize header
Definition: RawHeader_v0.h:230
Belle2::RawHeader_v0::GetTTUtime
unsigned int GetTTUtime()
get contents of header
Definition: RawHeader_v0.h:487
Belle2::RawHeader_v0::SetFTSW2Words
void SetFTSW2Words(unsigned int word1, unsigned int word2)
set contents of header
Definition: RawHeader_v0.h:337
Belle2::RawHeader_v0::SetDataType
void SetDataType(int data_type)
set contents of header
Definition: RawHeader_v0.h:286
Belle2::RawHeader_v0::GetOffset3rdFINESSE
int GetOffset3rdFINESSE()
get contents of header
Definition: RawHeader_v0.h:450
Belle2::RawHeader_v0::m_buffer
int * m_buffer
do not record buffer ( RawCOPPER includes buffer of RawHeader_v0 and RawTrailer )
Definition: RawHeader_v0.h:222
Belle2::RawHeader_v0::AddErrorBitFlag
void AddErrorBitFlag(unsigned int error_bit_flag)
Add Detected Error bitflag.
Definition: RawHeader_v0.h:431
Belle2::RawHeader_v0::SetNwords
void SetNwords(int nwords)
set contents of header
Definition: RawHeader_v0.h:267
Belle2::RawHeader_v0::SetExpRunNumber
void SetExpRunNumber(int *exprun_buf)
Set a word consists of exp #, run # and subrun #.
Definition: RawHeader_v0.h:347
Belle2::RawHeader_v0::SetOffset2ndFINESSE
void SetOffset2ndFINESSE(int offset_2nd_FINESSE)
set contents of header
Definition: RawHeader_v0.h:312
Belle2::RawHeader_v0::GetNodeID
unsigned int GetNodeID()
get contents of header
Definition: RawHeader_v0.h:407
Belle2::RawHeader_v0::SetOffset4thFINESSE
void SetOffset4thFINESSE(int offset_4th_FINESSE)
set contents of header
Definition: RawHeader_v0.h:324
Belle2::RawHeader_v0::GetMagicWordEntireHeader
unsigned int GetMagicWordEntireHeader()
Get magic word to check the data corruption.
Definition: RawHeader_v0.h:501
Belle2::RawHeader_v0::SetTruncMask
void SetTruncMask(int trunc_mask)
set contents of header
Definition: RawHeader_v0.h:293
Belle2::RawHeader_v0::GetOffset2ndFINESSE
int GetOffset2ndFINESSE()
get contents of header
Definition: RawHeader_v0.h:444
Belle2::RawHeader_v0::GetErrorBitFlag
unsigned int GetErrorBitFlag()
get contents of header
Definition: RawHeader_v0.h:425
Belle2::RawHeader_v0::GetExpRunSubrun
unsigned int GetExpRunSubrun()
get contents of header
Definition: RawHeader_v0.h:394
Belle2::RawHeader_v0::AddNodeInfo
int AddNodeInfo(int node_id)
set magic words;
Definition: RawHeader_v0.cc:34
Belle2::RawHeader_v0::SetOffset3rdFINESSE
void SetOffset3rdFINESSE(int offset_3rd_FINESSE)
set contents of header
Definition: RawHeader_v0.h:318