diff --git a/core/data/sts/CbmStsDigi.h b/core/data/sts/CbmStsDigi.h index 458abe19fcbc1bd2913ee6489481e3ce1fb3d5ff..2857a4200c4eb9718979b520454936c117c04c0a 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