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() { + + } + + +}