ATLAS Offline Software
Loading...
Searching...
No Matches
ZdcSubBlock.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5
6#ifndef ZDCSUBBLOCK_H
7#define ZDCSUBBLOCK_H
8
9#include <stdint.h>
10#include <vector>
11
13
14#include "ZdcSrcIdMap.h"
15
16
33
35
36 public:
40
45
54
57
59 void clear();
60
62 int dataWords() const;
63
65 void setHeader(int wordId, int version, int format, int seqno, int crate,
66 int module, int slices2, int slices1);
67
68 // Return unpacked header data
69 int wordId() const;
70 int version() const;
71 int format() const;
72 int seqno() const;
73 int slice() const;
74 int crate() const;
75 int module() const;
76 int slices2() const;
77 int slices1() const;
78
79 // Return unpacked error status data
80 uint32_t failingBCN() const;
81 bool glinkTimeout() const;
82 bool glinkDown() const;
83 bool upstreamError() const;
84 bool daqOverflow() const;
85 bool bcnMismatch() const;
86 bool glinkProtocol() const;
87 bool glinkParity() const;
88
90 uint32_t subStatus() const;
91
93 void setBunchCrossing(int bc);
95 int bunchCrossing() const;
96
98 // (OFFLINE_FRAGMENTS_NAMESPACE::PointerType = uint32_t*)
102
104 // (FullEventAssembler<L1CaloSrcIdMap>::RODDATA = vector<uint32_t>)
106
108 void setStatus(uint32_t failingBCN, bool glinkTimeout, bool glinkDown,
109 bool upstreamError, bool daqOverflow, bool bcnMismatch,
110 bool glinkProtocol, bool glinkParity);
111
113 void setDaqOverflow(int bit = 1);
115 void setGlinkParity(int bit = 1);
116
118 static SubBlockWordType wordType(uint32_t word);
120 static int wordId(uint32_t word);
122 static int format(uint32_t word);
124 static int seqno(uint32_t word);
126 static int module(uint32_t word);
127
128 // Unpacking error code. Set by derived classes
130 void setUnpackErrorCode(int code);
132 int unpackErrorCode() const;
134 std::string unpackErrorMsg() const;
135
136 // Packing utilities
138 static int minBits(uint32_t datum) ;
140 static int parityBit(int init, uint32_t datum, int nbits) ;
142 void packer(uint32_t datum, int nbits);
144 void packerFlush();
146 void setStreamed();
148 uint32_t unpacker(int nbits);
150 void unpackerInit();
152 bool unpackerSuccess() const;
153
154 // Neutral format packing utilities
156 void packerNeutral(int pin, uint32_t datum, int nbits);
158 void packerNeutralParity(int pin);
160 uint32_t unpackerNeutral(int pin, int nbits);
162 bool unpackerNeutralParityError(int pin);
163
164 private:
165 // Constants.
166 // Header and status ID
167 static const int s_headerBit = 30;
168 static const int s_statusBit = 28;
169 static const uint32_t s_headerMask = 0x3;
170 static const uint32_t s_statusMask = 0x1;
171 static const uint32_t s_headerVal = 0x3;
172 static const uint32_t s_statusVal = 0x1;
173 // Header word data positions and masks
174 static const int s_wordIdBit = 28;
175 static const int s_versionBit = 25;
176 static const int s_formatBit = 22;
177 static const int s_seqnoBit = 16;
178 static const int s_crateBit = 12;
179 static const int s_moduleBit = 8;
180 static const int s_slices2Bit = 3;
181 static const int s_slices1Bit = 0;
182 static const uint32_t s_wordIdMask = 0xf;
183 static const uint32_t s_versionMask = 0x7;
184 static const uint32_t s_formatMask = 0x7;
185 static const uint32_t s_seqnoMask = 0x3f;
186 static const uint32_t s_crateMask = 0xf;
187 static const uint32_t s_moduleMask = 0xf;
188 static const uint32_t s_slices2Mask = 0x1f;
189 static const uint32_t s_slices1Mask = 0x7;
190 // Status word data positions and masks
191 static const int s_failingBcnBit = 22;
192 static const int s_glinkTimeoutBit = 7;
193 static const int s_glinkDownBit = 6;
194 static const int s_upstreamErrorBit = 4;
195 static const int s_daqOverflowBit = 3;
196 static const int s_bcnMismatchBit = 2;
197 static const int s_glinkProtocolBit = 1;
198 static const int s_glinkParityBit = 0;
199 static const uint32_t s_failingBcnMask = 0x3f;
200 // Packing word sizes and masks
201 static const int s_maxWordBits = 32;
202 static const int s_maxStreamedBits = 31;
203 static const uint32_t s_maxWordMask = 0xffffffff;
204 static const uint32_t s_maxStreamedMask = 0x7fffffff;
205 // Neutral packing
206 static const int s_maxPins = 20;
207 static const uint32_t s_glinkDavSet = 0x400000;
208
210 uint32_t m_header{};
212 uint32_t m_trailer{};
217 // Used for bit-packing
218 uint32_t m_bitword{};
221 uint32_t m_maxMask{};
223 std::vector<uint32_t>::const_iterator m_dataPos{};
224 std::vector<uint32_t>::const_iterator m_dataPosEnd{};
225 // Used for neutral bit packing
226 std::vector<int> m_currentPinBit;
227 std::vector<int> m_oddParity;
231 std::vector<uint32_t> m_data;
232
233};
234
235inline int ZdcSubBlock::dataWords() const
236{
237 return m_dataWords;
238}
239
240inline int ZdcSubBlock::wordId() const
241{
242 return (m_header >> s_wordIdBit) & s_wordIdMask;
243}
244
245inline int ZdcSubBlock::version() const
246{
247 return (m_header >> s_versionBit) & s_versionMask;
248}
249
250inline int ZdcSubBlock::format() const
251{
252 return (m_header >> s_formatBit) & s_formatMask;
253}
254
255inline int ZdcSubBlock::seqno() const
256{
257 return (m_header >> s_seqnoBit) & s_seqnoMask;
258}
259
260inline int ZdcSubBlock::slice() const
261{
262 return seqno();
263}
264
265inline int ZdcSubBlock::crate() const
266{
267 return (m_header >> s_crateBit) & s_crateMask;
268}
269
270inline int ZdcSubBlock::module() const
271{
272 return (m_header >> s_moduleBit) & s_moduleMask;
273}
274
275inline int ZdcSubBlock::slices2() const
276{
277 return (m_header >> s_slices2Bit) & s_slices2Mask;
278}
279
280inline int ZdcSubBlock::slices1() const
281{
282 return (m_header >> s_slices1Bit) & s_slices1Mask;
283}
284
285inline uint32_t ZdcSubBlock::failingBCN() const
286{
288}
289
290inline bool ZdcSubBlock::glinkTimeout() const
291{
292 return m_trailer & (0x1 << s_glinkTimeoutBit);
293}
294
295inline bool ZdcSubBlock::glinkDown() const
296{
297 return m_trailer & (0x1 << s_glinkDownBit);
298}
299
300inline bool ZdcSubBlock::upstreamError() const
301{
302 return m_trailer & (0x1 << s_upstreamErrorBit);
303}
304
305inline bool ZdcSubBlock::daqOverflow() const
306{
307 return m_trailer & (0x1 << s_daqOverflowBit);
308}
309
310inline bool ZdcSubBlock::bcnMismatch() const
311{
312 return m_trailer & (0x1 << s_bcnMismatchBit);
313}
314
315inline bool ZdcSubBlock::glinkProtocol() const
316{
317 return m_trailer & (0x1 << s_glinkProtocolBit);
318}
319
320inline bool ZdcSubBlock::glinkParity() const
321{
322 return m_trailer & (0x1 << s_glinkParityBit);
323}
324
325inline uint32_t ZdcSubBlock::subStatus() const
326{
327 return m_trailer;
328}
329
330inline void ZdcSubBlock::setBunchCrossing(const int bc)
331{
332 if (bc) m_bunchCrossing = bc;
333}
334
336{
337 return m_bunchCrossing;
338}
339
340inline void ZdcSubBlock::setUnpackErrorCode(const int code)
341{
342 m_unpackError = code;
343}
344
346{
347 return m_unpackError;
348}
349
355
357{
358 return m_unpackerFlag;
359}
360
361#endif
std::vector< uint32_t > RODDATA
ROD data as a vector of unsigned int.
static int parityBit(int init, uint32_t datum, int nbits)
Return the parity bit for given data.
uint32_t unpackerNeutral(int pin, int nbits)
Unpack given number of bits of neutral data for given pin.
bool glinkDown() const
int slices2() const
static const int s_versionBit
int version() const
static const int s_failingBcnBit
bool glinkProtocol() const
static const int s_seqnoBit
OFFLINE_FRAGMENTS_NAMESPACE::PointerType read(const OFFLINE_FRAGMENTS_NAMESPACE::PointerType beg, const OFFLINE_FRAGMENTS_NAMESPACE::PointerType end)
Input complete packed sub-block from ROD array.
void unpackerInit()
Initialise unpacker.
uint32_t unpacker(int nbits)
Unpack given number of bits of data.
bool glinkTimeout() const
static const uint32_t s_headerVal
int bunchCrossing() const
Return the Bunch Crossing number (neutral format only)
static const int s_maxStreamedBits
static const uint32_t s_statusVal
static const int s_glinkParityBit
static const int s_maxWordBits
int m_dataWords
Current number of data words.
void packerNeutral(int pin, uint32_t datum, int nbits)
Pack given neutral data from given pin.
static const int s_formatBit
static const uint32_t s_glinkDavSet
@ UNPACK_COMPRESSION_VERSION
Definition ZdcSubBlock.h:49
@ UNPACK_COMPRESSION_SLICES
Definition ZdcSubBlock.h:50
@ UNPACK_DATA_TRUNCATED
Definition ZdcSubBlock.h:51
int wordId() const
uint32_t m_header
Sub-Block Header.
std::vector< int > m_oddParity
int dataWords() const
Return number of data words.
static const int s_glinkDownBit
static const int s_daqOverflowBit
bool unpackerSuccess() const
Return unpacker success flag.
static int minBits(uint32_t datum)
Return the minimum number of bits needed for given data.
static const uint32_t s_formatMask
void write(FullEventAssembler< ZdcSrcIdMap >::RODDATA *theROD) const
Output complete packed sub-block to ROD vector.
int format() const
static const uint32_t s_maxWordMask
int slices1() const
uint32_t m_bitword
void setDaqOverflow(int bit=1)
Set DAQ FIFO Overflow bit in Sub-status word.
uint32_t subStatus() const
Return Sub-status word.
static const int s_maxPins
uint32_t failingBCN() const
void setUnpackErrorCode(int code)
Set the unpacking error code.
void setHeader(int wordId, int version, int format, int seqno, int crate, int module, int slices2, int slices1)
Store header data.
bool unpackerNeutralParityError(int pin)
Unpack and test G-Link parity bit for given pin.
int slice() const
static const uint32_t s_maxStreamedMask
int unpackErrorCode() const
Return the unpacking error code.
bool bcnMismatch() const
static const uint32_t s_failingBcnMask
int crate() const
static const int s_bcnMismatchBit
std::vector< uint32_t > m_data
Sub-Block data.
bool glinkParity() const
static const int s_statusBit
void packer(uint32_t datum, int nbits)
Pack given data into given number of bits.
static const uint32_t s_statusMask
bool m_unpackerFlag
std::string unpackErrorMsg() const
Return the unpacking error message for printing.
int m_unpackError
Unpacking error code.
void setBunchCrossing(int bc)
Set the Bunch Crossing number (neutral format only)
void packerNeutralParity(int pin)
Pack current G-Link parity bit for given pin.
static const int s_crateBit
static const int s_upstreamErrorBit
void setStatus(uint32_t failingBCN, bool glinkTimeout, bool glinkDown, bool upstreamError, bool daqOverflow, bool bcnMismatch, bool glinkProtocol, bool glinkParity)
Store error status trailer.
static const int s_wordIdBit
static const uint32_t s_versionMask
static const int s_headerBit
ZdcSubBlock.cxx this is a base class derived (copyed) from LVL1 I do not think we need this this way;...
static const uint32_t s_slices1Mask
static const int s_slices1Bit
std::vector< uint32_t >::const_iterator m_dataPos
void packerFlush()
Flush the current data word padded with zeros.
void setStreamed()
Set continuous bit streaming for compressed formats.
void clear()
Clear all data.
bool upstreamError() const
static SubBlockWordType wordType(uint32_t word)
Word identification.
void setGlinkParity(int bit=1)
Set G-Link Parity bit in Sub-status word.
static const uint32_t s_seqnoMask
int module() const
uint32_t m_maxMask
static const uint32_t s_headerMask
bool daqOverflow() const
static const uint32_t s_crateMask
static const int s_moduleBit
int seqno() const
static const uint32_t s_wordIdMask
static const int s_slices2Bit
std::vector< int > m_currentPinBit
static const uint32_t s_slices2Mask
static const int s_glinkTimeoutBit
static const int s_glinkProtocolBit
std::vector< uint32_t >::const_iterator m_dataPosEnd
int m_bunchCrossing
Bunch Crossing number (neutral format only)
uint32_t m_trailer
Sub-Block Status Trailer.
static const uint32_t s_moduleMask
const DataType * PointerType
Definition RawEvent.h:25