diff --git a/core/data/sts/CbmStsAddress.cxx b/core/data/sts/CbmStsAddress.cxx index d6d8331b8e6728e2b222b9cb587186708df88c87..8670d4b82f38e8c630fb73adf8a00e0869bd8cfa 100644 --- a/core/data/sts/CbmStsAddress.cxx +++ b/core/data/sts/CbmStsAddress.cxx @@ -203,6 +203,10 @@ int32_t CbmStsAddress::PackDigiAddress(int32_t address) | kMask[1][kStsModule] << kShift[1][kStsModule]; int32_t ret = (address & kDMask) >> kShift[1][kStsUnit]; + + // Check that no bits were set, that are stripped by this function. + assert(address == UnpackDigiAddress(ret)); + return ret; } // ------------------------------------------------------------------------- diff --git a/core/data/sts/CbmStsDigi.cxx b/core/data/sts/CbmStsDigi.cxx index 733544a0e8d23c1a3fceadfd9ff66e42de20b825..15618dc4c0a6cdf367fddbc550c83e84dc863b08 100644 --- a/core/data/sts/CbmStsDigi.cxx +++ b/core/data/sts/CbmStsDigi.cxx @@ -37,7 +37,7 @@ void CbmStsDigi::PackAddressAndTime(int32_t newAddress, uint32_t newTime) uint32_t lowerAddr = packedAddr & ((1 << kNumLowerAddrBits) - 1); fAddress = lowerAddr; - fTime = (highestBitAddr << kNumTimestampBits) | newTime; + fTime = (highestBitAddr << kNumTimestampBits) | (kTimestampMask & newTime); } int32_t CbmStsDigi::UnpackAddress() const diff --git a/core/data/sts/CbmStsDigi.h b/core/data/sts/CbmStsDigi.h index 94594b483e007cdad3f155a76f71e45aab5613a0..7867329e5a2f128e3dc874d087238eec9119863c 100644 --- a/core/data/sts/CbmStsDigi.h +++ b/core/data/sts/CbmStsDigi.h @@ -47,8 +47,9 @@ public: ** @param time Measurement time [ns] ** @param charge Charge [ADC units] **/ - CbmStsDigi(int32_t address, int32_t channel, uint32_t time, uint16_t charge) + CbmStsDigi(int32_t address, int32_t channel, double time, uint16_t charge) { + assert(time >= 0 && time <= kMaxTimestamp); PackAddressAndTime(address, time); PackChannelAndCharge(channel, charge); }