5#ifndef PIXELRAWDATABYTESTREAM_PIXEL_RODDECODER_H
6#define PIXELRAWDATABYTESTREAM_PIXEL_RODDECODER_H
12#include "GaudiKernel/ServiceHandle.h"
13#include "eformat/SourceIdentifier.h"
33 const IInterface* parent ) ;
44 std::vector<IdentifierHash>* vecHash,
const EventContext& ctx)
const override;
46 uint32_t
getDataType(
unsigned int rawDataWord,
bool link_start)
const;
55 uint32_t
decodeBCID(
const uint32_t word)
const;
56 uint32_t
decodeL1ID(
const uint32_t word)
const;
63 uint32_t
decodeRow(
const uint32_t word,
bool isIBLorDBM )
const;
64 uint32_t
decodeColumn(
const uint32_t word,
bool isIBLorDBM)
const;
65 uint32_t
decodeToT(
const uint32_t word,
bool isIBLorDBM )
const;
73 uint32_t
decodeFE(
const uint32_t word)
const;
107 bool CheckLinkStart(
const bool Link_start,
const int rodId,
const unsigned int mLink,
const unsigned int mBCID,
const unsigned int mLVL1ID,
const int LVL1A);
109 uint32_t
treatmentFEFlagInfo(
unsigned int serviceCode,
unsigned int serviceCodeCounter)
const;
120 BooleanProperty
m_checkDuplicatedPixel{
this,
"CheckDuplicatedPixel",
true,
"Check duplicated pixels in fillCollection method"};
138 {
this,
"PixelReadoutManager",
"PixelReadoutManager",
"Pixel readout manager" };
141 {
this,
"PixelCablingCondData",
"PixelCablingCondData",
"Pixel cabling key"};
144 {
this,
"PixelHitDiscCnfgData",
"PixelHitDiscCnfgData",
"Pixel FEI4 HitDiscConfig key"};
164 unsigned int getLocalFEI4(
const uint32_t fe,
const uint64_t onlineId)
const;
169 std::array<uint64_t, PixelRodDecoder::ERROR_CONTAINER_MAX> &bsErrWord,
172 const char *error_description)
const;
EventContainers::IIdentifiableCont< InDetRawDataCollection< PixelRDORawData > > IPixelRDO_Container
IDC like storage for BS errors, TODO, customise implementation further so that we store int rather th...
This is an Identifier helper class for the Pixel subdetector.
std::atomic_uint m_numLVL1IDErrors
uint32_t extractFefromLinkNum(const uint32_t linkNum) const
std::atomic_uint m_numPreambleErrors
InDetRawDataCollection< PixelRDORawData > PixelRawCollection
std::atomic_uint m_numLinkMaskedByPPC
std::atomic_uint m_numTimeOutErrors
std::atomic_uint m_numDecodingErrors
const unsigned m_maxNumBCIDWarnings
uint32_t getDataType(unsigned int rawDataWord, bool link_start) const
uint32_t decodeTrailerBitflips(const uint32_t word) const
bool m_is_dbm_module
if the flag is set to true appropriate bits are set in event info
uint32_t decodeTrailerErrors_IBL(const uint32_t word) const
StatusCode fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment *robFrag, IPixelRDO_Container *rdoIdc, IDCInDetBSErrContainer &decodingErrors, std::vector< IdentifierHash > *vecHash, const EventContext &ctx) const override
void propagateROBErrorsToModules(const PixelCablingCondData *pixCabling, uint32_t robId, std::array< uint64_t, PixelRodDecoder::ERROR_CONTAINER_MAX > &bsErrWord, IDCInDetBSErrContainer &decodingErrors, PixelByteStreamErrors::PixelErrorsEnum error_code, const char *error_description) const
std::atomic_uint m_numBCIDWarnings
ServiceHandle< InDetDD::IPixelReadoutManager > m_pixelReadout
StatusCode finalize() override
StatusCode updateEventInfoIfEventCorrupted(bool isCorrupted) const
checks if all FEs have sent the same number of headers, if not, generate warning message
uint32_t decodeSkippedTrigTrailer_IBL(const uint32_t word) const
uint32_t decodeHeaderErrors(const uint32_t word) const
uint32_t decodeCondensedModeBit_IBL(const uint32_t word) const
std::atomic_uint m_numBCIDErrors
std::atomic_uint m_numDuplicatedPixels
uint32_t decodeFeI4Bflag_IBL(const uint32_t word) const
uint32_t treatmentFEFlagInfo(unsigned int serviceCode, unsigned int serviceCodeCounter) const
static constexpr size_t ERROR_CONTAINER_MAX
uint32_t decodeMCCFlags(const uint32_t word) const
bool thisRdoIsUnique(const Identifier &pixelRdo, std::unordered_set< Identifier > &pixelRdosSeenSoFar) const
get local FEI4
uint32_t decodeRow(const uint32_t word, bool isIBLorDBM) const
uint32_t decodeModule_IBL(const uint32_t word) const
void checkUnequalNumberOfHeaders(const unsigned int nFragmentsPerFE[8], uint32_t robId) const
if the check duplicated RDO flag is true, check that this RDO is unique (returns true if unique)
StatusCode initialize() override
uint32_t decodeFE(const uint32_t word) const
std::atomic_uint m_numLimitError
SG::ReadCondHandleKey< PixelHitDiscCnfgData > m_condHitDiscCnfgKey
uint32_t decodeTrailerErrors(const uint32_t word) const
std::atomic_uint m_numGenWarnings
SG::ReadCondHandleKey< PixelCablingCondData > m_condCablingKey
const unsigned m_maxNumGenWarnings
uint32_t decodeServiceCode_IBL(const uint32_t word) const
std::atomic_uint m_numFlaggedErrors
const PixelID * m_pixel_id
uint32_t decodeColumn(const uint32_t word, bool isIBLorDBM) const
uint32_t decodeToT(const uint32_t word, bool isIBLorDBM) const
uint32_t decodeModule(const uint32_t word) const
unsigned int getLocalFEI4(const uint32_t fe, const uint64_t onlineId) const
in case of invalid ROB fragments set corresponding error flags in all linked modules.
uint32_t decodeL1IDskip(const uint32_t word) const
uint32_t decodeFEFlags2(const uint32_t word) const
uint32_t decodeLinkNumHit_IBL(const uint32_t word) const
uint32_t decodeL1ID_IBL(const uint32_t word) const
uint32_t decodeBcidTrailer_IBL(const uint32_t word) const
std::atomic_uint m_numRODErrors
uint32_t decodeRawData(const uint32_t word) const
uint32_t decodeServiceCodeCounter_IBL(const uint32_t word) const
uint32_t decodeBCID_IBL(const uint32_t word) const
uint32_t extractSLinkfromLinkNum(const uint32_t linkNum) const
uint32_t decodeLinkNumFEFlag_IBL(const uint32_t word) const
std::atomic_uint m_numTrailerErrors
std::atomic_uint m_numDisabledFEErrors
bool CheckLinkStart(const bool Link_start, const int rodId, const unsigned int mLink, const unsigned int mBCID, const unsigned int mLVL1ID, const int LVL1A)
std::atomic_uint m_numInvalidIdentifiers
PixelRodDecoder(const std::string &type, const std::string &name, const IInterface *parent)
std::atomic_uint m_masked_errors
BooleanProperty m_checkDuplicatedPixel
bool checkDataWordsCorruption(uint32_t word) const
checks if data words do not look like header & trailer markers, return true if so,...
uint32_t decodeL1ID(const uint32_t word) const
uint32_t decodeLinkNumTrailer_IBL(const uint32_t word) const
uint32_t decodeBCID(const uint32_t word) const
eformat::ROBFragment< PointerType > ROBFragment
PixelErrorsEnum
< Possible errors in pixel data decoding