Belle II Software development
Tracker2D Struct Reference

unpacker for the 2D tracker More...

Inheritance diagram for Tracker2D:
SubTrigger

Public Member Functions

 Tracker2D (StoreArray< TSFOutputBitStream > *inArrayPtr, StoreArray< T2DOutputBitStream > *outArrayPtr, const std::string &inName, unsigned inEventWidth, unsigned inOffset, unsigned inHeaderSize, const std::vector< int > &inNodeID, const std::vector< int > &inNodeID_pcie40, unsigned inNumTS, int &inDelay, int &inCnttrg, int inDebugLevel)
 constructor
 
void reserve (int subDetectorId, std::array< int, nFinesse > nWords, bool pciedata) override
 Calculate the number of clocks in the data, reserve that much of clocks in the Bitstream(s)
 
void unpack (int subDetectorId, std::array< int *, 48 > data32tab, std::array< int, 48 > nWords, bool pciedata) override
 Unpack the Belle2Link data and fill the Bitstream.
 
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.
 

Public Attributes

StoreArray< TSFOutputBitStream > * inputArrayPtr
 pointer to the Bitstream of 2D input
 
StoreArray< T2DOutputBitStream > * outputArrayPtr
 pointer to the Bitstream of 2D output to 3D/Neuro
 
unsigned iTracker
 ID of the 2D tracker (0 to 3)
 
unsigned numTS
 Number of TS sent to 2D (0 to 20)
 
unsigned offsetBitWidth
 starting point of the input data in an Belle2Link event
 
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

unpacker for the 2D tracker

Definition at line 155 of file CDCTriggerUnpackerModule.cc.

Constructor & Destructor Documentation

◆ Tracker2D()

Tracker2D ( StoreArray< TSFOutputBitStream > *  inArrayPtr,
StoreArray< T2DOutputBitStream > *  outArrayPtr,
const std::string &  inName,
unsigned  inEventWidth,
unsigned  inOffset,
unsigned  inHeaderSize,
const std::vector< int > &  inNodeID,
const std::vector< int > &  inNodeID_pcie40,
unsigned  inNumTS,
int &  inDelay,
int &  inCnttrg,
int  inDebugLevel 
)
inline

constructor

Definition at line 157 of file CDCTriggerUnpackerModule.cc.

163 :
164 SubTrigger(inName, inEventWidth, inOffset / wordWidth, inHeaderSize, inNodeID, inNodeID_pcie40,
165 inDelay, inCnttrg, inDebugLevel),
166 inputArrayPtr(inArrayPtr), outputArrayPtr(outArrayPtr),
167 iTracker(std::stoul(inName.substr(inName.length() - 1))),
168 numTS(inNumTS), offsetBitWidth(inOffset) {};
static constexpr int wordWidth
width of a single word in the raw int buffer
enum class SubTriggerType : unsigned char {Merger, TSF, T2D, T3D, Neuro, ETF};
StoreArray< T2DOutputBitStream > * outputArrayPtr
pointer to the Bitstream of 2D output to 3D/Neuro
unsigned offsetBitWidth
starting point of the input data in an Belle2Link event
unsigned iTracker
ID of the 2D tracker (0 to 3)
unsigned numTS
Number of TS sent to 2D (0 to 20)
StoreArray< TSFOutputBitStream > * inputArrayPtr
pointer to the Bitstream of 2D input

Member Function Documentation

◆ getHeaders()

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

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 };
int iNode_pcie40
PCIe40 id of the board.
int headerSize
Size of the B2L header in words.
std::string firmwareVersion
version of the FPGA firmware
std::string firmwareType
type of the FPGA firmware
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.
int iNode
COPPER id of the board.

◆ reserve()

void reserve ( int  subDetectorId,
std::array< int, nFinesse nWords,
bool  pciedata 
)
inlineoverridevirtual

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

Parameters
subDetectorIdCOPPER id of the current data
nWordsNumber of words of each FINESSE in the COPPER
pciedataSwitch between PCIe 40 and COPPER

Reimplemented from SubTrigger.

Definition at line 189 of file CDCTriggerUnpackerModule.cc.

190 {
191 int iNode_i = 0;
192 int iFinesse_i = 0;
193 if (pciedata) {
194 iNode_i = iNode_pcie40;
195 iFinesse_i = iFinesse_pcie40;
196 } else {
197 iNode_i = iNode;
198 iFinesse_i = iFinesse;
199 }
200
201 size_t nClocks = (nWords[iFinesse_i] - headerSize) / eventWidth;
202 size_t entries = inputArrayPtr->getEntries();
203 if (subDetectorId == iNode_i) {
204 if (entries == 0) {
205 for (unsigned i = 0; i < nClocks; ++i) {
208 // fill bitstreams for all trackers with zeros
209 for (unsigned j = 0; j < nTrackers; ++j) {
210 for (unsigned iAxialTSF = 0; iAxialTSF < nAxialTSF; ++iAxialTSF) {
211 inputClock->m_signal[iAxialTSF][j].fill(zero_val);
212 }
213 outputClock->m_signal.at(j).fill(zero_val);
214 }
215 }
216 B2DEBUG(20, name << ": " << nClocks << " clocks");
217 } else if (entries != nClocks) {
218 B2DEBUG(20, "Number of clocks in " << name << " conflicts with others!");
219 }
220 }
221 };
Class to hold one clock cycle of raw bit content.
Definition: Bitstream.h:54
SignalBus m_signal
SignalBus of the Bitstream.
Definition: Bitstream.h:77
T * appendNew()
Construct a new T object at the end of the array.
Definition: StoreArray.h:246
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:216
unsigned eventWidth
Size of an event in the Belle2Link data in 32-bit words.

◆ unpack() [1/2]

void unpack ( int  subDetectorId,
std::array< int *, 48 >  data32tab,
std::array< int, 48 >  nWords,
bool  pciedata 
)
inlineoverride

Unpack the Belle2Link data and fill the Bitstream.

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

Definition at line 231 of file CDCTriggerUnpackerModule.cc.

235 {
236 int iNode_i = 0;
237 int iFinesse_i = 0;
238 if (pciedata) {
239 iNode_i = iNode_pcie40;
240 iFinesse_i = iFinesse_pcie40;
241 } else {
242 iNode_i = iNode;
243 iFinesse_i = iFinesse;
244 }
245
246 if (subDetectorId != iNode_i) {
247 return;
248 }
249 // Recently, the content of the last clock appears at the beginning.
250 // Now we decide whether we will change the order of the clocks
251 // based on the 127MHz counter on the 2nd half of the first word [15:0]
252 int ccShift = 0;
253 using halfDataWord = std::bitset<16>;
254 std::vector<halfDataWord> counters;
255 counters.reserve(inputArrayPtr->getEntries());
256 for (int iclock = 0; iclock < inputArrayPtr->getEntries(); ++iclock) {
257 counters.emplace_back(data32tab[iFinesse_i]
258 [headerSize + eventWidth * iclock] & 0xffff);
259 B2DEBUG(100, "iclock " << iclock << " --> " << counters.at(iclock).to_ulong() << " : " << std::hex << counters.at(iclock));
260 }
261 bool counter_correct_error = false;
262 while (counters.at(1).to_ulong() - counters.at(0).to_ulong() != 4) {
263 std::rotate(counters.begin(), counters.begin() + 1, counters.end());
264 ccShift++;
265 // 2019,0410 This situation, looks like clockcounter shifted 6 bits left, was first seen in exp5 data.
266 // Later it has been understood that it is due to data from a dummy BRAM buffer, which is supposed to be used for suppressed data only.
267 // The data header is 0xbbbb instead of 0xdddd.
268 // getHeader in the CDCTriggerUnpackerModule.h is modified to skip this kind event.
269 // 2019,0419 unfortunately, clockcounter found disorder since expt 7, run 2553, after update of B2L firmware to replace the b2dly with trigger counter.
270 // for that run, it seems the problem happens only at 2D1, 2D2, and 2D3.
271 if (ccShift >= inputArrayPtr->getEntries()) {
272 B2DEBUG(90, "PHYSJG: clock counter rotation over one cycle: " << ccShift);
273 for (const auto& c : counters) {
274 B2DEBUG(90, "" << c.to_ulong() << " : " << std::hex << c);
275 }
276 counter_correct_error = true;
277 break;
278 }
279 }
280 if (counter_correct_error) {
281 B2DEBUG(20, "PHYSJG: " << name << " too many clock counter rotation corrections: " << ccShift << " data object skipped.");
282 // maybe implement an option for user to decide if this data block should be kept or not?!
283 return;
284 }
285 if (! std::is_sorted(counters.begin(), counters.end(),
286 [](halfDataWord i, halfDataWord j) {
287 return (j.to_ulong() - i.to_ulong() == 4);
288 })) {
289 B2DEBUG(20, "clock counters are still out of order");
290 for (const auto& c : counters) {
291 B2DEBUG(90, "" << c.to_ulong());
292 }
293 }
294 // This could happen when the clock counter is over 1279 and roll back to 0, since only 48 clock counter will be in the data.
295 if (ccShift) {
296 B2DEBUG(15, "shifting the first " << ccShift <<
297 " clock(s) to the end for " << name);
298 }
299
300 // get event body information
301 // make bitstream
302 // loop over all clocks
303 for (int i = headerSize; i < nWords[iFinesse_i]; i += eventWidth) {
304 int iclock = (i - headerSize) / eventWidth - ccShift;
305 if (iclock < 0) {
306 iclock += inputArrayPtr->getEntries();
307 }
308 auto inputClock = (*inputArrayPtr)[iclock];
309 auto outputClock = (*outputArrayPtr)[iclock];
310 // clear output bitstream
311 outputClock->m_signal.at(iTracker).fill(zero_val);
312 B2DEBUG(90, "unpacker clock " << iclock);
313 if (debugLevel >= 300) {
314 printBuffer(data32tab[iFinesse_i] + headerSize + eventWidth * iclock,
315 eventWidth);
316 }
317 // get the clock counters
318 std::array<dataWord, 2> ccword({
319 data32tab[iFinesse_i][i + 2], data32tab[iFinesse_i][i + 3]
320 });
321 // fill input
322 // Careful! this iTSF is (8 - iSL) / 2
323 for (unsigned iTSF = 0; iTSF < nAxialTSF; ++iTSF) {
324 // clear input bitstream
325 inputClock->m_signal[nAxialTSF - 1 - iTSF][iTracker].fill(zero_val);
326
327 if (firmwareVersion < "18012600") {
328 /*
329 data_b2l_r <=
330 x"dddd" & cntr125M(15 downto 0) &
331 cc(4) & cc(3) & cc(2) & cc(1) & cc(0) &
332 ccError &
333 -- 82
334 tsfs(4)(209 downto 0) &
335 tsfs(3)(209 downto 0) &
336 tsfs(2)(209 downto 0) &
337 tsfs(1)(209 downto 0) &
338 tsfs(0)(209 downto 0) &
339 */
340 // fill the clock counters
341 for (unsigned pos = 0; pos < clockCounterWidth; ++pos) {
342 const int j = (pos + iTSF * clockCounterWidth) / wordWidth;
343 const int k = (pos + iTSF * clockCounterWidth) % wordWidth;
344 /* The index behaves differently in each containers
345 Here is an example of a 64-bit wide MSB data
346 |-------- smaller index in the firmware ----->
347
348 data in the firmware/VHDL std_logic_vector(63 downto 0)
349 63 62 61 60 ... 01 00
350
351 data in B2L/RawTRG (when using std::bitset<32> for a word)
352 (31 30 29 28 ... 01 00) (31 30 29 28 ... 01 00)
353 |------ word 0 -------| |------ word 1 -------|
354
355 XSim / Bitstream of std::array<char, N> / std::string
356 00 01 02 03 ... 62 63
357 */
358 // Here we are filling std::array<char, N>, which has reversed order
359 // to std::bitset, so there is a - sign in [wordWidth - k]
360 inputClock->m_signal[nAxialTSF - 1 - iTSF][iTracker][pos] =
361 std_logic(ccword[j][wordWidth - k]);
362 }
363 // fill the TS hit
364 offsetBitWidth = 82;
365 for (unsigned pos = 0; pos < numTS * lenTS; ++pos) {
366 const int j = (offsetBitWidth + pos + iTSF * numTS * lenTS) / wordWidth;
367 const int k = (offsetBitWidth + pos + iTSF * numTS * lenTS) % wordWidth;
368 dataWord word(data32tab[iFinesse_i][i + j]);
369 // MSB (leftmost) in firmware -> smallest index in Bitstream's
370 // std::array (due to XSIM) -> largest index in std::bitset
371 // so the index is reversed in this assignment
372 inputClock->m_signal[nAxialTSF - 1 - iTSF][iTracker]
373 [clockCounterWidth + pos] = std_logic(word[wordWidth - 1 - k]);
374 }
375 } else {
376 /*
377 x"dddd" & (15 downto 11 => '0') & revoclk &
378 cntr125M(15 downto 0) &
379 (15 downto 5 => '0') & ccError &
380 -- 64
381 cc(4) & tsfs(4)(209 downto 0) &
382 cc(3) & tsfs(3)(209 downto 0) &
383 cc(2) & tsfs(2)(209 downto 0) &
384 cc(1) & tsfs(1)(209 downto 0) &
385 cc(0) & tsfs(0)(209 downto 0) &
386 */
387 // fill the cc and TS hit
388 offsetBitWidth = 64;
389 unsigned TSFWidth = clockCounterWidth + numTS * lenTS;
390 for (unsigned pos = 0; pos < TSFWidth; ++pos) {
391 const int j = (offsetBitWidth + pos + iTSF * TSFWidth) / wordWidth;
392 const int k = (offsetBitWidth + pos + iTSF * TSFWidth) % wordWidth;
393 dataWord word(data32tab[iFinesse_i][i + j]);
394 inputClock->m_signal[nAxialTSF - 1 - iTSF][iTracker][pos] =
395 std_logic(word[wordWidth - 1 - k]);
396 }
397 }
398 if (debugLevel >= 100) {
399 display_hex(inputClock->m_signal[nAxialTSF - 1 - iTSF][iTracker]);
400 }
401 }
402 // fill output
403 if (firmwareVersion < "18012600") {
404 /*
405 -- 1132
406 Main_out(731 downto 0) &
407 */
408 const int outputOffset = nAxialTSF * numTS * lenTS;
409 const int oldtrackWidth = 6;
410 for (unsigned pos = 0; pos < 732; ++pos) {
411 const int j = (offsetBitWidth + pos + outputOffset) / wordWidth;
412 const int k = (offsetBitWidth + pos + outputOffset) % wordWidth;
413 dataWord word(data32tab[iFinesse_i][i + j]);
414 outputClock->m_signal.at(iTracker).at(clockCounterWidth + oldtrackWidth + pos)
415 = std_logic(word[wordWidth - 1 - k]);
416 }
417 } else {
418 /*
419 -- 1159
420 old_track(5 downto 0) &
421 Main_out(731 downto 0) &
422 */
423 //const int outputOffset = 1159;
424 const int outputOffset = offsetBitWidth + nAxialTSF * numTS * lenTS + 45; //1159 with numTS=10 , 1684 with numTS=15
425 for (unsigned pos = 0; pos < T2DOutputWidth; ++pos) {
426 const int j = (pos + outputOffset) / wordWidth;
427 const int k = (pos + outputOffset) % wordWidth;
428 dataWord word(data32tab[iFinesse_i][i + j]);
429 try {
430 outputClock->m_signal.at(iTracker).at(clockCounterWidth + pos)
431 = std_logic(word[wordWidth - 1 - k]);
432 } catch (const std::out_of_range& e) {
433 B2DEBUG(20, "Out-of-range access ot outputClock->m_signal.at(iTracker).at(clockCounterWidth + pos)"
434 << LogVar("iTracker", iTracker)
435 << LogVar("clockCounterWidth", clockCounterWidth)
436 << LogVar("post", pos));
437 break;
438 }
439 }
440 }
441 if (debugLevel >= 100) {
442 display_hex(outputClock->m_signal.at(iTracker));
443 }
444 }
445 }
Class to store variables with their name which were sent to the logging service.
void display_hex(const std::array< char, N > &signal)
Display signal in hex.
Definition: Cosim.h:81
int debugLevel
debug level in the steering file

◆ unpack() [2/2]

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

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
inherited

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
inherited

debug level in the steering file

Definition at line 99 of file CDCTriggerUnpackerModule.h.

◆ delay

int& delay
inherited

Reference to the variable of its Belle2Link delay.

Definition at line 94 of file CDCTriggerUnpackerModule.h.

◆ eventWidth

unsigned eventWidth
inherited

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

Definition at line 74 of file CDCTriggerUnpackerModule.h.

◆ firmwareType

std::string firmwareType
inherited

type of the FPGA firmware

Definition at line 90 of file CDCTriggerUnpackerModule.h.

◆ firmwareVersion

std::string firmwareVersion
inherited

version of the FPGA firmware

Definition at line 92 of file CDCTriggerUnpackerModule.h.

◆ headerSize

int headerSize
inherited

Size of the B2L header in words.

Definition at line 78 of file CDCTriggerUnpackerModule.h.

◆ iFinesse

int iFinesse
inherited

FINESSE (HSLB) id) of the board.

Definition at line 82 of file CDCTriggerUnpackerModule.h.

◆ iFinesse_pcie40

int iFinesse_pcie40
inherited

PCIe40 ch id of the board.

Definition at line 86 of file CDCTriggerUnpackerModule.h.

◆ iNode

int iNode
inherited

COPPER id of the board.

Definition at line 80 of file CDCTriggerUnpackerModule.h.

◆ iNode_pcie40

int iNode_pcie40
inherited

PCIe40 id of the board.

Definition at line 84 of file CDCTriggerUnpackerModule.h.

◆ inputArrayPtr

StoreArray<TSFOutputBitStream>* inputArrayPtr

pointer to the Bitstream of 2D input

Definition at line 171 of file CDCTriggerUnpackerModule.cc.

◆ iTracker

unsigned iTracker

ID of the 2D tracker (0 to 3)

Definition at line 175 of file CDCTriggerUnpackerModule.cc.

◆ name

std::string name
inherited

Name of the UT3.

Definition at line 72 of file CDCTriggerUnpackerModule.h.

◆ numTS

unsigned numTS

Number of TS sent to 2D (0 to 20)

Definition at line 177 of file CDCTriggerUnpackerModule.cc.

◆ offset

unsigned offset
inherited

The starting point of the data in an event.

Definition at line 76 of file CDCTriggerUnpackerModule.h.

◆ offsetBitWidth

unsigned offsetBitWidth

starting point of the input data in an Belle2Link event

Definition at line 179 of file CDCTriggerUnpackerModule.cc.

◆ outputArrayPtr

StoreArray<T2DOutputBitStream>* outputArrayPtr

pointer to the Bitstream of 2D output to 3D/Neuro

Definition at line 173 of file CDCTriggerUnpackerModule.cc.


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