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