LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  February 2016

HPS-SVN February 2016

Subject:

r4240 - in /java/branches/jeremy-dev/run-database/src: main/java/org/hps/run/database/ test/java/org/hps/run/database/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Tue, 23 Feb 2016 18:25:17 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (620 lines)

Author: [log in to unmask]
Date: Tue Feb 23 10:25:15 2016
New Revision: 4240

Log:
Minor changes to run database builders (dev branch).

Added:
    java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/EvioDataBuilder.java
Removed:
    java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/DatabaseUpdater.java
Modified:
    java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunDatabaseBuilder.java
    java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunManager.java
    java/branches/jeremy-dev/run-database/src/test/java/org/hps/run/database/RunBuilderTest.java

Added: java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/EvioDataBuilder.java
 =============================================================================
--- java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/EvioDataBuilder.java	(added)
+++ java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/EvioDataBuilder.java	Tue Feb 23 10:25:15 2016
@@ -0,0 +1,83 @@
+package org.hps.run.database;
+
+import java.io.File;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.hps.record.epics.EpicsData;
+import org.hps.record.epics.EpicsRunProcessor;
+import org.hps.record.evio.EvioFileSource;
+import org.hps.record.evio.EvioFileUtilities;
+import org.hps.record.evio.EvioLoop;
+import org.hps.record.scalers.ScalerData;
+import org.hps.record.scalers.ScalersEvioProcessor;
+
+/**
+ * Extracts lists of EPICS and scaler data in an EVIO file and insert
+ * them into the run database.
+ * 
+ * @author Jeremy McCormick, SLAC
+ */
+public class EvioDataBuilder extends AbstractRunBuilder {
+
+    private Logger LOGGER = Logger.getLogger(EvioDataBuilder.class.getPackage().getName());
+    private File evioFile;
+    private List<EpicsData> epicsData;
+    private List<ScalerData> scalerData;
+    
+    void setEvioFile(File evioFile) {
+        this.evioFile = evioFile;
+    }
+    
+    List<EpicsData> getEpicsData() {
+        return epicsData;
+    }
+    
+    List<ScalerData> getScalerData() {
+        return scalerData;
+    }
+    
+    @Override
+    void build() {
+        if (evioFile == null) {
+            throw new RuntimeException("The EVIO file was not set.");
+        }
+        EvioLoop loop = new EvioLoop();
+        EvioFileSource src = new EvioFileSource(evioFile);
+        loop.setEvioFileSource(src);
+        ScalersEvioProcessor scalersProcessor = new ScalersEvioProcessor();
+        scalersProcessor.setResetEveryEvent(false);        
+        EpicsRunProcessor epicsProcessor = new EpicsRunProcessor();
+        loop.addProcessor(epicsProcessor);                
+        loop.loop(-1);
+        this.epicsData = epicsProcessor.getEpicsData();
+        this.scalerData = scalersProcessor.getScalerData();
+    }
+    
+    public void main(String args[]) {
+        
+        if (args.length == 0) {
+            throw new RuntimeException("No command line arguments provided.");
+        }
+        String path = args[0];
+        File file = new File(path);
+        int run = EvioFileUtilities.getRunFromName(file);
+        
+        EvioDataBuilder builder = new EvioDataBuilder();
+        builder.setEvioFile(file);
+        builder.build();
+        
+        if (!builder.getEpicsData().isEmpty()) {
+            RunManager runManager = null;
+            try {
+                runManager = new RunManager();
+                runManager.setRun(run);
+                runManager.updateEpicsData(epicsData);
+            } finally {
+                runManager.closeConnection();
+            }
+        } else {
+            LOGGER.warning("No EPICS data was found to insert into run database.");
+        }
+    }
+}

Modified: java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunDatabaseBuilder.java
 =============================================================================
--- java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunDatabaseBuilder.java	(original)
+++ java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunDatabaseBuilder.java	Tue Feb 23 10:25:15 2016
@@ -6,7 +6,6 @@
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.Map.Entry;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -30,7 +29,6 @@
 import org.hps.record.scalers.ScalersEvioProcessor;
 import org.hps.record.triggerbank.AbstractIntData.IntBankDefinition;
 import org.hps.record.triggerbank.HeadBankData;
-import org.hps.record.triggerbank.TiTimeOffsetCalculator;
 import org.hps.record.triggerbank.TiTimeOffsetEvioProcessor;
 import org.hps.record.triggerbank.TriggerConfigData;
 import org.hps.record.triggerbank.TriggerConfigData.Crate;
@@ -42,7 +40,6 @@
 import org.srs.datacat.model.DatasetModel;
 import org.srs.datacat.model.DatasetResultSetModel;
 import org.srs.datacat.model.dataset.DatasetWithViewModel;
-import org.srs.datacat.shared.DatasetLocation;
 
 /**
  * Builds a complete {@link RunSummary} object from various data sources, including the data catalog and the run

Modified: java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunManager.java
 =============================================================================
--- java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunManager.java	(original)
+++ java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunManager.java	Tue Feb 23 10:25:15 2016
@@ -15,7 +15,7 @@
 import org.lcsim.conditions.ConditionsListener;
 
 /**
- * Manages read-only access to the run database and creates a {@link RunSummary} for a specific run.
+ * Manages access to the run database.
  *
  * @author Jeremy McCormick, SLAC
  */
@@ -38,8 +38,7 @@
     private static final Logger LOGGER = Logger.getLogger(RunManager.class.getPackage().getName());
 
     /**
-     * Get the global instance of the {@link RunManager}.
-     *
+     * Get the global instance of the {@link RunManager}.     
      * @return the global instance of the {@link RunManager}
      */
     public static RunManager getRunManager() {
@@ -53,12 +52,7 @@
      * The active database connection.
      */
     private Connection connection;
-
-    /**
-     * The database connection parameters, initially set to the default parameters.
-     */
-    private final ConnectionParameters connectionParameters = DEFAULT_CONNECTION_PARAMETERS;
-
+   
     /**
      * Factory for creating database API objects.
      */
@@ -70,34 +64,28 @@
     private Integer run = null;
 
     /**
+     * Class constructor.     
+     * @param connection the database connection
+     */
+    public RunManager(final Connection connection) {
+        try {
+            if (connection.isClosed()) {
+                throw new RuntimeException("The connection is already closed and cannot be used.");
+            }
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+        this.connection = connection;
+        factory = new DaoProvider(this.connection);
+    }
+    
+    /**
      * Class constructor using default connection parameters.
      */
     public RunManager() {
-        this.connection = DEFAULT_CONNECTION_PARAMETERS.createConnection();
-        this.openConnection();
-        factory = new DaoProvider(this.connection);
-    }
-
-    /**
-     * Class constructor.
-     *
-     * @param connection the database connection
-     */
-    public RunManager(final Connection connection) {
-        this.connection = connection;
-        this.openConnection();
-        factory = new DaoProvider(this.connection);
-    }
-
-    /**
-     * Check if the run number has been set.
-     */
-    private void checkRunNumber() {
-        if (this.run == null) {
-            throw new IllegalStateException("The run number was never set.");
-        }
-    }
-
+        this(DEFAULT_CONNECTION_PARAMETERS.createConnection());
+    }
+        
     /**
      * Close the database connection.
      */
@@ -113,7 +101,6 @@
 
     /**
      * Load new run information when conditions have changed.
-     *
      * @param conditionsEvent the event with new conditions information
      */
     @Override
@@ -122,8 +109,159 @@
     }
 
     /**
+     * Return the database connection.     
+     * @return the database connection
+     */
+    Connection getConnection() {
+        return this.connection;
+    }
+
+    /**
+     * Get the EPICS data for the current run.
+     * @param epicsType the type of EPICS data
+     * @return the EPICS data for the current run
+     */
+    public List<EpicsData> getEpicsData(final EpicsType epicsType) {
+        return factory.getEpicsDataDao().getEpicsData(epicsType, this.run);
+    }
+
+    /**
+     * Get the list of EPICS variables definitions.     
+     * @param epicsType the type of EPICS data
+     * @return the list of EPICS variable definitions
+     */
+    public List<EpicsVariable> getEpicsVariables(final EpicsType epicsType) {
+        return factory.getEpicsVariableDao().getEpicsVariables(epicsType);
+    }
+
+    /**
+     * Get the full list of run numbers from the database.     
+     * @return the complete list of run numbers
+     */
+    public List<Integer> getRuns() {
+        return factory.getRunSummaryDao().getRuns();
+    }
+  
+    /**
+     * Get the run summary for the current run.     
+     * @return the run summary for the current run
+     */
+    public RunSummary getRunSummary() {
+        return factory.getRunSummaryDao().getRunSummary(this.run);
+    }
+
+    /**
+     * Get the scaler data for the current run.     
+     * @return the scaler data for the current run
+     */
+    public List<ScalerData> getScalerData() {
+        return factory.getScalerDataDao().getScalerData(this.run);
+    }
+    
+    /**
+     * Get SVT configuration data.     
+     * @return the SVT configuration data
+     */
+    public List<SvtConfigData> getSvtConfigData() {
+        return factory.getSvtConfigDao().getSvtConfigs(this.run);
+    }
+    
+    /**
+     * Get the DAQ (trigger) configuration for the run.
+     * @return the DAQ configuration for the run
+     */
+    public DAQConfig getDAQConfig() {
+        TriggerConfigData config = factory.getTriggerConfigDao().getTriggerConfig(this.run);
+        return config.loadDAQConfig(this.run);
+    }   
+
+    /**
+     * Return <code>true</code> if the run exists in the database.
+     * @return <code>true</code> if the run exists in the database
+     */
+    public boolean runExists() {      
+        return factory.getRunSummaryDao().runSummaryExists(this.run);
+    }
+
+    /**
+     * Set the run number and then load the applicable {@link RunSummary} from the database.
+     * @param run the run number
+     */
+    public void setRun(final int run) {
+        if (this.run == null || run != this.run) {
+            LOGGER.info("setting run " + run);
+            // Set the run number.
+            this.run = run;
+        }
+    }
+    
+    /**
+     * Get the currently active run number or <code>null</code>.
+     * @return the currently active run number of <code>null</code>
+     */
+    public Integer getRun() {
+        return this.run;
+    }
+    
+    /**
+     * Create or replace a run summary in the database.
+     * @param runSummary the run summary to update
+     * @param replaceExisting <code>true</code> to allow an existing run summary to be replaced
+     */
+    void updateRunSummary(RunSummary runSummary, boolean replaceExisting) {
+        final RunSummaryDao runSummaryDao = factory.getRunSummaryDao();
+        RunManager runManager = new RunManager();
+        runManager.setRun(runSummary.getRun());
+        if (runManager.runExists()) {
+            if (replaceExisting) {
+                runSummaryDao.updateRunSummary(runSummary);
+            } else {
+                throw new RuntimeException("Run already exists and replacement is not allowed.");
+            }
+        } else {
+            runSummaryDao.insertRunSummary(runSummary);
+        }                
+    }
+    
+    /**
+     * Create or replace the trigger config for the run.
+     * @param triggerConfig the trigger config
+     * @param replaceExisting <code>true</code> to allow an existing trigger to be replaced
+     */
+    void updateTriggerConfig(TriggerConfigData triggerConfig, boolean replaceExisting) {
+        final TriggerConfigDao configDao = factory.getTriggerConfigDao();
+        if (configDao.getTriggerConfig(run) != null) {
+            if (replaceExisting) {
+                configDao.deleteTriggerConfig(run);
+            } else {
+                throw new RuntimeException("Run already exists and replacement is not allowed.");
+            }
+        }
+        configDao.insertTriggerConfig(triggerConfig, run);
+    }
+    
+    /**
+     * Create or replace EPICS data for the run.
+     * @param epicsData the EPICS data
+     */
+    void updateEpicsData(List<EpicsData> epicsData) {
+        if (epicsData != null && !epicsData.isEmpty()) {
+            factory.getEpicsDataDao().insertEpicsData(epicsData, this.run);
+        }
+    }
+    
+    /**
+     * Create or replace scaler data for the run.
+     * @param scalerData the scaler data
+     */
+    void updateScalerData(List<ScalerData> scalerData) {
+        if (scalerData != null) {
+            factory.getScalerDataDao().insertScalerData(scalerData, this.run);
+        } 
+    }     
+    
+    /**
      * Delete a run from the database.
-     *
      * @param run the run number
      */
     void deleteRun() {        
@@ -134,162 +272,5 @@
         factory.getTriggerConfigDao().deleteTriggerConfig(run);
         factory.getRunSummaryDao().deleteRunSummary(run);
     }
-
-    /**
-     * Return the database connection.
-     *
-     * @return the database connection
-     */
-    Connection getConnection() {
-        return this.connection;
-    }
-
-    /**
-     * Get the EPICS data for the current run.
-     *
-     * @param epicsType the type of EPICS data
-     * @return the EPICS data for the current run
-     */
-    public List<EpicsData> getEpicsData(final EpicsType epicsType) {
-        this.checkRunNumber();
-        return factory.getEpicsDataDao().getEpicsData(epicsType, this.run);
-    }
-
-    /**
-     * Get the EPICS variables.
-     *
-     * @param epicsType the type of EPICS data
-     * @return the EPICS data for the current run
-     */
-    public List<EpicsVariable> getEpicsVariables(final EpicsType epicsType) {
-        this.checkRunNumber();
-        return factory.getEpicsVariableDao().getEpicsVariables(epicsType);
-    }
-
-    /**
-     * Get the current run number.
-     *
-     * @return the run number
-     */
-    public int getCurrentRun() {
-        return run;
-    }
-
-    /**
-     * Get the complete list of run numbers from the database.
-     *
-     * @return the complete list of run numbers
-     */
-    public List<Integer> getRuns() {
-        return factory.getRunSummaryDao().getRuns();
-    }
-  
-    /**
-     * Get the run summary for the current run not including its sub-objects like scaler data.
-     *
-     * @return the run summary for the current run
-     */
-    public RunSummary getRunSummary() {
-        this.checkRunNumber();
-        return factory.getRunSummaryDao().getRunSummary(this.run);
-    }
-
-    /**
-     * Get the scaler data for the current run.
-     *
-     * @return the scaler data for the current run
-     */
-    public List<ScalerData> getScalerData() {
-        this.checkRunNumber();
-        return factory.getScalerDataDao().getScalerData(run);
-    }
-    
-    /**
-     * Get SVT configuration data.
-     * 
-     * @return the SVT configuration data
-     */
-    public List<SvtConfigData> getSvtConfigData() {
-        this.checkRunNumber();
-        return factory.getSvtConfigDao().getSvtConfigs(run);
-    }
-    
-    /**
-     * Get the DAQ configuration for the run.
-     * 
-     * @return the DAQ configuration for the run
-     */
-    public DAQConfig getDAQConfig() {
-        this.checkRunNumber();
-        TriggerConfigData config = factory.getTriggerConfigDao().getTriggerConfig(run);
-        return config.loadDAQConfig(run);
-    }
-     
-    /**
-     * Open a new database connection from the connection parameters if the current one is closed or <code>null</code>.
-     * <p>
-     * This method does nothing if the connection is already open.
-     */
-    public void openConnection() {
-        try {
-            if (this.connection.isClosed()) {
-                LOGGER.info("creating new database connection");
-                this.connection = connectionParameters.createConnection();
-            } 
-        } catch (final SQLException e) {
-            throw new RuntimeException("Error opening database connection.", e);
-        }
-    }
-
-    /**
-     * Return <code>true</code> if the run exists in the database.
-     *
-     * @return <code>true</code> if the run exists in the database
-     */
-    public boolean runExists() {
-        if (factory == null) {
-            throw new RuntimeException("factory is null");
-        }
-        if (factory.getRunSummaryDao() == null) {
-            throw new RuntimeException("RunSummaryDao is null");
-        }
-        if (this.run == null) {
-            throw new RuntimeException("run is null");
-        }
-        return factory.getRunSummaryDao().runSummaryExists(this.run);
-    }
-
-    /**
-     * Return <code>true</code> if the run exists in the database.
-     *
-     * @param run the run number
-     * @return <code>true</code> if the run exists in the database
-     */
-    boolean runExists(final int run) {
-        return factory.getRunSummaryDao().runSummaryExists(run);
-    }
-
-    /**
-     * Set the run number and then load the applicable {@link RunSummary} from the database.
-     *
-     * @param run the run number
-     */
-    public void setRun(final int run) {
-
-        if (this.run == null || run != this.run) {
-
-            LOGGER.info("setting new run " + run);
-
-            // Set the run number.
-            this.run = run;
-        }
-    }
-    
-    /**
-     * Get the currently active run number or <code>null</code>.
-     * @return the currently active run number of <code>null</code>
-     */
-    public Integer getRun() {
-        return this.run;
-    }
+    
 }

Modified: java/branches/jeremy-dev/run-database/src/test/java/org/hps/run/database/RunBuilderTest.java
 =============================================================================
--- java/branches/jeremy-dev/run-database/src/test/java/org/hps/run/database/RunBuilderTest.java	(original)
+++ java/branches/jeremy-dev/run-database/src/test/java/org/hps/run/database/RunBuilderTest.java	Tue Feb 23 10:25:15 2016
@@ -1,7 +1,6 @@
 package org.hps.run.database;
 
 import java.io.File;
-import java.sql.Connection;
 import java.util.List;
 
 import junit.framework.TestCase;
@@ -16,11 +15,12 @@
     private static String SPREADSHEET = "/work/hps/rundb/HPS_Runs_2015_Sheet1.csv";
     private static String FOLDER = "/HPS/test";
     private static String SITE = "SLAC";
+    private static String EVIO_TEST_FILE = "/nfs/slac/g/hps3/data/engrun2015/evio/hps_005403.evio.0";
     
     private static final ConnectionParameters CONNECTION_PARAMETERS = 
             new ConnectionParameters("root", "derp", "hps_run_db", "localhost");
         
-    public void testRunBuilder() throws Exception {
+    public void testRunBuilders() throws Exception {
         
         RunSummaryImpl runSummary = new RunSummaryImpl(RUN);
         
@@ -31,7 +31,6 @@
         datacatBuilder.setSite(SITE);
         datacatBuilder.setRunSummary(runSummary);
         datacatBuilder.build();
-        
         List<File> files = datacatBuilder.getFileList();
         
         // livetime measurements
@@ -50,14 +49,17 @@
         spreadsheetBuilder.setSpreadsheetFile(new File(SPREADSHEET));
         spreadsheetBuilder.setRunSummary(datacatBuilder.getRunSummary());
         spreadsheetBuilder.build();
+                
+        // EPICS and scalers (would actually run this in a separate job/process per file)
+        EvioDataBuilder dataBuilder = new EvioDataBuilder();
+        dataBuilder.setEvioFile(new File(EVIO_TEST_FILE));
+        dataBuilder.build();
         
-        // database updater
-        Connection connection = CONNECTION_PARAMETERS.createConnection();
-        DatabaseUpdater updater = new DatabaseUpdater(connection);
-        updater.setRunSummary(runSummary);
-        System.out.println("built run summary ...");
-        System.out.println(runSummary);
-        //updater.setTriggerConfigData(configBuilder.getTriggerConfigData());
-        //updater.update();
+        // update in database
+        RunManager runManager = new RunManager(CONNECTION_PARAMETERS.createConnection());
+        runManager.updateRunSummary(runSummary, true);
+        runManager.updateTriggerConfig(configBuilder.getTriggerConfigData(), true);
+        runManager.updateEpicsData(dataBuilder.getEpicsData());
+        runManager.updateScalerData(dataBuilder.getScalerData());
     }
 }

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use