Print

Print


Author: [log in to unmask]
Date: Thu Aug 20 12:46:08 2015
New Revision: 3379

Log:
Remove scaler parameters from event header.  HPSJAVA-577

Removed:
    java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParameters.java
    java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParametersIndex.java
Modified:
    java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
    java/trunk/integration-tests/src/test/java/org/hps/test/it/EvioToLcioTest.java

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 Aug 20 12:46:08 2015
@@ -14,7 +14,6 @@
 import org.hps.record.epics.EpicsEvioProcessor;
 import org.hps.record.evio.EvioEventUtilities;
 import org.hps.record.scalers.ScalerData;
-import org.hps.record.scalers.ScalerParameters;
 import org.hps.record.scalers.ScalersEvioProcessor;
 import org.jlab.coda.jevio.EvioEvent;
 import org.lcsim.conditions.ConditionsEvent;
@@ -23,15 +22,13 @@
 import org.lcsim.util.log.LogUtil;
 
 /**
- * This is the {@link org.hps.record.LCSimEventBuilder} implementation for the
- * Engineering Run and the Commissioning Run for converting EVIO to LCIO events.
+ * This is the {@link org.hps.record.LCSimEventBuilder} implementation for the Engineering Run and the Commissioning Run
+ * for converting EVIO to LCIO events.
  * <p>
- * It has several modifications from the Test Run builder including different
- * values for certain bank tags.
+ * It has several modifications from the Test Run builder including different values for certain bank tags.
  * <p>
- * Additionally, this builder will write DAQ config information, EPICS control
- * data, and scalar bank data into the output LCSim events if these banks are
- * present in the EVIO data.
+ * Additionally, this builder will write DAQ config information, EPICS control data, and scalar bank data into the
+ * output LCSim events if these banks are present in the EVIO data.
  *
  * @author Sho Uemura, SLAC
  * @author Jeremy McCormick, SLAC
@@ -50,30 +47,24 @@
     private final EpicsEvioProcessor epicsProcessor = new EpicsEvioProcessor();
 
     /**
-     * Scaler parameters for lcsim event parameters.
-     */
-    private ScalerParameters scalerParameters = new ScalerParameters();
-
-    /**
      * EVIO processor for extracting scaler data.
      */
     private final ScalersEvioProcessor scalerProcessor = new ScalersEvioProcessor();
 
     /**
+     * Writes event flags describing the SVT state.
+     */
+    private final SvtEventFlagger svtEventFlagger;
+
+    /**
      * Reads trigger config.
      */
     private TriggerConfigEvioReader triggerConfigReader = null;
 
     /**
-     * Writes event flags describing the SVT state.
-     */
-    private final SvtEventFlagger svtEventFlagger;
-
-    /**
      * Class constructor.
      */
     public LCSimEngRunEventBuilder() {
-        // FIXME: Is this the best place for doing all this stuff???
         ecalReader.setTopBankTag(0x25);
         ecalReader.setBotBankTag(0x27);
         ecalReader.setRfBankTag(0x2e);
@@ -81,13 +72,19 @@
         sspCrateBankTag = 0x2E; // A.C. modification after Sergey's confirmation
         sspBankTag = 0xe10c;
         intBanks = new ArrayList<IntBankDefinition>();
-        intBanks.add(new IntBankDefinition(SSPData.class, new int[]{sspCrateBankTag, sspBankTag}));
-        intBanks.add(new IntBankDefinition(TIData.class, new int[]{sspCrateBankTag, 0xe10a}));
-        intBanks.add(new IntBankDefinition(HeadBankData.class, new int[]{sspCrateBankTag, 0xe10f}));
-        intBanks.add(new IntBankDefinition(TDCData.class, new int[]{0x3a, 0xe107}));
+        intBanks.add(new IntBankDefinition(SSPData.class, new int[] {sspCrateBankTag, sspBankTag}));
+        intBanks.add(new IntBankDefinition(TIData.class, new int[] {sspCrateBankTag, 0xe10a}));
+        intBanks.add(new IntBankDefinition(HeadBankData.class, new int[] {sspCrateBankTag, 0xe10f}));
+        intBanks.add(new IntBankDefinition(TDCData.class, new int[] {0x3a, 0xe107}));
         // ecalReader = new ECalEvioReader(0x25, 0x27);
         triggerConfigReader = new TriggerConfigEvioReader();
         svtEventFlagger = new SvtEventFlagger();
+    }
+
+    @Override
+    public void conditionsChanged(final ConditionsEvent conditionsEvent) {
+        super.conditionsChanged(conditionsEvent);
+        svtEventFlagger.initialize();
     }
 
     /**
@@ -148,9 +145,6 @@
         // Write scalers into the event, if they exist in the EVIO data.
         this.writeScalerData(evioEvent, lcsimEvent);
 
-        // Write out current ScalerParameters to event header.
-        this.scalerParameters.write(lcsimEvent);
-
         this.svtEventFlagger.writeFlags(lcsimEvent);
 
         return lcsimEvent;
@@ -180,7 +174,7 @@
     private void writeEpicsData(final EventHeader lcsimEvent) {
 
         // Get EpicsData from processor that was already activated (usually it is null).
-        EpicsData epicsData = epicsProcessor.getEpicsData();
+        final EpicsData epicsData = epicsProcessor.getEpicsData();
 
         // Was new EpicsData created?
         if (epicsData != null) {
@@ -189,9 +183,6 @@
             // Write to the collection in the lcsim event.
             epicsData.write(lcsimEvent);
 
-            // Update the ScalerParameters.
-            scalerParameters.readEpicsData(epicsData);
-
             // Reset the processor.
             epicsProcessor.reset();
         }
@@ -209,7 +200,7 @@
         scalerProcessor.process(evioEvent);
 
         // Get ScalerData from the processor.
-        ScalerData scalerData = scalerProcessor.getScalerData();
+        final ScalerData scalerData = scalerProcessor.getCurrentScalerData();
 
         // Was new ScalerData created?
         if (scalerData != null) {
@@ -218,16 +209,7 @@
                     + evioEvent.getEventNumber());
 
             // Write the current scalar data to the event.
-            scalerProcessor.getScalerData().write(lcsimEvent);
-
-            // Update current ScalerParameters.
-            scalerParameters.readScalerData(scalerData);
-        }
-    }
-
-    @Override
-    public void conditionsChanged(ConditionsEvent conditionsEvent) {
-        super.conditionsChanged(conditionsEvent);
-        svtEventFlagger.initialize();
+            scalerProcessor.getCurrentScalerData().write(lcsimEvent);
+        }
     }
 }

Modified: java/trunk/integration-tests/src/test/java/org/hps/test/it/EvioToLcioTest.java
 =============================================================================
--- java/trunk/integration-tests/src/test/java/org/hps/test/it/EvioToLcioTest.java	(original)
+++ java/trunk/integration-tests/src/test/java/org/hps/test/it/EvioToLcioTest.java	Thu Aug 20 12:46:08 2015
@@ -1,15 +1,16 @@
 package org.hps.test.it;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import junit.framework.TestCase;
 
 import org.hps.evio.EvioToLcio;
+import org.hps.record.epics.Epics2sVariables;
 import org.hps.record.epics.EpicsData;
 import org.hps.record.scalers.ScalerData;
-import org.hps.record.scalers.ScalerParameters;
-import org.hps.record.scalers.ScalerParametersIndex;
 import org.hps.test.util.TestOutputFile;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
@@ -78,31 +79,38 @@
                     nEmpty = 0;
                 }
                 ++nEmpty;
-                //System.out.println(name + " is empty in event " + event.getEventNumber());
+                // System.out.println(name + " is empty in event " + event.getEventNumber());
                 emptyCollections.put(name, nEmpty);
             }
         }
-        
-        /**
-         * Check scaler parameters from event.
-         * 
-         * @param event the lcsim event
-         */
-        private void checkScalerParameters(final EventHeader event) {
-            
-            // If this is missing an exception will be thrown.
-            ScalerParameters scalerParameters = ScalerParameters.read(event);
-            
-            // Spot check scaler parameters from event after scaler data occurs in the data stream.            
-            if (event.getEventNumber() == 25000) {                
-                System.out.println();
-                System.out.println("scaler parameters for event " + event.getEventNumber() + " ...");
-                System.out.println(scalerParameters);
-                
-                // Check scaler values against answer key.
-                for (ScalerParametersIndex index : ScalerParametersIndex.values()) {
-                    assertEquals("Wrong " + index.name() + " value.", scalerParameters.getValue(index), SCALER_VALUES[index.ordinal()]);
+
+        private void checkCollections(final EventHeader event) {
+            for (int i = 0; i < COLLECTION_NAMES.length; i++) {
+                this.checkCollection(event, COLLECTION_TYPES[i], COLLECTION_NAMES[i]);
+            }
+        }
+
+        private void checkEpicsData(final EventHeader event) {
+            final EpicsData epicsData = EpicsData.read(event);
+            if (epicsData != null) {
+                if (epicsData.getEpicsHeader() == null) {
+                    throw new RuntimeException("The EpicsData header is null.");
                 }
+                for (final String variableName : Epics2sVariables.getVariables().keySet()) {
+                    if (!EXCLUDED_EPICS_VARIABLES.contains(variableName)) {
+                        if (!epicsData.getKeys().contains(variableName)) {
+                            throw new RuntimeException("EpicsData is missing key: " + variableName);
+                        }
+                    }
+                }
+                ++epicsDataCount;
+            }
+        }
+
+        private void checkScalarData(final EventHeader event) {
+            final ScalerData scalerData = ScalerData.read(event);
+            if (scalerData != null) {
+                ++scalerDataCount;
             }
         }
 
@@ -114,77 +122,69 @@
         @Override
         public void process(final EventHeader event) {
 
-            // Find EPICS data.
-            final EpicsData epicsData = EpicsData.read(event);
-            if (epicsData != null) {
-                ++epicsDataCount;
-            }
+            // Find and check EPICS data.
+            this.checkEpicsData(event);
 
             // Find scaler data.
-            final ScalerData scalerData = ScalerData.read(event);
-            if (scalerData != null) {
-                ++scalerDataCount;
-            }
+            this.checkScalarData(event);
 
             // Check for presence of required collections and that they are non-empty.
-            for (int i = 0; i < COLLECTION_NAMES.length; i++) {
-                this.checkCollection(event, COLLECTION_TYPES[i], COLLECTION_NAMES[i]);
-            }
-
-            // Check scaler parameters from event.
-            checkScalerParameters(event);
-            
+            this.checkCollections(event);
+
             ++processedCount;
         }
     }
 
     /**
+     * The number of empty collections that are allowed.
+     */
+    private static int[] ALLOWED_EMPTY = new int[] {45, 0, 0, 0};
+
+    /**
      * Names of collections to check.
      */
     private static String[] COLLECTION_NAMES = new String[] {"EcalReadoutHits", "FADCGenericHits", "SVTRawTrackerHits",
-        "TriggerBank"};
+    "TriggerBank"};
 
     /**
      * Classes of collections.
      */
     private static Class<?>[] COLLECTION_TYPES = new Class<?>[] {RawTrackerHit.class, GenericObject.class,
             RawTrackerHit.class, GenericObject.class};
-    
-    /**
-     * The number of empty collections that are allowed.
-     */
-    private static int[] ALLOWED_EMPTY = new int[] {45, 0, 0, 0};
-    
-    /**
-     * Expected scaler values after first occurrence of scaler collection in the data. 
-     */
-    private static float[] SCALER_VALUES = {
-        205.47786f,
-        206.38852f,
-        -1.726095f,
-        -0.622837f,
-        179.9981f
-    };
-    
+
     /**
      * The number of EPICS collections that should be found.
      */
     private static int EPICS_DATA_COUNT = 7;
-    
+
+    /**
+     * List of EPICS variables that are not expected to be present in this data.
+     */
+    private static List<String> EXCLUDED_EPICS_VARIABLES = new ArrayList<String>();
+
+    /**
+     * The default input file (large file at SLAC so the pom.xml file excludes this test on non-SLAC hosts).
+     */
+    private static final String INPUT_FILE = "/nfs/slac/g/hps3/data/engrun/evio/hps_005772.evio.0";
+
+    /**
+     * The number of events that should be processed.
+     */
+    private static int PROCESSED_COUNT = 251823;
+
     /**
      * The number of scaler data collections that should be found.
      */
     private static int SCALER_DATA_COUNT = 3;
-    
-    /**
-     * The number of events that should be processed.
-     */
-    private static int PROCESSED_COUNT = 251823;
-
-    /**
-     * The default input file (large file at SLAC so the pom.xml file excludes this test on non-SLAC hosts).
-     */
-    private static final String INPUT_FILE = "/nfs/slac/g/hps3/data/engrun/evio/hps_005772.evio.0";
+
+    /**
+     * Expected scaler values after first occurrence of scaler collection in the data.
+     */
+    private static float[] SCALER_VALUES = {205.47786f, 206.38852f, -1.726095f, -0.622837f, 179.9981f};
+
+    static {
+        EXCLUDED_EPICS_VARIABLES.add("VCG2C21 2C21");
+    }
 
     /**
      * Run the test.
@@ -204,7 +204,7 @@
         System.out.println("Done running EvioToLcio!");
 
         // Read in the LCIO file and run the CheckDriver on it.
-        System.out.println("Checking LCIO output ...");        
+        System.out.println("Checking LCIO output ...");
         final LCSimLoop loop = new LCSimLoop();
         loop.setLCIORecordSource(outputFile);
         final CheckDriver checkDriver = new CheckDriver();
@@ -212,9 +212,9 @@
         loop.loop(-1);
 
         // Check for correct number of events processed by loop.
-        System.out.println("Loop processed " + loop.getTotalCountableConsumed() + " events.");        
+        System.out.println("Loop processed " + loop.getTotalCountableConsumed() + " events.");
         assertEquals("Loop processed wrong number of events.", PROCESSED_COUNT, loop.getTotalCountableConsumed());
-        
+
         // Check that the Driver saw the correct number of events.
         System.out.println("CheckDriver processed " + checkDriver.processedCount + " events.");
         assertEquals("Driver saw wrong number of events.", PROCESSED_COUNT, checkDriver.processedCount);