110 word |= (
module & s_moduleMask) << s_moduleBit;
126 for (; pos != pose; ++pos)
128 const uint32_t word = *pos;
144 const int id =
wordId(word);
151 else if (
wordId() == 0xc) badId = (((
id & 0xc) != 0x4) &&
152 ((
id & 0xc) != 0x8));
154 else badId = ((
id & 0xc) != 0);
169 std::vector<uint32_t>::const_iterator pos;
172 theROD->push_back(*pos);
211 else setStatus(0,
false,
false,
false,
true,
false,
false,
false);
222 else setStatus(0,
false,
false,
false,
false,
false,
false,
true);
237 msg =
"Unsupported Data Version";
240 msg =
"Unsupported Data Format";
243 msg =
"Unsupported Compression Version";
246 msg =
"Unsupported Number of Slices for Compression Version";
249 msg =
"Premature End of Sub-block Data";
252 msg =
"Excess Data in Sub-block";
255 msg =
"Invalid Source ID in Sub-block Data";
258 msg =
"Excess TOBs in Sub-block Data";
261 msg =
"Invalid word ID in Sub-block Data";
264 msg =
"Unknown Error Code";
276 const int maxBits = 32;
278 for (
int i = 0; i < maxBits; ++i)
292 const int nbits)
const
296 for (
int bit = 0; bit < nbits; ++bit) parity ^= (datum >> bit) & 0x1;
317 m_bitword = (datum & mask) >> (nbits - bitsLeft);
355 int nbitsDone = nbits;
375 const int bitsLeft = nbits - nbitsDone;
416 if (pin >= 0 && pin < s_maxPins && nbits > 0)
423 for (
int bit = 0; bit < nbits; ++bit)
448 if (pin >= 0 && pin < s_maxPins && nbits > 0
451 for (
int bit = 0; bit < nbits; ++bit)
472 error = !(bit == parity);
std::vector< uint32_t > RODDATA
ROD data as a vector of unsigned int.
static const int s_maxWordBits
uint32_t m_trailer
Sub-Block Status Trailer.
void setDaqOverflow(int bit=1)
Set DAQ FIFO Overflow bit in Sub-status word.
static const uint32_t s_failingBcnMask
void setGlinkParity(int bit=1)
Set G-Link Parity bit in Sub-status word.
static const int s_glinkProtocolBit
static const uint32_t s_wordIdMask
void packer(uint32_t datum, int nbits)
Pack given data into given number of bits.
void setStatus(uint32_t failingBCN, bool glinkTimeout, bool glinkDown, bool upstreamError, bool daqOverflow, bool bcnMismatch, bool glinkProtocol, bool glinkParity)
Store error status trailer.
@ UNPACK_COMPRESSION_VERSION
@ UNPACK_COMPRESSION_SLICES
static const int s_formatBit
std::vector< int > m_oddParity
static const int s_headerBit
std::vector< uint32_t >::const_iterator m_dataPos
static const uint32_t s_crateMask
std::vector< uint32_t > m_data
Sub-Block data.
bool upstreamError() const
static const int s_maxPins
int parityBit(int init, uint32_t datum, int nbits) const
Return the parity bit for given data.
int m_bunchCrossing
Bunch Crossing number (neutral format only)
uint32_t unpacker(int nbits)
Unpack given number of bits of data.
static const int s_upstreamErrorBit
static const int s_glinkTimeoutBit
static const uint32_t s_formatMask
static const int s_glinkParityBit
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.
uint32_t failingBCN() const
static const uint32_t s_maxWordMask
static const uint32_t s_seqnoMask
static const uint32_t s_headerVal
static const int s_ppmCrates
static SubBlockWordType wordType(uint32_t word)
Word identification.
void clear()
Clear all data.
static const uint32_t s_glinkDavSet
static const uint32_t s_slices1Mask
static const int s_slices2Bit
static const int s_crateBit
bool glinkTimeout() const
static const int s_versionBit
void packerNeutralParity(int pin)
Pack current G-Link parity bit for given pin.
void write(FullEventAssembler< L1CaloSrcIdMap >::RODDATA *theROD) const
Output complete packed sub-block to ROD vector.
static const int s_daqOverflowBit
std::vector< uint32_t >::const_iterator m_dataPosEnd
std::vector< int > m_currentPinBit
static const int s_seqnoBit
std::vector< uint32_t > m_unpackingMasks
Unpacking masks.
static const int s_moduleBit
static const uint32_t s_statusVal
void packerFlush()
Flush the current data word padded with zeros.
static const int s_failingBcnBit
uint32_t unpackerNeutral(int pin, int nbits)
Unpack given number of bits of neutral data for given pin.
static const int s_statusBit
uint32_t m_header
Sub-Block Header.
static const uint32_t s_maxStreamedMask
static const int s_maxStreamedBits
static const uint32_t s_moduleMask
void unpackerInit()
Initialise unpacker.
static const int s_slices1Bit
std::string unpackErrorMsg() const
Return the unpacking error message for printing.
int minBits(uint32_t datum) const
Return the minimum number of bits needed for given data.
int m_dataWords
Current number of data words.
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.
static const int s_wordIdBit
int m_unpackError
Unpacking error code.
void packerNeutral(int pin, uint32_t datum, int nbits)
Pack given neutral data from given pin.
static const uint32_t s_versionMask
static const uint32_t s_statusMask
static const uint32_t s_headerMask
static const int s_bcnMismatchBit
static const uint32_t s_slices2Mask
bool glinkProtocol() const
static const int s_glinkDownBit
const DataType * PointerType