Print

Print


Author: [log in to unmask]
Date: Wed Oct 21 11:54:30 2015
New Revision: 3865

Log:
update to use headers

Modified:
    java/trunk/steering-files/src/main/resources/org/hps/steering/users/phansson/EvioToLcio_LinkError.lcsim
    java/trunk/users/src/main/java/org/hps/users/phansson/SvtHeaderAnalysisDriver.java

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/phansson/EvioToLcio_LinkError.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/phansson/EvioToLcio_LinkError.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/phansson/EvioToLcio_LinkError.lcsim	Wed Oct 21 11:54:30 2015
@@ -8,7 +8,7 @@
         <driver name="EventMarkerDriver"/> 
         <!--<driver name="SvtMetaData"/>-->
         <driver name="OLDLinkErrorDriver"/>
-        <!--<driver name="LinkErrorDriver"/>-->
+        <driver name="LinkErrorDriver"/>
         <!--<driver name="LCIOWriter"/>-->
         <!--<driver name="AidaSaveDriverRoot" />-->
         <driver name="CleanupDriver"/>
@@ -20,7 +20,6 @@
         
         <driver name="LinkErrorDriver" type="org.hps.users.phansson.SvtHeaderAnalysisDriver">
             <logFileName>${outputFile}.log</logFileName>
-            <showPlots>False</showPlots>
         </driver>  
        
        <driver name="OLDLinkErrorDriver" type="org.hps.users.phansson.SvtOldHeaderAnalysisDriver">

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	Wed Oct 21 11:54:30 2015
@@ -3,28 +3,25 @@
  */
 package org.hps.users.phansson;
 
-import hep.aida.IHistogram2D;
-import hep.aida.IPlotter;
-
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Date;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.logging.FileHandler;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.hps.analysis.trigger.util.TriggerDataUtils;
-import org.hps.evio.SvtEvioReader;
 import org.hps.record.svt.SvtEvioUtils;
-import org.hps.record.svt.SvtHeaderDataInfo;
 import org.hps.util.BasicLogFormatter;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
-import org.lcsim.util.aida.AIDA;
 
 /**
  * @author Per Hansson Adrian <[log in to unmask]>
@@ -32,33 +29,23 @@
  */
 public class SvtHeaderAnalysisDriver extends Driver {
 
-    private final AIDA aida = AIDA.defaultInstance();
-    
-    private final String HeaderCollectionName = "SvtHeaders"; 
     private final Logger logger = Logger.getLogger(SvtHeaderAnalysisDriver.class.getSimpleName());
     private int nEventsProcessed = 0;
     private Date eventDate = new Date(0);
-    private IHistogram2D rceSyncErrorCount;
-    private IHistogram2D rceOFErrorCount;
-    private IHistogram2D rceSkipCount;
-    private IHistogram2D rceMultisampleErrorCount;
-    //private Map< Integer, Map< String, IHistogram1D> > histError = new HashMap< Integer, Map<String, IHistogram1D >>();
     private int nRceSyncErrorCountN = 0;
     private int nRceOFErrorCount = 0;
     private int nRceSkipCount = 0;
     private int nRceMultisampleErrorCount = 0;
     private int nRceSvtHeaders = 0;
-    IPlotter plotter;
-
     private String logFileName = "dummy.log";
     FileWriter fileWriter; 
     PrintWriter printWriter;
-
-    private boolean showPlots = false;
     private final String triggerBankCollectionName = "TriggerBank";
+    private static final Pattern rocIdPattern  = Pattern.compile("svt_.*_roc(\\d+)");
+
     
     /**
-     * 
+     *  Default constructor
      */
     public SvtHeaderAnalysisDriver() {
          logger.setLevel(Level.INFO);
@@ -68,146 +55,177 @@
         this.logFileName = name;
     }
     
-    public void setShowPlots(boolean show) {
-        this.showPlots = show;
-    }
     
     @Override
     protected void detectorChanged(Detector detector) {
         
-        FileHandler fh;
         try {
-            fh = new FileHandler(logFileName);
+            FileHandler fh = new FileHandler(logFileName);
+            fh.setFormatter(new BasicLogFormatter());
             logger.addHandler(fh);
-            fh.setFormatter(new BasicLogFormatter());
         } catch (SecurityException | IOException e1) {
             e1.printStackTrace();
         }
         
-        plotter = aida.analysisFactory().createPlotterFactory().create("rceSyncError");
-        plotter.createRegions(2, 2);
-        final int n = SvtEvioReader.MAX_ROC_BANK_TAG+1 -  SvtEvioReader.MIN_ROC_BANK_TAG;
-        rceSyncErrorCount = aida.histogram2D("rceSyncError", n, SvtEvioReader.MIN_ROC_BANK_TAG, SvtEvioReader.MAX_ROC_BANK_TAG+1, 2, 0, 1);
-        rceOFErrorCount = aida.histogram2D("rceOFError", n, SvtEvioReader.MIN_ROC_BANK_TAG, SvtEvioReader.MAX_ROC_BANK_TAG+1, 2, 0, 1);
-        rceSkipCount = aida.histogram2D("rceSkipCount", n, SvtEvioReader.MIN_ROC_BANK_TAG, SvtEvioReader.MAX_ROC_BANK_TAG+1, 2, 0, 1);
-        rceMultisampleErrorCount = aida.histogram2D("rceMultisampleError", n, SvtEvioReader.MIN_ROC_BANK_TAG, SvtEvioReader.MAX_ROC_BANK_TAG+1, 2, 0, 1);
-        
-        plotter.region(0).plot(rceSyncErrorCount);
-        plotter.region(1).plot(rceOFErrorCount);
-        plotter.region(2).plot(rceSkipCount);
-        plotter.region(3).plot(rceMultisampleErrorCount);
-        if(showPlots ) plotter.show();
-        
-        
+//        final int n = SvtEvioReader.MAX_ROC_BANK_TAG+1 -  SvtEvioReader.MIN_ROC_BANK_TAG;
+        
+    }
+    
+    
+    private int getRoc(String seq) {
+        Matcher m = rocIdPattern.matcher(seq);
+        if(m == null) 
+            throw new RuntimeException("null matcher, don't think this should happen");
+        if( !m.matches() ) 
+            return -1;
+        else
+            return Integer.parseInt( m.group(1) );
     }
     
     
     @Override
     protected void process(EventHeader event) {
         
+        // try to get event date 
+        // if no trigger bank use the last date found
         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!");
+                logger.finest("Couldn't get event date from trigger bank for processed " + nEventsProcessed);
             } 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;
-        
-        List<GenericObject> headers = event.get(GenericObject.class, HeaderCollectionName);
-        
-        logger.info("Found " + headers.size() + " SvtHeaders in event " + event.getEventNumber() + " run " + event.getRunNumber());
-        
-        for(GenericObject header : headers ) {
-            logger.info("1");
-            SvtHeaderDataInfo headerInfo  = (SvtHeaderDataInfo) header;
-            int roc = headerInfo.getNum();
-            logger.info("process roc  " +  roc);
-            
-            int svtHeader = headerInfo.getHeader();
-            int svtTail = headerInfo.getTail();
-            
-            logger.info("svtHeader " + Integer.toHexString(svtHeader) + " svtTail " + Integer.toHexString(svtTail));
-
-            
-            // find the errors in the header
-            int syncError = SvtEvioUtils.getSvtTailSyncErrorBit(svtTail);
-            int oFError = SvtEvioUtils.getSvtTailOFErrorBit(svtTail);
-            int skipCount = SvtEvioUtils.getSvtTailMultisampleSkipCount(svtTail);
-            
-            // 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);
+        // find header flag
+        int headerFlag = -1;
+        if( event.getIntegerParameters().containsKey("svt_event_header_good")) {
+            int[] isOK = event.getIntegerParameters().get("svt_event_header_good");
+            logger.fine("svt_event_header_good " +isOK[0] + " for run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + eventDate.toString() + " processed " + nEventsProcessed);
+            headerFlag = isOK[0];
+        }
+        
+        // print warning if there is no status flag in the event header!
+        if( headerFlag == -1)
+            logger.warning("No svt_event_header_good flag found for run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + eventDate.toString() + " processed " + nEventsProcessed);
+
+        // print if the flag is bad
+        if (headerFlag == 0) 
+            logger.info("svt_event_header_good " + headerFlag + " for run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + eventDate.toString() + " processed " + nEventsProcessed);
+                   
+        
+        Map<Integer, Integer> rceHeaderCount = new HashMap<Integer, Integer>();
+
+        // Get all the headers in the event
+        for(Map.Entry<String, int[]> entry : event.getIntegerParameters().entrySet()) {
+            
+            int roc = getRoc(entry.getKey());
+            
+            if( roc == -1) {
+                logger.fine("skip this entry \"" + entry.getKey());
+                continue;
+            }
+            
+            logger.fine("processing entry \"" + entry.getKey()+ "\"" + " for roc "  + roc);
+            
+            // initialize count
+            if (!rceHeaderCount.containsKey(roc)) 
+                rceHeaderCount.put(roc, 0);
+            rceHeaderCount.put(roc, rceHeaderCount.get(roc) + 1 );
+            
+            
+            int[] value = entry.getValue();
+           
+            // log number of errors
+            int syncError = 0;
+            int oFError = 0;
+            int skipCount = 0;
+            int multisampleErrorBits = 0;
+            
+            
+            // check if this is a header
+            if(entry.getKey().contains("svt_event_header_roc"))
+                logger.fine("found SVT header \"" + Integer.toHexString(value[0]) + "\" for \"" + entry.getKey()+ "\"" + " roc + " + roc);
+            
+            
+            // Analyze the SVT event tails
+            if(entry.getKey().contains("svt_event_tail_roc")) {
+
+                logger.fine("found SVT tail \"" + Integer.toHexString(value[0]) + "\" for \"" + entry.getKey()+ "\""+ " roc + "  + roc );
+                
+                // find the SVT event error information in the header
+                syncError = SvtEvioUtils.getSvtTailSyncErrorBit(value[0]);
+                oFError = SvtEvioUtils.getSvtTailOFErrorBit(value[0]);
+                skipCount = SvtEvioUtils.getSvtTailMultisampleSkipCount(value[0]);
+                
+                // check bits if applicable
+                checkBitValueRange(oFError);
+                checkBitValueRange(syncError);
+                
+                // print header errors to log
+                if( syncError != 0)
+                    logger.info("syncError: run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + eventDate.toString() + " processed " + nEventsProcessed +  " date " + eventDate.toString() + " roc " + roc);
+                
+                if( oFError != 0) 
+                    logger.info("oFError: run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + eventDate.toString()  + " 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 " + eventDate.toString()  + " processed " + nEventsProcessed +  " date " + eventDate.toString() + " roc " + roc);
+                    }
                 }
             }
-            
-            int nMultiSamples = headerInfo.getNumberOfMultisampleHeaders();
-            
-            logger.info("svtHeader " + Integer.toHexString(svtHeader) + " svtTail " + Integer.toHexString(svtTail) + " nMultiSamples " + nMultiSamples);
-            
-            //if(1==1)    continue;
-
-            int multisampleErrorBits = 0;
-
-            for(int iMultisample = 0; iMultisample < nMultiSamples; ++iMultisample) {
-
-                logger.info("iMultisample " + iMultisample);
-
-                logger.info(headerInfo.toString());
-
-                int[] multisampleHeader = headerInfo.getMultisampleHeader(iMultisample);
-                int multisampleHeaderTail = SvtEvioUtils.getMultisampleTailWord(multisampleHeader);
-                logger.info("found multisample tail: " + Integer.toHexString(multisampleHeaderTail));
-                int multisampleErrorBit = SvtEvioUtils.getErrorBitFromMultisampleHeader(multisampleHeaderTail);
-                checkBitValueRange(multisampleErrorBit);
-                logger.info("found multisample tail error bit: " + multisampleErrorBit);
-                if( multisampleErrorBit != 0) {
-                    multisampleErrorBits++;
-                    logger.info("multisample tail error: run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + eventDate.toString() 
-                            + " roc " + roc + " feb " + SvtEvioUtils.getFebIDFromMultisampleTail(multisampleHeaderTail) 
-                            + " hybrid " + SvtEvioUtils.getFebHybridIDFromMultisampleTail(multisampleHeaderTail)  
-                            + " apv " + SvtEvioUtils.getApvFromMultisampleTail(multisampleHeaderTail));
+
+            
+            if(entry.getKey().contains("svt_multisample_headers_roc")) {
+
+                logger.fine("found " + value.length + " SVT multisample headers:");
+                
+                for(int i=0; i< value.length/4; ++i) {
+                    
+                    // extract the headers
+                    int[] multisampleHeader = new int[4];
+                    System.arraycopy(value, i*4, multisampleHeader, 0, multisampleHeader.length);
+                    String str = "multisample header " + Integer.toString(i);                
+                    for(int j=0; j<4; ++j) str += " " + Integer.toHexString(multisampleHeader[j]);
+                    logger.fine(str);
+                    
+                    // get the multisample tail word
+                    int multisampleHeaderTail = SvtEvioUtils.getMultisampleTailWord(multisampleHeader);
+                    logger.fine("found multisample tail: " + Integer.toHexString(multisampleHeaderTail));
+
+                    // get the error bit
+                    int multisampleErrorBit = SvtEvioUtils.getErrorBitFromMultisampleHeader(multisampleHeaderTail);
+                    checkBitValueRange(multisampleErrorBit);
+                    logger.fine("found multisample tail error bit: " + multisampleErrorBit);
+                    
+                    if( multisampleErrorBit != 0) {
+                        multisampleErrorBits++;
+                        logger.info("multisample tail error: run " + event.getRunNumber() + " event " + event.getEventNumber() + " date " + eventDate.toString() 
+                                + " roc " + roc + " feb " + SvtEvioUtils.getFebIDFromMultisampleTail(multisampleHeaderTail) 
+                                + " hybrid " + SvtEvioUtils.getFebHybridIDFromMultisampleTail(multisampleHeaderTail)  
+                                + " apv " + SvtEvioUtils.getApvFromMultisampleTail(multisampleHeaderTail));
+                    }
                 }
-                
-                //if (1==1) break;
-
-                
-            }
-
-
-            // 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);
+            }
+            
+                    // keep track how many headers have errors
             if( syncError > 0) nRceSyncErrorCountN++;
             if( oFError > 0 ) nRceOFErrorCount++;
             if( skipCount > 0 ) nRceSkipCount++;
             if( multisampleErrorBits > 0 ) nRceMultisampleErrorCount++;
-            nRceSvtHeaders++;
-
-        }        
+        }
+        
+        
+        for(Map.Entry<Integer, Integer> entry : rceHeaderCount.entrySet())
+            logger.fine("ROC " + entry.getKey() + " count " + entry.getValue());
+
+        // number of headers processed is just the size
+        nRceSvtHeaders += rceHeaderCount.size();
         
         nEventsProcessed++;
     }
@@ -219,7 +237,7 @@
     
     @Override
     protected void endOfData() {
-        logger.info("endOfData: processed " + nEventsProcessed +  " date " + eventDate.toString());
+        logger.info("endOfData: processed " + nEventsProcessed +  "events date " + eventDate.toString());
         logger.info("nRceSvtHeaders " + nRceSvtHeaders);
         logger.info("nRceSyncErrorCountN " + nRceSyncErrorCountN);
         logger.info("nRceOFErrorCount " + nRceOFErrorCount);