 |
Belle II Software
release-05-02-19
|
11 #ifndef CDCTRIGGERUNPACKERMODULE_H
12 #define CDCTRIGGERUNPACKERMODULE_H
14 #include <framework/core/Module.h>
15 #include <rawdata/dataobjects/RawTRG.h>
16 #include <framework/datastore/StoreArray.h>
17 #include <framework/database/DBObjPtr.h>
19 #include <trg/cdc/dataobjects/Bitstream.h>
20 #include <trg/cdc/Unpacker.h>
21 #include <trg/cdc/dataobjects/CDCTriggerTrack.h>
22 #include <trg/cdc/dataobjects/CDCTriggerSegmentHit.h>
23 #include <trg/cdc/dataobjects/CDCTriggerFinderClone.h>
24 #include <trg/cdc/dataobjects/CDCTriggerMLPInput.h>
25 #include <trg/cdc/dbobjects/CDCTrigger2DConfig.h>
26 #include <trg/cdc/dataobjects/CDCTriggerMLP.h>
27 #include <trg/cdc/dbobjects/CDCTriggerNeuroConfig.h>
41 using NodeList = std::vector<std::vector<int> >;
61 unsigned inEventWidth,
unsigned inOffset,
62 int inHeaderSize, std::vector<int> inNodeID,
63 int& inDelay,
int& inCnttrg,
int inDebugLevel = 0) :
104 virtual void reserve(
int, std::array<int, nFinesse>) {};
116 std::array<int*, nFinesse>,
117 std::array<int, nFinesse>) {};
131 std::array<int*, 4> data32tab,
132 std::array<int, 4> nWords)
134 if (subDetectorId !=
iNode) {
140 B2WARNING(
"The module " <<
name <<
" does not have enough data (" <<
141 nWords[
iFinesse] <<
"). Nothing will be unpacked.");
144 B2DEBUG(20,
"The module " <<
name <<
145 " contains only the header. Nothing will be unpacked.");
158 if (dataHeader != 0xdddd0000) {
159 B2DEBUG(30,
"The module " <<
name <<
" has an event data header " << std::hex << std::setfill(
'0') << std::setw(4) <<
160 (dataHeader >> 16) <<
161 " in this event. It will be ignore.");
164 B2DEBUG(50,
"subdet and head size " << std::setfill(
'0') << std::hex << std::setw(8) <<
iNode <<
", " << std::dec << std::setw(
166 " : " << std::hex << std::setw(8) << data32tab.at(
iFinesse)[0] <<
" " << data32tab.at(
iFinesse)[1] <<
" " << data32tab.at(
168 " " << data32tab.at(
iFinesse)[3] <<
" dataheader = " << dataHeader);
185 std::bitset<wordWidth> thirdWord(data32tab.at(
iFinesse)[2]);
186 l1_revoclk = CDCTriggerUnpacker::subset<32, 0, 11>(thirdWord).to_ulong();
192 int newCnttrg = CDCTriggerUnpacker::subset<32, 12, 31>(thirdWord).to_ulong();
196 int newDelay = CDCTriggerUnpacker::subset<32, 12, 20>
197 (thirdWord).to_ulong();
199 B2WARNING(
" the Belle2Link delay for " <<
name <<
200 "has changed from " <<
delay <<
" to " << newDelay <<
"!");
210 ", cnttrg: " <<
cnttrg << std::dec <<
" == " <<
cnttrg <<
", L1_revoclk " << l1_revoclk);
230 class CDCTriggerUnpackerModule :
public Module {
249 virtual void event()
override;
255 static constexpr std::array<int, 9>
nMergers = {10, 10, 12, 14, 16, 18, 20, 22, 24};
StoreArray< CDCTriggerFinderClone > m_2DFinderClones
additional information of the 2D finder track
virtual void beginRun()
begin Run
static constexpr int nFinesse
Number of FINESSE in the copper.
enum class SubTriggerType : unsigned char {Merger, TSF, T2D, T3D, Neuro, ETF};
static constexpr int wordWidth
width of a single word in the raw int buffer
bool m_sim13dt
bool value wether to simulate 13 bit drift time by using 2dcc
std::array< std::bitset< mergerWidth >, nAllMergers > MergerBus
Merger data bus.
int & delay
Reference to the variable of its Belle2Link delay.
StoreArray< CDCTriggerUnpacker::T2DOutputBitStream > m_bits2DTo3D
bitstream of 2D output to 3D/Neuro
int m_headerSize
number of words (number of bits / 32) of the B2L header
StoreArray< CDCTriggerTrack > m_NeuroTracks
decoded Neuro tracks
int m_NeuroDelay
Belle2Link delay of the neurotrigger.
int debugLevel
debug level in the steering file
std::vector< SubTrigger * > m_subTrigger
vector holding the pointers to all the dynamically allocated SubTriggers
bool m_unpackTracker2D
flag to unpack 2D tracker data
int m_debugLevel
debug level specified in the steering file
StoreArray< CDCTriggerSegmentHit > m_NNInputTSHitsAll
all decoded stereo track segment hits from the neural network input
virtual ~SubTrigger()
destructor
bool m_unpackMerger
flag to unpack merger data (recorded by Merger Reader / TSF)
int m_2DFinderCnttrg
2D cnttrg
virtual void reserve(int, std::array< int, nFinesse >)
Calculate the number of clocks in the data, reserve that much of clocks in the Bitstream(s)
std::string firmwareType
type of the FPGA firmware
int m_mergerDelay
Belle2Link delay of the merger reader.
CDCTriggerMLP m_mlp_scale
fake object to assign the user set scaling values to
virtual void unpack(int, std::array< int *, nFinesse >, std::array< int, nFinesse >)
Unpack the Belle2Link data and fill the Bitstream.
CDCTriggerUnpackerModule()
Constructor: Sets the description, the properties and the parameters of the module.
static constexpr int nAllMergers
Number of Mergers.
int iFinesse
FINESSE (HSLB) id) of the board.
Class for accessing objects in the database.
std::vector< int > m_delayNNSelect
delay of the NN selected TS clock cycle after the NN enable bit (by quadrant)
static constexpr std::array< int, 9 > nMergers
data width of a single merger unit
virtual int getHeaders(int subDetectorId, std::array< int *, 4 > data32tab, std::array< int, 4 > nWords)
Get the Belle2Link header information.
SubTrigger(std::string inName, unsigned inEventWidth, unsigned inOffset, int inHeaderSize, std::vector< int > inNodeID, int &inDelay, int &inCnttrg, int inDebugLevel=0)
constructor
unsigned offset
The starting point of the data in an event.
bool m_useDB
bool value for wether to use the conditions database
virtual void terminate() override
Delete dynamically allocated variables.
virtual void initialize() override
Register input and output data.
bool m_alignFoundTime
flag to align found time in different sub-modules
static constexpr int mergerWidth
Merger data width.
NodeList m_tracker2DNodeID
list of (COPPER ID, HSLB ID) of 2D tracker
bool m_unpackNeuro
flag to unpack neurotrigger data
bool m_decodeTSHit
flag to decode track segment
std::string name
Name of the UT3.
int m_2DFinderDelay
Belle2Link delay of the 2D finder.
Abstract base class for different kinds of events.
int & cnttrg
counter of trgger signal, total 32 bits, the 20 LSBs recorded in the event header
int iNode
COPPER id of the board.
StoreArray< CDCTriggerUnpacker::NNBitStream > m_bitsNN
bitstream of Neuro input and output (including intermediate results)
NodeList m_neuroNodeID
list of (COPPER ID, HSLB ID) of neurotrigger
StoreArray< CDCTriggerTrack > m_2DFinderTracks
decoded 2D finder track
StoreArray< MergerBits > m_mergerBits
merger output bitstream
std::vector< float > m_NNOutputScale
output scale for the neural network output
std::vector< float > unscaleNNOutput(std::vector< float > input) const
small function to rescale the NN output from -1, 1 to output scale
unsigned eventWidth
Size of an event in the Belle2Link data in 32-bit words.
bool m_decodeNeuro
flag to decode neurotrigger data
StoreArray< CDCTriggerSegmentHit > m_TSHits
decoded track segment hit
int headerSize
Size of the B2L header in words.
std::vector< std::vector< int > > NodeList
Node list.
bool m_decode2DFinderTrack
flag to decode 2D finder track
int m_NeuroCnttrg
NN cnttrg.
StoreArray< RawTRG > m_rawTriggers
array containing the raw trigger data object
StoreArray< CDCTriggerTrack > m_NNInput2DFinderTracks
decoded 2D finder tracks from the neural network input
StoreArray< CDCTriggerSegmentHit > m_NNInputTSHits
decoded track segment hits from the neural network input
Accessor to arrays stored in the data store.
int m_n2DTS
flag to unpack 2D tracker data with 15TS
std::vector< int > m_delayNNOutput
delay of the NN output values clock cycle after the NN enable bit (by quadrant)
virtual void event() override
convert raw data (in B2L buffer to bitstream)
StoreArray< CDCTriggerMLPInput > m_NeuroInputs
decoded input vector for neural network
MergerBits m_mergerBitsPerClock
Merger bits per clock.
std::string firmwareVersion
version of the FPGA firmware
bool m_decode2DFinderInputTS
flag to decode 2D finder input TS
Class to keep all parameters of an expert MLP for the neuro trigger.
NodeList m_mergerNodeID
list of (COPPER ID, HSLB ID) of Merger reader (TSF)
StoreArray< CDCTriggerUnpacker::TSFOutputBitStream > m_bitsTo2D
bitstream of TSF output to 2D tracker
DBObjPtr< CDCTriggerNeuroConfig > m_cdctriggerneuroconfig
current neurotrigger config from database; used for unscaling network target