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() {