Print

Print


Author: [log in to unmask]
Date: Wed Jul 29 17:55:04 2015
New Revision: 3305

Log:
Add scaler parameters to 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 17:55:04 2015
@@ -4,6 +4,7 @@
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
 import org.hps.recon.ecal.triggerbank.AbstractIntData;
 import org.hps.recon.ecal.triggerbank.HeadBankData;
 import org.hps.recon.ecal.triggerbank.SSPData;
@@ -11,7 +12,10 @@
 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;
 import org.hps.record.scalers.ScalersEvioProcessor;
 import org.jlab.coda.jevio.EvioEvent;
 import org.lcsim.event.EventHeader;
@@ -19,23 +23,27 @@
 import org.lcsim.util.log.LogUtil;
 
 /**
- * This is the {@link org.hps.record.LCSimEventBuilder} implementation for the Engineering Run and the Commissioning Run.
+ * 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.
  * <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 <[log in to unmask]>
  * @author Jeremy McCormick <[log in to unmask]>
  */
 public class LCSimEngRunEventBuilder extends LCSimTestRunEventBuilder {
 
-    private static final Logger LOGGER = LogUtil.create(LCSimEngRunEventBuilder.class, new DefaultLogFormatter(), Level.INFO);
+    private static final Logger LOGGER = LogUtil.create(LCSimEngRunEventBuilder.class, new DefaultLogFormatter(),
+            Level.INFO);
 
     private EpicsData epicsData;
 
     private final EpicsEvioProcessor epicsProcessor = new EpicsEvioProcessor();
+
+    private ScalerData scalerData;
 
     private final ScalersEvioProcessor scalerProcessor = new ScalersEvioProcessor();
 
@@ -62,7 +70,7 @@
      *
      * @param evioEvent The EVIO event data.
      */
-    void createEpicsData(final EvioEvent evioEvent) {
+    private void createEpicsData(final EvioEvent evioEvent) {
         epicsProcessor.process(evioEvent);
         epicsData = epicsProcessor.getEpicsData();
     }
@@ -99,25 +107,27 @@
         try {
             ecalReader.makeHits(evioEvent, lcsimEvent);
         } catch (final Exception e) {
-            LOGGER.log(Level.SEVERE, "Error making ECal hits", e);
+            LOGGER.log(Level.SEVERE, "Error making ECal hits.", e);
         }
 
         // Make SVT RawTrackerHits.
         try {
             svtReader.makeHits(evioEvent, lcsimEvent);
         } catch (final Exception e) {
-            LOGGER.log(Level.SEVERE, "Error making SVT hits", e);
+            LOGGER.log(Level.SEVERE, "Error making SVT hits.", e);
         }
 
         // Write the current EPICS data into this event.
-        if (epicsData != null) {
-            LOGGER.finest("writing EPICS data to lcsim event " + lcsimEvent.getEventNumber());
-            epicsData.write(lcsimEvent);
-            epicsData = null;
+        this.writeEpicsData(lcsimEvent);
+
+        // 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");
         }
-
-        // Write scalers into the event, if they exist in this EVIO data.
-        this.writeScalerData(evioEvent, lcsimEvent);
+        this.writeScalerParameters(lcsimEvent);
 
         return lcsimEvent;
     }
@@ -128,8 +138,21 @@
 
         // Create EPICS data if this is an EPICS control event.
         if (EvioEventUtilities.isEpicsEvent(evioEvent)) {
-            LOGGER.finest("creating data from EPICS event");
+            LOGGER.fine("creating data from EPICS event");
             this.createEpicsData(evioEvent);
+        }
+    }
+
+    /**
+     * Write {@link org.hps.record.epics.EpicsData} into the event.
+     *
+     * @param lcsimEvent the lcsim event
+     */
+    private void writeEpicsData(final EventHeader lcsimEvent) {
+        if (epicsProcessor.getEpicsData() != null) {
+            LOGGER.fine("writing EPICS data to lcsim event " + lcsimEvent.getEventNumber());
+            epicsProcessor.getEpicsData().write(lcsimEvent);
+            epicsProcessor.reset();
         }
     }
 
@@ -139,11 +162,37 @@
      * @param evioEvent The EVIO event data.
      * @param lcsimEvent The output LCSim event.
      */
-    void writeScalerData(final EvioEvent evioEvent, final EventHeader lcsimEvent) {
+    private void writeScalerData(final EvioEvent evioEvent, final EventHeader lcsimEvent) {
+
+        // Find scaler data in EVIO.
         scalerProcessor.process(evioEvent);
+
         if (scalerProcessor.getScalerData() != null) {
-            LOGGER.finest("writing scaler data to lcsim event " + lcsimEvent.getEventNumber() + " from EVIO event " + evioEvent.getEventNumber());
+
+            LOGGER.fine("writing scaler data to lcsim event " + lcsimEvent.getEventNumber() + " from EVIO event "
+                    + evioEvent.getEventNumber());
+
+            // 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) {
+            scalerParameters.readScalerData(scalerData);
+        }
+        scalerParameters.write(lcsimEvent);
+    }
 }