Author: [log in to unmask]
Date: Thu Sep 17 11:30:12 2015
New Revision: 3630
Log:
Make svt header info a permanent part of the converter with a more compact format.
Modified:
java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java
java/trunk/evio/src/main/java/org/hps/evio/EnhancedSvtEvioReader.java
java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
java/trunk/evio/src/main/java/org/hps/evio/SvtEvioReader.java
java/trunk/evio/src/main/java/org/hps/evio/SvtEvioUtils.java
java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java
Modified: java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java Thu Sep 17 11:30:12 2015
@@ -7,36 +7,37 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.hps.readout.svt.SvtHeaderDataInfo;
+import org.hps.util.Pair;
+import org.jlab.coda.jevio.BaseStructure;
import org.jlab.coda.jevio.DataType;
import org.jlab.coda.jevio.EvioEvent;
import org.jlab.coda.jevio.IEvioFilter;
import org.jlab.coda.jevio.IEvioStructure;
import org.jlab.coda.jevio.StructureFinder;
-import org.jlab.coda.jevio.BaseStructure;
import org.jlab.coda.jevio.StructureType;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.event.EventHeader;
-import org.lcsim.event.GenericObject;
import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.base.BaseRawTrackerHit;
import org.lcsim.geometry.Subdetector;
import org.lcsim.lcio.LCIOUtil;
import org.lcsim.util.log.DefaultLogFormatter;
import org.lcsim.util.log.LogUtil;
-import org.hps.readout.svt.SvtErrorBitData;
-import org.hps.readout.svt.SvtHeaderData;
-import org.hps.util.Pair;
/**
* Abstract SVT EVIO reader used to convert SVT bank sample blocks to
* {@link RawTrackerHit}s.
*
* @author Omar Moreno <[log in to unmask]>
+ * @author Per Hansson Adrian <[log in to unmask]>
* @date November 20, 2014
*
*/
public abstract class AbstractSvtEvioReader extends EvioReader {
+ public static final String SVT_HEADER_COLLECTION_NAME = "SvtHeaders";
+
// Initialize the logger
protected static Logger logger = LogUtil.create(AbstractSvtEvioReader.class.getName(),
@@ -57,8 +58,7 @@
// Collections and names
private static final String SVT_HIT_COLLECTION_NAME = "SVTRawTrackerHits";
List<RawTrackerHit> rawHits = new ArrayList<RawTrackerHit>();
- List<SvtErrorBitData> errorBits = new ArrayList<SvtErrorBitData>();
- List<SvtHeaderData> headers = new ArrayList<SvtHeaderData>();
+ List<SvtHeaderDataInfo> headers = new ArrayList<SvtHeaderDataInfo>();
// Constants
private static final String SUBDETECTOR_NAME = "Tracker";
@@ -185,9 +185,6 @@
// Clear the list of raw tracker hits
rawHits.clear();
- // Clear the list of error bits
- errorBits.clear();
-
// Clear the list of headers
headers.clear();
@@ -232,32 +229,36 @@
}
// extract header and tail information
- SvtHeaderData headerData = this.extractSvtHeader(dataBank.getHeader().getNumber(), data);
- if(headerData != null) {
- // Check that the multisample count is consistent
- if( sampleCount != headerData.getMultisampleCount()*4)
- throw new RuntimeException("multisample count is not consistent with bank size.");
- // Add to list
- headers.add(headerData);
- }
-
+ SvtHeaderDataInfo headerData = this.extractSvtHeader(dataBank.getHeader().getNumber(), data);
+
+ // Check that the multisample count is consistent
+ if( sampleCount != SvtEvioUtils.getSvtTailMultisampleCount(headerData.getTail())*4)
+ throw new RuntimeException("multisample count is not consistent with bank size.");
+
+ // Add header to list
+ headers.add(headerData);
+
+
+ // create array for the apv headers of known length
+ int multisampleHeaders[] = new int[sampleCount/4];
+
// Loop through all of the samples and make hits
for (int samplesN = 0; samplesN < sampleCount; samplesN += 4) {
int[] samples = new int[4];
System.arraycopy(data, this.getDataHeaderLength() + samplesN, samples, 0, samples.length);
- // Extract error bit
- if( SvtEvioUtils.isApvHeader(samples) ) {
- SvtErrorBitData errorBitData = this.extractErrorBit( samples );
- if(errorBitData != null)
- errorBits.add(errorBitData);
- }
+ // Extract multisample header
+ if( SvtEvioUtils.isApvHeader(samples) )
+ multisampleHeaders[samplesN/4] = SvtEvioUtils.getApvHeaderWord(samples);
// If a set of samples is associated with an APV header or tail, skip it
if (!this.isValidSampleSet(samples)) continue;
rawHits.add(this.makeHit(samples));
}
+
+ // add multisample headers to header data object
+ headerData.setMultisampleHeaders(multisampleHeaders);
}
}
@@ -268,50 +269,29 @@
// Add the collection of raw hits to the LCSim event
lcsimEvent.put(SVT_HIT_COLLECTION_NAME, rawHits, RawTrackerHit.class, flag, READOUT_NAME);
- // Add error bits to the event
- this.addErrorBitsToEvent(errorBits, lcsimEvent);
-
// Add SVT header data to the event
this.addSvtHeadersToEvents(headers, lcsimEvent);
return true;
}
- /**
- * Make a {@link GenericObject} containing the error bits from the SVT data.
- *
- * @param multisample : multisample from the SVT
- * @param errorBits : List of {@link SvtErrorBitData} to store it.
- */
- protected abstract SvtErrorBitData extractErrorBit(int[] multisample);
-
-
- /**
- *
- * Add {@link SvtErrorBitData} list to the event.
- *
- * @param errorBits: collection to add
- * @param lcsimEvent: the event to store it.
- */
- protected abstract void addErrorBitsToEvent(List<SvtErrorBitData> errorBits, EventHeader lcsimEvent);
-
-
- /**
- * Extract the header information and store it in a {@link SvtHeaderData} object.
+
+ /**
+ * Extract the header information and store it in a {@link SvtHeaderDataInfo} object.
* @param num - bank num (ROC id)
* @param data - SVT data block.
- * @return the {@link SvtHeaderData}.
- */
- protected abstract SvtHeaderData extractSvtHeader(int num, int[] data);
-
-
- /**
- * Add {@link SvtHeaderData} list to the event.
- * @param headers - list to add.
- * @param lcsimEvent - event to add to.
- */
- protected abstract void addSvtHeadersToEvents(List<SvtHeaderData> headers, EventHeader lcsimEvent);
-
+ * @return the {@link SvtHeaderDataInfo}.
+ */
+ protected abstract SvtHeaderDataInfo extractSvtHeader(int num, int[] data);
+
+
+ protected void addSvtHeadersToEvents(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) {
+ // Turn on 64-bit cell ID.
+ int flag = LCIOUtil.bitSet(0, 31, true);
+ // Add the collection of raw hits to the LCSim event
+ lcsimEvent.put(SVT_HEADER_COLLECTION_NAME, headers, SvtHeaderDataInfo.class, flag);
+
+ }
/**
* Make a {@link RawTrackerHit} from a set of samples.
Modified: java/trunk/evio/src/main/java/org/hps/evio/EnhancedSvtEvioReader.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/EnhancedSvtEvioReader.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/EnhancedSvtEvioReader.java Thu Sep 17 11:30:12 2015
@@ -3,12 +3,6 @@
*/
package org.hps.evio;
-import java.util.List;
-
-import org.hps.readout.svt.SvtErrorBitData;
-import org.hps.readout.svt.SvtHeaderData;
-import org.lcsim.event.EventHeader;
-import org.lcsim.lcio.LCIOUtil;
/**
*
@@ -19,65 +13,13 @@
*/
final public class EnhancedSvtEvioReader extends SvtEvioReader {
- public static final String SVT_ERROR_BIT_COLLECTION_NAME = "SvtErrorBits";
- public static final String SVT_HEADER_COLLECTION_NAME = "SvtHeaders";
-
+
/**
*
*/
public EnhancedSvtEvioReader() {
super();
}
-
- @Override
- protected SvtErrorBitData extractErrorBit(int[] multisample) {
-
- if( !SvtEvioUtils.isApvHeader(multisample) )
- throw new RuntimeException("Need the APV header in order to extract the error bit.");
-
- int errorBit = SvtEvioUtils.getErrorBit(multisample);
- int rce = SvtEvioUtils.getFpgaID(multisample);
- int feb = SvtEvioUtils.getFebID(multisample);
- int hybrid = SvtEvioUtils.getFebHybridID(multisample);
- int apv = SvtEvioUtils.getApv(multisample);
-
- return new SvtErrorBitData(rce, feb, hybrid, apv, errorBit);
- }
-
- @Override
- protected void addErrorBitsToEvent(List<SvtErrorBitData> errorBits,
- EventHeader lcsimEvent) {
- // Turn on 64-bit cell ID.
- int flag = LCIOUtil.bitSet(0, 31, true);
- // Add the collection of raw hits to the LCSim event
- lcsimEvent.put(SVT_ERROR_BIT_COLLECTION_NAME, errorBits, SvtErrorBitData.class, flag);
-
-
- }
-
- @Override
- protected SvtHeaderData extractSvtHeader(int num, int[] data) {
- // Extract the header information
- int svtHeader = SvtEvioUtils.getSvtHeader(data);
- int svtDataType = SvtEvioUtils.getSvtDataType(svtHeader);
- int eventCount = SvtEvioUtils.getSvtDataEventCounter(svtHeader);
- // Extract the tail information
- int svtTail = SvtEvioUtils.getSvtTail(data);
- int overflowError = SvtEvioUtils.getSvtTailOFErrorBit(svtTail);
- int syncError = SvtEvioUtils.getSvtTailSyncErrorBit(svtTail);
- int skipCount = SvtEvioUtils.getSvtTailMultisampleSkipCount(svtTail);
- int multisampleCount = SvtEvioUtils.getSvtTailMultisampleCount(svtTail);
- return new SvtHeaderData(num, eventCount, overflowError, syncError, skipCount, multisampleCount);
- }
-
- @Override
- protected void addSvtHeadersToEvents(List<SvtHeaderData> headers,
- EventHeader lcsimEvent) {
- // Turn on 64-bit cell ID.
- int flag = LCIOUtil.bitSet(0, 31, true);
- // Add the collection of raw hits to the LCSim event
- lcsimEvent.put(SVT_HEADER_COLLECTION_NAME, headers, SvtHeaderData.class, flag);
-
- }
+
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java Thu Sep 17 11:30:12 2015
@@ -68,7 +68,7 @@
ecalReader.setTopBankTag(0x25);
ecalReader.setBotBankTag(0x27);
ecalReader.setRfBankTag(0x2e);
- svtReader = new EnhancedSvtEvioReader();
+ svtReader = new SvtEvioReader();
sspCrateBankTag = 0x2E; // A.C. modification after Sergey's confirmation
sspBankTag = 0xe10c;
intBanks = new ArrayList<IntBankDefinition>();
Modified: java/trunk/evio/src/main/java/org/hps/evio/SvtEvioReader.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/SvtEvioReader.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/SvtEvioReader.java Thu Sep 17 11:30:12 2015
@@ -2,15 +2,14 @@
import java.util.List;
+import org.hps.readout.svt.SvtHeaderDataInfo;
+import org.hps.util.Pair;
import org.jlab.coda.jevio.BaseStructure;
import org.jlab.coda.jevio.EvioEvent;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.event.EventHeader;
import org.lcsim.event.RawTrackerHit;
import org.lcsim.geometry.Subdetector;
-import org.hps.readout.svt.SvtErrorBitData;
-import org.hps.readout.svt.SvtHeaderData;
-import org.hps.util.Pair;
/**
* SVT EVIO reader used to convert SVT bank integer data to LCIO objects.
@@ -208,24 +207,13 @@
}
@Override
- protected SvtErrorBitData extractErrorBit(int[] multisample) {
- return null;
- }
-
- @Override
- protected void addErrorBitsToEvent(List<SvtErrorBitData> errorBits,
- EventHeader lcsimEvent) {
- //do nothing here
- }
-
- @Override
- protected SvtHeaderData extractSvtHeader(int num, int[] data) {
- return null;
- }
-
- @Override
- protected void addSvtHeadersToEvents(List<SvtHeaderData> headers,
- EventHeader lcsimEvent) {
- //do nothing here
- }
+ protected SvtHeaderDataInfo extractSvtHeader(int num, int[] data) {
+ // Extract the header information
+ int svtHeader = SvtEvioUtils.getSvtHeader(data);
+ // Extract the tail information
+ int svtTail = SvtEvioUtils.getSvtTail(data);
+ return new SvtHeaderDataInfo(num, svtHeader, svtTail);
+ }
+
+
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/SvtEvioUtils.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/SvtEvioUtils.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/SvtEvioUtils.java Thu Sep 17 11:30:12 2015
@@ -1,4 +1,6 @@
package org.hps.evio;
+
+import org.apache.commons.math3.analysis.function.Rint;
/**
* A set of static utility methods used to decode SVT data.
@@ -146,6 +148,18 @@
if (((data[ENG_RUN_SAMPLE_HEADER_INDEX] >>> 30) & ENG_RUN_APV_HEADER_MASK) == 1) return true;
return false;
}
+
+ /**
+ * Get the multisample header word.
+ * @param multisample
+ * @return the header word
+ */
+ public static int getApvHeaderWord(int[] multisample) {
+ if( !isApvHeader(multisample) )
+ throw new RuntimeException("Need ApvHeader multisample in order to extract the header word.");
+ return multisample[ENG_RUN_SAMPLE_HEADER_INDEX];
+ }
+
/**
* Check if the samples are APV tails
Modified: java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java Thu Sep 17 11:30:12 2015
@@ -4,6 +4,7 @@
import org.hps.readout.svt.SvtErrorBitData;
import org.hps.readout.svt.SvtHeaderData;
+import org.hps.readout.svt.SvtHeaderDataInfo;
import org.hps.util.Pair;
import org.jlab.coda.jevio.BaseStructure;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
@@ -167,30 +168,12 @@
}
@Override
- protected SvtErrorBitData extractErrorBit(int[] multisample) {
+ protected SvtHeaderDataInfo extractSvtHeader(int num, int[] data) {
// TODO Auto-generated method stub
return null;
}
- @Override
- protected void addErrorBitsToEvent(List<SvtErrorBitData> errorBits,
- EventHeader lcsimEvent) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- protected SvtHeaderData extractSvtHeader(int num, int[] data) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- protected void addSvtHeadersToEvents(List<SvtHeaderData> headers,
- EventHeader lcsimEvent) {
- // TODO Auto-generated method stub
-
- }
+
}
|