From 2e14e7df3555c9d3018bada15486a67aacdd2034 Mon Sep 17 00:00:00 2001 From: Felix Weiglhofer <weiglhofer@fias.uni-frankfurt.de> Date: Tue, 4 Jul 2023 10:01:36 +0000 Subject: [PATCH] StsDigi: Clamp out-of-range timestamp. --- core/data/sts/CbmStsDigi.h | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/core/data/sts/CbmStsDigi.h b/core/data/sts/CbmStsDigi.h index 458abe19fc..2857a4200c 100644 --- a/core/data/sts/CbmStsDigi.h +++ b/core/data/sts/CbmStsDigi.h @@ -60,6 +60,7 @@ public: **/ XPU_D CbmStsDigi(int32_t address, int32_t channel, uint32_t time, uint16_t charge) { + time = ClampTime(time); PackAddressAndTime(address, time); PackChannelAndCharge(channel, charge); } @@ -127,12 +128,9 @@ public: /** Update Time of measurement ** @param New Time [ns] **/ - XPU_D void SetTime(double dNewTime) + XPU_D void SetTime(uint32_t dNewTime) { - // StsDigi is not able to store negative timestamps. - assert(dNewTime >= 0); - // StsDigi has a maximal time range of ~2.1s (2 147 483 647 ns). - assert(dNewTime <= kMaxTimestamp); + dNewTime = ClampTime(dNewTime); PackTime(dNewTime); } @@ -153,7 +151,11 @@ public: ** ** Slightly more efficient than calling both individual setters. **/ - XPU_D void SetAddressAndTime(int32_t address, uint32_t time) { PackAddressAndTime(address, time); } + XPU_D void SetAddressAndTime(int32_t address, uint32_t time) + { + time = ClampTime(time); + PackAddressAndTime(address, time); + } /** String output **/ @@ -206,6 +208,12 @@ private: return CbmStsAddress::UnpackDigiAddress(packedAddress); } + XPU_D uint32_t ClampTime(uint32_t time) const + { + if (time > kMaxTimestamp) time = kMaxTimestamp; + return time; + } + #if !defined(NO_ROOT) && !XPU_IS_HIP_CUDA ClassDefNV(CbmStsDigi, 8); #endif -- GitLab