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