Print

Print


Author: [log in to unmask]
Date: Wed Jul 29 18:24:23 2015
New Revision: 3307

Log:
Cleanup how EPICs and scaler data are written into the lcsim events.

Modified:
    java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.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	Wed Jul 29 18:24:23 2015
@@ -12,7 +12,6 @@
 import org.hps.recon.ecal.triggerbank.TIData;
 import org.hps.record.epics.EpicsData;
 import org.hps.record.epics.EpicsEvioProcessor;
-import org.hps.record.evio.EventTagBitMask;
 import org.hps.record.evio.EvioEventUtilities;
 import org.hps.record.scalers.ScalerData;
 import org.hps.record.scalers.ScalerParameters;
@@ -31,25 +30,42 @@
  * 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 <[log in to unmask]>
- * @author Jeremy McCormick <[log in to unmask]>
+ * @author Sho Uemura, SLAC
+ * @author Jeremy McCormick, SLAC
  */
 public class LCSimEngRunEventBuilder extends LCSimTestRunEventBuilder {
 
+    /**
+     * Setup logger.
+     */
     private static final Logger LOGGER = LogUtil.create(LCSimEngRunEventBuilder.class, new DefaultLogFormatter(),
             Level.INFO);
 
-    private EpicsData epicsData;
-
+    /**
+     * EVIO processor for extracting EPICS data.
+     */
     private final EpicsEvioProcessor epicsProcessor = new EpicsEvioProcessor();
-
-    private ScalerData scalerData;
-
+    
+    /**
+     * Scaler parameters for lcsim event parameters.
+     */
+    private ScalerParameters scalerParameters = new ScalerParameters();
+
+    /**
+     * EVIO processor for extracting scaler data.
+     */
     private final ScalersEvioProcessor scalerProcessor = new ScalersEvioProcessor();
 
+    /**
+     * Reads trigger config.
+     */
     private TriggerConfigEvioReader triggerConfigReader = null;
 
+    /**
+     * Class constructor.
+     */
     public LCSimEngRunEventBuilder() {
+        // FIXME: Is this the best place for doing all this stuff???
         ecalReader.setTopBankTag(0x25);
         ecalReader.setBotBankTag(0x27);
         ecalReader.setRfBankTag(0x2e);
@@ -66,15 +82,10 @@
     }
 
     /**
-     * Create and cache an {@link org.hps.record.epics.EpicsData} object.
-     *
-     * @param evioEvent The EVIO event data.
-     */
-    private void createEpicsData(final EvioEvent evioEvent) {
-        epicsProcessor.process(evioEvent);
-        epicsData = epicsProcessor.getEpicsData();
-    }
-
+     * Get the time from the TI data.
+     * 
+     * @param triggerList the TI data list
+     */
     @Override
     protected long getTime(final List<AbstractIntData> triggerList) {
         for (final AbstractIntData data : triggerList) {
@@ -86,6 +97,11 @@
         return 0;
     }
 
+    /**
+     * Make an lcsim event from EVIO data.
+     * 
+     * @param evioEvent the input EVIO event
+     */
     @Override
     public EventHeader makeLCSimEvent(final EvioEvent evioEvent) {
 
@@ -123,15 +139,17 @@
         // Write scalers into the event, if they exist in the EVIO data.
         this.writeScalerData(evioEvent, lcsimEvent);
 
-        // Write scaler parameters into every event header.
-        if (EventTagBitMask.SYNC.isEventTag(evioEvent)) {
-            LOGGER.fine("event " + evioEvent.getEventNumber() + " is a sync event");
-        }
-        this.writeScalerParameters(lcsimEvent);
+        // Write out current ScalerParameters to event header.
+        this.scalerParameters.write(lcsimEvent);
 
         return lcsimEvent;
     }
 
+    /**
+     * Pre-read an EVIO event.
+     * 
+     * @param evioEvent the EVIO event
+     */
     @Override
     public void readEvioEvent(final EvioEvent evioEvent) {
         super.readEvioEvent(evioEvent);
@@ -139,7 +157,7 @@
         // Create EPICS data if this is an EPICS control event.
         if (EvioEventUtilities.isEpicsEvent(evioEvent)) {
             LOGGER.fine("creating data from EPICS event");
-            this.createEpicsData(evioEvent);
+            epicsProcessor.process(evioEvent);
         }
     }
 
@@ -149,9 +167,21 @@
      * @param lcsimEvent the lcsim event
      */
     private void writeEpicsData(final EventHeader lcsimEvent) {
-        if (epicsProcessor.getEpicsData() != null) {
+        
+        // Get EpicsData from processor that was already activated (usually it is null).
+        EpicsData epicsData = epicsProcessor.getEpicsData();
+        
+        // Was new EpicsData created?
+        if (epicsData != null) {
             LOGGER.fine("writing EPICS data to lcsim event " + lcsimEvent.getEventNumber());
-            epicsProcessor.getEpicsData().write(lcsimEvent);
+            
+            // Write to the collection in the lcsim event.
+            epicsData.write(lcsimEvent);            
+            
+            // Update the ScalerParameters.
+            scalerParameters.readEpicsData(epicsData);
+            
+            // Reset the processor.
             epicsProcessor.reset();
         }
     }
@@ -164,10 +194,14 @@
      */
     private void writeScalerData(final EvioEvent evioEvent, final EventHeader lcsimEvent) {
 
-        // Find scaler data in EVIO.
+        // Activate the EVIO scalers processor.
         scalerProcessor.process(evioEvent);
 
-        if (scalerProcessor.getScalerData() != null) {
+        // Get ScalerData from the processor.
+        ScalerData scalerData = scalerProcessor.getScalerData();
+        
+        // Was new ScalerData created?
+        if (scalerData != null) {
 
             LOGGER.fine("writing scaler data to lcsim event " + lcsimEvent.getEventNumber() + " from EVIO event "
                     + evioEvent.getEventNumber());
@@ -175,24 +209,8 @@
             // Write the current scalar data to the event.
             scalerProcessor.getScalerData().write(lcsimEvent);
 
-            // Save the current scaler data for writing to lcsim event header.
-            scalerData = scalerProcessor.getScalerData();
-        }
-    }
-
-    /**
-     * Write {@link org.hps.record.scalers.ScalerParameters} into the event.
-     *
-     * @param lcsimEvent the lcsim event
-     */
-    private void writeScalerParameters(final EventHeader lcsimEvent) {
-        final ScalerParameters scalerParameters = new ScalerParameters();
-        if (epicsData != null) {
-            scalerParameters.readEpicsData(epicsData);
-        }
-        if (scalerData != null) {
+            // Update current ScalerParameters.
             scalerParameters.readScalerData(scalerData);
         }
-        scalerParameters.write(lcsimEvent);
-    }
+    }  
 }