From 453bcbf80d3f160f7d0191590a6a6c6bd18334a6 Mon Sep 17 00:00:00 2001 From: "P.-A. Loizeau" <p.-a.loizeau@gsi.de> Date: Wed, 6 Nov 2024 16:54:08 +0100 Subject: [PATCH] Fix non-merged epoch handling in BMon and TOF online unpackers => Properly implemented in legacy unpackers but if condition lost in porting! --- algo/detectors/bmon/UnpackMS.cxx | 9 ++++++++- algo/detectors/bmon/UnpackMS.h | 5 +++-- algo/detectors/tof/UnpackMS.cxx | 9 ++++++++- algo/detectors/tof/UnpackMS.h | 5 +++-- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/algo/detectors/bmon/UnpackMS.cxx b/algo/detectors/bmon/UnpackMS.cxx index 4841b63c75..b4fbf123e1 100644 --- a/algo/detectors/bmon/UnpackMS.cxx +++ b/algo/detectors/bmon/UnpackMS.cxx @@ -89,7 +89,14 @@ namespace cbm::algo::bmon break; } case critof001::MSG_EPOCH: { - ProcessEpochMessage(message[messageNr], time); + if (critof001::kuChipIdMergedEpoch == message[messageNr].getGet4Idx()) { + ProcessEpochMessage(message[messageNr], time); + } // if this epoch message is a merged one valid for all chips + else { + /// FIXME: Should be checked in/forwarded to <some> monitor <task?>, here we just jump it + std::get<1>(result).fNumErrInvalidAsicEpochs++; + continue; + } // if single chip epoch message break; } case critof001::MSG_SLOWC: { diff --git a/algo/detectors/bmon/UnpackMS.h b/algo/detectors/bmon/UnpackMS.h index 9c893c5318..8ba772dbb7 100644 --- a/algo/detectors/bmon/UnpackMS.h +++ b/algo/detectors/bmon/UnpackMS.h @@ -54,11 +54,12 @@ namespace cbm::algo::bmon uint32_t fNumErrInvalidMsSize = 0; ///< Microslice size is not multiple of message size uint32_t fNumErrTimestampOverflow = 0; ///< Overflow in 64 bit time stamp uint32_t fNumErrInvalidStartEpoch = 0; ///< Microslice index doesn't match first epoch + uint32_t fNumErrInvalidAsicEpochs = 0; ///< Epoch did not match merged one for an asic bool HasErrors() { uint32_t numErrors = fNumNonHitOrTsbMessage + fNumErrElinkOutOfRange + fNumErrInvalidFirstMessage + fNumErrInvalidLastMessage + fNumErrInvalidMsSize + fNumErrTimestampOverflow - + fNumErrInvalidStartEpoch; + + fNumErrInvalidStartEpoch + fNumErrInvalidAsicEpochs; return (numErrors > 0 ? true : false); } std::string print() @@ -66,7 +67,7 @@ namespace cbm::algo::bmon std::stringstream ss; ss << "errors " << fNumNonHitOrTsbMessage << " | " << fNumErrElinkOutOfRange << " | " << fNumErrInvalidFirstMessage << " | " << fNumErrInvalidLastMessage << " | " << fNumErrInvalidMsSize << " | " - << fNumErrTimestampOverflow << " | " << fNumErrInvalidStartEpoch << " | "; + << fNumErrTimestampOverflow << " | " << fNumErrInvalidStartEpoch << " | " << fNumErrInvalidAsicEpochs << " | "; return ss.str(); } }; diff --git a/algo/detectors/tof/UnpackMS.cxx b/algo/detectors/tof/UnpackMS.cxx index b9cd5dcf01..0c11fe6163 100644 --- a/algo/detectors/tof/UnpackMS.cxx +++ b/algo/detectors/tof/UnpackMS.cxx @@ -82,7 +82,14 @@ namespace cbm::algo::tof break; } case critof001::MSG_EPOCH: { - ProcessEpochMessage(message[messageNr], time); + if (critof001::kuChipIdMergedEpoch == message[messageNr].getGet4Idx()) { + ProcessEpochMessage(message[messageNr], time); + } // if this epoch message is a merged one valid for all chips + else { + /// FIXME: Should be checked in/forwarded to <some> monitor <task?>, here we just jump it + std::get<1>(result).fNumErrInvalidAsicEpochs++; + continue; + } // if single chip epoch message break; } case critof001::MSG_SLOWC: { diff --git a/algo/detectors/tof/UnpackMS.h b/algo/detectors/tof/UnpackMS.h index 1a1033cc6b..591a4deee1 100644 --- a/algo/detectors/tof/UnpackMS.h +++ b/algo/detectors/tof/UnpackMS.h @@ -52,11 +52,12 @@ namespace cbm::algo::tof uint32_t fNumErrInvalidMsSize = 0; ///< Microslice size is not multiple of message size uint32_t fNumErrTimestampOverflow = 0; ///< Overflow in 64 bit time stamp uint32_t fNumErrInvalidStartEpoch = 0; ///< Microslice index doesn't match first epoch + uint32_t fNumErrInvalidAsicEpochs = 0; ///< Epoch did not match merged one for an asic bool HasErrors() { uint32_t numErrors = fNumNonHitOrTsbMessage + fNumErrElinkOutOfRange + fNumErrInvalidFirstMessage + fNumErrInvalidLastMessage + fNumErrInvalidMsSize + fNumErrTimestampOverflow - + fNumErrInvalidStartEpoch; + + fNumErrInvalidStartEpoch + fNumErrInvalidAsicEpochs; return (numErrors > 0 ? true : false); } std::string print() @@ -64,7 +65,7 @@ namespace cbm::algo::tof std::stringstream ss; ss << "errors " << fNumNonHitOrTsbMessage << " | " << fNumErrElinkOutOfRange << " | " << fNumErrInvalidFirstMessage << " | " << fNumErrInvalidLastMessage << " | " << fNumErrInvalidMsSize << " | " - << fNumErrTimestampOverflow << " | " << fNumErrInvalidStartEpoch << " | "; + << fNumErrTimestampOverflow << " | " << fNumErrInvalidStartEpoch << " | " << fNumErrInvalidAsicEpochs << " | "; return ss.str(); } }; -- GitLab