Belle II Software development
SubTrigger Struct Reference

enum class SubTriggerType : unsigned char {Merger, TSF, T2D, T3D, Neuro, ETF}; More...

#include <CDCTriggerUnpackerModule.h>

Inheritance diagram for SubTrigger:
Merger Neuro Tracker2D

Public Member Functions

 SubTrigger (const std::string &inName, unsigned inEventWidth, unsigned inOffset, int inHeaderSize, const std::vector< int > &inNodeID, const std::vector< int > &inNodeID_pcie40, int &inDelay, int &inCnttrg, int inDebugLevel=0)
 constructor
 
virtual void reserve (int, std::array< int, nFinesse >, bool)
 Calculate the number of clocks in the data, reserve that much of clocks in the Bitstream(s)
 
virtual void unpack (int, std::array< int *, nFinesse >, std::array< int, nFinesse >, bool)
 Unpack the Belle2Link data and fill the Bitstream.
 
virtual int getHeaders (int subDetectorId, std::array< int *, 48 > data32tab, std::array< int, 48 > nWords, bool pciedata)
 Get the Belle2Link header information.
 
virtual ~SubTrigger ()
 destructor
 

Public Attributes

std::string name
 Name of the UT3.
 
unsigned eventWidth
 Size of an event in the Belle2Link data in 32-bit words.
 
unsigned offset
 The starting point of the data in an event.
 
int headerSize
 Size of the B2L header in words.
 
int iNode
 COPPER id of the board.
 
int iFinesse
 FINESSE (HSLB) id) of the board.
 
int iNode_pcie40
 PCIe40 id of the board.
 
int iFinesse_pcie40
 PCIe40 ch id of the board.
 
std::string firmwareType
 type of the FPGA firmware
 
std::string firmwareVersion
 version of the FPGA firmware
 
int & delay
 Reference to the variable of its Belle2Link delay.
 
int & cnttrg
 counter of trgger signal, total 32 bits, the 20 LSBs recorded in the event header
 
int debugLevel
 debug level in the steering file
 

Detailed Description

enum class SubTriggerType : unsigned char {Merger, TSF, T2D, T3D, Neuro, ETF};

Definition at line 58 of file CDCTriggerUnpackerModule.h.

Constructor & Destructor Documentation

◆ SubTrigger()

SubTrigger ( const std::string &  inName,
unsigned  inEventWidth,
unsigned  inOffset,
int  inHeaderSize,
const std::vector< int > &  inNodeID,
const std::vector< int > &  inNodeID_pcie40,
int &  inDelay,
int &  inCnttrg,
int  inDebugLevel = 0 
)
inline

constructor

Definition at line 60 of file CDCTriggerUnpackerModule.h.

63 :
64 name(inName), eventWidth(inEventWidth), offset(inOffset),
65 headerSize(inHeaderSize), iNode(inNodeID.front()),
66 iFinesse(inNodeID.back()),
67 iNode_pcie40(inNodeID_pcie40.front()), iFinesse_pcie40(inNodeID_pcie40.back()),
68 delay(inDelay), cnttrg(inCnttrg),
69 debugLevel(inDebugLevel) {};
int iNode_pcie40
PCIe40 id of the board.
int headerSize
Size of the B2L header in words.
unsigned offset
The starting point of the data in an event.
int debugLevel
debug level in the steering file
int iFinesse
FINESSE (HSLB) id) of the board.
int & delay
Reference to the variable of its Belle2Link delay.
int iFinesse_pcie40
PCIe40 ch id of the board.
int & cnttrg
counter of trgger signal, total 32 bits, the 20 LSBs recorded in the event header
std::string name
Name of the UT3.
unsigned eventWidth
Size of an event in the Belle2Link data in 32-bit words.
int iNode
COPPER id of the board.

◆ ~SubTrigger()

virtual ~SubTrigger ( )
inlinevirtual

destructor

Definition at line 227 of file CDCTriggerUnpackerModule.h.

227{};

Member Function Documentation

◆ getHeaders()

virtual int getHeaders ( int  subDetectorId,
std::array< int *, 48 >  data32tab,
std::array< int, 48 >  nWords,
bool  pciedata 
)
inlinevirtual

Get the Belle2Link header information.

Parameters
subDetectorIdCOPPER id of the current data
data32tablist of pointers to the Belle2Link data buffers
nWordsNumber of words of each FINESSE in the COPPER
pciedataSwitch between PCIe 40 and COPPER
Returns
1 if there are data other than the header

Definition at line 128 of file CDCTriggerUnpackerModule.h.

132 {
133
134 int iNode_i = 0;
135 int iFinesse_i = 0;
136 if (pciedata) {
137 iNode_i = iNode_pcie40;
138 iFinesse_i = iFinesse_pcie40;
139 } else {
140 iNode_i = iNode;
141 iFinesse_i = iFinesse;
142 }
143
144 if (subDetectorId != iNode_i) {
145 return 0;
146 }
147 // int nWordsize = 3075; // temporary solution to hard coded the correct event size (for 2D only?)
148 // empty data buffer
149 if (nWords[iFinesse_i] < headerSize) {
150 B2WARNING("The module " << name << " does not have enough data (" <<
151 nWords[iFinesse_i] << "). Nothing will be unpacked.");
152 return 0;
153 } else if (nWords[iFinesse_i] == headerSize) {
154 B2DEBUG(20, "The module " << name <<
155 " contains only the header. Nothing will be unpacked.");
156 return 0;
157 }
158
159 // need one more check, give a warning if the event has wrong data size
160
161 // event data block header:
162 // 0xdddd --> correct event data (for 2D only?)
163 // 0xbbbb --> dummy buffer supposed to be used for only suppressed events.
164 if (nWords[iFinesse_i] > headerSize) {
165 //dataHeader = CDCTriggerUnpacker::rawIntToAscii(data32tab.at(iFinesse)[headerSize]&0xFFFF0000 >> 16);
166 //bool dataHeader = ( (data32tab.at(iFinesse)[headerSize]&0xffff0000) == 0xdddd0000);
167 long dataHeader = (data32tab.at(iFinesse_i)[headerSize] & 0xffff0000);
168 if (dataHeader != 0xdddd0000) {
169 B2DEBUG(30, "The module " << name << " has an event data header " << std::hex << std::setfill('0') << std::setw(4) <<
170 (dataHeader >> 16) <<
171 " in this event. It will be ignore.");
172 return 0;
173 }
174 B2DEBUG(50, "subdet and head size " << std::setfill('0') << std::hex << std::setw(8) << iNode_i << ", " << std::dec << std::setw(
175 0) << nWords[iFinesse_i] <<
176 " : " << std::hex << std::setw(8) << data32tab.at(iFinesse_i)[0] << " " << data32tab.at(iFinesse_i)[1] << " " << data32tab.at(
177 iFinesse_i)[2] <<
178 " " << data32tab.at(iFinesse_i)[3] << " dataheader = " << dataHeader);
179 }
180
181 /* get event header information
182 * Ideally, these parameters should not change in the same run,
183 * so it is more efficiency to do it in beginRun().
184 * However, since they are present in all events,
185 * let's check if they really remain unchanged.
186 */
187 if (headerSize >= 2) {
188 // supposedly these two Words will stay for all the versions
189 firmwareType = CDCTriggerUnpacker::rawIntToAscii(data32tab.at(iFinesse_i)[0]);
190 firmwareVersion = CDCTriggerUnpacker::rawIntToString(data32tab.at(iFinesse_i)[1]);
191 //int cnttrg = 0; // temporary solution, this should be one as a reference for comparison
192 int l1_revoclk = -1;
193
194 if (headerSize >= 3) {
195 std::bitset<wordWidth> thirdWord(data32tab.at(iFinesse_i)[2]);
196 l1_revoclk = CDCTriggerUnpacker::subset<32, 0, 11>(thirdWord).to_ulong();
197
198 if (firmwareType == "2D ") { // temporary solcuion, the following version number check is valid only for 2D
199
200 if (firmwareVersion > "19041700") { // started since 19041705
201 // the third word is cnttrg and L1_revoclk
202 int newCnttrg = CDCTriggerUnpacker::subset<32, 12, 31>(thirdWord).to_ulong();
203 cnttrg = newCnttrg;
204 } else if (firmwareVersion > "17121900") { // upto that version, headerSize == 2?
205 // the third word is b2l delay and L1_revoclk
206 int newDelay = CDCTriggerUnpacker::subset<32, 12, 20>
207 (thirdWord).to_ulong(); // or should be <32,12,19>? bit 31-20 are for prescale?
208 if (delay > 0 && delay != newDelay) {
209 B2WARNING(" the Belle2Link delay for " << name <<
210 "has changed from " << delay << " to " << newDelay << "!");
211 }
212 delay = newDelay;
213 }
214 }
215 }
216
217 B2DEBUG(20, name << ": " << firmwareType << ", version " <<
218 firmwareVersion << ", node " << std::hex << iNode_i <<
219 ", finesse " << iFinesse_i << ", delay: " << delay <<
220 ", cnttrg: " << cnttrg << std::dec << " == " << cnttrg << ", L1_revoclk " << l1_revoclk);
221
222
223 }
224 return 1;
225 };
std::string firmwareVersion
version of the FPGA firmware
std::string firmwareType
type of the FPGA firmware

◆ reserve()

virtual void reserve ( int  ,
std::array< int, nFinesse ,
bool   
)
inlinevirtual

Calculate the number of clocks in the data, reserve that much of clocks in the Bitstream(s)

Reimplemented in Merger, Tracker2D, and Neuro.

Definition at line 105 of file CDCTriggerUnpackerModule.h.

105{};

◆ unpack()

virtual void unpack ( int  ,
std::array< int *, nFinesse ,
std::array< int, nFinesse ,
bool   
)
inlinevirtual

Unpack the Belle2Link data and fill the Bitstream.

Reimplemented in Neuro.

Definition at line 110 of file CDCTriggerUnpackerModule.h.

113 {};

Member Data Documentation

◆ cnttrg

int& cnttrg

counter of trgger signal, total 32 bits, the 20 LSBs recorded in the event header

Definition at line 96 of file CDCTriggerUnpackerModule.h.

◆ debugLevel

int debugLevel

debug level in the steering file

Definition at line 99 of file CDCTriggerUnpackerModule.h.

◆ delay

int& delay

Reference to the variable of its Belle2Link delay.

Definition at line 94 of file CDCTriggerUnpackerModule.h.

◆ eventWidth

unsigned eventWidth

Size of an event in the Belle2Link data in 32-bit words.

Definition at line 74 of file CDCTriggerUnpackerModule.h.

◆ firmwareType

std::string firmwareType

type of the FPGA firmware

Definition at line 90 of file CDCTriggerUnpackerModule.h.

◆ firmwareVersion

std::string firmwareVersion

version of the FPGA firmware

Definition at line 92 of file CDCTriggerUnpackerModule.h.

◆ headerSize

int headerSize

Size of the B2L header in words.

Definition at line 78 of file CDCTriggerUnpackerModule.h.

◆ iFinesse

int iFinesse

FINESSE (HSLB) id) of the board.

Definition at line 82 of file CDCTriggerUnpackerModule.h.

◆ iFinesse_pcie40

int iFinesse_pcie40

PCIe40 ch id of the board.

Definition at line 86 of file CDCTriggerUnpackerModule.h.

◆ iNode

int iNode

COPPER id of the board.

Definition at line 80 of file CDCTriggerUnpackerModule.h.

◆ iNode_pcie40

int iNode_pcie40

PCIe40 id of the board.

Definition at line 84 of file CDCTriggerUnpackerModule.h.

◆ name

std::string name

Name of the UT3.

Definition at line 72 of file CDCTriggerUnpackerModule.h.

◆ offset

unsigned offset

The starting point of the data in an event.

Definition at line 76 of file CDCTriggerUnpackerModule.h.


The documentation for this struct was generated from the following file: