135 ATH_MSG_VERBOSE(
"-------------------------------------------------------------------------------------------------------------");
141 uint64_t onlineId(0);
142 bool isIBLModule =
false;
143 bool isDBMModule =
false;
144 uint32_t rodId = robFrag->rod_source_id();
145 uint32_t robId = robFrag->rob_source_id();
146 uint32_t robBCID = robFrag->rod_bc_id();
147 if (
isIBL( robId ) && robId != rodId ) {
148 generalwarning(
"Discrepancy in IBL SourceId: ROBID 0x" << std::hex << robId <<
" unequal to RODID 0x" << rodId);
151 std::unique_ptr<SG::ReadCondHandle<PixelHitDiscCnfgData> > pixHitDiscCnfg;
152 unsigned int errorRecoverable = 0;
153 uint32_t serviceCodeCounter = 0;
154 uint32_t serviceCode = 0;
160 std::array<uint64_t, PixelRodDecoder::ERROR_CONTAINER_MAX> bsErrWord{};
162 if (robFrag->nstatus()!=0) {
163 const uint32_t* rob_status;
164 robFrag->status(rob_status);
167 ATH_MSG_DEBUG(
"ROB status word for robid 0x"<< std::hex << robId <<
" is non-zero 0x" << (*rob_status) << std::dec);
172 if ((*rob_status) & (0x1u << 27)) {
174 return StatusCode::RECOVERABLE;
176 if ((*rob_status) & (0x1u << 31)) {
178 return StatusCode::RECOVERABLE;
183 if (robFrag->rod_ndata() > robFrag->payload_size_word() && !robFrag->check_rod_noex(robFrag->rod_version() >> 16)) {
185 " invalid ROD fragment, invalid payload size");
186 return StatusCode::RECOVERABLE;
190 StatusCode
sc = StatusCode::SUCCESS;
193 unsigned int mBCID = 0x3FFF;
194 unsigned int mLVL1ID = 0x3FFF;
195 unsigned int mLink = 0x3FFF;
197 int offsetBCID_ROB_FE = 0x3FFF;
199 uint32_t linkNum_IBLheader = 0;
200 uint32_t fe_IBLheader = 0;
201 uint32_t linkNum_IBLword = 0;
202 uint32_t sLinkSourceId = 0;
203 uint32_t sLinkHeader = 0;
205 bool link_start =
false;
208 int mBCID_offset = -1;
209 unsigned int mBCID_max_pix = 0x100;
210 unsigned int mBCID_max_IBL = 0x400;
211 bool receivedCondensedWords =
false;
212 int countHitCondensedWords = 0;
214 bool are_4condensed_words =
false;
215 unsigned int prevBCID = 0x3FFF;
216 unsigned int prevLVL1ID = 0x3FFF;
217 uint32_t prevLinkNum = 99;
218 int prevOffsetBCID_ROB_FE = 0x3FFF;
219 unsigned int prevStartingBCID = 0x3FFF;
220 unsigned int nFragmentsPerFE[8] = {0};
225 robFrag->rod_data(vint);
228 eformat::helper::SourceIdentifier sid_rob(robId);
229 sLinkSourceId = (sid_rob.module_id()) & 0x000F;
230 if (
isIBL( robId ) && sLinkSourceId>0x3) {
231 generalwarning(
"In ROB 0x" << std::hex << robId <<
": IBL/DBM SLink number not in correct range (0-3): SLink = " << std::dec << sLinkSourceId);
234 bool corruptionError =
false;
236 std::unordered_set<Identifier> foundPixels;
239 const int nwords = robFrag->rod_ndata();
240 for (
int dataword_it = 0; dataword_it < nwords; ++dataword_it) {
241 const uint32_t rawDataWord = vint[dataword_it];
243 uint32_t word_type =
getDataType(rawDataWord, link_start);
245 serviceCodeCounter = 0;
248 int indexModule = -1;
251 if (offlineIdHash!=0xffffffff) {
255 isIBLModule =
isIBL(robId);
256 isDBMModule =
isDBM(robId);
260 if (isIBLModule || isDBMModule) {
268 indexModule =
static_cast<int>(offlineIdHash);
269 indexFE = (1+chFE)*
m_pixel_id->wafer_hash_max()+
static_cast<int>(offlineIdHash);
273 bool headerErr_decoding =
false;
274 bool headerErr_flagged =
false;
275 bool headerErr_preamble =
false;
276 bool headerErr_timeout =
false;
277 bool headerErr_lvl1id =
false;
278 bool headerErr_bcid =
false;
284 errorRecoverable = 0;
287 generalwarning(
"In ROB 0x" << std::hex << robId <<
": Unexpected link header found: 0x" << std::hex << rawDataWord <<
", data corruption" << std::dec);
289 headerErr_decoding =
true;
295 are_4condensed_words =
false;
296 receivedCondensedWords =
false;
299 countHitCondensedWords = 0;
301 isIBLModule =
isIBL(robId);
302 isDBMModule =
isDBM(robId);
305 prevLVL1ID = mLVL1ID;
308 prevOffsetBCID_ROB_FE = offsetBCID_ROB_FE;
310 if (isIBLModule || isDBMModule) {
312 ATH_MSG_VERBOSE(
"Decoding the IBL/DBM header word: 0x" << std::hex << rawDataWord << std::dec );
321 headerErr_flagged =
true;
324 mLink = fe_IBLheader;
326 if (sLinkHeader != sLinkSourceId) {
327 generalwarning(
"In ROB 0x" << std::hex << robId <<
", link 0x" << mLink <<
": SLink discrepancy: Slink number from SourceId = 0x" << std::hex << sLinkSourceId <<
", number from link header = 0x" << sLinkHeader << std::dec);
330 if (mLink == prevLinkNum) {
332 if (mLVL1ID != prevLVL1ID && prevLVL1ID != 0x3FFF) {
333 lvl1id_bcid_warning(
"In ROB 0x" << std::hex << robId <<
", FE: 0x" << mLink <<
": frame header LVL1ID differs from previous one (current frame LVL1ID = 0x" << mLVL1ID <<
", previous frame LVL1ID = 0x" << prevLVL1ID <<
")" << std::dec);
336 if ((mBCID != prevBCID + 1) && prevBCID != 0x3FFF && prevBCID != mBCID_max_IBL) {
337 lvl1id_bcid_warning(
"In ROB 0x" << std::hex << robId <<
", FE: 0x" << mLink <<
": frame header with non-consecutive BCID (current BCID = 0x" << mBCID <<
", previous BCID = 0x" << prevBCID <<
")" << std::dec);
341 offsetBCID_ROB_FE =
static_cast<int>(mBCID) - robBCID;
342 if (offsetBCID_ROB_FE != prevOffsetBCID_ROB_FE && (offsetBCID_ROB_FE != 0x3FFF && prevOffsetBCID_ROB_FE != 0x3FFF)) {
343 lvl1id_bcid_warning(
"In ROB 0x" << std::hex << robId <<
", FE: 0x" << mLink << std::dec <<
": FE header with unexpected BCID offset" <<
" wrt to ROB header (offset = " << offsetBCID_ROB_FE <<
", expected " << prevOffsetBCID_ROB_FE <<
" from ROB)");
346 if (mBCID != prevStartingBCID && prevStartingBCID != 0x3FFF) {
347 lvl1id_bcid_warning(
"In ROB 0x" << std::hex << robId <<
", FE: 0x" << mLink <<
": FE BCID starts at different value than in previous FE (current BCID = 0x" << mBCID <<
", prev starting BCID = 0x" << prevStartingBCID <<
")" << std::dec);
349 prevStartingBCID = mBCID;
352 if (mLink < 0x8) { ++nFragmentsPerFE[mLink]; }
355 ATH_MSG_VERBOSE(
"Decoding Pixel header word: 0x" << std::hex << rawDataWord << std::dec );
360 if ( headerError != 0 ) {
361 sc = StatusCode::RECOVERABLE;
362 errorRecoverable = errorRecoverable | (headerError << 20);
365 if (headerError & (1 << 3)) {
367 headerErr_preamble =
true;
369 if (headerError & (1 << 2)) {
371 headerErr_timeout =
true;
373 if (headerError & (1 << 1)) {
375 headerErr_lvl1id =
true;
377 if (headerError & (1 << 0)) {
379 headerErr_bcid =
true;
386 onlineId = pixCabling->getOnlineIdFromRobId(robId, mLink);
388 generalwarning(
"In ROB 0x" << std::hex << robId <<
", FE: 0x" << mLink <<
": Got invalid onlineId (= 0) in FE header - dataword = 0x" << rawDataWord);
392 ATH_MSG_VERBOSE(
"In decoder: got onlineId 0x" << std::hex << onlineId );
395 offlineIdHash =
m_pixel_id->wafer_hash(pixCabling->find_entry_onoff(onlineId));
396 if (offlineIdHash != previous_offlineIdHash) {
397 mBCID_offset = mBCID;
400 bsErrWord[
static_cast<int>(offlineIdHash)+52736] = 1;
402 mLVL1A = mBCID - mBCID_offset;
404 if (isIBLModule || isDBMModule) { mLVL1A=mLVL1A+mBCID_max_IBL; }
405 else { mLVL1A=mLVL1A+mBCID_max_pix; }
409 if (isIBLModule || isDBMModule) {
431 ATH_MSG_VERBOSE(
"link header with BCID: " << mBCID <<
" LVL1ID: " << mLVL1ID <<
" LVL1A: " << mLVL1A <<
" link: " << mLink <<
" found");
432 ATH_MSG_VERBOSE(
"got OfflineIDHash: 0x" << std::hex << offlineIdHash <<
" from OnlineID: 0x" << onlineId << std::dec <<
" link: " << mLink);
435 if (offlineIdHash == 0xffffffff) {
436 generalwarning(
"In ROB 0x" << std::hex << robId <<
", FE: 0x" << mLink <<
": Unknown OnlineId identifier in FE header - not found by mapping" << std::dec);
446 unsigned int mFE = 0;
447 unsigned int mRow = 0;
448 unsigned int mColumn = 0;
452 if (isIBLModule || isDBMModule) {
455 ATH_MSG_DEBUG (
"Decoding IBL/DBM hit word: 0x" << std::hex << rawDataWord << std::dec);
459 countHitCondensedWords = 1;
460 are_4condensed_words =
false;
461 condensedWords[0] = rawDataWord;
464 else if (countHitCondensedWords == 1) {
465 ++countHitCondensedWords;
466 condensedWords[1] = rawDataWord;
469 else if (countHitCondensedWords == 2) {
470 ++countHitCondensedWords;
471 condensedWords[2] = rawDataWord;
475 are_4condensed_words =
true;
476 receivedCondensedWords =
true;
477 condensedWords[3] = rawDataWord;
478 uint32_t hitwords[
nHits];
486 hitwords[0] = (condensedWords[0] &
mask24);
494 hitwords[4] = (condensedWords[3] >>
skip5) &
mask24;
497 ATH_MSG_VERBOSE(
"4 consecutive IBL hit words found. Condensed hits are being decoded");
500 for (
unsigned int i(0); i <
nHits; ++i) {
504 ATH_MSG_VERBOSE(
"hitword[" << i <<
"] = 0x" << std::hex << hitwords[i] <<
", row: 0x" << row[i] <<
", col: 0x" << col[i] <<
", 8-bit ToT: 0x" << tot[i] << std::dec);
506 countHitCondensedWords = 0;
507 linkNum_IBLword = linkNum_IBLheader;
510 if (countHitCondensedWords != 0) {
511 generalwarning(
"In ROB 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Interruption of IBL condensed words - hit(s) ignored (current dataword: 0x" << std::hex << rawDataWord << std::dec <<
")");
515 countHitCondensedWords = 0;
518 are_4condensed_words =
false;
519 mRow =
decodeRow(rawDataWord, isIBLModule || isDBMModule );
520 mColumn =
decodeColumn(rawDataWord, isIBLModule || isDBMModule);
521 mToT =
decodeToT(rawDataWord, isIBLModule || isDBMModule);
524 if (linkNum_IBLword != linkNum_IBLheader) {
525 generalwarning(
"In ROB 0x" << std::hex << robId <<
": Link number mismatch - nnnnn (hit word) = 0x" << linkNum_IBLword <<
", nnnnn (header) = 0x" << linkNum_IBLheader << std::dec);
529 ATH_MSG_DEBUG(
"hit dataword found for module offlineIDHash: " << offlineIdHash <<
" Row: 0x" << std::hex << mRow <<
" Col: 0x" << mColumn <<
" Tot: 0x" << mToT << std::dec);
534 generalwarning(
"In ROB 0x" << std::hex << robId <<
", FE: 0x" << mLink <<
": IBL/DBM hit word 0x" << rawDataWord <<
" not recognised" << std::dec);
550 ATH_MSG_VERBOSE(
"Decoding Pixel hit word: 0x" << std::hex << rawDataWord << std::dec);
553 if (countHitCondensedWords != 0){
554 generalwarning(
"In ROB 0x" << std::hex << robId <<
", link 0x" << mLink
555 <<
": Interruption of IBL condensed words - hit(s) ignored (current dataword: 0x"
556 << std::hex << rawDataWord << std::dec <<
")");
560 countHitCondensedWords = 0;
563 are_4condensed_words =
false;
565 mRow =
decodeRow(rawDataWord, isIBLModule || isDBMModule );
566 mColumn =
decodeColumn(rawDataWord, isIBLModule || isDBMModule);
567 mToT =
decodeToT(rawDataWord, isIBLModule || isDBMModule);
570 ATH_MSG_DEBUG(
"hit dataword found for module offlineIDHash: " << offlineIdHash <<
" FE: " << mFE <<
" Row: " << mRow <<
" Col: " << mColumn );
579 if (offlineIdHash == skipHash)
continue;
580 if (offlineIdHash != lastHash) {
581 lastHash = offlineIdHash;
582 if (vecHash!=
nullptr) {
583 std::vector<IdentifierHash>::iterator p = std::find(vecHash->begin(),vecHash->end(),offlineIdHash);
584 if (p == vecHash->end()) {
585 skipHash = offlineIdHash;
590 if( coll ==
nullptr ) {
600 ATH_MSG_ERROR(
"failed to add Pixel RDO collection to container" );
606 if (isIBLModule || isDBMModule) {
607 unsigned int num_cycles_toFillCollection(0);
608 if (are_4condensed_words) {
609 num_cycles_toFillCollection =
nHits;
612 num_cycles_toFillCollection = 1;
618 for (
unsigned int i(0); i < num_cycles_toFillCollection; ++i) {
621 ATH_MSG_VERBOSE(
"ROW[" << i <<
"] = 0x" << std::hex << row[i] << std::dec <<
", COL[" << i <<
"] = 0x" << std::hex << col[i] << std::dec <<
", 8-bit TOT[" << i <<
"] = 0x" << std::hex << tot[i] << std::dec );
625 if ((tot[i] & 0xF0) == 0x00) {
626 generalwarning(
"In ROB 0x" << std::hex << robId <<
", FE 0x" << mLink <<
": First IBL ToT field is 0 - hit word 0x" << rawDataWord <<
" decodes to ToT1 = 0" << (tot[i] >> 4) <<
", ToT2 = 0x" << (tot[i] & 0xF) <<
", row = " << std::dec << row[i] <<
" col = " << col[i] << std::dec);
630 if (((row[i] != 0) && (col[i] != 0) && (row[i] <= 336) && (col[i] <= 80)) || isDBMModule) {
631 pixelId =
m_pixelReadout ->getPixelIdfromHash (offlineIdHash, mFE, row[i], col[i]);
639 ATH_MSG_VERBOSE(
" eta_i: " << eta_i <<
", phi_i: " << phi_i <<
", eta_m: " << eta_m <<
", phi_m: " << phi_m );
641 if (pixelId == invalidPixelId) {
642 generalwarning(
"In ROB 0x" << std::hex << robId <<
", FE 0x" << mLink <<
": Illegal pixelId - hit word 0x" << rawDataWord <<
" decodes to ToT1 = 0" << (tot[i] >> 4) <<
", ToT2 = 0x" << (tot[i] & 0xF) <<
", row = " << std::dec << row[i] <<
" col = " << col[i] << std::dec);
650 ATH_MSG_VERBOSE(
"Starting from tot = 0x" << std::hex << tot[i] <<
" IBLtot[0] = 0x" << std::hex << IBLtot[0] <<
" IBLtot[1] = 0x" << IBLtot[1] << std::dec );
653 if (!pixHitDiscCnfg) {
654 pixHitDiscCnfg = std::make_unique<SG::ReadCondHandle<PixelHitDiscCnfgData> > (
m_condHitDiscCnfgKey,ctx);
658 hitDiscCnfg = (*pixHitDiscCnfg)->getHitDiscCnfgPL();
661 hitDiscCnfg = (*pixHitDiscCnfg)->getHitDiscCnfg3D();
664 if (hitDiscCnfg == 2 && IBLtot[0] == 2) IBLtot[0] = 16;
665 if (hitDiscCnfg == 2 && IBLtot[1] == 2) IBLtot[1] = 16;
668 if (coll) coll->
push_back(
new RDO(pixelId, IBLtot[0], mBCID, mLVL1ID, mLVL1A));
675 ATH_MSG_VERBOSE(
"Collection filled with pixelId: " << pixelId <<
" TOT = 0x" << std::hex << IBLtot[0] << std::dec <<
" mBCID = " << mBCID <<
" mLVL1ID = " << mLVL1ID <<
" mLVL1A = " << mLVL1A );
681 if (IBLtot[1] != 0x0 && (IBLtot[1] != 0xF || hitDiscCnfg != 3)) {
682 if ((row[i] + 1) > 336) {
684 generalwarning(
"In ROB = 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Illegal IBL row number for second ToT field, hit word 0x" << rawDataWord <<
" decodes to row = " << std::dec << row[i]+1 <<
" col = " << col[i] <<
" (ToT1 = 0x" << std::hex << IBLtot[0] <<
" ToT2 = 0x" << IBLtot[1] <<
")");
690 pixelId =
m_pixelReadout->getPixelIdfromHash (offlineIdHash, mFE, row[i] + 1, col[i]);
697 int phi_i_max =
m_pixel_id->phi_index_max(pixelId);
698 int eta_i_max =
m_pixel_id->eta_index_max(pixelId);
700 ATH_MSG_VERBOSE(
" eta_i: " << eta_i <<
", phi_i: " << phi_i <<
", eta_m: " << eta_m <<
", phi_m: " << phi_m <<
", eta_i_max: " << eta_i_max <<
", phi_i_max: " << phi_i_max );
703 if (pixelId == invalidPixelId) {
704 generalwarning(
"In ROB 0x" << std::hex << robId <<
", FE 0x" << mLink <<
": Illegal pixelId - hit word 0x" << rawDataWord <<
" decodes to ToT1 = 0" << (tot[i] >> 4) <<
", ToT2 = 0x" << (tot[i] & 0xF) <<
", row = " << std::dec << row[i] <<
" col = " << col[i] << std::dec);
710 coll->
push_back(
new RDO(pixelId, IBLtot[1], mBCID, mLVL1ID, mLVL1A));
717 ATH_MSG_VERBOSE(
"Collection filled with pixelId: " << pixelId <<
" TOT = 0x" << std::hex << IBLtot[1] << std::dec <<
" mBCID = " << mBCID <<
" mLVL1ID = " << mLVL1ID <<
" mLVL1A = " << mLVL1A );
724 generalwarning(
"In ROB = 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Illegal IBL row/col number, hit word 0x" << rawDataWord <<
" decodes to row = " << std::dec << row[i] <<
" col = " << col[i] <<
" (ToT1 = 0x" << std::hex << (tot[i] >> 4) <<
" ToT2 = 0x" << (tot[i] & 0xF) <<
")");
734 pixelId =
m_pixelReadout->getPixelIdfromHash(offlineIdHash, mFE, mRow, mColumn);
735 if (pixelId == invalidPixelId) {
736 ATH_MSG_DEBUG(
"In ROB = 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Illegal pixelId - row = " << std::dec << mRow <<
", col = " << mColumn <<
", dataword = 0x" << std::hex << rawDataWord << std::dec);
744 coll->
push_back(
new RDO(pixelId, mToT, mBCID, mLVL1ID, mLVL1A));
751 ATH_MSG_VERBOSE(
"Collection filled with pixelId: " << pixelId <<
" TOT = 0x" << std::hex << mToT << std::dec <<
" mBCID = " << mBCID <<
" mLVL1ID = " << mLVL1ID <<
" mLVL1A = " << mLVL1A );
757 generalwarning(
"In ROB = 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Unexpected hit dataword: " << rawDataWord <<
" - hit ignored");
770 generalwarning(
"In ROB = 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Unexpected trailer found: 0x" << std::hex << rawDataWord <<
", data corruption");
776 previous_offlineIdHash = offlineIdHash;
778 are_4condensed_words =
false;
780 if (isIBLModule || isDBMModule) {
781 ATH_MSG_VERBOSE(
"Decoding IBL/DBM trailer word: 0x" << std::hex << rawDataWord << std::dec );
784 if (trailerError & (1 << 8)) {
789 if (trailerError & (1 << 6)) {
793 if (trailerError & (1 << 5)) {
797 if (trailerError & (1 << 4)) {
801 if (trailerError & (1 << 3)) {
805 if (trailerError & (1 << 2)) {
809 if (trailerError & (1 << 1)) {
813 if (trailerError & (1 << 0)) {
818 if (trailerError & (1 << 7)) {
819 if (!receivedCondensedWords) {
generalwarning(
"In ROB 0x" << std::hex << robId <<
", link 0x" << mLink <<
": condensed mode bit is set, but no condensed words received" << std::dec); }
824 if (linkNum_IBLword != linkNum_IBLheader) {
825 generalwarning(
"In ROB 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Link number mismatch - nnnnn (trailer) = 0x" << linkNum_IBLword <<
", nnnnn (header) = 0x" << linkNum_IBLheader << std::dec);
832 ATH_MSG_VERBOSE(
"Decoding Pixel trailer word: 0x" << std::hex << rawDataWord << std::dec );
834 if (trailerError != 0) {
835 sc = StatusCode ::RECOVERABLE;
836 errorRecoverable = errorRecoverable | trailerError;
838 const std::array<unsigned long long, 4> bitPosition{0_BIT, 1_BIT, 2_BIT, 3_BIT};
839 for (
const auto bit:bitPosition){
843 if ( trailerError & 0xF ) {
849 if (trailerError != 0) {
850 if (indexModule>-1) {
868 are_4condensed_words =
false;
869 if (isIBLModule || isDBMModule) {
870 ATH_MSG_VERBOSE(
"Decoding IBL/DBM FEflag word: 0x" << std::hex << rawDataWord << std::dec);
872 if (linkNum_IBLword != linkNum_IBLheader) {
873 generalwarning(
"In ROB 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Link number mismatch - nnnnn (error word) = 0x" << linkNum_IBLword <<
", nnnnn (header) = 0x" << linkNum_IBLheader << std::dec);
878 if (serviceCode>31) {
879 generalwarning(
"In ROB 0x" << std::hex << robId <<
", link 0x" << mLink <<
": Got out-of-bounds service code: " << std::dec << serviceCode <<
" (counter: " << serviceCodeCounter <<
"), ignored");
885 if (serviceCodeCounter>0 && serviceCode<32) {
886 if (serviceCode!=14) {
888 if (
static_cast<int>(offlineIdHash)>155 &&
static_cast<int>(offlineIdHash)<436) {
890 int indexOffset = 17*
m_pixel_id->wafer_hash_max();
891 int indexSvcCounter = indexOffset+serviceCode*280*2+2*(
static_cast<int>(offlineIdHash)-156)+chFE;
893 bsErrWord[indexSvcCounter] = serviceCodeCounter;
900 ATH_MSG_VERBOSE(
"Decoding Pixel FEflag word: 0x" << std::hex << rawDataWord << std::dec );
903 FEFlags = FEFlags & 0xff;
904 if ((MCCFlags | FEFlags) != 0) {
905 sc = StatusCode::RECOVERABLE;
906 errorRecoverable = errorRecoverable | (MCCFlags << 12) | (FEFlags << 4);
908 static constexpr std::array<unsigned long long, 8> bitPosition {0_BIT, 1_BIT, 2_BIT, 3_BIT, 4_BIT, 5_BIT, 6_BIT, 7_BIT};
909 for (
const auto thisBit:bitPosition){
914 if ( MCCFlags & 0xff or FEFlags & 0xf3 ) {
919 if (indexModule>-1) {
956 ATH_MSG_DEBUG(
"Disabled Pixel chip " << ((rawDataWord & 0x0F000000) >> 24) );
965 are_4condensed_words =
false;
971 generalwarning(
"In ROB 0x" << std::hex << robId <<
", FE 0x" << mLink <<
": Unknown word type found, 0x" << std::hex << rawDataWord << std::dec <<
", ignoring");
982 if (isIBLModule || isDBMModule) {
987 for (
size_t i=0; i<static_cast<size_t>(bsErrWord.size()); i++) {
988 if (bsErrWord[i]>0) {
989 decodingErrors.
setOrDrop(i,bsErrWord[i]);
993 if (
sc == StatusCode::RECOVERABLE) {
995 if (errorRecoverable == (3 << 20) ){
997 return StatusCode::SUCCESS;
999 ATH_MSG_DEBUG(
"Recoverable errors found in PixelRodDecoder, errorcode: " << errorRecoverable );