Print

Print


Author: [log in to unmask]
Date: Sun Oct  4 14:30:20 2015
New Revision: 3759

Log:
update analysis 

Added:
    java/trunk/users/src/main/java/org/hps/users/phansson/SvtOldHeaderAnalysisDriver.java
    java/trunk/users/src/main/java/org/hps/users/phansson/SvtOldHeaderDataInfo.java
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	Sun Oct  4 14:30:20 2015
@@ -126,16 +126,24 @@
         
         List<GenericObject> headers = event.get(GenericObject.class, HeaderCollectionName);
         
-        logger.fine("Found " + headers.size() + " SvtHeaders in event " + event.getEventNumber() + " run " + event.getRunNumber());
+        logger.info("Found " + headers.size() + " SvtHeaders in event " + event.getEventNumber() + " run " + event.getRunNumber());
         
         for(GenericObject header : headers ) {
-            logger.fine("nint " + header.getNInt());
-            int roc = SvtHeaderDataInfo.getNum(header);
+            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(SvtHeaderDataInfo.getTail(header));
-            int oFError = SvtEvioUtils.getSvtTailOFErrorBit(SvtHeaderDataInfo.getTail(header));
-            int skipCount = SvtEvioUtils.getSvtTailMultisampleSkipCount(SvtHeaderDataInfo.getTail(header));
+            int syncError = SvtEvioUtils.getSvtTailSyncErrorBit(svtTail);
+            int oFError = SvtEvioUtils.getSvtTailOFErrorBit(svtTail);
+            int skipCount = SvtEvioUtils.getSvtTailMultisampleSkipCount(svtTail);
             
             // check bits
             checkBitValueRange(oFError);
@@ -157,18 +165,26 @@
                 }
             }
             
-
-            // Check for multisample tail error bit
-            int nMultisamples = SvtEvioUtils.getSvtTailMultisampleCount(SvtHeaderDataInfo.getTail((SvtHeaderDataInfo)header));
-            logger.fine(nMultisamples + " multisamples");
+            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) {
-                int[] multisampleHeader = SvtHeaderDataInfo.getMultisampleHeader(iMultisample, (SvtHeaderDataInfo)header);
+
+            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.fine("found multisample tail: " + Integer.toHexString(multisampleHeaderTail));
+                logger.info("found multisample tail: " + Integer.toHexString(multisampleHeaderTail));
                 int multisampleErrorBit = SvtEvioUtils.getErrorBitFromMultisampleHeader(multisampleHeaderTail);
                 checkBitValueRange(multisampleErrorBit);
-                logger.fine("found multisample tail error bit: " + 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() 
@@ -176,8 +192,13 @@
                             + " 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);
@@ -188,11 +209,8 @@
             if( skipCount > 0 ) nRceSkipCount++;
             if( multisampleErrorBits > 0 ) nRceMultisampleErrorCount++;
             nRceSvtHeaders++;
-            
-            
-            
-        }
-        
+
+        }        
         
         nEventsProcessed++;
     }

Added: java/trunk/users/src/main/java/org/hps/users/phansson/SvtOldHeaderAnalysisDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/SvtOldHeaderAnalysisDriver.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/SvtOldHeaderAnalysisDriver.java	Sun Oct  4 14:30:20 2015
@@ -0,0 +1,216 @@
+/**
+ * 
+ */
+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.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.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.HeadBankData;
+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;
+import org.lcsim.util.log.LogUtil;
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class SvtOldHeaderAnalysisDriver extends Driver {
+
+    private final AIDA aida = AIDA.defaultInstance();
+    
+    private final String HeaderCollectionName = "SvtHeaders"; 
+    private final Logger logger = LogUtil.create(SvtOldHeaderAnalysisDriver.class.getSimpleName(), new BasicLogFormatter(), Level.INFO);
+    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";
+    
+    /**
+     * 
+     */
+    public SvtOldHeaderAnalysisDriver() {
+         
+    }
+    
+    public void setLogFileName(String name) {
+        this.logFileName = name;
+    }
+    
+    public void setShowPlots(boolean show) {
+        this.showPlots = show;
+    }
+    
+    @Override
+    protected void detectorChanged(Detector detector) {
+        
+        FileHandler fh;
+        try {
+            fh = new FileHandler(logFileName);
+            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();
+        
+        
+    }
+    
+    
+    @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;
+        
+        List<GenericObject> headers = event.get(GenericObject.class, HeaderCollectionName);
+        
+        logger.fine("Found " + headers.size() + " SvtHeaders in event " + event.getEventNumber() + " run " + event.getRunNumber());
+        
+        for(GenericObject header : headers ) {
+            logger.fine("nint " + header.getNInt());
+            int roc = SvtOldHeaderDataInfo.getNum(header);
+            
+            // find the errors in the header
+            int syncError = SvtEvioUtils.getSvtTailSyncErrorBit(SvtOldHeaderDataInfo.getTail(header));
+            int oFError = SvtEvioUtils.getSvtTailOFErrorBit(SvtOldHeaderDataInfo.getTail(header));
+            int skipCount = SvtEvioUtils.getSvtTailMultisampleSkipCount(SvtOldHeaderDataInfo.getTail(header));
+            
+            // 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(SvtOldHeaderDataInfo.getTail(header));
+            logger.fine(nMultisamples + " multisamples");
+            int multisampleErrorBits = 0;
+            for(int iMultisample = 0; iMultisample != nMultisamples; ++iMultisample) {
+                int multisampleHeader = SvtOldHeaderDataInfo.getMultisample(iMultisample, header);
+                logger.fine("found multisample tail: " + Integer.toHexString(multisampleHeader));
+                int multisampleErrorBit = SvtEvioUtils.getErrorBitFromMultisampleHeader(multisampleHeader);
+                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(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++;
+            if( skipCount > 0 ) nRceSkipCount++;
+            if( multisampleErrorBits > 0 ) nRceMultisampleErrorCount++;
+            nRceSvtHeaders++;
+            
+            
+            
+        }
+        
+        
+        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);
+        logger.info("nRceSkipCount " + nRceSkipCount);
+        logger.info("nRceMultisampleErrorCount " + nRceMultisampleErrorCount);
+        
+    }
+    
+
+}

Added: java/trunk/users/src/main/java/org/hps/users/phansson/SvtOldHeaderDataInfo.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/SvtOldHeaderDataInfo.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/SvtOldHeaderDataInfo.java	Sun Oct  4 14:30:20 2015
@@ -0,0 +1,133 @@
+/**
+ * 
+ */
+package org.hps.users.phansson;
+
+import org.lcsim.event.GenericObject;
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class SvtOldHeaderDataInfo implements GenericObject {
+
+    private final int num;
+    private final int header;
+    private final int tail;
+    private int[] multisampleheader;
+    
+    
+        
+    public SvtOldHeaderDataInfo(int num, int header, int tail) {
+        this.num = num;
+        this.header = header;
+        this.tail = tail;
+    }
+    
+    public SvtOldHeaderDataInfo(int num, int header, int tail, int[] multisampleheaders) {
+        this.num = num;
+        this.header = header;
+        this.tail = tail;
+        this.multisampleheader = multisampleheaders;
+    }
+    
+    public void setMultisampleHeaders(int[] multisampleheaders) {
+        this.multisampleheader = multisampleheaders;
+    }
+    
+    public int[] getMultisampleHeaders() {
+        return this.multisampleheader;
+    }
+    
+    public int getMultisampleHeader(int index) {
+        if( index >= getMultisampleHeaders().length || index < 0)
+            throw new ArrayIndexOutOfBoundsException(index);
+        return this.multisampleheader[index];
+    }
+    
+    public int getNum() {
+        return this.num;
+    }
+    
+    public int getTail() {
+        return this.tail;
+    }
+
+    public int getHeader() {
+        return this.header;
+    }
+
+    @Override
+    public int getNInt() {
+        return 3 + multisampleheader.length;
+    }
+
+    @Override
+    public int getNFloat() {
+        return 0;
+    }
+
+    @Override
+    public int getNDouble() {
+       return 0;
+    }
+
+    @Override
+    public int getIntVal(int index) {
+        int value;
+        switch (index) {
+            case 0:
+                value = getNum();
+                break;
+            case 1:
+                value = getHeader();
+                break;
+            case 2:
+                value = getTail();
+                break;
+            default:
+                if( (index-3) >= getMultisampleHeaders().length )
+                    throw new RuntimeException("Invalid index " + Integer.toString(index));
+                else
+                    value = getMultisampleHeader(index -3);
+                break;
+        }
+        return value;
+    }
+
+
+    @Override
+    public float getFloatVal(int index) {
+        throw new ArrayIndexOutOfBoundsException();
+    }
+
+
+    @Override
+    public double getDoubleVal(int index) {
+        throw new ArrayIndexOutOfBoundsException();
+    }
+
+
+    @Override
+    public boolean isFixedSize() {
+        return true;
+    }
+    
+    public static int getNum(GenericObject header) {
+        return header.getIntVal(0);
+    }
+    
+    public static int getTail(GenericObject header) {
+        return header.getIntVal(2);
+    }
+    
+    public static int getHeader(GenericObject header) {
+        return header.getIntVal(1);
+    }
+    
+    public static int getMultisample(int i, GenericObject header) {
+        return header.getIntVal(i+3);
+    }
+
+
+}