Author: [log in to unmask]
Date: Wed Aug 26 19:31:38 2015
New Revision: 3411
Log:
Various changes in record-util module for getting a stable version of run database API.
Added:
java/trunk/record-util/src/main/java/org/hps/record/run/RunSummaryImpl.java
java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigIntDao.java
- copied, changed from r3409, java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigDao.java
java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigIntDaoImpl.java
- copied, changed from r3409, java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigDaoImpl.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TiTimeOffsetEvioProcessor.java
- copied, changed from r3409, java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerEvioProcessor.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerConfigInt.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerConfigVariable.java
Removed:
java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfig.java
java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigDao.java
java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigDaoImpl.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerEvioProcessor.java
Modified:
java/trunk/record-util/src/main/java/org/hps/record/evio/EvioBankTag.java
java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/Crawler.java
java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileVisitor.java
java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunProcessor.java
java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunSummaryMap.java
java/trunk/record-util/src/main/java/org/hps/record/run/RunSummary.java
java/trunk/record-util/src/main/java/org/hps/record/run/RunSummaryDaoImpl.java
Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/EvioBankTag.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/EvioBankTag.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/EvioBankTag.java Wed Aug 26 19:31:38 2015
@@ -49,7 +49,7 @@
*/
public BaseStructure findBank(final BaseStructure startBank) {
BaseStructure foundBank = null;
- if (this.isBankTag(startBank)) {
+ if (this.equals(startBank)) {
foundBank = startBank;
} else if (startBank.getChildrenList() != null) {
for (final BaseStructure subBank : startBank.getChildrenList()) {
@@ -77,7 +77,7 @@
* @param bank the EVIO data bank
* @return <code>true</code> if bank's tag matches this one
*/
- public boolean isBankTag(final BaseStructure bank) {
+ public boolean equals(final BaseStructure bank) {
return bank.getHeader().getTag() == bankTag;
}
@@ -87,7 +87,7 @@
* @param bankTag the bank tag value
* @return <code>true</code> if the bank tag value matches this one
*/
- public boolean isBankTag(final int bankTag) {
+ public boolean equals(final int bankTag) {
return bankTag == this.getBankTag();
}
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/Crawler.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/Crawler.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/Crawler.java Wed Aug 26 19:31:38 2015
@@ -23,6 +23,7 @@
import org.hps.conditions.database.ConnectionParameters;
import org.hps.record.run.RunSummary;
import org.hps.record.run.RunSummaryDaoImpl;
+import org.hps.record.run.RunSummaryImpl;
import org.lcsim.util.log.DefaultLogFormatter;
import org.lcsim.util.log.LogUtil;
@@ -53,7 +54,6 @@
* Statically define the command options.
*/
static {
- // TODO: add -f argument with file name to include; others would be excluded if they do not match
OPTIONS.addOption("b", "min-date", true, "min date for a file (example \"2015-03-26 11:28:59\")");
OPTIONS.addOption("c", "cache", false, "automatically cache files from MSS to cache disk (JLAB only)");
OPTIONS.addOption("C", "connection-properties", true, "database connection properties file (required)");
@@ -65,8 +65,7 @@
OPTIONS.addOption("r", "run", true, "add a run number to accept (when used others will be excluded)");
OPTIONS.addOption("t", "timestamp-file", true, "existing or new timestamp file name");
OPTIONS.addOption("w", "max-cache-wait", true, "total time to allow for file caching (seconds)");
- OPTIONS.addOption("u", "update", false,
- "allow replacement of existing data in the run db (not allowed by default)");
+ OPTIONS.addOption("u", "update", false, "allow replacement of existing data in the run db (not allowed by default)");
OPTIONS.addOption("x", "max-depth", true, "max depth to crawl in the directory tree");
}
@@ -278,8 +277,6 @@
/**
* Run the full crawler job.
- * <p>
- * This might take quite a long time!
*
* @throws Exception if there is some error during the job
*/
@@ -302,12 +299,12 @@
// Process all the files, performing caching from the MSS if necessary.
LOGGER.info("processing all runs");
- RunProcessor.processAllRuns(this.cacheManager, runs, config);
+ processRuns(this.cacheManager, runs, config.useFileCache());
LOGGER.getHandlers()[0].flush();
// Execute the run database update.
LOGGER.info("updating run database");
- this.updateRunDatabase(runs);
+ this.updateRunDatabase(runs);
LOGGER.getHandlers()[0].flush();
// Update the timestamp output file.
@@ -333,7 +330,7 @@
// Open a DB connection.
final Connection connection = config.connectionParameters().createConnection();
- // Insert all run summaries into the database.
+ // Insert all run summaries into the database.
new RunSummaryDaoImpl(connection).insertFullRunSummaries(new ArrayList<RunSummary>(runs.getRunSummaries()),
config.allowUpdates());
@@ -396,4 +393,33 @@
throw new RuntimeException("Error while walking the directory tree.", e);
}
}
+
+ /**
+ * Process all the runs that were found.
+ *
+ * @param runs the run log containing the list of run summaries
+ * @throws Exception if there is an error processing one of the runs
+ */
+ static void processRuns(JCacheManager cacheManager, final RunSummaryMap runs, boolean useFileCache)
+ throws Exception {
+
+ // Process all of the runs that were found.
+ for (final RunSummary runSummary : runs.getRunSummaries()) {
+
+ // Clear the cache manager.
+ if (useFileCache) {
+ LOGGER.info("clearing file cache");
+ cacheManager.clear();
+ }
+
+ // Create a processor to process all the EVIO events in the run.
+ LOGGER.info("creating run processor for " + runSummary.getRun());
+ final RunProcessor runProcessor = new RunProcessor(cacheManager, (RunSummaryImpl) runSummary, useFileCache);
+
+ // Process all of the files from the run.
+ LOGGER.info("processing run " + runSummary.getRun());
+ runProcessor.processRun();
+ }
+ }
+
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileVisitor.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileVisitor.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileVisitor.java Wed Aug 26 19:31:38 2015
@@ -110,6 +110,7 @@
// Add this file to the file list for the run.
this.runs.getRunSummary(run).addFile(file);
+
} else {
// File was rejected by one of the filters.
LOGGER.finer("rejected file " + file.getPath());
Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunProcessor.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunProcessor.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunProcessor.java Wed Aug 26 19:31:38 2015
@@ -1,25 +1,28 @@
package org.hps.record.evio.crawler;
import java.io.File;
+import java.util.Collections;
import java.util.logging.Level;
import java.util.logging.Logger;
+
import org.hps.record.epics.EpicsRunProcessor;
import org.hps.record.evio.EvioFileMetaData;
import org.hps.record.evio.EvioFileMetaDataReader;
+import org.hps.record.evio.EvioFileSequenceComparator;
import org.hps.record.evio.EvioFileSource;
import org.hps.record.evio.EvioLoop;
-import org.hps.record.run.RunSummary;
+import org.hps.record.run.RunSummaryImpl;
import org.hps.record.scalers.ScalersEvioProcessor;
-import org.hps.record.triggerbank.TriggerEvioProcessor;
+import org.hps.record.triggerbank.TiTimeOffsetEvioProcessor;
+import org.hps.record.triggerbank.TriggerConfigInt;
import org.lcsim.util.log.DefaultLogFormatter;
import org.lcsim.util.log.LogUtil;
/**
- * Processes EVIO files from a run in order to extract various meta data
- * information including start and end dates.
+ * Processes EVIO files from a run in order to extract various meta data information including start and end dates.
* <p>
- * This class is a wrapper for activating different sub-tasks, including
- * optionally caching all files from the JLAB MSS to the cache disk.
+ * This class is a wrapper for activating different sub-tasks, including optionally caching all files from the JLAB MSS
+ * to the cache disk.
* <p>
* There is also a list of processors which is run on all events from the run.
*
@@ -31,35 +34,7 @@
* Setup logger.
*/
private static final Logger LOGGER = LogUtil.create(RunProcessor.class, new DefaultLogFormatter(), Level.FINE);
-
- /**
- * Process all the runs that were found.
- *
- * @param runs the run log containing the list of run summaries
- * @throws Exception if there is an error processing one of the runs
- */
- static void processAllRuns(final JCacheManager cacheManager, final RunSummaryMap runs, final CrawlerConfig config)
- throws Exception {
-
- // Process all of the runs that were found.
- for (final RunSummary runSummary : runs.getRunSummaries()) {
-
- // Clear the cache manager.
- if (config.useFileCache()) {
- LOGGER.info("clearing file cache");
- cacheManager.clear();
- }
-
- // Create a processor to process all the EVIO events in the run.
- LOGGER.info("creating run processor for " + runSummary.getRun());
- final RunProcessor runProcessor = new RunProcessor(cacheManager, runSummary, config);
-
- // Process all of the run's files.
- LOGGER.info("processing run " + runSummary.getRun());
- runProcessor.processRun();
- }
- }
-
+
/**
* The cache manager.
*/
@@ -68,7 +43,7 @@
/**
* Processor for extracting EPICS information.
*/
- private final EpicsRunProcessor epicsLog;
+ private final EpicsRunProcessor epicsProcessor;
/**
* The data source with the list of EVIO files to process.
@@ -83,7 +58,7 @@
/**
* The run summary information updated by running this processor.
*/
- private final RunSummary runSummary;
+ private final RunSummaryImpl runSummary;
/**
* Processor for extracting scaler data.
@@ -91,9 +66,9 @@
private final ScalersEvioProcessor scalersProcessor;
/**
- * Processor for extracting trigger config.
- */
- private final TriggerEvioProcessor triggerProcessor;
+ * Processor for extracting TI time offset.
+ */
+ private final TiTimeOffsetEvioProcessor triggerTimeProcessor;
/**
* Set to <code>true</code> to use file caching.
@@ -106,45 +81,47 @@
* @param runSummary the run summary object for the run
* @return the run processor
*/
- RunProcessor(final JCacheManager cacheManager, final RunSummary runSummary, final CrawlerConfig config) {
+ RunProcessor(final JCacheManager cacheManager, final RunSummaryImpl runSummary, boolean useFileCache) {
this.runSummary = runSummary;
this.cacheManager = cacheManager;
+ // Set whether file caching from MSS is enabled.
+ this.useFileCache = useFileCache;
+
+ // Sort the list of EVIO files.
+ Collections.sort(runSummary.getEvioFiles(), new EvioFileSequenceComparator());
+
// Setup record loop.
- runSummary.sortFiles();
- evioFileSource = new EvioFileSource(runSummary.getEvioFileList());
+ evioFileSource = new EvioFileSource(runSummary.getEvioFiles());
evioLoop.setEvioFileSource(evioFileSource);
// Add EPICS processor.
- epicsLog = new EpicsRunProcessor();
- evioLoop.addEvioEventProcessor(epicsLog);
-
- // Add Scaler data processor.
+ epicsProcessor = new EpicsRunProcessor();
+ evioLoop.addEvioEventProcessor(epicsProcessor);
+
+ // Add scaler data processor.
scalersProcessor = new ScalersEvioProcessor();
scalersProcessor.setResetEveryEvent(false);
evioLoop.addEvioEventProcessor(scalersProcessor);
-
- triggerProcessor = new TriggerEvioProcessor();
- evioLoop.addEvioEventProcessor(triggerProcessor);
-
- // Set whether file caching from MSS is enabled.
- this.useFileCache(config.useFileCache());
+
+ // Add processor for extracting TI time offset.
+ triggerTimeProcessor = new TiTimeOffsetEvioProcessor();
+ evioLoop.addEvioEventProcessor(triggerTimeProcessor);
}
/**
* Cache all files and wait for the operation to complete.
* <p>
- * Potentially, this operation can take a very long time. This can be
- * managed using the {@link JCacheManager#setWaitTime(long)} method to set a
- * timeout.
+ * Potentially, this operation can take a very long time. This can be managed using the
+ * {@link JCacheManager#setWaitTime(long)} method to set a timeout.
*/
private void cacheFiles() {
LOGGER.info("caching files from run " + this.runSummary.getRun());
- // Cache all the files and wait for the operation to complete (it will take awhile!).
- this.cacheManager.cache(this.runSummary.getEvioFileList());
+ // Cache all the files and wait for the operation to complete.
+ this.cacheManager.cache(this.runSummary.getEvioFiles());
final boolean cached = this.cacheManager.waitForCache();
// If the files weren't cached then die.
@@ -156,18 +133,16 @@
}
/**
- * Process the run by executing the registered
- * {@link org.hps.record.evio.EvioEventProcessor}s and extracting the start
- * and end dates.
+ * Process the run by executing the registered {@link org.hps.record.evio.EvioEventProcessor}s and extracting the
+ * start and end dates.
* <p>
- * This method will also execute file caching from MSS, if enabled by the
- * {@link #useFileCache} option.
+ * This method will also execute file caching from MSS, if enabled by the {@link #useFileCache} option.
*
* @throws Exception if there is an error processing a file
*/
void processRun() throws Exception {
- LOGGER.info("processing " + this.runSummary.getEvioFileList().size() + " files from run "
+ LOGGER.info("processing " + this.runSummary.getEvioFiles().size() + " files from run "
+ this.runSummary.getRun());
// Cache files from MSS if this is enabled.
@@ -181,11 +156,11 @@
evioLoop.loop(-1);
// Get run start date.
- LOGGER.info("setting run start date");
+ LOGGER.info("processing first file");
this.processFirstFile();
// Get run end date.
- LOGGER.info("setting run end date");
+ LOGGER.info("processing last file");
this.processLastFile();
// Update run summary from processors.
@@ -196,11 +171,10 @@
}
/**
- * Set the run end date by getting meta data from the last file and copying
- * it to the run summary.
+ * Extract meta data from last file in run.
*/
private void processLastFile() {
- final File lastEvioFile = runSummary.getEvioFileList().get(runSummary.getEvioFileList().size() - 1);
+ final File lastEvioFile = runSummary.getEvioFiles().get(runSummary.getEvioFiles().size() - 1);
LOGGER.info("getting meta data for " + lastEvioFile.getPath());
final EvioFileMetaDataReader metaDataReader = new EvioFileMetaDataReader();
final EvioFileMetaData metaData = metaDataReader.getMetaData(lastEvioFile);
@@ -215,11 +189,10 @@
}
/**
- * Set the run start date by getting meta data from the first file and
- * copying it to the run summary.
+ * Extract meta data from first file in run.
*/
private void processFirstFile() {
- final File firstEvioFile = runSummary.getEvioFileList().get(0);
+ final File firstEvioFile = runSummary.getEvioFiles().get(0);
LOGGER.info("getting meta data for " + firstEvioFile.getPath());
final EvioFileMetaDataReader metaDataReader = new EvioFileMetaDataReader();
final EvioFileMetaData metaData = metaDataReader.getMetaData(firstEvioFile);
@@ -233,8 +206,7 @@
}
/**
- * Update the current run summary by copying data to it from the EVIO
- * processors.
+ * Update the current run summary by copying data to it from the EVIO processors and the event loop.
*/
private void updateRunSummary() {
@@ -245,23 +217,11 @@
runSummary.setScalerData(this.scalersProcessor.getScalerData());
// Add EPICS data from the EPICS EVIO processor.
- runSummary.setEpicsData(this.epicsLog.getEpicsData());
-
- // Add trigger config from the trigger EVIO processor.
- runSummary.setTriggerConfig(this.triggerProcessor.getTriggerConfig());
- }
-
- /**
- * Set whether or not to use the file caching, which copies files from the
- * JLAB MSS to the cache disk.
- * <p>
- * Since EVIO data files at JLAB are primarily kept on the MSS, running
- * without this option enabled there will likely cause the job to fail.
- *
- * @param cacheFiles <code>true</code> to enabled file caching
- */
- void useFileCache(final boolean cacheFiles) {
- this.useFileCache = cacheFiles;
- LOGGER.config("file caching enabled");
- }
+ runSummary.setEpicsData(this.epicsProcessor.getEpicsData());
+
+ // Add trigger config from the trigger time processor.
+ TriggerConfigInt triggerConfig = new TriggerConfigInt();
+ this.triggerTimeProcessor.updateTriggerConfig(triggerConfig);
+ runSummary.setTriggerConfigInt(triggerConfig);
+ }
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunSummaryMap.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunSummaryMap.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunSummaryMap.java Wed Aug 26 19:31:38 2015
@@ -5,6 +5,7 @@
import java.util.logging.Logger;
import org.hps.record.run.RunSummary;
+import org.hps.record.run.RunSummaryImpl;
import org.lcsim.util.log.LogUtil;
/**
@@ -13,7 +14,7 @@
* @author Jeremy McCormick, SLAC
*/
@SuppressWarnings("serial")
-final class RunSummaryMap extends HashMap<Integer, RunSummary> {
+final class RunSummaryMap extends HashMap<Integer, RunSummaryImpl> {
/**
* Setup logging.
@@ -25,7 +26,7 @@
*
* @return the collection of {@link RunSummary} objects
*/
- public Collection<RunSummary> getRunSummaries() {
+ Collection<RunSummaryImpl> getRunSummaries() {
return this.values();
}
@@ -37,10 +38,10 @@
* @param run the run number
* @return the <code>RunSummary</code> for the run number
*/
- public RunSummary getRunSummary(final int run) {
+ RunSummaryImpl getRunSummary(final int run) {
if (!this.containsKey(run)) {
LOGGER.info("creating new RunSummary for run " + run);
- this.put(run, new RunSummary(run));
+ this.put(run, new RunSummaryImpl(run));
}
return this.get(run);
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/run/RunSummary.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/run/RunSummary.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/run/RunSummary.java Wed Aug 26 19:31:38 2015
@@ -1,471 +1,143 @@
package org.hps.record.run;
import java.io.File;
-import java.io.PrintStream;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.Date;
-import java.util.GregorianCalendar;
import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
import org.hps.record.epics.EpicsData;
-import org.hps.record.evio.EvioFileSequenceComparator;
import org.hps.record.scalers.ScalerData;
+import org.hps.record.triggerbank.TriggerConfigInt;
/**
- * This class models the run summary information which is persisted as a row in
- * the <i>run_log</i> table of the run database.
+ * This is an API for accessing run summary information which is persisted as a row in the <i>runs</i> table of the run
+ * database.
* <p>
* This information includes:
* <ul>
* <li>run number</li>
- * <li>start time (UTC)</li>
- * <li>end time (UTC)</li>
- * <li>total number of events in the run</li>
- * <li>number of EVIO files in the run</li>
- * <li>whether the END event was found indicating that the DAQ did not
- * crash</li>
+ * <li>start date</li>
+ * <li>end date</li>
+ * <li>number of events</li>
+ * <li>number of EVIO files</li>
+ * <li>whether the END event was found indicating that the DAQ did not crash</li>
* <li>whether the run is considered good (all <code>true</code> for now)</li>
* </ul>
* <p>
- * It also references several complex objects including lists of
- * {@link org.hps.record.epics.EpicsData} and
- * {@link org.hps.record.scalers.ScalerData} for the run, as well as a list of
- * EVIO files.
+ * It also references several complex objects including lists of {@link org.hps.record.epics.EpicsData} and
+ * {@link org.hps.record.scalers.ScalerData} for the run, as well as a list of EVIO files.
*
+ * @see RunSummaryImpl
+ * @see RunSummaryDao
+ * @see RunSummaryDaoImpl
+ * @see RunManager
+ *
* @author Jeremy McCormick, SLAC
*/
-public final class RunSummary {
-
- /**
- * Default date display format.
- */
- private static final DateFormat DATE_DISPLAY = new SimpleDateFormat();
-
- static {
- /**
- * Set default time zone for display to East Coast (JLAB) where data was
- * taken.
- */
- DATE_DISPLAY.setCalendar(new GregorianCalendar(TimeZone.getTimeZone("America/New_York")));
- }
-
- /**
- * Date this record was created.
- */
- private Date created;
-
- /**
- * End date of run.
- */
- private Date endDate;
-
- /**
- * This is <code>true</code> if the END event is found in the data.
- */
- private boolean endOkay;
-
- /**
- * The run end time in UTC (milliseconds).
- */
- private long endTimeUtc;
-
- /**
- * The EPICS data from the run.
- */
- private List<EpicsData> epicsDataList;
-
- /**
- * The counts of different types of events that were found.
- */
- private Map<Object, Integer> eventTypeCounts;
-
- /**
- * The list of EVIO files in the run.
- */
- private List<File> evioFileList = new ArrayList<File>();
-
- /**
- * The run number.
- */
- private final int run;
-
- /**
- * Flag to indicate run was okay.
- */
- private boolean runOkay = true;
-
- /**
- * The scaler data for the run.
- */
- private List<ScalerData> scalerDataList;
-
- /**
- * The trigger data for the run.
- */
- private TriggerConfig triggerConfig;
-
- /**
- * Start date of run.
- */
- private Date startDate;
-
- /**
- * The total events found in the run across all files.
- */
- private int totalEvents = -1;
-
- /**
- * The total number of files in the run.
- */
- private int totalFiles = 0;
-
- /**
- * Date when the run record was last updated.
- */
- private Date updated;
-
- /**
- * Create a run summary.
- *
- * @param run the run number
- */
- public RunSummary(final int run) {
- this.run = run;
- }
-
- /**
- * Add an EVIO file from this run to the list.
- *
- * @param file the file to add
- */
- public void addFile(final File file) {
- this.evioFileList.add(file);
- }
-
+public interface RunSummary {
+
/**
* Get the creation date of this run record.
*
* @return the creation date of this run record
*/
- public Date getCreated() {
- return this.created;
- }
+ Date getCreated();
/**
* Get the end date.
*
* @return the end date
*/
- public Date getEndDate() {
- return endDate;
- }
+ Date getEndDate();
/**
* Return <code>true</code> if END event was found in the data.
*
* @return <code>true</code> if END event was in the data
*/
- public boolean getEndOkay() {
- return this.endOkay;
- }
+ boolean getEndOkay();
/**
* Get the EPICS data from the run.
*
* @return the EPICS data from the run
*/
- public List<EpicsData> getEpicsDataSet() {
- return this.epicsDataList;
- }
+ List<EpicsData> getEpicsData();
/**
- * Get the event rate (effectively the trigger rate) which is the total
- * events divided by the number of seconds in the run.
+ * Get the event rate (effectively the trigger rate) which is the total events divided by the number of seconds in
+ * the run.
*
* @return the event rate
*/
- public double getEventRate() {
- if (this.getTotalEvents() <= 0) {
- throw new RuntimeException("Total events is zero or invalid.");
- }
- return (double) this.getTotalEvents() / (double) this.getTotalSeconds();
- }
-
- /**
- * Get the counts of different event types.
- *
- * @return the counts of different event types
- */
- public Map<Object, Integer> getEventTypeCounts() {
- return this.eventTypeCounts;
- }
+ double getEventRate();
/**
* Get the list of EVIO files in this run.
*
* @return the list of EVIO files in this run
*/
- public List<File> getEvioFileList() {
- return this.evioFileList;
- }
+ List<File> getEvioFiles();
/**
* Get the run number.
*
* @return the run number
*/
- public int getRun() {
- return this.run;
- }
+ int getRun();
/**
- * Return <code>true</code> if the run was okay (no major errors or data
- * corruption occurred).
+ * Return <code>true</code> if the run was okay (no major errors or data corruption occurred).
*
* @return <code>true</code> if the run was okay
*/
- public boolean getRunOkay() {
- return this.runOkay;
- }
+ boolean getRunOkay();
/**
* Get the scaler data of this run.
*
* @return the scaler data of this run
*/
- public List<ScalerData> getScalerData() {
- return this.scalerDataList;
- }
+ List<ScalerData> getScalerData();
/**
- * Get the trigger config of this run.
+ * Get the trigger config int values.
*
- * @return the trigger config of this run
+ * @return the trigger config int values
*/
- public TriggerConfig getTriggerConfig() {
- return triggerConfig;
- }
+ TriggerConfigInt getTriggerConfigInt();
/**
* Get the start date.
*
* @return the start date
*/
- public Date getStartDate() {
- return startDate;
- }
+ Date getStartDate();
/**
* Get the total events in the run.
*
* @return the total events in the run
*/
- public int getTotalEvents() {
- return this.totalEvents;
- }
+ int getTotalEvents();
/**
* Get the total number of files for this run.
*
* @return the total number of files for this run
*/
- public int getTotalFiles() {
- return this.totalFiles;
- }
+ int getTotalFiles();
/**
- * Get the number of seconds in the run which is the difference between the
- * start and end times.
+ * Get the number of seconds in the run which is the difference between the start and end times.
*
* @return the total seconds in the run
*/
- public long getTotalSeconds() {
- return (endDate.getTime() - startDate.getTime()) / 1000;
- }
+ long getTotalSeconds();
/**
* Get the date when this run record was last updated.
*
* @return the date when this run record was last updated
*/
- public Date getUpdated() {
- return updated;
- }
-
- /**
- * Print the run summary.
- *
- * @param ps the print stream for output
- */
- public void printOut(final PrintStream ps) {
- ps.println("--------------------------------------------");
- ps.println("run: " + this.run);
- ps.println("first file: " + this.evioFileList.get(0));
- ps.println("last file: " + this.evioFileList.get(evioFileList.size() - 1));
- ps.println("started: " + DATE_DISPLAY.format(this.getStartDate()));
- ps.println("ended: " + DATE_DISPLAY.format(this.getEndDate()));
- ps.println("total events: " + this.getTotalEvents());
- ps.println("end OK: " + this.getEndOkay());
- ps.println("event rate: " + this.getEventRate());
- ps.println("event types");
- for (final Object key : this.eventTypeCounts.keySet()) {
- ps.println(" " + key + ": " + this.eventTypeCounts.get(key));
- }
- ps.println(this.evioFileList.size() + " files");
- for (final File file : this.evioFileList) {
- ps.println(" " + file.getPath());
- }
- }
-
- /**
- * Set the creation date of the run record.
- *
- * @param created the creation date of the run record
- */
- public void setCreated(final Date created) {
- this.created = created;
- }
-
- /**
- * Set the start date.
- *
- * @param startDate the start date
- */
- public void setEndDate(final Date endDate) {
- this.endDate = endDate;
- }
-
- /**
- * Set if end is okay.
- *
- * @param endOkay <code>true</code> if end is okay
- */
- public void setEndOkay(final boolean endOkay) {
- this.endOkay = endOkay;
- }
-
- /**
- * Set the end date.
- *
- * @param endTimeUtc the end date
- */
- public void setEndTimeUtc(final long endTimeUtc) {
- this.endTimeUtc = endTimeUtc;
- }
-
- /**
- * Set the EPICS data for the run.
- *
- * @param epics the EPICS data for the run
- */
- public void setEpicsData(final List<EpicsData> epicsDataList) {
- this.epicsDataList = epicsDataList;
- }
-
- /**
- * Set the event type counts for the run.
- *
- * @param eventTypeCounts the event type counts for the run
- */
- public void setEventTypeCounts(final Map<Object, Integer> eventTypeCounts) {
- this.eventTypeCounts = eventTypeCounts;
- }
-
- /**
- * Set the list of EVIO files for the run.
- *
- * @param evioFileList the list of EVIO files for the run
- */
- public void setEvioFileList(final List<File> evioFileList) {
- this.evioFileList = evioFileList;
- }
-
- /**
- * Set whether the run was "okay" meaning the data is usable for physics
- * analysis.
- *
- * @param runOkay <code>true</code> if the run is okay
- */
- public void setRunOkay(final boolean runOkay) {
- this.runOkay = runOkay;
- }
-
- /**
- * Set the scaler data of the run.
- *
- * @param scalerData the scaler data
- */
- public void setScalerData(final List<ScalerData> scalerDataList) {
- this.scalerDataList = scalerDataList;
- }
-
- /**
- * Set the trigger config of the run.
- *
- * @param triggerConfig the trigger config
- */
- public void setTriggerConfig(final TriggerConfig triggerConfig) {
- this.triggerConfig = triggerConfig;
- }
-
- /**
- * Set the start date.
- *
- * @param startDate the start date
- */
- public void setStartDate(final Date startDate) {
- this.startDate = startDate;
- }
-
- /**
- * Set the total number of physics events in the run.
- *
- * @param totalEvents the total number of physics events in the run
- */
- public void setTotalEvents(final int totalEvents) {
- this.totalEvents = totalEvents;
- }
-
- /**
- * Set the total number of EVIO files in the run.
- *
- * @param totalFiles the total number of EVIO files in the run
- */
- public void setTotalFiles(final int totalFiles) {
- this.totalFiles = totalFiles;
- }
-
- /**
- * Set the date when this run record was last updated.
- *
- * @param updated the date when the run record was last updated
- */
- public void setUpdated(final Date updated) {
- this.updated = updated;
- }
-
- /**
- * Sort the files in the run by sequence number in place.
- */
- public void sortFiles() {
- Collections.sort(this.evioFileList, new EvioFileSequenceComparator());
- }
-
- /**
- * Convert this object to a string.
- *
- * @return this object converted to a string
- */
- @Override
- public String toString() {
- return "RunSummary { run: " + this.getRun() + ", startDate: " + DATE_DISPLAY.format(this.getStartDate())
- + ", endDate: " + DATE_DISPLAY.format(this.getEndDate()) + ", totalEvents: " + this.getTotalEvents()
- + ", totalFiles: " + this.getTotalFiles() + ", endOkay: " + this.getEndOkay() + ", runOkay: "
- + this.getRunOkay() + ", updated: " + this.getUpdated() + ", created: " + this.getCreated() + " }";
- }
+ Date getUpdated();
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/run/RunSummaryDaoImpl.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/run/RunSummaryDaoImpl.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/run/RunSummaryDaoImpl.java Wed Aug 26 19:31:38 2015
@@ -78,6 +78,11 @@
* The database API for scaler data.
*/
private ScalerDataDao scalerDataDao = null;
+
+ /**
+ * The database API for integer trigger config.
+ */
+ private TriggerConfigIntDao triggerConfigIntDao = null;
/**
* Create a new DAO object for run summary information.
@@ -95,6 +100,7 @@
epicsDataDao = new EpicsDataDaoImpl(this.connection);
scalerDataDao = new ScalerDataDaoImpl(this.connection);
evioFilesDao = new EvioFilesDaoImpl(this.connection);
+ triggerConfigIntDao = new TriggerConfigIntDaoImpl(this.connection);
}
/**
@@ -104,17 +110,23 @@
*/
@Override
public void deleteFullRunSummary(final RunSummary runSummary) {
+
+ int run = runSummary.getRun();
+
// Delete EPICS log.
- epicsDataDao.deleteEpicsData(runSummary.getRun());
+ this.epicsDataDao.deleteEpicsData(run);
// Delete scaler data.
- scalerDataDao.deleteScalerData(runSummary.getRun());
+ this.scalerDataDao.deleteScalerData(run);
// Delete file list.
- evioFilesDao.deleteEvioFiles(runSummary.getRun());
+ this.evioFilesDao.deleteEvioFiles(run);
+
+ // Delete trigger config.
+ this.triggerConfigIntDao.deleteTriggerConfigInt(run);
// Finally delete the run summary information.
- this.deleteRunSummary(runSummary.getRun());
+ this.deleteRunSummary(run);
}
/**
@@ -210,7 +222,7 @@
statement = this.connection.prepareStatement(RunSummaryQuery.SELECT_ALL);
final ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
- final RunSummary runSummary = new RunSummary(resultSet.getInt("run"));
+ final RunSummaryImpl runSummary = new RunSummaryImpl(resultSet.getInt("run"));
runSummary.setStartDate(resultSet.getTimestamp("start_date"));
runSummary.setEndDate(resultSet.getTimestamp("end_date"));
runSummary.setTotalEvents(resultSet.getInt("nevents"));
@@ -244,7 +256,7 @@
@Override
public RunSummary getRunSummary(final int run) {
PreparedStatement statement = null;
- RunSummary runSummary = null;
+ RunSummaryImpl runSummary = null;
try {
statement = this.connection.prepareStatement(RunSummaryQuery.SELECT_RUN);
statement.setInt(1, run);
@@ -253,7 +265,7 @@
throw new IllegalArgumentException("No record exists for run " + run + " in database.");
}
- runSummary = new RunSummary(run);
+ runSummary = new RunSummaryImpl(run);
runSummary.setStartDate(resultSet.getTimestamp("start_date"));
runSummary.setEndDate(resultSet.getTimestamp("end_date"));
runSummary.setTotalEvents(resultSet.getInt("nevents"));
@@ -370,16 +382,21 @@
this.insertRunSummary(runSummary);
// Insert list of files.
- LOGGER.info("inserting EVIO " + runSummary.getEvioFileList().size() + " files");
- evioFilesDao.insertEvioFiles(runSummary.getEvioFileList(), runSummary.getRun());
+ LOGGER.info("inserting EVIO " + runSummary.getEvioFiles().size() + " files");
+ evioFilesDao.insertEvioFiles(runSummary.getEvioFiles(), runSummary.getRun());
// Insert EPICS data.
- LOGGER.info("inserting " + runSummary.getEpicsDataSet().size() + " EPICS records");
- epicsDataDao.insertEpicsData(runSummary.getEpicsDataSet());
+ LOGGER.info("inserting " + runSummary.getEpicsData().size() + " EPICS records");
+ epicsDataDao.insertEpicsData(runSummary.getEpicsData());
// Insert scaler data.
LOGGER.info("inserting " + runSummary.getScalerData().size() + " scaler data records");
scalerDataDao.insertScalerData(runSummary.getScalerData(), runSummary.getRun());
+
+ // Insert trigger config.
+ LOGGER.info("inserting " + runSummary.getTriggerConfigInt().size() + " trigger config variables");
+ triggerConfigIntDao.insertTriggerConfigInt(runSummary.getTriggerConfigInt(), runSummary.getRun());
+
}
/**
@@ -396,7 +413,7 @@
preparedStatement.setTimestamp(2, new java.sql.Timestamp(runSummary.getStartDate().getTime()), CALENDAR);
preparedStatement.setTimestamp(3, new java.sql.Timestamp(runSummary.getEndDate().getTime()), CALENDAR);
preparedStatement.setInt(4, runSummary.getTotalEvents());
- preparedStatement.setInt(5, runSummary.getEvioFileList().size());
+ preparedStatement.setInt(5, runSummary.getEvioFiles().size());
preparedStatement.setBoolean(6, runSummary.getEndOkay());
preparedStatement.executeUpdate();
} catch (final SQLException e) {
@@ -422,7 +439,7 @@
public RunSummary readFullRunSummary(final int run) {
// Read main run summary but not referenced objects.
- final RunSummary runSummary = this.getRunSummary(run);
+ final RunSummaryImpl runSummary = (RunSummaryImpl) this.getRunSummary(run);
// Read EPICS data and set on RunSummary.
runSummary.setEpicsData(epicsDataDao.getEpicsData(run));
@@ -431,7 +448,10 @@
runSummary.setScalerData(scalerDataDao.getScalerData(run));
// Read EVIO file list and set on RunSummary.
- runSummary.setEvioFileList(evioFilesDao.getEvioFiles(run));
+ runSummary.setEvioFiles(evioFilesDao.getEvioFiles(run));
+
+ // Read trigger config.
+ runSummary.setTriggerConfigInt(triggerConfigIntDao.getTriggerConfigInt(run));
return runSummary;
}
@@ -476,7 +496,7 @@
preparedStatement.setTimestamp(1, new java.sql.Timestamp(runSummary.getStartDate().getTime()), CALENDAR);
preparedStatement.setTimestamp(2, new java.sql.Timestamp(runSummary.getEndDate().getTime()), CALENDAR);
preparedStatement.setInt(3, runSummary.getTotalEvents());
- preparedStatement.setInt(4, runSummary.getEvioFileList().size());
+ preparedStatement.setInt(4, runSummary.getEvioFiles().size());
preparedStatement.setBoolean(5, runSummary.getEndOkay());
preparedStatement.setBoolean(6, runSummary.getRunOkay());
preparedStatement.setInt(7, runSummary.getRun());
Added: java/trunk/record-util/src/main/java/org/hps/record/run/RunSummaryImpl.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/run/RunSummaryImpl.java (added)
+++ java/trunk/record-util/src/main/java/org/hps/record/run/RunSummaryImpl.java Wed Aug 26 19:31:38 2015
@@ -0,0 +1,381 @@
+package org.hps.record.run;
+
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.hps.record.epics.EpicsData;
+import org.hps.record.scalers.ScalerData;
+import org.hps.record.triggerbank.TriggerConfigInt;
+
+/**
+ * Implementation of {@link RunSummary} for retrieving information from the run database.
+ *
+ * @author Jeremy McCormick, SLAC
+ */
+public final class RunSummaryImpl implements RunSummary {
+
+ /**
+ * Default date display format.
+ */
+ private static final DateFormat DATE_DISPLAY = new SimpleDateFormat();
+
+ static {
+ /**
+ * Set default time zone for display to East Coast (JLAB) where data was
+ * taken.
+ */
+ DATE_DISPLAY.setCalendar(new GregorianCalendar(TimeZone.getTimeZone("America/New_York")));
+ }
+
+ /**
+ * Date this record was created.
+ */
+ private Date created;
+
+ /**
+ * End date of run.
+ */
+ private Date endDate;
+
+ /**
+ * This is <code>true</code> if the END event is found in the data.
+ */
+ private boolean endOkay;
+
+ /**
+ * The EPICS data from the run.
+ */
+ private List<EpicsData> epicsDataList;
+
+ /**
+ * The list of EVIO files in the run.
+ */
+ private List<File> evioFileList = new ArrayList<File>();
+
+ /**
+ * The run number.
+ */
+ private final int run;
+
+ /**
+ * Flag to indicate run was okay.
+ */
+ private boolean runOkay = true;
+
+ /**
+ * The scaler data for the run.
+ */
+ private List<ScalerData> scalerDataList;
+
+ /**
+ * The trigger data for the run.
+ */
+ private TriggerConfigInt triggerConfigInt;
+
+ /**
+ * Start date of run.
+ */
+ private Date startDate;
+
+ /**
+ * The total events found in the run across all files.
+ */
+ private int totalEvents = -1;
+
+ /**
+ * The total number of files in the run.
+ */
+ private int totalFiles = 0;
+
+ /**
+ * Date when the run record was last updated.
+ */
+ private Date updated;
+
+ /**
+ * Create a run summary.
+ *
+ * @param run the run number
+ */
+ public RunSummaryImpl(final int run) {
+ this.run = run;
+ }
+
+ /**
+ * Add an EVIO file from this run to the list.
+ *
+ * @param file the file to add
+ */
+ public void addFile(final File file) {
+ this.evioFileList.add(file);
+ }
+
+ /**
+ * Get the creation date of this run record.
+ *
+ * @return the creation date of this run record
+ */
+ public Date getCreated() {
+ return this.created;
+ }
+
+ /**
+ * Get the end date.
+ *
+ * @return the end date
+ */
+ public Date getEndDate() {
+ return endDate;
+ }
+
+ /**
+ * Return <code>true</code> if END event was found in the data.
+ *
+ * @return <code>true</code> if END event was in the data
+ */
+ public boolean getEndOkay() {
+ return this.endOkay;
+ }
+
+ /**
+ * Get the EPICS data from the run.
+ *
+ * @return the EPICS data from the run
+ */
+ public List<EpicsData> getEpicsData() {
+ return this.epicsDataList;
+ }
+
+ /**
+ * Get the event rate (effectively the trigger rate) which is the total
+ * events divided by the number of seconds in the run.
+ *
+ * @return the event rate
+ */
+ public double getEventRate() {
+ if (this.getTotalEvents() <= 0) {
+ throw new RuntimeException("Total events is zero or invalid.");
+ }
+ return (double) this.getTotalEvents() / (double) this.getTotalSeconds();
+ }
+
+ /**
+ * Get the list of EVIO files in this run.
+ *
+ * @return the list of EVIO files in this run
+ */
+ public List<File> getEvioFiles() {
+ return this.evioFileList;
+ }
+
+ /**
+ * Get the run number.
+ *
+ * @return the run number
+ */
+ public int getRun() {
+ return this.run;
+ }
+
+ /**
+ * Return <code>true</code> if the run was okay (no major errors or data
+ * corruption occurred).
+ *
+ * @return <code>true</code> if the run was okay
+ */
+ public boolean getRunOkay() {
+ return this.runOkay;
+ }
+
+ /**
+ * Get the scaler data of this run.
+ *
+ * @return the scaler data of this run
+ */
+ public List<ScalerData> getScalerData() {
+ return this.scalerDataList;
+ }
+
+ /**
+ * Get the trigger config of this run.
+ *
+ * @return the trigger config of this run
+ */
+ public TriggerConfigInt getTriggerConfigInt() {
+ return triggerConfigInt;
+ }
+
+ /**
+ * Get the start date.
+ *
+ * @return the start date
+ */
+ public Date getStartDate() {
+ return startDate;
+ }
+
+ /**
+ * Get the total events in the run.
+ *
+ * @return the total events in the run
+ */
+ public int getTotalEvents() {
+ return this.totalEvents;
+ }
+
+ /**
+ * Get the total number of files for this run.
+ *
+ * @return the total number of files for this run
+ */
+ public int getTotalFiles() {
+ return this.totalFiles;
+ }
+
+ /**
+ * Get the number of seconds in the run which is the difference between the
+ * start and end times.
+ *
+ * @return the total seconds in the run
+ */
+ public long getTotalSeconds() {
+ return (endDate.getTime() - startDate.getTime()) / 1000;
+ }
+
+ /**
+ * Get the date when this run record was last updated.
+ *
+ * @return the date when this run record was last updated
+ */
+ public Date getUpdated() {
+ return updated;
+ }
+
+ /**
+ * Set the creation date of the run record.
+ *
+ * @param created the creation date of the run record
+ */
+ void setCreated(final Date created) {
+ this.created = created;
+ }
+
+ /**
+ * Set the start date.
+ *
+ * @param startDate the start date
+ */
+ public void setEndDate(final Date endDate) {
+ this.endDate = endDate;
+ }
+
+ /**
+ * Set if end is okay.
+ *
+ * @param endOkay <code>true</code> if end is okay
+ */
+ public void setEndOkay(final boolean endOkay) {
+ this.endOkay = endOkay;
+ }
+
+ /**
+ * Set the EPICS data for the run.
+ *
+ * @param epics the EPICS data for the run
+ */
+ public void setEpicsData(final List<EpicsData> epicsDataList) {
+ this.epicsDataList = epicsDataList;
+ }
+
+ /**
+ * Set the list of EVIO files for the run.
+ *
+ * @param evioFileList the list of EVIO files for the run
+ */
+ public void setEvioFiles(final List<File> evioFileList) {
+ this.evioFileList = evioFileList;
+ }
+
+ /**
+ * Set whether the run was "okay" meaning the data is usable for physics
+ * analysis.
+ *
+ * @param runOkay <code>true</code> if the run is okay
+ */
+ public void setRunOkay(final boolean runOkay) {
+ this.runOkay = runOkay;
+ }
+
+ /**
+ * Set the scaler data of the run.
+ *
+ * @param scalerData the scaler data
+ */
+ public void setScalerData(final List<ScalerData> scalerDataList) {
+ this.scalerDataList = scalerDataList;
+ }
+
+ /**
+ * Set the trigger config of the run.
+ *
+ * @param triggerConfig the trigger config
+ */
+ public void setTriggerConfigInt(final TriggerConfigInt triggerConfigInt) {
+ this.triggerConfigInt = triggerConfigInt;
+ }
+
+ /**
+ * Set the start date.
+ *
+ * @param startDate the start date
+ */
+ public void setStartDate(final Date startDate) {
+ this.startDate = startDate;
+ }
+
+ /**
+ * Set the total number of physics events in the run.
+ *
+ * @param totalEvents the total number of physics events in the run
+ */
+ public void setTotalEvents(final int totalEvents) {
+ this.totalEvents = totalEvents;
+ }
+
+ /**
+ * Set the total number of EVIO files in the run.
+ *
+ * @param totalFiles the total number of EVIO files in the run
+ */
+ public void setTotalFiles(final int totalFiles) {
+ this.totalFiles = totalFiles;
+ }
+
+ /**
+ * Set the date when this run record was last updated.
+ *
+ * @param updated the date when the run record was last updated
+ */
+ public void setUpdated(final Date updated) {
+ this.updated = updated;
+ }
+
+ /**
+ * Convert this object to a string.
+ *
+ * @return this object converted to a string
+ */
+ @Override
+ public String toString() {
+ return "RunSummary { run: " + this.getRun() + ", startDate: " + DATE_DISPLAY.format(this.getStartDate())
+ + ", endDate: " + DATE_DISPLAY.format(this.getEndDate()) + ", totalEvents: " + this.getTotalEvents()
+ + ", totalFiles: " + this.getTotalFiles() + ", endOkay: " + this.getEndOkay() + ", runOkay: "
+ + this.getRunOkay() + ", updated: " + this.getUpdated() + ", created: " + this.getCreated() + " }";
+ }
+}
Copied: java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigIntDao.java (from r3409, java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigDao.java)
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigDao.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigIntDao.java Wed Aug 26 19:31:38 2015
@@ -1,11 +1,13 @@
package org.hps.record.run;
+
+import org.hps.record.triggerbank.TriggerConfigInt;
/**
* Database interface to trigger config.
*
* @author Jeremy McCormick, SLAC
*/
-public interface TriggerConfigDao {
+public interface TriggerConfigIntDao {
/**
* Get the trigger config by run.
@@ -13,7 +15,7 @@
* @param run the run number
* @return the trigger config
*/
- TriggerConfig getTriggerConfig(int run);
+ TriggerConfigInt getTriggerConfigInt(int run);
/**
* Insert a trigger config for a run.
@@ -21,21 +23,12 @@
* @param run the run number
* @param triggerConfig the trigger config
*/
- void insertTriggerConfig(int run, TriggerConfig triggerConfig);
-
-
- /**
- * Update a trigger config by run number.
- *
- * @param run the run number
- * @param triggerConfig the trigger config
- */
- void updateTriggerConfig(int run, TriggerConfig triggerConfig);
-
+ void insertTriggerConfigInt(TriggerConfigInt triggerConfig, int run);
+
/**
* Delete a trigger config by run number.
*
* @param run the run number
*/
- void deleteTriggerConfig(int run);
+ void deleteTriggerConfigInt(int run);
}
Copied: java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigIntDaoImpl.java (from r3409, java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigDaoImpl.java)
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigDaoImpl.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/run/TriggerConfigIntDaoImpl.java Wed Aug 26 19:31:38 2015
@@ -4,13 +4,16 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.Map;
+
+import org.hps.record.triggerbank.TriggerConfigInt;
/**
* Implementation of trigger config database interface.
*
* @author Jeremy McCormick, SLAC
*/
-public class TriggerConfigDaoImpl implements TriggerConfigDao {
+public class TriggerConfigIntDaoImpl implements TriggerConfigIntDao {
/**
* The database connection.
@@ -24,19 +27,15 @@
/**
* Select by run.
*/
- static final String SELECT_RUN = "SELECT * FROM run_trigger_config WHERE run = ?";
+ static final String SELECT_RUN = "SELECT * FROM run_trigger_config_int WHERE run = ?";
/**
* Insert by run.
*/
- static final String INSERT_RUN = "INSERT INTO run_trigger_config (run, ti_time_offset) VALUES (?, ?)";
- /**
- * Update by run.
- */
- static final String UPDATE_RUN = "UPDATE run_trigger_config SET ti_time_offset = ? WHERE run = ?";
+ static final String INSERT_VARIABLE = "INSERT INTO run_trigger_config_int (run, variable_name, value) VALUES (?, ?, ?)";
/**
* Delete by run.
*/
- static final String DELETE_RUN = "DELETE FROM run_trigger_config WHERE run = ?";
+ static final String DELETE_RUN = "DELETE FROM run_trigger_config_int WHERE run = ?";
}
/**
@@ -44,27 +43,19 @@
*
* @param connection the database connection
*/
- TriggerConfigDaoImpl(Connection connection) {
+ TriggerConfigIntDaoImpl(Connection connection) {
this.connection = connection;
}
-
- /**
- * Get the trigger config by run.
- *
- * @param run the run number
- * @return the trigger config
- */
+
@Override
- public TriggerConfig getTriggerConfig(int run) {
+ public TriggerConfigInt getTriggerConfigInt(int run) {
PreparedStatement preparedStatement = null;
- TriggerConfig triggerConfig = null;
+ TriggerConfigInt triggerConfig = new TriggerConfigInt();
try {
preparedStatement = connection.prepareStatement(TriggerConfigQuery.SELECT_RUN);
- preparedStatement.setInt(1, run);
- final ResultSet resultSet = preparedStatement.executeQuery();
- if (resultSet.next()) {
- triggerConfig = new TriggerConfig();
- triggerConfig.setTiTimeOffset(resultSet.getLong("ti_time_offset"));
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ triggerConfig.put(resultSet.getString("variable_name"), resultSet.getLong("value"));
}
} catch (final SQLException e) {
throw new RuntimeException(e);
@@ -78,47 +69,17 @@
return triggerConfig;
}
- /**
- * Insert a trigger config for a run.
- *
- * @param run the run number
- * @param triggerConfig the trigger config
- */
@Override
- public void insertTriggerConfig(int run, TriggerConfig triggerConfig) {
+ public void insertTriggerConfigInt(TriggerConfigInt triggerConfig, int run) {
PreparedStatement preparedStatement = null;
try {
- preparedStatement = connection.prepareStatement(TriggerConfigQuery.INSERT_RUN);
- preparedStatement.setInt(1, run);
- preparedStatement.setLong(2, triggerConfig.getTiTimeOffset());
- preparedStatement.executeUpdate();
- } catch (final SQLException e) {
- throw new RuntimeException(e);
- } finally {
- if (preparedStatement != null) {
- try {
- preparedStatement.close();
- } catch (final SQLException e) {
- e.printStackTrace();
- }
+ preparedStatement = connection.prepareStatement(TriggerConfigQuery.INSERT_VARIABLE);
+ for (Map.Entry<String, Long> entry : triggerConfig.entrySet()) {
+ preparedStatement.setInt(1, run);
+ preparedStatement.setString(2, entry.getKey());
+ preparedStatement.setLong(3, entry.getValue());
+ preparedStatement.executeUpdate();
}
- }
- }
-
- /**
- * Update a trigger config by run number.
- *
- * @param run the run number
- * @param triggerConfig the trigger config
- */
- @Override
- public void updateTriggerConfig(int run, TriggerConfig triggerConfig) {
- PreparedStatement preparedStatement = null;
- try {
- preparedStatement = connection.prepareStatement(TriggerConfigQuery.UPDATE_RUN);
- preparedStatement.setLong(1, triggerConfig.getTiTimeOffset());
- preparedStatement.setInt(2, run);
- preparedStatement.executeUpdate();
} catch (final SQLException e) {
throw new RuntimeException(e);
} finally {
@@ -133,13 +94,8 @@
}
- /**
- * Delete a trigger config by run number.
- *
- * @param run the run number
- */
@Override
- public void deleteTriggerConfig(int run) {
+ public void deleteTriggerConfigInt(int run) {
PreparedStatement preparedStatement = null;
try {
preparedStatement = connection.prepareStatement(TriggerConfigQuery.DELETE_RUN);
@@ -155,6 +111,6 @@
e.printStackTrace();
}
}
- }
- }
+ }
+ }
}
Copied: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TiTimeOffsetEvioProcessor.java (from r3409, java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerEvioProcessor.java)
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerEvioProcessor.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TiTimeOffsetEvioProcessor.java Wed Aug 26 19:31:38 2015
@@ -1,24 +1,23 @@
package org.hps.record.triggerbank;
import org.hps.record.evio.EvioEventProcessor;
-import org.hps.record.run.TriggerConfig;
import org.hps.record.triggerbank.AbstractIntData.IntBankDefinition;
import org.jlab.coda.jevio.BaseStructure;
import org.jlab.coda.jevio.EvioEvent;
/**
- *
+ * Extract trigger time offset from EVIO data.
+ *
* @author Sho Uemura <[log in to unmask]>
- * @version $Id: $
*/
-public class TriggerEvioProcessor extends EvioEventProcessor {
+public class TiTimeOffsetEvioProcessor extends EvioEventProcessor {
private final IntBankDefinition headBankDefinition;
private final IntBankDefinition tiBankDefinition;
private long minOffset = 0;
private long maxOffset = 0;
- public TriggerEvioProcessor() {
+ public TiTimeOffsetEvioProcessor() {
headBankDefinition = new IntBankDefinition(HeadBankData.class, new int[]{0x2e, 0xe10f});
tiBankDefinition = new IntBankDefinition(TIData.class, new int[]{0x2e, 0xe10a});
}
@@ -42,15 +41,13 @@
}
}
}
-
- public TriggerConfig getTriggerConfig() {
- TriggerConfig triggerConfig = new TriggerConfig();
+
+ public void updateTriggerConfig(TriggerConfigInt triggerConfig) {
long offsetRange = maxOffset - minOffset;
if (offsetRange > 0.99 * 1e9 && offsetRange < 1.01 * 1e9) {
- triggerConfig.setTiTimeOffset(minOffset);
+ triggerConfig.put(TriggerConfigVariable.TI_TIME_OFFSET.name(), minOffset);
} else {
- triggerConfig.setTiTimeOffset(0);
+ triggerConfig.put(TriggerConfigVariable.TI_TIME_OFFSET.name(), 0L);
}
- return triggerConfig;
}
}
Added: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerConfigInt.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerConfigInt.java (added)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerConfigInt.java Wed Aug 26 19:31:38 2015
@@ -0,0 +1,25 @@
+package org.hps.record.triggerbank;
+
+import java.util.HashMap;
+
+/**
+ * Trigger config information in the form of string keys and long values.
+ * <p>
+ * This is not the "standard" interface using in LCSim to access trigger configuration.
+ * It is used as a simplistic representation for the run database.
+ *
+ * @author Jeremy McCormick, SLAC
+ */
+@SuppressWarnings("serial")
+public class TriggerConfigInt extends HashMap<String, Long> {
+
+ /**
+ * Get a particular trigger config variable's value.
+ *
+ * @param variable the variable enum
+ * @return the variable's value
+ */
+ Long getValue(TriggerConfigVariable variable) {
+ return this.get(variable.name());
+ }
+}
Added: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerConfigVariable.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerConfigVariable.java (added)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerConfigVariable.java Wed Aug 26 19:31:38 2015
@@ -0,0 +1,13 @@
+package org.hps.record.triggerbank;
+
+/**
+ * Enum for trigger config variables.
+ *
+ * @author Jeremy McCormick, SLAC
+ */
+public enum TriggerConfigVariable {
+ /**
+ * TI time offset
+ */
+ TI_TIME_OFFSET
+}
|