Author: [log in to unmask]
Date: Wed Jan 21 12:49:56 2015
New Revision: 1961
Log:
Fixing overflow in conversion of EVIO's uint32 to java int, for TI timestamp.
Modified:
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TIData.java
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TIData.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TIData.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TIData.java Wed Jan 21 12:49:56 2015
@@ -48,10 +48,15 @@
calib = ((bank[0]>>28)&1)==1;
pulser = ((bank[0]>>29)&1)==1;
- final long timelo = bank[2] * 4;
- final long timehi = (bank[3] & 0xffff) * 4 * (long)Math.pow(2,32);
-
- time = timelo+timehi; // units ns
+ long w1 = bank[2];
+ long w2 = bank[3];
+ if (w1<0) w1 += 2*(long)Integer.MAX_VALUE+2;
+ if (w2<0) w2 += 2*(long)Integer.MAX_VALUE+2;
+
+ final long timelo = w1;
+ final long timehi = (w2 & 0xffff) << 32;
+
+ time = 4*(timelo+timehi); // units ns
}
public int getTag() {
|