Skip to content

Commit 7de1c35

Browse files
wiechuladavidrohr
authored andcommitted
Add Trigger info decoding
1 parent 1034600 commit 7de1c35

1 file changed

Lines changed: 42 additions & 7 deletions

File tree

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

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ namespace zerosupp_link_based
2727
static constexpr uint32_t DataWordSizeBits = 128; ///< size of header word and data words in bits
2828
static constexpr uint32_t DataWordSizeBytes = DataWordSizeBits / 8; ///< size of header word and data words in bytes
2929

30-
/// header definition of the zero suppressed link based data format
31-
struct Header {
32-
static constexpr uint32_t MagicWord = 0xFC;
30+
/// common header definition of the zero suppressed link based data
31+
struct CommonHeader {
32+
static constexpr uint32_t MagicWordLinkZS = 0xFC;
33+
static constexpr uint32_t MagicWordTrigger = 0xAA;
3334

3435
union {
3536
uint64_t word0 = 0; ///< lower 64 bits
@@ -50,18 +51,22 @@ struct Header {
5051
};
5152
};
5253

54+
bool hasCorrectMagicWord() const { return (magicWord == MagicWordLinkZS) || (magicWord == MagicWordTrigger); }
55+
bool isLinkZS() const { return (magicWord == MagicWordLinkZS); }
56+
bool isTriggerInfo() const { return (magicWord == MagicWordTrigger); }
57+
};
58+
59+
/// header definition of the zero suppressed link based data format
60+
struct Header final : public CommonHeader {
61+
5362
std::bitset<80> getChannelBits() const
5463
{
5564
return std::bitset<80>((std::bitset<80>(bitMaskHigh) << 64) | std::bitset<80>(bitMaskLow));
5665
}
5766

5867
bool isFillWord() const { return (word0 == 0xffffffffffffffff) && (word1 == 0xffffffffffffffff); }
59-
60-
bool hasCorrectMagicWord() const { return magicWord == MagicWord; }
6168
};
6269

63-
/// empty header for
64-
6570
/// ADC data container
6671
///
6772
/// In case of zero suppressed data, the ADC values are stored with 12 bit
@@ -211,6 +216,36 @@ struct Container {
211216
using ContainerZS = Container<>;
212217
using ContainerDecoded = Container<10, 0, false>;
213218

219+
/// Data definition for the trigger information
220+
struct TriggerInfo {
221+
union {
222+
uint64_t word0 = 0; ///< lower 64 bits
223+
struct { ///
224+
uint16_t bunchCrossing : 12; ///< bunch crossing number
225+
uint64_t orbit : 32; ///< orbit number
226+
uint32_t triggerTypeLow : 20; ///< low bits of tigger type
227+
}; ///
228+
}; ///
229+
///
230+
union { ///
231+
uint64_t word1 = 0; ///< upper bits of the 80 bit bitmask
232+
struct { ///
233+
uint32_t triggerTypeHigh : 12; ///< number of 128bit words with 12bit ADC values
234+
uint64_t empty : 50; ///<
235+
};
236+
};
237+
238+
uint32_t getOrbit() const { return (uint32_t)orbit; }
239+
uint32_t getTriggerType() const { return (triggerTypeHigh << 20) + triggerTypeLow; }
240+
};
241+
242+
/// Container for Trigger information, header + data
243+
struct TriggerContainer {
244+
CommonHeader header;
245+
TriggerInfo triggerInfo;
246+
247+
uint32_t getTriggerType() const { return triggerInfo.getTriggerType(); }
248+
};
214249
} // namespace zerosupp_link_based
215250
} // namespace tpc
216251
} // namespace o2

0 commit comments

Comments
 (0)