Print

Print


Author: [log in to unmask]
Date: Thu Aug 27 16:39:35 2015
New Revision: 3423

Log:
check for and reject events with weird time offsets

Modified:
    java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TiTimeOffsetEvioProcessor.java

Modified: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TiTimeOffsetEvioProcessor.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TiTimeOffsetEvioProcessor.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TiTimeOffsetEvioProcessor.java	Thu Aug 27 16:39:35 2015
@@ -7,15 +7,21 @@
 
 /**
  * Extract trigger time offset from EVIO data.
- * 
+ *
  * @author Sho Uemura <[log in to unmask]>
  */
 public class TiTimeOffsetEvioProcessor extends EvioEventProcessor {
 
     private final IntBankDefinition headBankDefinition;
     private final IntBankDefinition tiBankDefinition;
+
+    private final double minRange = 0.99e9;
+    private final double maxRange = 1.1e9;
+    private final int maxOutliers = 10;
+
     private long minOffset = 0;
     private long maxOffset = 0;
+    private int nOutliers = 0;
 
     public TiTimeOffsetEvioProcessor() {
         headBankDefinition = new IntBankDefinition(HeadBankData.class, new int[]{0x2e, 0xe10f});
@@ -33,18 +39,26 @@
             if (thisTimestamp != 0) {
                 long offset = thisTimestamp * 1000000000L - tiData.getTime();
                 if (minOffset == 0 || minOffset > offset) {
-                    minOffset = offset;
+                    if (maxOffset - offset < maxRange) {
+                        minOffset = offset;
+                    } else {
+                        nOutliers++;
+                    }
                 }
                 if (maxOffset == 0 || maxOffset < offset) {
-                    maxOffset = offset;
+                    if (offset - minOffset < maxRange) {
+                        maxOffset = offset;
+                    } else {
+                        nOutliers++;
+                    }
                 }
             }
         }
     }
-    
+
     public void updateTriggerConfig(TriggerConfigInt triggerConfig) {
         long offsetRange = maxOffset - minOffset;
-        if (offsetRange > 0.99 * 1e9 && offsetRange < 1.01 * 1e9) {
+        if (offsetRange > minRange && nOutliers < maxOutliers) {
             triggerConfig.put(TriggerConfigVariable.TI_TIME_OFFSET.name(), minOffset);
         } else {
             triggerConfig.put(TriggerConfigVariable.TI_TIME_OFFSET.name(), 0L);