diff --git a/algo/detectors/sts/UnpackSts.cxx b/algo/detectors/sts/UnpackSts.cxx index ad1a586ac100d7af2590c86ea34e0b64be6437a9..06a154a98caf7a557cbd53c2dfc41a869da9ff4f 100644 --- a/algo/detectors/sts/UnpackSts.cxx +++ b/algo/detectors/sts/UnpackSts.cxx @@ -123,11 +123,19 @@ namespace cbm::algo messageTime -= elinkPar.fTimeOffset; // --- Apply walk correction if applicable - if (message.GetHitAdc() <= elinkPar.fWalk.size()) { messageTime += elinkPar.fWalk[message.GetHitAdc() - 1]; } + if (message.GetHitAdc() <= elinkPar.fWalk.size()) { + double walk = elinkPar.fWalk[message.GetHitAdc() - 1]; + messageTime += walk; + } // --- Charge double charge = elinkPar.fAdcOffset + (message.GetHitAdc() - 1) * elinkPar.fAdcGain; + if (messageTime > CbmStsDigi::kMaxTimestamp) { + monitor.fNumErrTimestampOverflow++; + return; + } + // --- Create output digi digiVec.emplace_back(elinkPar.fAddress, channel, messageTime, charge); } diff --git a/core/data/sts/CbmStsDigi.h b/core/data/sts/CbmStsDigi.h index 2363ba00234204e95270a5ff0e8713153cb3ab9a..ab50018657bd53b4ca6e9ead5a6723bdfe9b7906 100644 --- a/core/data/sts/CbmStsDigi.h +++ b/core/data/sts/CbmStsDigi.h @@ -39,11 +39,19 @@ **/ class CbmStsDigi { +public: // constants + static constexpr int kNumAdcBits = 5; + static constexpr uint32_t kAdcMask = (1u << kNumAdcBits) - 1u; + static constexpr int kNumLowerAddrBits = 16; + static constexpr int kNumTimestampBits = 31; + static constexpr uint32_t kTimestampMask = (1u << kNumTimestampBits) - 1u; + static constexpr uint32_t kMaxTimestamp = kTimestampMask; + static constexpr uint32_t kTimeAddressBitMask = ~kTimestampMask; + public: /** Default constructor **/ CbmStsDigi() = default; - /** Standard constructor ** @param address Unique element address ** @param channel Channel number @@ -159,15 +167,6 @@ public: private: friend class boost::serialization::access; - - static constexpr int kNumAdcBits = 5; - static constexpr uint32_t kAdcMask = (1u << kNumAdcBits) - 1u; - static constexpr int kNumLowerAddrBits = 16; - static constexpr int kNumTimestampBits = 31; - static constexpr uint32_t kTimestampMask = (1u << kNumTimestampBits) - 1u; - static constexpr uint32_t kMaxTimestamp = kTimestampMask; - static constexpr uint32_t kTimeAddressBitMask = ~kTimestampMask; - // CUDA requires types in shared memory to have trivial constructors / destructors #if XPU_IS_HIP_CUDA #define CPU_ONLY(x)