Print

Print


Author: [log in to unmask]
Date: Tue Sep 22 17:26:28 2015
New Revision: 3669

Log:
more error info. use timestamp if available.

Modified:
    java/trunk/users/src/main/java/org/hps/users/phansson/SvtHeaderAnalysisDriver.java

Modified: java/trunk/users/src/main/java/org/hps/users/phansson/SvtHeaderAnalysisDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/SvtHeaderAnalysisDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/SvtHeaderAnalysisDriver.java	Tue Sep 22 17:26:28 2015
@@ -9,14 +9,18 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Date;
 import java.util.List;
 import java.util.logging.FileHandler;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.hps.analysis.trigger.util.TriggerDataUtils;
 import org.hps.evio.SvtEvioReader;
 import org.hps.evio.SvtEvioUtils;
 import org.hps.readout.svt.SvtHeaderDataInfo;
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.HeadBankData;
 import org.hps.util.BasicLogFormatter;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
@@ -35,7 +39,8 @@
     
     private final String HeaderCollectionName = "SvtHeaders"; 
     private final Logger logger = LogUtil.create(SvtHeaderAnalysisDriver.class.getSimpleName(), new BasicLogFormatter(), Level.INFO);
-    //private final int nROC = 14;
+    private int nEventsProcessed = 0;
+    private Date eventDate = new Date(0);
     private IHistogram2D rceSyncErrorCount;
     private IHistogram2D rceOFErrorCount;
     private IHistogram2D rceSkipCount;
@@ -53,6 +58,7 @@
     PrintWriter printWriter;
 
     private boolean showPlots = false;
+    private final String triggerBankCollectionName = "TriggerBank";
     
     /**
      * 
@@ -101,6 +107,19 @@
     
     @Override
     protected void process(EventHeader event) {
+        
+        if(event.hasCollection(GenericObject.class, triggerBankCollectionName)) {
+            Date currentEventDate = TriggerDataUtils.getEventTimeStamp(event, triggerBankCollectionName);
+            if( currentEventDate == null) {
+                logger.info("Couldn't get event date from trigger bank for processed " + nEventsProcessed);
+                //  throw new RuntimeException("Couldn't get event date from trigger bank!");
+            } else {
+                eventDate = currentEventDate;
+            }
+        }
+        // log start of run
+        if( nEventsProcessed == 0 )
+            logger.info("startOfRun: run " + event.getRunNumber() + " event " + event.getEventNumber() + " processed " + nEventsProcessed +  " date " + eventDate.toString());
     
         if( !event.hasCollection(GenericObject.class, HeaderCollectionName) ) 
             return;
@@ -112,34 +131,57 @@
         for(GenericObject header : headers ) {
             logger.fine("nint " + header.getNInt());
             int roc = SvtHeaderDataInfo.getNum(header);
+            
+            // find the errors in the header
             int syncError = SvtEvioUtils.getSvtTailSyncErrorBit(SvtHeaderDataInfo.getTail(header));
             int oFError = SvtEvioUtils.getSvtTailOFErrorBit(SvtHeaderDataInfo.getTail(header));
             int skipCount = SvtEvioUtils.getSvtTailMultisampleSkipCount(SvtHeaderDataInfo.getTail(header));
-            //int eventNr = SvtEvioUtils.getSvtDataEventCounter( SvtHeaderDataInfo.getHeader(header) );
-             
-            if( syncError != 0 && syncError != 1)
-                throw new RuntimeException("invalid value for error bit " + syncError);
-            rceSyncErrorCount.fill(roc, syncError);
-            rceOFErrorCount.fill(roc, oFError);
-            rceSkipCount.fill(roc, skipCount);
-            
-            
+            
+            // check bits
+            checkBitValueRange(oFError);
+            checkBitValueRange(syncError);
+            
+            // print header errors to log
+            if( syncError != 0) {
+                logger.info("syncError: run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + " processed " + nEventsProcessed +  " date " + eventDate.toString()
+                            + " roc " + roc);
+            }            
+            if( oFError != 0) {
+                logger.info("oFError: run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + " processed " + nEventsProcessed +  " date " + eventDate.toString()
+                            + " roc " + roc);
+            }  
+            for(int i=0; i < skipCount; ++i) {
+                if( oFError != 0) {
+                    logger.info("skipCount: run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + " processed " + nEventsProcessed +  " date " + eventDate.toString()
+                                + " roc " + roc);
+                }
+            }
+           
+            
+            
+            // Check for multisample tail error bit
             int nMultisamples = SvtEvioUtils.getSvtTailMultisampleCount(SvtHeaderDataInfo.getTail(header));
             logger.fine(nMultisamples + " multisamples");
             int multisampleErrorBits = 0;
             for(int iMultisample = 0; iMultisample != nMultisamples; ++iMultisample) {
                 int multisampleHeader = SvtHeaderDataInfo.getMultisample(iMultisample, header);
-                logger.fine("found multisample header: " + Integer.toHexString(multisampleHeader));
+                logger.fine("found multisample tail: " + Integer.toHexString(multisampleHeader));
                 int multisampleErrorBit = SvtEvioUtils.getErrorBitFromMultisampleHeader(multisampleHeader);
-                logger.fine("found multisample header error bit: " + multisampleErrorBit);
+                checkBitValueRange(multisampleErrorBit);
+                logger.fine("found multisample tail error bit: " + multisampleErrorBit);
                 if( multisampleErrorBit != 0) {
                     multisampleErrorBits++;
-                    logger.info("multisample header error: run " + event.getRunNumber() + " event " + event.getEventNumber() 
+                    logger.info("multisample tail error: run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + eventDate.toString() 
                             + " roc " + roc + " feb " + SvtEvioUtils.getFebIDFromMultisampleTail(multisampleHeader) 
                             + " hybrid " + SvtEvioUtils.getFebHybridIDFromMultisampleTail(multisampleHeader)  
                             + " apv " + SvtEvioUtils.getApvFromMultisampleTail(multisampleHeader));
                 }
             }
+            
+            // keep track how many headers have errors
+            rceSyncErrorCount.fill(roc, syncError);
+            rceOFErrorCount.fill(roc, oFError);
+            rceSkipCount.fill(roc, skipCount);
             rceMultisampleErrorCount.fill(roc, multisampleErrorBits > 0 ? 1 : 0);
             if( syncError > 0) nRceSyncErrorCountN++;
             if( oFError > 0 ) nRceOFErrorCount++;
@@ -152,12 +194,17 @@
         }
         
         
-        
+        nEventsProcessed++;
+    }
+    
+    private void checkBitValueRange(int val) {
+        if( val != 0 && val != 1)
+            throw new RuntimeException("invalid value for error bit " + val);
     }
     
     @Override
     protected void endOfData() {
-        
+        logger.info("endOfData: processed " + nEventsProcessed +  " date " + eventDate.toString());
         logger.info("nRceSvtHeaders " + nRceSvtHeaders);
         logger.info("nRceSyncErrorCountN " + nRceSyncErrorCountN);
         logger.info("nRceOFErrorCount " + nRceOFErrorCount);