Belle II Software  release-05-02-19
TOPUnpackerModule.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2010 - 2018 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Marko Staric, Oskar Hartbrich *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <framework/core/Module.h>
14 #include <top/geometry/TOPGeometryPar.h>
15 #include <framework/datastore/StoreArray.h>
16 #include <rawdata/dataobjects/RawTOP.h>
17 #include <top/RawDataTypes.h>
18 #include <top/dataobjects/TOPDigit.h>
19 #include <top/dataobjects/TOPRawWaveform.h>
20 #include <top/dataobjects/TOPRawDigit.h>
21 #include <top/dataobjects/TOPSlowData.h>
22 #include <top/dataobjects/TOPInterimFEInfo.h>
23 #include <top/dataobjects/TOPTemplateFitResult.h>
24 #include <top/dataobjects/TOPProductionEventDebug.h>
25 #include <top/dataobjects/TOPProductionHitDebug.h>
26 #include <string>
27 
28 namespace Belle2 {
34  namespace TOP {
35 
40  class DataArray {
41 
42  public:
43 
50  DataArray(const int* data, int size, bool swap = false)
51  {
52  m_data = data;
53  m_size = size;
54  m_i = -1;
55  m_swap = swap;
57  }
58 
65  int getWord()
66  {
67  m_i++;
68  if (m_i < m_size) {
69  m_checksumCounter += (m_data[m_i] & 0xFFFF) + ((m_data[m_i] >> 16) & 0xFFFF);
70  if (m_swap) return swap32(m_data[m_i]);
71  return m_data[m_i];
72  }
73  B2ERROR("Bug in data format: DataArray - index out of range");
74  return 0;
75  }
76 
81  int peekWord()
82  {
83  if (m_i + 1 < m_size) {
84  if (m_swap) return swap32(m_data[m_i + 1]);
85  return m_data[m_i + 1];
86  }
87 
88  return 0;
89  }
90 
95  int getLastWord()
96  {
97  if (m_size <= 0) return 0;
98  if (m_swap) return swap32(m_data[m_size - 1]);
99  return m_data[m_size - 1];
100  }
101 
106  unsigned int getIndex() const {return m_i;}
107 
112  int getRemainingWords() const {return m_size - m_i - 1;}
113 
118  void resetChecksum() {m_checksumCounter = 0;}
119 
124  unsigned int foldChecksum()
125  {
126  unsigned int chk = m_checksumCounter;
127  while ((chk >> 16) > 0) {
128  chk = (chk & 0xFFFF) + (chk >> 16);
129  }
130  return chk;
131  };
132 
138  bool validateChecksum()
139  {
140  return (foldChecksum() == 0xFFFF);
141  }
142 
143  private:
144 
148  int swap32(int x)
149  {
150  return (((x << 24) & 0xFF000000) |
151  ((x << 8) & 0x00FF0000) |
152  ((x >> 8) & 0x0000FF00) |
153  ((x >> 24) & 0x000000FF));
154  }
155 
156  int m_size = 0;
157  const int* m_data = 0;
158  int m_i = 0;
159  bool m_swap = false;
160  unsigned int m_checksumCounter;
162  };
163 
164  } // TOP namespace
165 
166 
173  class TOPUnpackerModule : public Module {
174 
175  public:
176 
181 
185  virtual ~TOPUnpackerModule();
186 
191  virtual void initialize() override;
192 
197  virtual void beginRun() override;
198 
202  virtual void event() override;
203 
208  virtual void endRun() override;
209 
214  virtual void terminate() override;
215 
216  private:
217 
221  short expand13to16bits(unsigned short x) const
222  {
223  unsigned short signBit = x & 0x1000;
224  return ((x & 0x1FFF) | signBit << 1 | signBit << 2 | signBit << 3);
225  }
226 
227 
231  unsigned short sumShorts(unsigned int x) const
232  {
233  return x + (x >> 16);
234  }
235 
236 
242  void unpackProductionDraft(const int* buffer, int bufferSize);
243 
249  void unpackType0Ver16(const int* buffer, int bufferSize);
250 
258  int unpackInterimFEVer01(const int* buffer, int bufferSize, bool pedestalSubtracted);
259 
268  bool unpackHeadersInterimFEVer01(const int* buffer, int bufferSize, bool swapBytes);
269 
278  int unpackProdDebug(const int* buffer, int bufferSize, TOP::RawDataType dataFormat, bool pedestalSubtracted);
279 
280  std::string m_inputRawDataName;
281  std::string m_outputDigitsName;
282  std::string m_outputRawDigitsName;
283  std::string m_outputWaveformsName;
284  std::string m_templateFitResultName;
286  std::map<int, int> m_channelStatistics;
288  bool m_swapBytes = false;
289  int m_dataFormat = 0;
293  // collections
304  };
305 
307 } // Belle2 namespace
Belle2::TOPUnpackerModule::~TOPUnpackerModule
virtual ~TOPUnpackerModule()
Destructor.
Definition: TOPUnpackerModule.cc:74
Belle2::TOPUnpackerModule::expand13to16bits
short expand13to16bits(unsigned short x) const
Expand 13-bit signed-word to 16-bit signed-word.
Definition: TOPUnpackerModule.h:229
Belle2::TOP::DataArray::m_data
const int * m_data
buffer data
Definition: TOPUnpackerModule.h:165
Belle2::TOPUnpackerModule::m_templateFitResultName
std::string m_templateFitResultName
name of TOPTemplateFitResult store array
Definition: TOPUnpackerModule.h:292
Belle2::TOPUnpackerModule::sumShorts
unsigned short sumShorts(unsigned int x) const
sum both 16-bit words of 32-bit integer
Definition: TOPUnpackerModule.h:239
Belle2::TOPUnpackerModule::m_slowData
StoreArray< TOPSlowData > m_slowData
collection of slow data
Definition: TOPUnpackerModule.h:305
Belle2::TOPUnpackerModule::TOPUnpackerModule
TOPUnpackerModule()
Constructor.
Definition: TOPUnpackerModule.cc:51
Belle2::TOPUnpackerModule::m_interimFEInfos
StoreArray< TOPInterimFEInfo > m_interimFEInfos
collection of interim informations
Definition: TOPUnpackerModule.h:307
Belle2::TOP::DataArray::m_swap
bool m_swap
if true, swap bytes
Definition: TOPUnpackerModule.h:167
Belle2::TOPUnpackerModule::m_outputDigitsName
std::string m_outputDigitsName
name of TOPDigit store array
Definition: TOPUnpackerModule.h:289
Belle2::TOP::DataArray::DataArray
DataArray(const int *data, int size, bool swap=false)
Constructor.
Definition: TOPUnpackerModule.h:58
Belle2::TOPUnpackerModule::event
virtual void event() override
Event processor.
Definition: TOPUnpackerModule.cc:114
Belle2::TOPUnpackerModule::terminate
virtual void terminate() override
Termination action.
Definition: TOPUnpackerModule.cc:1219
Belle2::TOPUnpackerModule::m_productionHitDebugs
StoreArray< TOPProductionHitDebug > m_productionHitDebugs
collection of hit debug data
Definition: TOPUnpackerModule.h:309
Belle2::TOPUnpackerModule::unpackInterimFEVer01
int unpackInterimFEVer01(const int *buffer, int bufferSize, bool pedestalSubtracted)
Unpack raw data given in feature-extraction interim format.
Definition: TOPUnpackerModule.cc:380
Belle2::TOPUnpackerModule::beginRun
virtual void beginRun() override
Called when entering a new run.
Definition: TOPUnpackerModule.cc:109
Belle2::TOPUnpackerModule::m_outputWaveformsName
std::string m_outputWaveformsName
name of TOPRawWaveform store array
Definition: TOPUnpackerModule.h:291
Belle2::TOPUnpackerModule::unpackHeadersInterimFEVer01
bool unpackHeadersInterimFEVer01(const int *buffer, int bufferSize, bool swapBytes)
Tries to unpack raw data assuming it is in feature-extraction interim format.
Definition: TOPUnpackerModule.cc:310
Belle2::TOPUnpackerModule::m_channelStatistics
std::map< int, int > m_channelStatistics
counts how many different channels have been parsed in a given SCROD packet
Definition: TOPUnpackerModule.h:294
Belle2::TOPUnpackerModule::m_digits
StoreArray< TOPDigit > m_digits
collection of digits
Definition: TOPUnpackerModule.h:303
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::TOP::DataArray::getIndex
unsigned int getIndex() const
Returns index of last returned data word.
Definition: TOPUnpackerModule.h:114
Belle2::TOP::TOPGeometryPar::Instance
static TOPGeometryPar * Instance()
Static method to obtain the pointer to its instance.
Definition: TOPGeometryPar.cc:45
Belle2::TOPUnpackerModule::m_outputRawDigitsName
std::string m_outputRawDigitsName
name of TOPRawDigit store array
Definition: TOPUnpackerModule.h:290
Belle2::TOPUnpackerModule::m_waveforms
StoreArray< TOPRawWaveform > m_waveforms
collection of waveforms
Definition: TOPUnpackerModule.h:306
Belle2::TOPUnpackerModule::endRun
virtual void endRun() override
End-of-run action.
Definition: TOPUnpackerModule.cc:1210
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TOPUnpackerModule::unpackProdDebug
int unpackProdDebug(const int *buffer, int bufferSize, TOP::RawDataType dataFormat, bool pedestalSubtracted)
Unpack raw data given in production debugging format.
Definition: TOPUnpackerModule.cc:786
Belle2::TOPUnpackerModule::m_rawData
StoreArray< RawTOP > m_rawData
collection of raw data
Definition: TOPUnpackerModule.h:302
Belle2::TOP::DataArray::m_checksumCounter
unsigned int m_checksumCounter
check sum counter
Definition: TOPUnpackerModule.h:168
Belle2::TOPUnpackerModule::m_swapBytes
bool m_swapBytes
if true, swap bytes
Definition: TOPUnpackerModule.h:296
Belle2::TOP::DataArray::peekWord
int peekWord()
Returns next data word without incrementing the memory pointer and without modifying the checksum cou...
Definition: TOPUnpackerModule.h:89
Belle2::TOPUnpackerModule::m_rawDigits
StoreArray< TOPRawDigit > m_rawDigits
collection of raw digits
Definition: TOPUnpackerModule.h:304
Belle2::TOP::DataArray::validateChecksum
bool validateChecksum()
Validates current checksum counter status.
Definition: TOPUnpackerModule.h:146
Belle2::TOPUnpackerModule::m_dataFormat
int m_dataFormat
data format
Definition: TOPUnpackerModule.h:297
Belle2::TOP::DataArray::getLastWord
int getLastWord()
Returns last data word.
Definition: TOPUnpackerModule.h:103
Belle2::TOPUnpackerModule::initialize
virtual void initialize() override
Initialize the Module.
Definition: TOPUnpackerModule.cc:78
Belle2::TOPUnpackerModule::unpackProductionDraft
void unpackProductionDraft(const int *buffer, int bufferSize)
Unpack raw data given in a tentative production format (will vanish in future)
Definition: TOPUnpackerModule.cc:208
Belle2::TOP::DataArray::getWord
int getWord()
Returns consecutive data word Updates internal checksum counter for each extracted word.
Definition: TOPUnpackerModule.h:73
Belle2::TOPUnpackerModule::m_inputRawDataName
std::string m_inputRawDataName
name of RawTOP store array
Definition: TOPUnpackerModule.h:288
Belle2::TOPUnpackerModule::m_productionEventDebugs
StoreArray< TOPProductionEventDebug > m_productionEventDebugs
collection of event debug data
Definition: TOPUnpackerModule.h:308
Belle2::TOP::DataArray::resetChecksum
void resetChecksum()
Resets internal checksum counter.
Definition: TOPUnpackerModule.h:126
Belle2::TOP::DataArray::m_size
int m_size
buffer size
Definition: TOPUnpackerModule.h:164
Belle2::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
Belle2::TOPUnpackerModule::m_topgp
TOP::TOPGeometryPar * m_topgp
geometry param
Definition: TOPUnpackerModule.h:299
Belle2::TOPUnpackerModule::unpackType0Ver16
void unpackType0Ver16(const int *buffer, int bufferSize)
Unpack raw data given in feature-extraction production format.
Definition: TOPUnpackerModule.cc:244
Belle2::TOP::TOPGeometryPar
Singleton class for TOP Geometry Parameters.
Definition: TOPGeometryPar.h:47
Belle2::TOPUnpackerModule::m_templateFitResults
StoreArray< TOPTemplateFitResult > m_templateFitResults
collection of template fit results
Definition: TOPUnpackerModule.h:310
Belle2::TOP::DataArray::m_i
int m_i
index
Definition: TOPUnpackerModule.h:166
Belle2::TOP::DataArray::swap32
int swap32(int x)
Swap bytes of a 32-bit integer.
Definition: TOPUnpackerModule.h:156
Belle2::TOP::DataArray::getRemainingWords
int getRemainingWords() const
Returns number of remaining words in the buffer.
Definition: TOPUnpackerModule.h:120
Belle2::TOPUnpackerModule
Raw data unpacker.
Definition: TOPUnpackerModule.h:181
Belle2::TOP::DataArray::foldChecksum
unsigned int foldChecksum()
Performs folding of carry bits into checksum until only 16 LSBs are populated.
Definition: TOPUnpackerModule.h:132