Skip to content

Commit bc81342

Browse files
wiechulashahor02
authored andcommitted
TPC: Add new trigger info handling
1 parent 7023fae commit bc81342

2 files changed

Lines changed: 35 additions & 2 deletions

File tree

DataFormats/Detectors/TPC/include/DataFormatsTPC/ZeroSuppressionLinkBased.h

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ static constexpr uint32_t DataWordSizeBytes = DataWordSizeBits / 8; ///< size of
3232
struct CommonHeader {
3333
static constexpr uint32_t MagicWordLinkZS = 0xFC;
3434
static constexpr uint32_t MagicWordTrigger = 0xAA;
35+
static constexpr uint32_t MagicWordTriggerV2 = 0xAB;
3536

3637
union {
3738
uint64_t word0 = 0; ///< lower 64 bits
@@ -52,9 +53,10 @@ struct CommonHeader {
5253
};
5354
};
5455

55-
bool hasCorrectMagicWord() const { return (magicWord == MagicWordLinkZS) || (magicWord == MagicWordTrigger); }
56+
bool hasCorrectMagicWord() const { return (magicWord == MagicWordLinkZS) || (magicWord == MagicWordTrigger) || (magicWord == MagicWordTriggerV2); }
5657
bool isLinkZS() const { return (magicWord == MagicWordLinkZS); }
5758
bool isTriggerInfo() const { return (magicWord == MagicWordTrigger); }
59+
bool isTriggerInfoV2() const { return (magicWord == MagicWordTriggerV2); }
5860
};
5961

6062
/// header definition of the zero suppressed link based data format
@@ -240,6 +242,28 @@ struct TriggerInfo {
240242
uint32_t getTriggerType() const { return (triggerTypeHigh << 20) + triggerTypeLow; }
241243
};
242244

245+
/// Data definition for the new trigger information after FW update, allowing for interleaved triggers
246+
struct TriggerInfoV2 {
247+
union {
248+
uint64_t word0 = 0; ///< lower 64 bits
249+
struct { ///
250+
uint32_t triggerType; ///< tigger type
251+
uint32_t orbit; ///< orbit number
252+
}; ///
253+
}; ///
254+
///
255+
union { ///
256+
uint64_t word1 = 0; ///< upper bits of the 80 bit bitmask
257+
struct { ///
258+
uint32_t bunchCrossing : 12; ///< bunch crossing number
259+
uint32_t empty1_0 : 16; ///< empty
260+
uint32_t numWordsPayload : 4; ///< number of 128bit words with 12bit ADC values, should always be 0
261+
uint32_t empty1_1 : 24; ///< empty
262+
uint32_t magicWord : 8; ///< magic word for identification
263+
};
264+
};
265+
};
266+
243267
/// Container for Trigger information, header + data
244268
struct TriggerContainer {
245269
CommonHeader header;

Detectors/TPC/reconstruction/src/RawProcessingHelpers.cxx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,16 @@ bool raw_processing_helpers::processZSdata(const char* data, size_t size, rdh_ut
6969
const auto triggerBC = triggerInfo->triggerInfo.bunchCrossing;
7070
triggerBCOffset = (int(triggerOrbit) - int(referenceOrbit)) * maxBunches + triggerBC;
7171
LOGP(debug, "orbit: {}, triggerOrbit: {}, triggerBC: {}, triggerBCOffset: {}", orbit, triggerOrbit, triggerBC, triggerBCOffset);
72-
zsdata = (zerosupp_link_based::ContainerZS*)((const char*)zsdata + sizeof(zerosupp_link_based::Header) * (1 + header.numWordsPayload));
72+
zsdata = zsdata->next();
73+
continue;
74+
} else if (header.isTriggerInfoV2()) {
75+
// for the moment only skip the trigger info
76+
const auto triggerInfo = (zerosupp_link_based::TriggerInfoV2*)zsdata;
77+
const auto triggerOrbit = triggerInfo->orbit;
78+
const auto triggerBC = triggerInfo->bunchCrossing;
79+
triggerBCOffset = (int(triggerOrbit) - int(referenceOrbit)) * maxBunches + triggerBC;
80+
LOGP(debug, "orbit: {}, triggerOrbit: {}, triggerBC: {}, triggerBCOffset: {}", orbit, triggerOrbit, triggerBC, triggerBCOffset);
81+
zsdata = zsdata->next();
7382
continue;
7483
}
7584

0 commit comments

Comments
 (0)