ATLAS Offline Software
Loading...
Searching...
No Matches
ZdcL1CaloSubBlock.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRIGT1CALOBYTESTREAM_ZDCL1CALOSUBBLOCK_H
6#define TRIGT1CALOBYTESTREAM_ZDCL1CALOSUBBLOCK_H
7
8#include <stdint.h>
9#include <vector>
10
12
13// PAS 8/14/15 not needed for compilation
14//#include "L1CaloSrcIdMap.h"
15
16//namespace LVL1BS {
17
24
26
27 public:
31 // Errors detected before unpacking
38 // Errors detected during unpacking
44
47
49 void clear();
50
52 int dataWords() const;
53
55 void setHeader(int wordId, int version, int format, int seqno, int crate,
56 int module, int slices2, int slices1);
57
58 // Return unpacked header data
59 int wordId() const;
60 int version() const;
61 int format() const;
62 int seqno() const;
63 int slice() const;
64 int crate() const;
65 int module() const;
66 int slices2() const;
67 int slices1() const;
68
69 // Return unpacked error status data
70 uint32_t failingBCN() const;
71 bool glinkTimeout() const;
72 bool glinkDown() const;
73 bool upstreamError() const;
74 bool daqOverflow() const;
75 bool bcnMismatch() const;
76 bool glinkProtocol() const;
77 bool glinkParity() const;
78
80 uint32_t subStatus() const;
81
83 void setBunchCrossing(int bc);
85 int bunchCrossing() const;
86
88 // (OFFLINE_FRAGMENTS_NAMESPACE::PointerType = uint32_t*)
92
94 // (FullEventAssembler<L1CaloSrcIdMap>::RODDATA = vector<uint32_t>)
95 // PAS 8/14/15 Not needed for compilation
96 //void write(FullEventAssembler<L1CaloSrcIdMap>::RODDATA* theROD) const;
97
99 void setStatus(uint32_t failingBCN, bool glinkTimeout, bool glinkDown,
100 bool upstreamError, bool daqOverflow, bool bcnMismatch,
101 bool glinkProtocol, bool glinkParity);
102
104 void setDaqOverflow(int bit = 1);
106 void setGlinkParity(int bit = 1);
107
109 static SubBlockWordType wordType(uint32_t word);
111 static int wordId(uint32_t word);
113 static int version(uint32_t word);
115 static int format(uint32_t word);
117 static int seqno(uint32_t word);
119 static int module(uint32_t word);
120
121 // Unpacking error code. Set by derived classes
123 void setUnpackErrorCode(int code);
125 int unpackErrorCode() const;
127 std::string unpackErrorMsg() const;
128
129 // Packing utilities
131 int minBits(uint32_t datum) const;
133 int parityBit(int init, uint32_t datum, int nbits) const;
135 void packer(uint32_t datum, int nbits);
139 void setStreamed();
141 uint32_t unpacker(int nbits);
142 uint32_t unpacker(int nbits, int align);
146 bool unpackerSuccess() const;
147
148 // Neutral format packing utilities
150 void packerNeutral(int pin, uint32_t datum, int nbits);
152 void packerNeutralParity(int pin);
154 uint32_t unpackerNeutral(int pin, int nbits);
158 int currentPinBit(int pin) const;
159
160 private:
161 // Constants.
162 // Header and status ID
163 static const int s_headerBit = 30;
164 static const int s_statusBit = 28;
165 static const uint32_t s_headerMask = 0x3;
166 static const uint32_t s_statusMask = 0x1;
167 static const uint32_t s_headerVal = 0x3;
168 static const uint32_t s_statusVal = 0x1;
169 // First non-PPM crate
170 static const int s_ppmCrates = 8;
171 // Header word data positions and masks
172 static const int s_wordIdBit = 28;
173 static const int s_versionBit = 25;
174 static const int s_formatBit = 22;
175 static const int s_seqnoBit = 16;
176 static const int s_crateBit = 12;
177 static const int s_moduleBit = 8;
178 static const int s_slices2Bit = 3;
179 static const int s_slices1Bit = 0;
180 static const uint32_t s_wordIdMask = 0xf;
181 static const uint32_t s_versionMask = 0x7;
182 static const uint32_t s_formatMask = 0x7;
183 static const uint32_t s_seqnoMask = 0x3f;
184 static const uint32_t s_crateMask = 0xf;
185 static const uint32_t s_moduleMask = 0xf;
186 static const uint32_t s_slices2Mask = 0x1f;
187 static const uint32_t s_slices1Mask = 0x7;
188 // Status word data positions and masks
189 static const int s_failingBcnBit = 22;
190 static const int s_glinkTimeoutBit = 7;
191 static const int s_glinkDownBit = 6;
192 static const int s_upstreamErrorBit = 4;
193 static const int s_daqOverflowBit = 3;
194 static const int s_bcnMismatchBit = 2;
195 static const int s_glinkProtocolBit = 1;
196 static const int s_glinkParityBit = 0;
197 static const uint32_t s_failingBcnMask = 0x3f;
198 // Packing word sizes and masks
199 static const int s_maxWordBits = 32;
200 static const int s_maxStreamedBits = 31;
201 static const uint32_t s_maxWordMask = 0xffffffff;
202 static const uint32_t s_maxStreamedMask = 0x7fffffff;
203 // Neutral packing
204 static const int s_maxPins = 20;
205 static const uint32_t s_glinkDavSet = 0x400000;
206
208 uint32_t m_header;
210 uint32_t m_trailer;
215 // Used for bit-packing
216 uint32_t m_bitword;
219 uint32_t m_maxMask;
221 std::vector<uint32_t>::const_iterator m_dataPos;
222 std::vector<uint32_t>::const_iterator m_dataPosEnd;
223 // Used for neutral bit packing
224 std::vector<int> m_currentPinBit;
225 std::vector<int> m_oddParity;
229 std::vector<uint32_t> m_data;
231 std::vector<uint32_t> m_unpackingMasks;
232
233};
234
236{
237 return m_dataWords;
238}
239
241{
242 return (m_header >> s_wordIdBit) & s_wordIdMask;
243}
244
246{
247 return (m_header >> s_versionBit) & s_versionMask;
248}
249
251{
252 return (m_header >> s_formatBit) & s_formatMask;
253}
254
255inline int ZdcL1CaloSubBlock::seqno() const
256{
257 return (m_header >> s_seqnoBit) & s_seqnoMask;
258}
259
260inline int ZdcL1CaloSubBlock::slice() const
261{
262 return seqno();
263}
264
265inline int ZdcL1CaloSubBlock::crate() const
266{
267 return (m_header >> s_crateBit) & s_crateMask;
268}
269
271{
272 return (m_header >> s_moduleBit) & s_moduleMask;
273}
274
276{
277 return (m_header >> s_slices2Bit) & s_slices2Mask;
278}
279
281{
282 return (m_header >> s_slices1Bit) & s_slices1Mask;
283}
284
285inline uint32_t ZdcL1CaloSubBlock::failingBCN() const
286{
288}
289
291{
292 return m_trailer & (0x1 << s_glinkTimeoutBit);
293}
294
296{
297 return m_trailer & (0x1 << s_glinkDownBit);
298}
299
301{
302 return m_trailer & (0x1 << s_upstreamErrorBit);
303}
304
306{
307 return m_trailer & (0x1 << s_daqOverflowBit);
308}
309
311{
312 return m_trailer & (0x1 << s_bcnMismatchBit);
313}
314
316{
317 return m_trailer & (0x1 << s_glinkProtocolBit);
318}
319
321{
322 return m_trailer & (0x1 << s_glinkParityBit);
323}
324
325inline uint32_t ZdcL1CaloSubBlock::subStatus() const
326{
327 return m_trailer;
328}
329
330inline void ZdcL1CaloSubBlock::setBunchCrossing(const int bc)
331{
332 if (bc) m_bunchCrossing = bc;
333}
334
336{
337 return m_bunchCrossing;
338}
339
340inline void ZdcL1CaloSubBlock::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
361inline int ZdcL1CaloSubBlock::currentPinBit(int pin) const
362{
363 return m_currentPinBit[pin];
364}
365
366//} // end namespace
367
368#endif
uint32_t unpacker(int nbits)
Unpack given number of bits of data.
static const int s_crateBit
static SubBlockWordType wordType(uint32_t word)
Word identification.
bool unpackerNeutralParityError(int pin)
Unpack and test G-Link parity bit for given pin.
std::vector< uint32_t >::const_iterator m_dataPosEnd
void packer(uint32_t datum, int nbits)
Pack given data into given number of bits.
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.
uint32_t m_trailer
Sub-Block Status Trailer.
static int seqno(uint32_t word)
Return seqno field from given header word.
static const uint32_t s_formatMask
std::vector< uint32_t > m_data
Sub-Block data.
static const int s_maxStreamedBits
int bunchCrossing() const
Return the Bunch Crossing number (neutral format only)
void setBunchCrossing(int bc)
Set the Bunch Crossing number (neutral format only)
static const uint32_t s_maxWordMask
static int wordId(uint32_t word)
Return wordID field from given header word.
void setUnpackErrorCode(int code)
Set the unpacking error code.
static const int s_formatBit
void packerNeutral(int pin, uint32_t datum, int nbits)
Pack given neutral data from given pin.
static const uint32_t s_glinkDavSet
void setStreamed()
Set continuous bit streaming for compressed formats.
static const uint32_t s_moduleMask
void unpackerInit()
Initialise unpacker.
static const int s_slices1Bit
static const uint32_t s_statusMask
static const uint32_t s_headerMask
static const int s_slices2Bit
static const uint32_t s_crateMask
std::vector< int > m_oddParity
static const int s_glinkTimeoutBit
int m_bunchCrossing
Bunch Crossing number (neutral format only)
static const int s_statusBit
static const int s_bcnMismatchBit
std::string unpackErrorMsg() const
Return the unpacking error message for printing.
int parityBit(int init, uint32_t datum, int nbits) const
Return the parity bit for given data.
static const int s_maxWordBits
static const uint32_t s_seqnoMask
static const int s_headerBit
static const int s_daqOverflowBit
static int format(uint32_t word)
Return data format from given header word.
static const int s_glinkParityBit
static const int s_ppmCrates
static const int s_seqnoBit
int unpackErrorCode() const
Return the unpacking error code.
bool unpackerSuccess() const
Return unpacker success flag.
int m_dataWords
Current number of data words.
static const int s_glinkProtocolBit
static const uint32_t s_headerVal
static const int s_failingBcnBit
int minBits(uint32_t datum) const
Return the minimum number of bits needed for given data.
static int version(uint32_t word)
Return version number from given header word.
void packerFlush()
Flush the current data word padded with zeros.
static const uint32_t s_wordIdMask
std::vector< int > m_currentPinBit
static const int s_moduleBit
void setGlinkParity(int bit=1)
Set G-Link Parity bit in Sub-status word.
static const int s_upstreamErrorBit
static const uint32_t s_slices2Mask
static const uint32_t s_maxStreamedMask
bool glinkTimeout() const
static const uint32_t s_versionMask
static const int s_maxPins
std::vector< uint32_t >::const_iterator m_dataPos
static int module(uint32_t word)
Return module field from given header word.
uint32_t unpacker(int nbits, int align)
void clear()
Clear all data.
uint32_t failingBCN() const
void setHeader(int wordId, int version, int format, int seqno, int crate, int module, int slices2, int slices1)
Store header data.
uint32_t unpackerNeutral(int pin, int nbits)
Unpack given number of bits of neutral data for given pin.
int m_unpackError
Unpacking error code.
int dataWords() const
Return number of data words.
uint32_t m_header
Sub-Block Header.
bool upstreamError() const
static const int s_versionBit
static const int s_wordIdBit
std::vector< uint32_t > m_unpackingMasks
Unpacking masks.
static const uint32_t s_failingBcnMask
bool glinkProtocol() const
void setDaqOverflow(int bit=1)
Set DAQ FIFO Overflow bit in Sub-status word.
void packerNeutralParity(int pin)
Pack current G-Link parity bit for given pin.
int currentPinBit(int pin) const
Return current pin bit for given pin.
uint32_t subStatus() const
Return Sub-status word.
static const uint32_t s_slices1Mask
void setStatus(uint32_t failingBCN, bool glinkTimeout, bool glinkDown, bool upstreamError, bool daqOverflow, bool bcnMismatch, bool glinkProtocol, bool glinkParity)
Output complete packed sub-block to ROD vector.
static const int s_glinkDownBit
static const uint32_t s_statusVal
const DataType * PointerType
Definition RawEvent.h:25