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);