Print

Print


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