Print

Print


Author: [log in to unmask]
Date: Fri Sep 18 13:32:09 2015
New Revision: 3640

Log:
make histograms of errors

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

Added: java/trunk/users/src/main/java/org/hps/users/phansson/SvtHeaderAnalysisDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/SvtHeaderAnalysisDriver.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/SvtHeaderAnalysisDriver.java	Fri Sep 18 13:32:09 2015
@@ -0,0 +1,123 @@
+/**
+ * 
+ */
+package org.hps.users.phansson;
+
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
+import hep.aida.IPlotter;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.hps.evio.SvtEvioReader;
+import org.hps.evio.SvtEvioUtils;
+import org.hps.readout.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;
+import org.lcsim.util.log.LogUtil;
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class SvtHeaderAnalysisDriver extends Driver {
+
+    private final AIDA aida = AIDA.defaultInstance();
+    
+    private final String HeaderCollectionName = "SvtHeaders"; 
+    private final Logger logger = LogUtil.create(SvtHeaderAnalysisDriver.class.getSimpleName(), new BasicLogFormatter(), Level.INFO);
+    //private final int nROC = 14;
+    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 >>();
+    IPlotter plotter;
+    
+    /**
+     * 
+     */
+    public SvtHeaderAnalysisDriver() {
+        // TODO Auto-generated constructor stub
+    }
+    
+    
+    @Override
+    protected void detectorChanged(Detector detector) {
+        
+        
+        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);
+        
+        plotter.show();
+    }
+    
+    
+    @Override
+    protected void process(EventHeader event) {
+        
+        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 = SvtHeaderDataInfo.getNum(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);
+            
+            
+            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));
+                int multisampleErrorBit = SvtEvioUtils.getErrorBitFromMultisampleHeader(multisampleHeader);
+                logger.fine("found multisample header error bit: " + multisampleErrorBit);
+                if( multisampleErrorBit != 0) multisampleErrorBits++;
+            }
+            rceMultisampleErrorCount.fill(roc, multisampleErrorBits);
+                    
+        }
+        
+        
+        
+    }
+    
+    @Override
+    protected void endOfData() {
+        
+    }
+    
+
+}