Print

Print


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
+        
+    }
+    
+    
+