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