Skip to content
Snippets Groups Projects
Commit 2e14e7df authored by Felix Weiglhofer's avatar Felix Weiglhofer Committed by Volker Friese
Browse files

StsDigi: Clamp out-of-range timestamp.

parent 4bcb31df
No related branches found
No related tags found
1 merge request!1227CbmStsDigi: Remove assert from constructor.
Pipeline #23073 passed
...@@ -60,6 +60,7 @@ public: ...@@ -60,6 +60,7 @@ public:
**/ **/
XPU_D CbmStsDigi(int32_t address, int32_t channel, uint32_t time, uint16_t charge) XPU_D CbmStsDigi(int32_t address, int32_t channel, uint32_t time, uint16_t charge)
{ {
time = ClampTime(time);
PackAddressAndTime(address, time); PackAddressAndTime(address, time);
PackChannelAndCharge(channel, charge); PackChannelAndCharge(channel, charge);
} }
...@@ -127,12 +128,9 @@ public: ...@@ -127,12 +128,9 @@ public:
/** Update Time of measurement /** Update Time of measurement
** @param New Time [ns] ** @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. dNewTime = ClampTime(dNewTime);
assert(dNewTime >= 0);
// StsDigi has a maximal time range of ~2.1s (2 147 483 647 ns).
assert(dNewTime <= kMaxTimestamp);
PackTime(dNewTime); PackTime(dNewTime);
} }
...@@ -153,7 +151,11 @@ public: ...@@ -153,7 +151,11 @@ public:
** **
** Slightly more efficient than calling both individual setters. ** 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 **/ /** String output **/
...@@ -206,6 +208,12 @@ private: ...@@ -206,6 +208,12 @@ private:
return CbmStsAddress::UnpackDigiAddress(packedAddress); 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 #if !defined(NO_ROOT) && !XPU_IS_HIP_CUDA
ClassDefNV(CbmStsDigi, 8); ClassDefNV(CbmStsDigi, 8);
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment