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);