Author: [log in to unmask] Date: Thu Sep 24 12:54:45 2015 New Revision: 3694 Log: Go back to a more abstracted Svt evio reader to allow more flexibility Added: java/trunk/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java Modified: java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.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/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 24 12:54:45 2015 @@ -236,10 +236,8 @@ // Check the integrity of the SVT header data this.checkSvtHeaderData(headerData); - // 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."); + this.checkSvtSampleCount(sampleCount, headerData); // Add header to list headers.add(headerData); @@ -255,8 +253,9 @@ System.arraycopy(data, this.getDataHeaderLength() + samplesN, samples, 0, samples.length); // Extract multisample header - if( SvtEvioUtils.isMultisampleHeader(samples) ) - multisampleHeaders[samplesN/4] = SvtEvioUtils.getMultisampleTailWord(samples); + this.extractMultisampleTail(samples, samplesN/4, multisampleHeaders); + //if( SvtEvioUtils.isMultisampleHeader(samples) ) + // multisampleHeaders[samplesN/4] = SvtEvioUtils.getMultisampleTailWord(samples); // If a set of samples is associated with an APV header or tail, skip it if (!this.isValidSampleSet(samples)) continue; @@ -264,7 +263,8 @@ } // add multisample headers to header data object - headerData.setMultisampleHeaders(multisampleHeaders); + this.setMultiSampleHeaders(headerData, multisampleHeaders); + //headerData.setMultisampleHeaders(multisampleHeaders); } } @@ -283,7 +283,14 @@ return true; } - + protected abstract void setMultiSampleHeaders(SvtHeaderDataInfo headerData, int[] multisampleHeaders); + + protected abstract void extractMultisampleTail(int[] multisample, int index, int[] multisampleHeaders); + + + + protected abstract void checkSvtSampleCount(int sampleCount, SvtHeaderDataInfo headerData) throws SvtEvioHeaderException; + /** * Check if the SVT headers are as expected. * @param headers - list of headers to check @@ -299,13 +306,7 @@ 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); - - } + protected abstract void addSvtHeadersToEvents(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent); /** * Make a {@link RawTrackerHit} from a set of samples. Added: java/trunk/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java (added) +++ java/trunk/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java Thu Sep 24 12:54:45 2015 @@ -0,0 +1,79 @@ +/** + * + */ +package org.hps.evio; + +import java.util.List; + +import org.hps.readout.svt.SvtHeaderDataInfo; +import org.lcsim.event.EventHeader; +import org.lcsim.lcio.LCIOUtil; + +/** + * @author Per Hansson Adrian <[log in to unmask]> + * + */ +public class AugmentedSvtEvioReader extends SvtEvioReader { + + /** + * + */ + public AugmentedSvtEvioReader() { + super(); + } + + + + + @Override + 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); + + } + + @Override + protected void checkSvtHeaderData(SvtHeaderDataInfo header) throws SvtEvioHeaderException { + int tail = header.getTail(); + if( SvtEvioUtils.getSvtTailSyncErrorBit(tail) != 0) { + throw new SvtEvioHeaderException("This header had a SyncError"); + } + else if( SvtEvioUtils.getSvtTailOFErrorBit(tail) != 0) { + throw new SvtEvioHeaderException("This header had a OverFlowError"); + } + else if( SvtEvioUtils.getSvtTailMultisampleSkipCount(tail) != 0) { + throw new SvtEvioHeaderException("This header had a skipCount " + SvtEvioUtils.getSvtTailMultisampleSkipCount(tail)); + } + } + + @Override + 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); + +} + + @Override + protected void checkSvtSampleCount(int sampleCount, SvtHeaderDataInfo headerData) throws SvtEvioHeaderException { + if( sampleCount != SvtEvioUtils.getSvtTailMultisampleCount(headerData.getTail())*4) + throw new SvtEvioHeaderException("multisample count is not consistent with bank size."); + } + + @Override + protected void setMultiSampleHeaders(SvtHeaderDataInfo headerData, int[] multisampleHeaders) { + headerData.setMultisampleHeaders(multisampleHeaders); + } + + @Override + protected void extractMultisampleTail(int[] multisample, int index, int[] multisampleHeaders) { + if( SvtEvioUtils.isMultisampleHeader(multisample) ) + multisampleHeaders[index] = SvtEvioUtils.getMultisampleTailWord(multisample); + } + + +} 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 24 12:54:45 2015 @@ -77,7 +77,7 @@ ecalReader.setTopBankTag(0x25); ecalReader.setBotBankTag(0x27); ecalReader.setRfBankTag(0x2e); - svtReader = new SvtEvioReader(); + svtReader = new AugmentedSvtEvioReader(); 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 24 12:54:45 2015 @@ -10,6 +10,7 @@ import org.lcsim.event.EventHeader; import org.lcsim.event.RawTrackerHit; import org.lcsim.geometry.Subdetector; +import org.lcsim.lcio.LCIOUtil; /** * SVT EVIO reader used to convert SVT bank integer data to LCIO objects. @@ -208,27 +209,39 @@ } @Override + protected void addSvtHeadersToEvents(List<SvtHeaderDataInfo> headers, + EventHeader lcsimEvent) { + + } + + @Override + protected void checkSvtHeaderData(SvtHeaderDataInfo header) + throws SvtEvioHeaderException { + } + + @Override 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); - } - - @Override - protected void checkSvtHeaderData(SvtHeaderDataInfo header) throws SvtEvioHeaderException { - int tail = header.getTail(); - if( SvtEvioUtils.getSvtTailSyncErrorBit(tail) != 0) { - throw new SvtEvioHeaderException("This header had a SyncError"); - } - else if( SvtEvioUtils.getSvtTailOFErrorBit(tail) != 0) { - throw new SvtEvioHeaderException("This header had a OverFlowError"); - } - else if( SvtEvioUtils.getSvtTailMultisampleSkipCount(tail) != 0) { - throw new SvtEvioHeaderException("This header had a skipCount " + SvtEvioUtils.getSvtTailMultisampleSkipCount(tail)); - } - } - + return null; + } + + @Override + protected void checkSvtSampleCount(int sampleCount, + SvtHeaderDataInfo headerData) throws SvtEvioHeaderException { + } + + @Override + protected void setMultiSampleHeaders(SvtHeaderDataInfo headerData, + int[] multisampleHeaders) { + // TODO Auto-generated method stub + + } + + @Override + protected void extractMultisampleTail(int[] multisample, int index, + int[] multisampleHeaders) { + // TODO Auto-generated method stub + + } + } 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 24 12:54:45 2015 @@ -7,6 +7,7 @@ import org.jlab.coda.jevio.BaseStructure; import org.lcsim.detector.tracker.silicon.HpsSiSensor; import org.lcsim.detector.tracker.silicon.HpsTestRunSiSensor; +import org.lcsim.event.EventHeader; import org.lcsim.event.RawTrackerHit; import org.lcsim.geometry.Subdetector; @@ -177,6 +178,36 @@ } + @Override + protected void addSvtHeadersToEvents(List<SvtHeaderDataInfo> headers, + EventHeader lcsimEvent) { + // TODO Auto-generated method stub + + } + + @Override + protected void checkSvtSampleCount(int sampleCount, + SvtHeaderDataInfo headerData) throws SvtEvioHeaderException { + // TODO Auto-generated method stub + + } + + @Override + protected void setMultiSampleHeaders(SvtHeaderDataInfo headerData, + int[] multisampleHeaders) { + // TODO Auto-generated method stub + + } + + @Override + protected void extractMultisampleTail(int[] multisample, int index, + int[] multisampleHeaders) { + // TODO Auto-generated method stub + + } + + +