Belle II Software  release-08-01-10
SVDUnpackerModule.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #pragma once
10 
11 #include <framework/core/Module.h>
12 #include <framework/datastore/StoreArray.h>
13 #include <framework/datastore/StoreObjPtr.h>
14 #include <framework/database/DBObjPtr.h>
15 #include <framework/database/PayloadFile.h>
16 #include <framework/dbobjects/HardwareClockSettings.h>
17 
18 #include <svd/geometry/SensorInfo.h>
19 #include <vxd/dataobjects/VxdID.h>
20 #include <rawdata/dataobjects/RawSVD.h>
21 #include <svd/dataobjects/SVDShaperDigit.h>
22 #include <svd/dataobjects/SVDTransparentDigit.h>
23 #include <svd/dataobjects/SVDDAQDiagnostic.h>
24 #include <svd/dataobjects/SVDEventInfo.h>
25 #include <svd/dataobjects/SVDTriggerType.h>
26 #include <svd/dbobjects/SVDGlobalConfigParameters.h>
27 #include <svd/online/SVDOnlineToOfflineMap.h>
28 #include <svd/online/SVDStripNoiseMap.h>
29 #include <framework/dataobjects/EventMetaData.h>
30 #include <memory>
31 
32 
33 namespace Belle2::SVD {
34 
42  class SVDUnpackerModule : public Module {
43 
44  public:
49 
53  virtual ~SVDUnpackerModule();
54 
58  virtual void initialize() override;
59  virtual void beginRun() override;
60  virtual void event() override;
61  virtual void endRun() override;
63  std::string m_rawSVDListName;
66  std::string m_svdEventInfoName;
71  private:
72 
74  unsigned short nFADCboards;
75 
77  std::unordered_multimap<unsigned char, unsigned char>* APVmap;
78 
80  std::unique_ptr<SVDOnlineToOfflineMap> m_map;
81 
83  static std::string m_xmlFileName;
84 
87 
90 
93 
95  void printB2Debug(uint32_t* data32, uint32_t* data32_min, uint32_t* data32_max, int nWords);
96 
97  // The following assumes i386 byte order: MSB comes last!
98 
100  struct FTBHeader {
101  unsigned int errorsField : 8;
102  unsigned int eventNumber : 24;
103  };
104 
106  struct MainHeader {
107  unsigned int trgNumber : 8;
108  unsigned int trgType : 4;
109  unsigned int trgTiming : 2;
110  unsigned int xTalk : 2;
111  unsigned int FADCnum : 8;
112  unsigned int DAQType : 1;
113  unsigned int DAQMode : 2;
114  unsigned int runType : 2;
115  unsigned int check : 3;
116  };
117 
119  struct APVHeader {
120  unsigned int CMC1 : 8;
121  unsigned int CMC2 : 4;
122  unsigned int apvErr : 4;
123  unsigned int pipelineAddr : 8;
124  unsigned int APVnum : 6;
125  unsigned int check : 2;
126  };
127 
129  struct data_A {
130  unsigned int sample1 : 8;
131  unsigned int sample2 : 8;
132  unsigned int sample3 : 8;
133  unsigned int stripNum : 7;
134  unsigned int check : 1;
135  };
136 
138  struct data_B {
139  unsigned int sample4 : 8;
140  unsigned int sample5 : 8;
141  unsigned int sample6 : 8;
142  unsigned int stripNum : 7;
143  unsigned int check : 1;
144  };
145 
147  struct FADCTrailer {
148  unsigned int FTBFlags: 16;
149  unsigned int dataSizeCut: 1;
150  unsigned int nullDigits: 7;
151  unsigned int apvErrOR : 4;
152  unsigned int check : 4;
153  };
154 
156  struct FTBTrailer {
157  unsigned int crc16 : 16;
158  unsigned int controlWord : 16;
159  };
160 
161 
162  union { // The 4 byte words of the stream can be interpreted as:
163  uint32_t m_data32;
171  };
172 
190 
194  bool m_killUpsetDigits = false;
195 
203  bool m_silentAppend = false;
204 
208  bool m_badMappingFatal = false;
209 
212 
216  int m_errorRate{1000};
217 
219  unsigned short seenHeadersAndTrailers: 4;
220 
233  std::map<std::pair<unsigned short, unsigned short>, std::pair<std::size_t, std::size_t> > m_missingAPVs;
234 
236  std::map<std::pair<unsigned short, unsigned short>, std::pair<std::size_t, std::size_t> > m_upsetAPVs;
237 
242  };//end class declaration
243 
244 }
245 
246 
Specialization of DBObjPtr in case of PayloadFiles.
Definition: PayloadFile.h:54
Class for accessing objects in the database.
Definition: DBObjPtr.h:21
Base class for Modules.
Definition: Module.h:72
Class to store SVD mode information.
Definition: SVDModeByte.h:69
Class to store Trigger Type information.
SVDUnpackerModule: The SVD Raw Hits Decoder.
int m_wrongFTBcrc
FTB CRC no-Match counter.
StoreArray< SVDDAQDiagnostic > m_storeDAQDiagnostics
SVDDAQDiagnostic array.
virtual ~SVDUnpackerModule()
Destructor of the module.
unsigned short seenHeadersAndTrailers
this 4-bits value should be 1111 if no headers/trailers are missing
int m_shutUpFTBError
regulates the number of "Event number mismatch" errors reported
MainHeader m_MainHeader
Implementation of FADC Header.
StoreArray< RawSVD > m_rawSVD
output for RawSVD
FADCTrailer m_FADCTrailer
Implementation of FADC Trailer.
StoreObjPtr< SVDEventInfo > m_svdEventInfoPtr
SVDEventInfo output per event.
virtual void initialize() override
Initializes the Module.
StoreArray< SVDShaperDigit > m_storeShaperDigits
SVDShaperDigit array.
virtual void event() override
event
SVDUnpackerModule()
Constructor of the module.
int nAPVErrors
counter of APV errors
FTBHeader m_FTBHeader
Implementation of FTB Header.
virtual void endRun() override
end run
std::string m_rawSVDListName
RawSVD StoreArray name.
DBObjPtr< PayloadFile > m_mapping
pointer to the payload with the mapping
int nFADCMatchErrors
counter of FADC boards =/= n of RawData objects errors
bool m_killUpsetDigits
Optionally, we can kill digits coming from upset APVs right in the unpacker.
data_B m_data_B
Implementation of 2nd data word.
int m_FADCTriggerNumberOffset
FADC Trigger Offset.
std::map< std::pair< unsigned short, unsigned short >, std::pair< std::size_t, std::size_t > > m_missingAPVs
Map to store a list of missing APVs.
int nMissingAPVsErrors
counter of missing APVs errors
static std::string m_xmlFileName
XML filename.
int nEventMatchErrors
counter of Event match errors
FTBTrailer m_FTBTrailer
Implementation of FTB Trailer.
int m_errorRate
The parameter that indicates what fraction of B2ERRORs messages should be suppressed to not overload ...
APVHeader m_APVHeader
Implementation of APV Header.
int nUpsetAPVsErrors
counter of upset APV errors
void printB2Debug(uint32_t *data32, uint32_t *data32_min, uint32_t *data32_max, int nWords)
additional function that prints raw data words
virtual void beginRun() override
begin run
std::string m_svdShaperDigitListName
SVDShaperDigit StoreArray name.
DBObjPtr< HardwareClockSettings > m_hwClock
system clock
std::string m_svdEventInfoName
SVDEventInfo name.
DBObjPtr< SVDGlobalConfigParameters > m_svdGlobalConfig
SVDGlobal Configuration payload.
bool m_printRaw
Optionally we can get printout of Raw Data words.
int nEventInfoMatchErrors
counter of inconsistencies in SVDEventInfo within an event
bool m_badMappingFatal
Optionally we can stop the unpacking if there is a missing APV/FADC combination in the mapping -> wro...
int nErrorFieldErrors
counter of event mismatch errors in FTB's ErrorField
data_A m_data_A
Implementation of 1st data word.
uint32_t m_data32
Input 32-bit data word.
StoreObjPtr< EventMetaData > m_eventMetaDataPtr
Required input for EventMetaData.
bool m_silentAppend
Silently append new SVDShaperDigits to a pre-existing non-empty SVDShaperDigits storeArray.
std::unordered_multimap< unsigned char, unsigned char > * APVmap
pointer to APVforFADCmap filled by mapping procedure
SVDTriggerType m_SVDTriggerType
SVDTriggerType object.
SVDModeByte m_SVDModeByte
instance of SVDModeByte for the event
std::unique_ptr< SVDOnlineToOfflineMap > m_map
Pointer to online-to-offline map.
int m_relativeTimeShift
latency difference between the 3- and 6-sample acquired events in usint of APV clock / 4,...
std::map< std::pair< unsigned short, unsigned short >, std::pair< std::size_t, std::size_t > > m_upsetAPVs
Map to store a list of upset APVs.
int nFTBFlagsErrors
counter of errors in FTBFlags variable
bool m_emulatePipelineAddress
Software emulation of pipeline address This is a replacement of hardware pipeline address emulation.
std::string m_svdDAQDiagnosticsListName
SVDDAQDiagnostic StoreArray name.
int nTriggerMatchErrors
counters for specific ERRORS produced by the Unpacker
unsigned short nFADCboards
how many FADCs we have
Accessor to arrays stored in the data store.
Definition: StoreArray.h:113
Type-safe access to single objects in the data store.
Definition: StoreObjPtr.h:96
Namespace to encapsulate code needed for simulation and reconstrucion of the SVD.
Definition: GeoSVDCreator.h:23
unsigned int pipelineAddr
Pipeline Address.
unsigned int CMC1
Common Mode Noise w/o masking out particle signals.
unsigned int check
MSB "10" - for APV Header identification.
unsigned int CMC2
Common Mode Noise after masking out particle signals.
unsigned int apvErr
APV Errors field.
unsigned int apvErrOR
APV Errors Field OR.
unsigned int check
MSB "1110" - for FADC Trailer identification.
unsigned int dataSizeCut
APV data-size cut flag
unsigned int errorsField
FTB error fields.
unsigned int eventNumber
FTB event number.
unsigned int controlWord
MSB "ff55" - FADC Trailer ID.
unsigned int crc16
FTB CRC16 Checksum
unsigned int DAQType
(from 2020c) Event type(0): "0"…3 or …6 acquisition mode, "1"…3-mixed-6 acquisition mode
unsigned int check
MSB "110" - for FADC Header identification.
unsigned int DAQMode
Event type(2:1): "00"…1-sample, "01"…3-sample, "10"…6-sample.
implementation of the first data word
unsigned int sample3
3rd data sample
unsigned int sample2
2nd data sample
unsigned int check
MSB "1" - for Data word identification.
unsigned int sample1
1st data sample
implementation of the second data word
unsigned int sample6
6th data sample
unsigned int check
MSB "1" - for Data word identification.
unsigned int sample4
4th data sample
unsigned int sample5
5th data sample