Belle II Software  release-05-01-25
PXDRawDataStructs.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2017 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Bjoern Spruck *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <pxd/dataobjects/PXDErrorFlags.h>
14 
15 #include <boost/spirit/home/support/detail/endian.hpp>
16 
17 
21 
22 namespace Belle2 {
28  namespace PXD {
29 
30  using boost::spirit::endian::ubig16_t;
31  using boost::spirit::endian::ubig32_t;
32  using Belle2::PXD::PXDError::PXDErrorFlags;
33 
38  struct dhc_frame_header_word0 {
40  const ubig16_t data;
41 
43  inline ubig16_t getData(void) const
44  {
45  return data;
46  };
48  inline unsigned short getFrameType(void) const
49  {
50  return (data & 0x7800) >> 11;
51  };
53  inline unsigned short getErrorFlag(void) const
54  {
55  return (data & 0x8000) >> 15;
56  };
58  inline unsigned short getMisc(void) const
59  {
60  return data & 0x7FF;
61  };
63  void print(void) const;
64  };
65 
70  struct dhc_start_frame {
71  const dhc_frame_header_word0 word0;
72  const ubig16_t trigger_nr_lo;
73  const ubig16_t trigger_nr_hi;
74  const ubig16_t time_tag_lo_and_type;
75  const ubig16_t time_tag_mid;
76  const ubig16_t time_tag_hi;
77  const ubig16_t run_subrun;
78  const ubig16_t exp_run;
79  const unsigned int crc32;
80  // fixed length, only for reading
81 
82  inline unsigned short getRunSubrun(void) const { return run_subrun; };
83  inline unsigned short getExpRun(void) const { return exp_run; };
84  inline unsigned short getEventNrLo(void) const { return trigger_nr_lo; };
85  inline unsigned short getEventNrHi(void) const { return trigger_nr_hi; };
86 
87  bool isFakedData(void) const;
88  inline unsigned int getFixedSize(void) const
89  {
90  return 20;// bytes
91  };
92  void print(void) const;
93  inline unsigned short get_active_dhe_mask(void) const {return word0.getMisc() & 0x1F;};
94  inline unsigned short get_dhc_id(void) const {return (word0.getMisc() >> 5) & 0xF;};
95  inline unsigned short get_subrun(void) const {return run_subrun & 0x00FF;};
96  inline unsigned short get_run(void) const {return (((run_subrun & 0xFF00) >> 8) | ((exp_run & 0x003F) << 8));};
97  inline unsigned short get_experiment(void) const {return (exp_run & 0xFFC0) >> 6 ;};
98  inline unsigned short get_gated_flag(void) const {return (word0.getMisc() & 0x200) != 0;};
99  inline unsigned short get_gated_isher(void) const {return (word0.getMisc() & 0x400) != 0; ;};
100  };
101 
106  struct dhc_dhe_start_frame {
107  const dhc_frame_header_word0 word0;
108  const ubig16_t trigger_nr_lo;
109  const ubig16_t trigger_nr_hi;
110  const ubig16_t dhe_time_tag_lo;
111  const ubig16_t dhe_time_tag_hi;
112  const ubig16_t sfnr_offset;
113  const unsigned int crc32;
114  // fixed length
115 
116  inline unsigned short getEventNrLo(void) const { return trigger_nr_lo; };
117  inline unsigned short getEventNrHi(void) const { return trigger_nr_hi; };
118  inline unsigned short getStartFrameNr(void) const { return (sfnr_offset & 0xFC00) >> 10; };
119  inline unsigned short getTriggerGate(void) const { return sfnr_offset & 0xFF; }; //</ trigger gate (updated to 8 bit, before 10!)
120  inline unsigned int getFixedSize(void) const { return 16; };// 8 words
121 
122  void print(void) const;
123  inline unsigned int getActiveDHPMask(void) const {return word0.getMisc() & 0xF;};
124  inline unsigned int getDHEId(void) const {return (word0.getMisc() >> 4) & 0x3F;};
125  };
126 
132  struct dhc_commode_frame {
133  const dhc_frame_header_word0 word0;
134  const ubig16_t trigger_nr_lo;
135  const ubig16_t data[96];
136  const unsigned int crc32;
137  // fixed length
138 
139  inline unsigned short getEventNrLo(void) const { return trigger_nr_lo; };
140  inline unsigned int getFixedSize(void) const { return (4 + 96) * 2; };// 100 words
141  inline unsigned int getDHEId(void) const {return (word0.getMisc() >> 4) & 0x3F;};
142  };
143 
148  struct dhc_direct_readout_frame {
149  const dhc_frame_header_word0 word0;
150  const ubig16_t trigger_nr_lo;
151  // an unbelievable amount of words may follow
152  // and finally a 32 bit checksum
153 
154  inline unsigned short getEventNrLo(void) const { return trigger_nr_lo; };
155  void print(void) const;
156  inline unsigned short getDHEId(void) const {return (word0.getMisc() >> 4) & 0x3F;};
157  inline unsigned short getDHPPort(void) const {return (word0.getMisc()) & 0x3;};
158  inline bool getDataReformattedFlag(void) const {return (word0.getMisc() >> 3) & 0x1;};
159  };
160 
166  };
167 
172  struct dhc_direct_readout_frame_zsd : public dhc_direct_readout_frame {
173  };
174 
179  struct dhc_onsen_trigger_frame {
180  const dhc_frame_header_word0 word0;
181  const ubig16_t trignr0;
182  const ubig32_t magic1;
183  const ubig32_t trignr1;
184  const ubig32_t trigtag1;
185  const ubig32_t magic2;
186  const ubig32_t trignr2;
187  const ubig32_t trigtag2;
188  const unsigned int crc32;
189 
190  inline unsigned int getFixedSize(void) const { return 32; };
191  inline unsigned short get_trig_nr0(void) const { return trignr0; };
192  inline unsigned int get_trig_nr1(void) const { return trignr1; };
193  inline unsigned int get_trig_nr2(void) const { return trignr2; };
194  inline unsigned int get_trig_tag1(void) const { return trigtag1; };
195  inline unsigned int get_trig_tag2(void) const { return trigtag2; };
196  inline unsigned short get_subrun1(void) const {return trigtag1 & 0xFF;};
197  inline unsigned short get_run1(void) const {return ((trigtag1 & 0x003FFF00) >> 8);};
198  inline unsigned short get_experiment1(void) const {return (trigtag1 & 0xFFC00000) >> 22 ;};
199  inline unsigned short get_subrun2(void) const {return trigtag2 & 0xFF;};
200  inline unsigned short get_run2(void) const {return ((trigtag2 & 0x003FFF00) >> 8);};
201  inline unsigned short get_experiment2(void) const {return (trigtag2 & 0xFFC00000) >> 22 ;};
202  void print(void) const;
203  PXDError::PXDErrorFlags check_error(bool ignore_datcon_flag = false, bool ignore_hltroi_magic_flag = false,
204  bool ignore_merger_mm_flag = false) const;
205 
206  inline bool is_fake_datcon(void) const { return (magic2 == 0xCAFE0000 && trignr2 == 0x00000000 && trigtag2 == 0x00000000);};
207  inline bool is_Accepted(void) const { return (magic1 & 0x8000) != 0; };
208  inline bool is_SendROIs(void) const { return (magic1 & 0x2000) != 0; }
209  inline bool is_SendUnfiltered(void) const { return (magic1 & 0x4000) != 0; };
210  };
211 
216  struct dhc_onsen_roi_frame {
217  const dhc_frame_header_word0 word0;
218  const ubig16_t trignr0;
219  // plus n* ROIs (64 bit)
220  // plus inner checksum 32bit
221  // plus checksum 32bit
222 
223  inline unsigned short get_trig_nr0(void) const { return trignr0; };
224  PXDError::PXDErrorFlags check_error(int length, bool ignore_inv_size_flag = false) const;
225  void print(void) const;
227  inline int getMinSize(void) const {return 4 + 4 + 4;};
228  unsigned int check_inner_crc(unsigned int /*length*/) const
229  {
230  // Parts of the data are now in the ONSEN Trigger frame, therefore the inner CRC cannot be checked that easily!
231  // TODO can be re-implemented if needed
232  return 0;
233  };
234 
235  };
236 
241  struct dhc_ghost_frame {
242  const dhc_frame_header_word0 word0;
243  const ubig16_t trigger_nr_lo;
244  const unsigned int crc32;
246 
247  inline unsigned int getFixedSize(void) const { return 8; };
248  void print(void) const;
249  inline unsigned short getDHEId(void) const {return (word0.getMisc() >> 4) & 0x3F;};
250  inline unsigned short getDHPPort(void) const {return (word0.getMisc()) & 0x3;};
251  unsigned short getErrorBits(void) const;
252  };
253 
258  struct dhc_end_frame {
259  const dhc_frame_header_word0 word0;
260  const ubig16_t trigger_nr_lo;
261  const ubig32_t wordsinevent;
262  const ubig32_t errorinfo;
263  const unsigned int crc32;
264  // fixed length
265 
266  unsigned int get_words(void) const { return wordsinevent; }
267  inline unsigned int getFixedSize(void) const { return 16; };
268  bool isFakedData(void) const;
269  void print(void) const;
270  inline unsigned int get_dhc_id(void) const {return (word0.getMisc() >> 5) & 0xF;};
271  inline unsigned int getErrorInfo(void) const {return errorinfo;};
272  };
273 
278  struct dhc_dhe_end_frame {
279  const dhc_frame_header_word0 word0;
280  const ubig16_t trigger_nr_lo;
281  const ubig16_t wordsineventlo;
282  const ubig16_t wordsineventhi;
283  const ubig32_t errorinfo;
284  const unsigned int crc32;
285  // fixed length
286 
287  unsigned int get_words(void) const { return wordsineventlo | ((unsigned int)wordsineventhi << 16); }
288  inline unsigned int getFixedSize(void) const { return 16; };
289  void print(void) const;
290  inline unsigned int getDHEId(void) const {return (word0.getMisc() >> 4) & 0x3F;};
291  inline unsigned int getErrorInfo(void) const {return errorinfo;};
292  unsigned int getErrorStateMachineDHP(int dhpid) const;
293  unsigned int getErrorStateMachineStartDHP(int dhpid) const;
294  unsigned int getErrorStateMachineEndDHP(int dhpid) const;
295  };
296 
297 
301 
307  class dhc_frames {
308  public:
309  union {
310  const void* data;
312  const dhc_start_frame* data_dhc_start_frame;
313  const dhc_end_frame* data_dhc_end_frame;
314  const dhc_dhe_start_frame* data_dhe_start_frame;
315  const dhc_dhe_end_frame* data_dhe_end_frame;
316  const dhc_commode_frame* data_commode_frame;
317  const dhc_direct_readout_frame* data_direct_readout_frame;
318  const dhc_direct_readout_frame_raw* data_direct_readout_frame_raw;
319  const dhc_direct_readout_frame_zsd* data_direct_readout_frame_zsd;
320  const dhc_ghost_frame* data_ghost_frame;
321  const dhc_onsen_roi_frame* data_onsen_roi_frame;
322  };
323  unsigned int datasize;
324  int type;
325  int length;
326 
327  dhc_frames(void)
328  {
329  data = 0;
330  datasize = 0;
331  type = -1;
332  length = 0;
333  };
334  int getFrameType(void)
335  {
336  return type;
337  };
338  void set(const void* d, unsigned int t)
339  {
340  data = d;
341  type = t;
342  length = 0;
343  };
344  void set(const void* d, unsigned int t, unsigned int l)
345  {
346  data = d;
347  type = t;
348  length = l;
349  };
350  void set(const void* d)
351  {
352  data = d;
353  type = reinterpret_cast <const dhc_frame_header_word0*>(data)->getFrameType();
354  length = 0;
355  };
356  inline unsigned int getEventNrLo(void) const { return ((ubig16_t*)data)[1]; };
357  PXDError::PXDErrorFlags check_padding();
358 
359  PXDError::PXDErrorFlags check_crc(bool ignore_crc_flag = false);
360 
361 
362  unsigned int getFixedSize(void);
363 
364  };
365  };
367 };
Belle2::PXD::dhc_direct_readout_frame
DHC direct readout frame data struct.
Definition: PXDRawDataStructs.h:158
Belle2::PXD::dhc_frame_header_word0::getData
ubig16_t getData(void) const
get the data
Definition: PXDRawDataStructs.h:53
Belle2::PXD::dhc_frame_header_word0::getErrorFlag
unsigned short getErrorFlag(void) const
get error flag
Definition: PXDRawDataStructs.h:63
Belle2::PXD::dhc_frames::check_padding
PXDError::PXDErrorFlags check_padding()
Definition: PXDRawDataStructs.cc:238
Belle2::PXD::dhc_onsen_trigger_frame::trigtag1
const ubig32_t trigtag1
HLT Trigger/Tag part 1.
Definition: PXDRawDataStructs.h:194
Belle2::PXD::dhc_onsen_trigger_frame::get_trig_nr0
unsigned short get_trig_nr0(void) const
8*4 bytes might still be changed
Definition: PXDRawDataStructs.h:201
Belle2::PXD::dhc_onsen_trigger_frame::trignr1
const ubig32_t trignr1
CAFExxxx , redundant.
Definition: PXDRawDataStructs.h:193
Belle2::PXD::dhc_frames
DHC frame wrapper class.
Definition: PXDRawDataStructs.h:317
Belle2::PXD::dhc_commode_frame
DHH common mode frame data struct.
Definition: PXDRawDataStructs.h:142
Belle2::PXD::dhc_onsen_roi_frame
ONSEN (debug) ROI frame data struct.
Definition: PXDRawDataStructs.h:226
Belle2::PXD::dhc_direct_readout_frame_zsd
DHC Zero supressed direct readout frame data struct.
Definition: PXDRawDataStructs.h:182
Belle2::PXD::dhc_ghost_frame::getFixedSize
unsigned int getFixedSize(void) const
fixed length
Definition: PXDRawDataStructs.h:257
Belle2::PXD::dhc_frame_header_word0
DHC frame header word data struct.
Definition: PXDRawDataStructs.h:48
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::PXD::dhc_start_frame
DHC start frame data struct.
Definition: PXDRawDataStructs.h:80
Belle2::PXD::dhc_onsen_trigger_frame::trigtag2
const ubig32_t trigtag2
redundant, DATCON Trigger/Tag part 1
Definition: PXDRawDataStructs.h:197
Belle2::PXD::dhc_direct_readout_frame_raw
DHC RAW direct readout frame data struct.
Definition: PXDRawDataStructs.h:175
Belle2::PXD::dhc_end_frame
DHC End frame data struct.
Definition: PXDRawDataStructs.h:268
Belle2::PXD::dhc_ghost_frame
DHC Ghost frame data struct.
Definition: PXDRawDataStructs.h:251
Belle2::PXD::dhc_frames::data_onsen_trigger_frame
const dhc_onsen_trigger_frame * data_onsen_trigger_frame
no type
Definition: PXDRawDataStructs.h:325
Belle2::PXD::dhc_dhe_end_frame
DHE End frame data struct.
Definition: PXDRawDataStructs.h:288
Belle2::PXD::dhc_onsen_trigger_frame::magic2
const ubig32_t magic2
HLT Trigger/Tag part 2.
Definition: PXDRawDataStructs.h:195
Belle2::PXD::dhc_frames::getFixedSize
unsigned int getFixedSize(void)
Definition: PXDRawDataStructs.cc:279
Belle2::PXD::dhc_frame_header_word0::getFrameType
unsigned short getFrameType(void) const
get type of frame
Definition: PXDRawDataStructs.h:58
Belle2::PXD::dhc_dhe_end_frame::wordsineventlo
const ubig16_t wordsineventlo
words swapped... because of DHE 16 bit handling
Definition: PXDRawDataStructs.h:291
Belle2::PXD::dhc_onsen_roi_frame::trignr0
const ubig16_t trignr0
mainly empty
Definition: PXDRawDataStructs.h:228
Belle2::PXD::dhc_onsen_trigger_frame::trignr2
const ubig32_t trignr2
CAFExxxx, redundant.
Definition: PXDRawDataStructs.h:196
Belle2::PXD::dhc_dhe_end_frame::errorinfo
const ubig32_t errorinfo
not well defined yet
Definition: PXDRawDataStructs.h:293
Belle2::PXD::dhc_dhe_start_frame
DHH start frame data struct.
Definition: PXDRawDataStructs.h:116
Belle2::PXD::dhc_onsen_trigger_frame
ONSEN Trigger frame data struct.
Definition: PXDRawDataStructs.h:189
Belle2::PXD::dhc_frame_header_word0::getMisc
unsigned short getMisc(void) const
get misc
Definition: PXDRawDataStructs.h:68
Belle2::PXD::dhc_onsen_roi_frame::getMinSize
int getMinSize(void) const
4 byte header, ROIS (n*8), 4 byte copy of inner CRC, 4 byte outer CRC
Definition: PXDRawDataStructs.h:237
Belle2::PXD::dhc_frame_header_word0::print
void print(void) const
print
Definition: PXDRawDataStructs.cc:48
Belle2::PXD::dhc_frame_header_word0::data
const ubig16_t data
the data
Definition: PXDRawDataStructs.h:50
Belle2::PXD::dhc_onsen_trigger_frame::crc32
const unsigned int crc32
redundant, DATCON Trigger/Tag part 2
Definition: PXDRawDataStructs.h:198
Belle2::PXD::dhc_dhe_start_frame::getTriggerGate
unsigned short getTriggerGate(void) const
last DHP frame before trigger
Definition: PXDRawDataStructs.h:129