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) {
|