@@ -27,9 +27,10 @@ namespace zerosupp_link_based
2727static constexpr uint32_t DataWordSizeBits = 128 ; // /< size of header word and data words in bits
2828static 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 {
211216using ContainerZS = Container<>;
212217using 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