Print

Print


Author: [log in to unmask]
Date: Wed Sep 23 08:57:56 2015
New Revision: 3681

Log:
use TI time offsets

Modified:
    java/trunk/evio/pom.xml
    java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java
    java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
    java/trunk/record-util/src/main/java/org/hps/record/triggerbank/HeadBankData.java
    java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java

Modified: java/trunk/evio/pom.xml
 =============================================================================
--- java/trunk/evio/pom.xml	(original)
+++ java/trunk/evio/pom.xml	Wed Sep 23 08:57:56 2015
@@ -23,6 +23,10 @@
         <dependency>
             <groupId>org.hps</groupId>
             <artifactId>hps-record-util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hps</groupId>
+            <artifactId>hps-run-database</artifactId>
         </dependency>
     </dependencies>
     <build>

Modified: java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java
 =============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java	(original)
+++ java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java	Wed Sep 23 08:57:56 2015
@@ -28,6 +28,7 @@
 import org.hps.record.LCSimEventBuilder;
 import org.hps.record.evio.EvioEventQueue;
 import org.hps.record.evio.EvioEventUtilities;
+import org.hps.run.database.RunManager;
 import org.jlab.coda.jevio.BaseStructure;
 import org.jlab.coda.jevio.EvioEvent;
 import org.jlab.coda.jevio.EvioException;
@@ -41,7 +42,8 @@
 
 /**
  * <p>
- * This class converts EVIO to LCIO, performing an LCSim job in the same session. The processed events are then (optionally) written to disk using an
+ * This class converts EVIO to LCIO, performing an LCSim job in the same
+ * session. The processed events are then (optionally) written to disk using an
  * LCIOWriter.
  * <p>
  * To run this class from the command line:<br>
@@ -52,19 +54,24 @@
  * <p>
  * Extra arguments are treated as paths to EVIO files.
  * <p>
- * This class attempts to automatically configure itself for Test Run or Engineering Run based on the run numbers in the EVIO file. It will use an
- * appropriate default detector unless one is given on the command line, and it will also use the correct event builder. It will not handle jobs
- * correctly with files from both the Test and Engineering Run, so don't do this!
+ * This class attempts to automatically configure itself for Test Run or
+ * Engineering Run based on the run numbers in the EVIO file. It will use an
+ * appropriate default detector unless one is given on the command line, and it
+ * will also use the correct event builder. It will not handle jobs correctly
+ * with files from both the Test and Engineering Run, so don't do this!
  * <p>
  * The conditions system can be initialized in one of three ways.<br/>
  * <ol>
- * <li>user specified run number in which case the conditions system is frozen for the rest of the job</li>
+ * <li>user specified run number in which case the conditions system is frozen
+ * for the rest of the job</li>
  * <li>run number from an EVIO pre start event</li>
  * <li>run number from a header bank in an event</li>
  * </ol>
  * <p>
- * In the case where a file has no pre start event and there are header banks present, the "-m" command line option can be used to buffer a number of
- * EVIO events. If there is a head bank found while adding these events to queue, the conditions system will be initialized from it.
+ * In the case where a file has no pre start event and there are header banks
+ * present, the "-m" command line option can be used to buffer a number of EVIO
+ * events. If there is a head bank found while adding these events to queue, the
+ * conditions system will be initialized from it.
  *
  * @author Jeremy McCormick <[log in to unmask]>
  * @author Sho Uemura <[log in to unmask]>
@@ -72,7 +79,8 @@
 public class EvioToLcio {
 
     /**
-     * The default steering resource, which basically does nothing except print event numbers.
+     * The default steering resource, which basically does nothing except print
+     * event numbers.
      */
     private static final String DEFAULT_STEERING_RESOURCE = "/org/hps/steering/EventMarker.lcsim";
 
@@ -101,7 +109,7 @@
      */
     private LCSimEventBuilder eventBuilder = null;
 
-    /** 
+    /**
      * The command line options which will be defined in the constructor.
      */
     private Options options = null;
@@ -112,7 +120,8 @@
     private Integer runNumber = null;
 
     /**
-     * The default constructor, which defines command line arguments and sets the default log level.
+     * The default constructor, which defines command line arguments and sets
+     * the default log level.
      */
     protected EvioToLcio() {
         LOGGER.config("initializing EVIO to LCIO converter ...");
@@ -135,8 +144,9 @@
     }
 
     /**
-     * Buffer up to <code>maxBufferSize</code> events in the <code>eventQueue</code>. This method will also initialize the conditions system using a
-     * run number if a header bank is found.
+     * Buffer up to <code>maxBufferSize</code> events in the
+     * <code>eventQueue</code>. This method will also initialize the conditions
+     * system using a run number if a header bank is found.
      *
      * @param reader the EVIO reader
      * @param eventQueue the event queue
@@ -170,25 +180,24 @@
                     continue;
                 }
 
-                // Is conditions system not frozen?
-                if (!DatabaseConditionsManager.getInstance().isFrozen()) {
-
-                    // Get head bank from event.
-                    final BaseStructure headBank = EvioEventUtilities.getHeadBank(evioEvent);
-
-                    // Is head bank available in this event?
-                    if (headBank != null) {
-
-                        // Get the run number from the head bank.
-                        runNumber = headBank.getIntData()[1];
-                        LOGGER.finer("got head bank with run number " + runNumber);
-
+                // Get head bank from event.
+                final BaseStructure headBank = EvioEventUtilities.getHeadBank(evioEvent);
+
+                // Is head bank available in this event?
+                if (headBank != null) {
+
+                    // Get the run number from the head bank.
+                    runNumber = headBank.getIntData()[1];
+                    LOGGER.finer("got head bank with run number " + runNumber);
+
+                    // Is conditions system not frozen?
+                    if (!DatabaseConditionsManager.getInstance().isFrozen()) {
                         // Check if the conditions system needs to be updated from the head bank.
                         this.checkConditions(runNumber, false);
-                        
-                    } else {
-                        LOGGER.finest("event " + evioEvent.getEventNumber() + " does not have a head bank");
                     }
+                    RunManager.getRunManager().setRun(runNumber);
+                } else {
+                    LOGGER.finest("event " + evioEvent.getEventNumber() + " does not have a head bank");
                 }
             }
         }
@@ -196,7 +205,8 @@
     }
 
     /**
-     * Check if the conditions system and event builder need to be initialized or updated given a run number.
+     * Check if the conditions system and event builder need to be initialized
+     * or updated given a run number.
      *
      * @param runNumber The run number.
      * @param freeze True to freeze conditions system after it is setup.
@@ -234,8 +244,10 @@
     }
 
     /**
-     * This method will execute the EVIO to LCIO conversion and optionally process the events with LCSim Drivers from a steering file. Then the
-     * resultant LCIO events will be written to disk if this option is enabled in the command line arguments.
+     * This method will execute the EVIO to LCIO conversion and optionally
+     * process the events with LCSim Drivers from a steering file. Then the
+     * resultant LCIO events will be written to disk if this option is enabled
+     * in the command line arguments.
      *
      * @param args The command line arguments.
      */
@@ -442,7 +454,8 @@
 
         // Loop over the input EVIO files.
         EvioReader reader = null;
-        fileLoop: for (final String evioFileName : evioFileList) {
+        fileLoop:
+        for (final String evioFileName : evioFileList) {
 
             // Get the next EVIO input file.
             final File evioFile = new File(evioFileName);
@@ -463,7 +476,8 @@
 
             // Loop over events.
             final EvioEventQueue eventQueue = new EvioEventQueue(-1L, maxBufferSize);
-            eventLoop: for (;;) {
+            eventLoop:
+            for (;;) {
 
                 // Buffer the EVIO events into the queue.
                 this.bufferEvents(reader, eventQueue, maxBufferSize);
@@ -475,7 +489,8 @@
                 }
 
                 // Loop over the EVIO events in the buffer until it is empty.
-                recordLoop: while (eventQueue.hasNext()) {
+                recordLoop:
+                while (eventQueue.hasNext()) {
 
                     // Read and parse the next EVIO event.
                     EvioEvent evioEvent = null;
@@ -565,7 +580,7 @@
 
                         // Write out this LCIO event.
                         if (writer != null) {
-                            try {                                
+                            try {
                                 writer.write(lcioEvent);
                                 writer.flush();
                                 LOGGER.finest("wrote LCSim event " + lcioEvent.getEventNumber());
@@ -629,10 +644,13 @@
     }
 
     /**
-     * Setup the LCSimEventBuilder based on the current detector name and run number.
+     * Setup the LCSimEventBuilder based on the current detector name and run
+     * number.
      *
-     * @param detectorName The detector name to be assigned to the event builder.
-     * @param runNumber The run number which determines which event builder to use.
+     * @param detectorName The detector name to be assigned to the event
+     * builder.
+     * @param runNumber The run number which determines which event builder to
+     * use.
      * @return The LCSimEventBuilder for the Test Run or Engineering Run.
      */
     private void setupEventBuilder(final int runNumber) {

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 Sep 23 08:57:56 2015
@@ -15,6 +15,8 @@
 import org.hps.record.triggerbank.SSPData;
 import org.hps.record.triggerbank.TDCData;
 import org.hps.record.triggerbank.TIData;
+import org.hps.run.database.RunManager;
+import org.hps.run.database.RunSummary;
 import org.jlab.coda.jevio.EvioEvent;
 import org.lcsim.conditions.ConditionsEvent;
 import org.lcsim.event.EventHeader;
@@ -22,13 +24,15 @@
 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
@@ -60,6 +64,11 @@
      * Reads trigger config.
      */
     private TriggerConfigEvioReader triggerConfigReader = null;
+
+    /**
+     * Modulus of TI timestamp offset (units of nanoseconds).
+     */
+    private final long timestampCycle = 24 * 6 * 35;
 
     /**
      * Class constructor.
@@ -72,10 +81,10 @@
         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();
@@ -94,10 +103,17 @@
      */
     @Override
     protected long getTime(final List<AbstractIntData> triggerList) {
+        long tiTimeOffset = 0;
+        RunSummary runSummary = RunManager.getRunManager().getRunSummary();
+        if (runSummary != null) {
+            tiTimeOffset = runSummary.getTriggerConfig().getTiTimeOffset();
+            tiTimeOffset = (tiTimeOffset / timestampCycle) * timestampCycle;
+        }
+
         for (final AbstractIntData data : triggerList) {
             if (data instanceof TIData) {
                 final TIData tiData = (TIData) data;
-                return tiData.getTime();
+                return tiData.getTime() + tiTimeOffset;
             }
         }
         return 0;
@@ -136,13 +152,13 @@
         try {
             svtReader.makeHits(evioEvent, lcsimEvent);
         } catch (final SvtEvioHeaderException e) {
-            LOGGER.log(Level.SEVERE, "Error reading header information from the SVT.",e);
+            LOGGER.log(Level.SEVERE, "Error reading header information from the SVT.", e);
         } catch (final SvtEvioReaderException e) {
-            LOGGER.log(Level.SEVERE, "Error making SVT hits.",e);
+            LOGGER.log(Level.SEVERE, "Error making SVT hits.", e);
         } catch (final Exception e) {
             LOGGER.log(Level.SEVERE, "Error making SVT hits. Don't think I should be able to get here?", e);
         }
-        
+
         // Write the current EPICS data into this event.
         this.writeEpicsData(lcsimEvent);
 

Modified: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/HeadBankData.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/HeadBankData.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/HeadBankData.java	Wed Sep 23 08:57:56 2015
@@ -18,15 +18,8 @@
     public static final int UNIX_TIME = 3;
     public static final int EVENT_TYPE = 4;
 
-    public static int lastGoodTime = 0;
-
     public HeadBankData(int[] bank) {
         super(bank);
-        if (this.bank[UNIX_TIME] == 0) { //if the timestamp is 0, use the most recent nonzero timestamp
-            this.bank[UNIX_TIME] = lastGoodTime;
-        } else if (this.bank[UNIX_TIME] >= lastGoodTime) { //if the timestamp goes down, the event is out of sequence - keep the timestamp for this event, but don't apply it to later events
-            lastGoodTime = this.bank[UNIX_TIME];
-        }
         decodeData();
     }
 

Modified: java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java
 =============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java	(original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java	Wed Sep 23 08:57:56 2015
@@ -166,6 +166,10 @@
      * @param run the run number
      */
     public synchronized void setRun(final int run) {
+        // Don't do anything if the run number has already been set.
+        if (run == this.run) {
+            return;
+        }
 
         // Check if run number is valid.
         if (run < 0) {