Berkeley Nuclear Data Software
MesyDaqParsingSupport.h
Go to the documentation of this file.
1 /*
2  * mvme2root by Sean Finch. Modified from
3  * mvme-listfile-dumper - format mvme listfile content and print it to stdout
4  *
5  * Copyright (C) 2017 Florian Lüke <f.lueke@mesytec.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  */
22 #include <cerrno>
23 #include <cstdint>
24 #include <cstring>
25 #include <fstream>
26 #include <iostream>
27 #include <map>
28 
29 #include "MesyDAQEvent.h"
30 typedef uint8_t u8;
31 typedef uint16_t u16;
32 typedef uint32_t u32;
33 typedef uint64_t u64;
34 
35 typedef int8_t s8;
36 typedef int16_t s16;
37 typedef int32_t s32;
38 typedef int64_t s64;
39 
40 using std::cout;
41 using std::cerr;
42 using std::endl;
43 using std::string;
44 
45 #include "TFile.h"
46 #include "TROOT.h"
47 #include "TTree.h"
48 /* ===== VERSION 0 =====
49  *
50  * ------- Section (Event) Header ----------
51  * 33222222222211111111110000000000
52  * 10987654321098765432109876543210
53  * +--------------------------------+
54  * |ttt eeeessssssssssssssss|
55  * +--------------------------------+
56  *
57  * t = 3 bit section type
58  * e = 4 bit event type (== event number/index) for event sections
59  * s = 16 bit size in units of 32 bit words (fillwords added to data if needed) -> 256k section max size
60  *
61  * Section size is the number of following 32 bit words not including the header word itself.
62 * Sections with SectionType_Event contain subevents with the following header:
63 
64  * ------- Subevent (Module) Header --------
65  * 33222222222211111111110000000000
66  * 10987654321098765432109876543210
67  * +--------------------------------+
68  * | mmmmmm ssssssssss|
69  * +--------------------------------+
70  *
71  * m = 6 bit module type (VMEModuleType enum from globals.h)
72  * s = 10 bit size in units of 32 bit words
73  *
74  * The last word of each event section is the EndMarker (globals.h)
75  *
76 */
78 {
79  static const int Version = 0;
80  static const int FirstSectionOffset = 0;
81  static const int SectionMaxWords = 0xffff;
82  static const int SectionMaxSize = SectionMaxWords * sizeof(u32);
83  static const int SectionTypeMask = 0xe0000000; // 3 bit section type
84  static const int SectionTypeShift = 29;
85  static const int SectionSizeMask = 0xffff; // 16 bit section size in 32 bit words
86  static const int SectionSizeShift = 0;
87  static const int EventTypeMask = 0xf0000; // 4 bit event type
88  static const int EventTypeShift = 16;
89  // Subevent containing module data
90  static const int ModuleTypeMask = 0x3f000; // 6 bit module type
91  static const int ModuleTypeShift = 12;
92  //added by jb 7 20 2019
93  static const int ModuleIDMask = 0x00ff0000;
94  static const int ModuleIDShift = 16;
95  static const int SubEventMaxWords = 0x3ff;
96  static const int SubEventMaxSize = SubEventMaxWords * sizeof(u32);
97  static const int SubEventSizeMask = 0x3ff; // 10 bit subevent size in 32 bit words
98  static const int SubEventSizeShift = 0;
99 };
100 
101 /* ===== VERSION 1 =====
102  *
103  * Differences to version 0:
104  * - Starts with the FourCC "MVME" followed by a 32 bit word containing the
105  * listfile version number.
106  * - Larger section and subevent sizes: 16 -> 20 bits for sections and 10 -> 20
107  * bits for subevents.
108  * - Module type is now 8 bit instead of 6.
109  *
110  * ------- Section (Event) Header ----------
111  * 33222222222211111111110000000000
112  * 10987654321098765432109876543210
113  * +--------------------------------+
114  * |ttteeee ssssssssssssssssssss|
115  * +--------------------------------+
116  *
117  * t = 3 bit section type
118  * e = 4 bit event type (== event number/index) for event sections
119  * s = 20 bit size in units of 32 bit words (fillwords added to data if needed) -> 256k section max size
120  *
121  * Section size is the number of following 32 bit words not including the header word itself.
122 
123  * Sections with SectionType_Event contain subevents with the following header:
124 
125  * ------- Subevent (Module) Header --------
126  * 33222222222211111111110000000000
127  * 10987654321098765432109876543210
128  * +--------------------------------+
129  * |mmmmmmmm ssssssssssssssssssss|
130  * +--------------------------------+
131  *
132  * m = 8 bit module type (VMEModuleType enum from globals.h)
133  * s = 10 bit size in units of 32 bit words
134  *
135  * The last word of each event section is the EndMarker (globals.h)
136  *
137 */
139 {
140  static const int Version = 1;
141  static const int FirstSectionOffset = 8;
142  static const int SectionMaxWords = 0xfffff;
143  static const int SectionMaxSize = SectionMaxWords * sizeof(u32);
144  static const int SectionTypeMask = 0xe0000000; // 3 bit section type
145  static const int SectionTypeShift = 29;
146  static const int SectionSizeMask = 0x000fffff; // 20 bit section size in 32 bit words
147  static const int SectionSizeShift = 0;
148  static const int EventTypeMask = 0x1e000000; // 4 bit event type
149  static const int EventTypeShift = 25;
150  // Subevent containing module data
151  static const int ModuleTypeMask = 0xff000000; // 8 bit module type
152  static const int ModuleTypeShift = 24;
153  //added by jb 7 20 2019
154  static const int ModuleIDMask = 0x00ff0000;
155  static const int ModuleIDShift = 16;
156  static const int SubEventMaxWords = 0xfffff;
157  static const int SubEventMaxSize = SubEventMaxWords * sizeof(u32);
158  static const int SubEventSizeMask = 0x000fffff; // 20 bit subevent size in 32 bit words
159  static const int SubEventSizeShift = 0;
160 };
161 
162 namespace listfile
163 {
165  {
166  /* The config section contains the mvmecfg as a json string padded with
167  * spaces to the next 32 bit boundary. If the config data size exceeds
168  * the maximum section size multiple config sections will be written at
169  * the start of the file. */
171  /* Readout data generated by one VME Event. Contains Subevent Headers
172  * to split into VME Module data. */
174  /* Last section written to a listfile before closing the file. Used for
175  * verification purposes. */
177  /* Marker section written once at the start of a run and then once per
178  * elapsed second. */
180  /* Max section type possible. */
181  SectionType_Max = 7
182  };
183 
185  {
186  Invalid = 0,
187  MADC32 = 1,
188  MQDC32 = 2,
189  MTDC32 = 3,
191  MDPP32 = 5,
192  MDI2 = 6,
195  VMMR = 9,
197  VHS4030p = 21,
198  };
199 
200  static const std::map<VMEModuleType, const char *> VMEModuleTypeNames =
201  {
202  { VMEModuleType::MADC32, "MADC-32" },
203  { VMEModuleType::MQDC32, "MQDC-32" },
204  { VMEModuleType::MTDC32, "MTDC-32" },
205  { VMEModuleType::MDPP16_SCP, "MDPP-16_SCP" },
206  { VMEModuleType::MDPP32, "MDPP-32" },
207  { VMEModuleType::MDI2, "MDI-2" },
208  { VMEModuleType::MDPP16_RCP, "MDPP-16_RCP" },
209  { VMEModuleType::MDPP16_QDC, "MDPP-16_QDC" },
210  { VMEModuleType::VMMR, "VMMR" },
211  { VMEModuleType::VHS4030p, "iseg VHS4030p" },
212  { VMEModuleType::MesytecCounter, "Mesytec Counter" },
213  };
214 
215  const char *get_vme_module_name(VMEModuleType moduleType)
216  {
217  auto it = VMEModuleTypeNames.find(moduleType);
218  if (it != VMEModuleTypeNames.end())
219  {
220  return it->second;
221  }
222  return "unknown";
223  }
224 
225 } // end namespace listfile
226 
227 inline int bitExtractor(int word, int numbits, int position){
228  return (((1 << numbits) - 1) & (word >> position));
229 }
230 
231 template<typename LF>
232 void process_listfile(std::ifstream &infile,
233  TString filename,
234  bool optverbose,
235  bool writeZeros,
236  int a_numSection = -1,
237  int a_numStartEvent =-1
238  )
239 {
240  int maxEvents = a_numSection;
241  using namespace listfile;
242  bool continueReading = true;
243  bool SCPon = 0;
244  bool QDCon = 0;
245  int counter = 0;
246  int pu = 0;
247  int ov = 0;
248  int chn = 0;
249  int data = 0;
250  int time = 0;
251  int extended = 0;
252  int sig = 0;
253  TString rootfilename = filename;
254  rootfilename.ReplaceAll("mvmelst","root");
255  rootfilename.ReplaceAll("listfiles","data_root"); cout << "Root file name: " << rootfilename << endl;
256  TFile *rootfile = new TFile(rootfilename, "RECREATE");
257  TTree* dataTree = new TTree("daqEvents","daqEvents",99,rootfile);
258  MesyDAQEvent* daqEv = new MesyDAQEvent;
259  dataTree->Branch("events",&daqEv);
260  int sectionCounter = 0;
261  int eventCounter = 0;
262  int eventNumber = 0;
263  int timeTickCounter = 0;
264  while (continueReading)
265  {
266  u32 sectionHeader;
267  infile.read((char *)&sectionHeader, sizeof(u32));
268  u32 sectionType = (sectionHeader & LF::SectionTypeMask) >> LF::SectionTypeShift;
269  u32 sectionSize = (sectionHeader & LF::SectionSizeMask) >> LF::SectionSizeShift;
270  sectionCounter++;
271  switch (sectionType)
272  {
273  case SectionType_Config:
274  {
275  if (optverbose)
276  cout << "Config section of size " << sectionSize << endl;
277  infile.seekg(sectionSize * sizeof(u32), std::ifstream::cur);
278  }
279  break;
280  case SectionType_Event:
281  {
282  if(eventNumber < a_numStartEvent)
283  {
284  infile.seekg(sectionSize * sizeof(u32), std::ifstream::cur);
285  eventNumber++;
286  break;
287  }
288  eventNumber++;
289  //only count read events
290  eventCounter++;
291  daqEv->m_modules.clear();
292  if (optverbose)
293  {
294  cout << "Event " << counter << endl;
295  }
296  else
297  {
298  if (counter%10000==0)
299  {
300  cout << '\r' << "Processing event " << counter;
301  }
302  }
303  // rootdata_SCP.initEvent();
304  // rootdata_QDC.initEvent();
305  pu = 0;
306  ov = 0;
307  time = 0;
308  extended = 0;
309  sig = 0;
310  u32 eventType = (sectionHeader & LF::EventTypeMask) >> LF::EventTypeShift;
311  if (optverbose)
312  {
313  printf("Event section: eventHeader=0x%08x, eventType=%d, eventSize=%u\n",
314  sectionHeader, eventType, sectionSize);
315  }
316  u32 wordsLeft = sectionSize;
317  int hadEvent = 0;
318  while (wordsLeft > 1)
319  {
320  u32 subEventHeader;
321  infile.read((char *)&subEventHeader, sizeof(u32));
322  --wordsLeft;
323  if (subEventHeader ==0x87654321)
324  {
325  if (optverbose)
326  {
327  cout << "\tFill" << endl;
328  }
329  continue;
330  }
331  u32 moduleType = (subEventHeader & LF::ModuleTypeMask) >> LF::ModuleTypeShift;
332  u32 subEventSize = (subEventHeader & LF::SubEventSizeMask) >> LF::SubEventSizeShift;
333  int adcWords = 0;
334  int tdcWords = 0;
335  if (optverbose)
336  {
337  printf(" subEventHeader=0x%08x, moduleType=%u (%s), subEventSize=%u\n ",
338  subEventHeader, moduleType, get_vme_module_name((VMEModuleType)moduleType),
339  subEventSize);
340  }
341  if ((moduleType==4)||(moduleType==7)||(moduleType==8))
342  {
343  //create an event class vector
344  map < int , vector<MDPP16Event> > boardEvents;
345  //storage for charge values
346  map< int , vector<MDPP16ChargeData> > chargeData;
347  map < int , vector<MDPP16ChargeData> > peakChargeData;
348  //storage for times
349  map < int, vector<uint16_t> > timeData;
350  map < int, vector<uint16_t> > trigTime;
351  int moduleID = -1;
352  uint16_t extendTimeStamp = -1;
353  //keeps track of what type the last data word was
354  for (u32 i=0; i<subEventSize; ++i)
355  {
356  //get an event container
357 
358  u32 subEventData = 0x0;
359  infile.read((char *)&subEventData, sizeof(u32));
360  wordsLeft--;
361  if (optverbose)
362  printf(" %2u = 0x%08x\n", i, subEventData);
363  if (subEventData == 0x00000000||subEventData ==0x87654321)
364  {
365  if (optverbose)
366  {
367  cout << "\tFill" << endl;
368  }
369  continue;
370  }
371  SCPon = 1;
372  sig = 0;
373  sig = bitExtractor(subEventData, 4, 28);
374  if (sig==4)
375  { //header
376  moduleID = (subEventData & LF::ModuleIDMask) >> LF::ModuleIDShift;
377  if (optverbose)
378  {
379  cout << "\tHeader" << endl;
380 
381  }
382  }
383  else if (sig==1)
384  {//data
385  //MDPP16 with SCP or RCP firmware
386  int chan = bitExtractor(subEventData, 6, 16);
387  uint16_t data = bitExtractor(subEventData, 16, 0);
388  // rootdata_SCP.setADC(chn, data);
389  if (chan<16)
390  {
391  MDPP16ChargeData dat;
392  dat.m_charge = data;
393  dat.m_pileUp = bitExtractor(subEventData, 1, 23);
394  dat.m_overFlow = bitExtractor(subEventData, 1, 22);
395  if (writeZeros) chargeData[chan].push_back(dat);
396  else if (data!=0) chargeData[chan].push_back(dat);
397  else timeData[chan].pop_back();
398  }
399  else if(chan >= 16 && chan < 32)
400  {
401  timeData[chan%16].push_back(data);
402  }
403  else if (chan==32||chan==33)
404  {
405  trigTime[chan%16].push_back(data);
406  }
407  else if (chan>47)
408  {
409  MDPP16ChargeData dat;
410  dat.m_charge = data;
411  dat.m_pileUp = bitExtractor(subEventData, 1, 23);
412  dat.m_overFlow = bitExtractor(subEventData, 1, 22);
413  // rootdata_SCP.setPileup(chn, pu);
414  // rootdata_SCP.setOverflow(chn, ov);
415  if (writeZeros) peakChargeData[chan%16].push_back(dat);
416  else if (chargeData[chan%16].size()==peakChargeData[chan%16].size()+1) peakChargeData[chan%16].push_back(dat);
417  }
418  if (optverbose)
419  {
420  cout << "\tData" << endl;
421  cout << "\t" << ov << "\t"
422  << chan << "\t" << data << endl;
423  }
424  }
425  else if(sig==2)
426  {//extended time stamp
427  extendTimeStamp = bitExtractor(subEventData, 16, 0);
428  // rootdata_SCP.setExtendedTime(extended);
429  if (optverbose)
430  {
431  cout << "\tExtended time stamp:\t" << extended << endl;
432  }
433  }
434  else if((sig&0xc)==0xc)
435  {//end of event
436  //build an event and associate it with a module when the event is closed
437  MDPP16Event ev;
438  for (auto& charges : chargeData )
439  {
440  if (writeZeros)
441  {
442  ev.addCharges(charges.first, charges.second);
443  ev.addTimes(charges.first, timeData[charges.first]);
444  }
445  else
446  {
447  int numGoodHits = 0;
448  for (int hit = 0; hit < charges.second.size(); hit++)
449  {
450  if (charges.second[hit].m_charge!=0 && timeData[charges.first][hit]!=0) numGoodHits++;
451  }
452  if (numGoodHits == charges.second.size())
453  {
454  ev.addCharges(charges.first, charges.second);
455  ev.addTimes(charges.first, timeData[charges.first]);
456  }
457  }
458 
459  }
460  // for(auto& charges : chargeData )
461  // {
462  // ev.addCharges(charges.first, charges.second);
463  // }
464  // for(auto& times : timeData )
465  // {
466  // ev.addTimes(times.first, times.second);
467  // }
468  for(auto& charges : peakChargeData )
469  {
470  ev.addPeakCharges(charges.first, charges.second);
471  }
472  for(auto& trigChannel : trigTime )
473  {
474  for(auto& time : trigChannel.second)
475  {
476  ev.addTrigTimeStamp(trigChannel.first, time);
477  }
478  }
479  ev.setExtTimeStamp(extendTimeStamp);
480  ev.setEndOfEventWord(bitExtractor(subEventData, 30, 0));
481  if (optverbose)
482  {
483  cout << "\tEnd of event" << endl;
484  cout << "\tTime:\t" << bitExtractor(subEventData, 30, 0) << endl;
485  }
486  if (writeZeros)
487  {
488  daqEv->m_modules[moduleID].push_back(ev);
489  hadEvent++;
490  }
491  else if (ev.isGoodEvent())
492  {
493  daqEv->m_modules[moduleID].push_back(ev);
494  if (optverbose) cout << "good event!" <<endl;
495  hadEvent++;
496  }
497  extendTimeStamp = -1;
498  moduleID = -1;
499  chargeData.clear();
500  peakChargeData.clear();
501  timeData.clear();
502  trigTime.clear();
503 
504 
505  // break;
506  }
507 
508  }//end of sub event loop
509  }//end of module 4 or 7 or 8
510  }//end of while over event section
511  //read the last word
512  u32 eventEndMarker;
513  infile.read((char *)&eventEndMarker, sizeof(u32));
514  if (optverbose)
515  {
516  printf(" eventEndMarker=0x%08x\n", eventEndMarker);
517  }
518  // rootdata_QDC.writeEvent();
519  // rootdata_SCP.writeEvent();
520  counter++;
521  //fill the tree
522  if (hadEvent>0) dataTree->Fill();
523  if(maxEvents >0 && counter >= maxEvents)
524  {
525  continueReading = false;
526  }
527  }
528  break;
530  {
531  if (optverbose)
532  printf("Timetick\n");
533  } break;
534  case SectionType_End:
535  {
536  printf("\nFound Listfile End section\n");
537  continueReading = false;
538  auto currentFilePos = infile.tellg();
539  infile.seekg(0, std::ifstream::end);
540  auto endFilePos = infile.tellg();
541  if (currentFilePos != endFilePos)
542  {
543  cout << "Warning: " << (endFilePos - currentFilePos)
544  << " bytes left after Listfile End Section" << endl;
545  }
546  break;
547  }
548  default:
549  {
550  printf("Warning: Unknown section type %u of size %u, skipping...\n",
551  sectionType, sectionSize);
552  infile.seekg(sectionSize * sizeof(u32), std::ifstream::cur);
553  } break;
554  }
555  }
556  cout << counter << " events total" << endl;
557  // rootfile->cd();
558  // if(SCPon){
559  // // rootdata_SCP.writeTree();
560  // rootfile->mkdir("histos_SCP");
561  // rootfile->cd("histos_SCP");
562  // // rootdata_SCP.writeHistos();
563  // }
564  // if(QDCon){
565  // // rootdata_QDC.writeTree();
566  // rootfile->mkdir("histos_QDC");
567  // rootfile->cd("histos_QDC");
568  // // rootdata_QDC.writeHistos();
569  // }
570  rootfile->Write();
571  rootfile->Close();
572 }
573 
574 void process_listfile(std::ifstream &infile,
575  TString filename,
576  bool optverbose,
577  bool writeZeros,
578  int a_numSection = -1,
579  int a_numStartEvent =-1
580  )
581 {
582  u32 fileVersion = 0;
583 
584  // Read the fourCC that's at the start of listfiles from version 1 and up.
585  const size_t bytesToRead = 4;
586  char fourCC[bytesToRead] = {};
587 
588  infile.read(fourCC, bytesToRead);
589  static const char * const FourCC = "MVME";
590 
591  if (std::strncmp(fourCC, FourCC, bytesToRead) == 0)
592  {
593  infile.read(reinterpret_cast<char *>(&fileVersion), sizeof(fileVersion));
594  }
595 
596  // Move to the start of the first section
597  auto firstSectionOffset = ((fileVersion == 0)
600 
601  infile.seekg(firstSectionOffset, std::ifstream::beg);
602 
603  cout << "Detected listfile version " << fileVersion << endl;
604 
605  // if (fileVersion == 0)
606  // {
607  // process_listfile<listfile_v0>(infile, filename, optverbose);
608  // }
609  // else
610  {
611  process_listfile<listfile_v1>(infile, filename, optverbose,writeZeros,a_numSection, a_numStartEvent);
612  }
613 }
614 
int bitExtractor(int word, int numbits, int position)
Definition: MesyDaqParsingSupport.h:227
int64_t s64
Definition: MesyDaqParsingSupport.h:38
uint64_t u64
Definition: MesyDaqParsingSupport.h:33
uint8_t u8
Definition: MesyDaqParsingSupport.h:30
int8_t s8
Definition: MesyDaqParsingSupport.h:35
void process_listfile(std::ifstream &infile, TString filename, bool optverbose, bool writeZeros, int a_numSection=-1, int a_numStartEvent=-1)
Definition: MesyDaqParsingSupport.h:232
int16_t s16
Definition: MesyDaqParsingSupport.h:36
uint16_t u16
Definition: MesyDaqParsingSupport.h:31
int32_t s32
Definition: MesyDaqParsingSupport.h:37
uint32_t u32
Definition: MesyDaqParsingSupport.h:32
Definition: MDPP16DataStructures.h:18
uint16_t m_charge
Definition: MDPP16DataStructures.h:24
bool m_pileUp
Definition: MDPP16DataStructures.h:22
bool m_overFlow
Definition: MDPP16DataStructures.h:23
Definition: MDPP16DataStructures.h:32
void setExtTimeStamp(uint16_t a_extTimeStamp)
set the ext time stamp for the event
Definition: MDPP16DataStructures.cpp:129
void addTrigTimeStamp(int a_channel, uint16_t a_trigTimeStamp)
set the trig0 time stamp for the event
Definition: MDPP16DataStructures.cpp:140
bool isGoodEvent()
Definition: MDPP16DataStructures.cpp:304
void setEndOfEventWord(uint32_t a_endWord)
sets the end of event word
Definition: MDPP16DataStructures.cpp:134
void addTimes(int a_channel, const vector< uint16_t > &a_times)
Definition: MDPP16DataStructures.cpp:90
void addCharges(int a_channel, const vector< MDPP16ChargeData > &a_charges)
adds content to the charge map
Definition: MDPP16DataStructures.cpp:79
void addPeakCharges(int a_channel, const vector< MDPP16ChargeData > &a_charges)
adds content to the peak charge map
Definition: MDPP16DataStructures.cpp:100
Definition: MesyDAQEvent.h:6
map< unsigned int, vector< MDPP16Event > > m_modules
Definition: MesyDAQEvent.h:8
Definition: MesyDaqParsingSupport.h:163
const char * get_vme_module_name(VMEModuleType moduleType)
Definition: MesyDaqParsingSupport.h:215
VMEModuleType
Definition: MesyDaqParsingSupport.h:185
@ MDPP32
Definition: MesyDaqParsingSupport.h:191
@ MADC32
Definition: MesyDaqParsingSupport.h:187
@ VHS4030p
Definition: MesyDaqParsingSupport.h:197
@ MesytecCounter
Definition: MesyDaqParsingSupport.h:196
@ MDPP16_SCP
Definition: MesyDaqParsingSupport.h:190
@ MTDC32
Definition: MesyDaqParsingSupport.h:189
@ MDPP16_RCP
Definition: MesyDaqParsingSupport.h:193
@ Invalid
Definition: MesyDaqParsingSupport.h:186
@ MDPP16_QDC
Definition: MesyDaqParsingSupport.h:194
@ VMMR
Definition: MesyDaqParsingSupport.h:195
@ MDI2
Definition: MesyDaqParsingSupport.h:192
@ MQDC32
Definition: MesyDaqParsingSupport.h:188
SectionType
Definition: MesyDaqParsingSupport.h:165
@ SectionType_End
Definition: MesyDaqParsingSupport.h:176
@ SectionType_Max
Definition: MesyDaqParsingSupport.h:181
@ SectionType_Config
Definition: MesyDaqParsingSupport.h:170
@ SectionType_Timetick
Definition: MesyDaqParsingSupport.h:179
@ SectionType_Event
Definition: MesyDaqParsingSupport.h:173
Definition: MesyDaqParsingSupport.h:78
static const int SectionMaxSize
Definition: MesyDaqParsingSupport.h:82
static const int Version
Definition: MesyDaqParsingSupport.h:79
static const int SectionTypeMask
Definition: MesyDaqParsingSupport.h:83
static const int SubEventSizeMask
Definition: MesyDaqParsingSupport.h:97
static const int SectionSizeShift
Definition: MesyDaqParsingSupport.h:86
static const int SectionTypeShift
Definition: MesyDaqParsingSupport.h:84
static const int ModuleIDMask
Definition: MesyDaqParsingSupport.h:93
static const int SubEventMaxWords
Definition: MesyDaqParsingSupport.h:95
static const int FirstSectionOffset
Definition: MesyDaqParsingSupport.h:80
static const int ModuleTypeMask
Definition: MesyDaqParsingSupport.h:90
static const int SubEventSizeShift
Definition: MesyDaqParsingSupport.h:98
static const int SectionMaxWords
Definition: MesyDaqParsingSupport.h:81
static const int EventTypeMask
Definition: MesyDaqParsingSupport.h:87
static const int ModuleTypeShift
Definition: MesyDaqParsingSupport.h:91
static const int EventTypeShift
Definition: MesyDaqParsingSupport.h:88
static const int ModuleIDShift
Definition: MesyDaqParsingSupport.h:94
static const int SectionSizeMask
Definition: MesyDaqParsingSupport.h:85
static const int SubEventMaxSize
Definition: MesyDaqParsingSupport.h:96
Definition: MesyDaqParsingSupport.h:139
static const int ModuleIDMask
Definition: MesyDaqParsingSupport.h:154
static const int SectionTypeShift
Definition: MesyDaqParsingSupport.h:145
static const int SectionMaxSize
Definition: MesyDaqParsingSupport.h:143
static const int FirstSectionOffset
Definition: MesyDaqParsingSupport.h:141
static const int SubEventSizeMask
Definition: MesyDaqParsingSupport.h:158
static const int ModuleIDShift
Definition: MesyDaqParsingSupport.h:155
static const int ModuleTypeShift
Definition: MesyDaqParsingSupport.h:152
static const int SectionTypeMask
Definition: MesyDaqParsingSupport.h:144
static const int SectionSizeShift
Definition: MesyDaqParsingSupport.h:147
static const int SubEventMaxSize
Definition: MesyDaqParsingSupport.h:157
static const int ModuleTypeMask
Definition: MesyDaqParsingSupport.h:151
static const int EventTypeShift
Definition: MesyDaqParsingSupport.h:149
static const int SectionMaxWords
Definition: MesyDaqParsingSupport.h:142
static const int SubEventMaxWords
Definition: MesyDaqParsingSupport.h:156
static const int SectionSizeMask
Definition: MesyDaqParsingSupport.h:146
static const int EventTypeMask
Definition: MesyDaqParsingSupport.h:148
static const int SubEventSizeShift
Definition: MesyDaqParsingSupport.h:159
static const int Version
Definition: MesyDaqParsingSupport.h:140