Print

Print


Author: [log in to unmask]
Date: Wed Apr 13 12:42:42 2016
New Revision: 4340

Log:
Merge in trunk changes to dev branch.

Added:
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/ClusterDiagnosticModule.java
      - copied unchanged from r4339, java/trunk/analysis/src/main/java/org/hps/analysis/trigger/ClusterDiagnosticModule.java
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/DiagnosticsManagementDriver.java
      - copied unchanged from r4339, java/trunk/analysis/src/main/java/org/hps/analysis/trigger/DiagnosticsManagementDriver.java
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/PairTriggerDiagnosticModule.java
      - copied unchanged from r4339, java/trunk/analysis/src/main/java/org/hps/analysis/trigger/PairTriggerDiagnosticModule.java
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SinglesTriggerDiagnosticModule.java
      - copied unchanged from r4339, java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SinglesTriggerDiagnosticModule.java
    java/branches/jeremy-dev2/detector-data/detectors/HPS-EngRun2015-1_5mm-v3-4-fieldmap/HPS-EngRun2015-1_5mm-v3-4-fieldmap.lcdd
      - copied unchanged from r4339, java/trunk/detector-data/detectors/HPS-EngRun2015-1_5mm-v3-4-fieldmap/HPS-EngRun2015-1_5mm-v3-4-fieldmap.lcdd
    java/branches/jeremy-dev2/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPair0.lcsim
      - copied unchanged from r4339, java/trunk/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPair0.lcsim
Modified:
    java/branches/jeremy-dev2/   (props changed)
    java/branches/jeremy-dev2/analysis/pom.xml
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerData.java
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerModule.java
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/PairTrigger.java
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/SinglesTrigger.java
    java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/Trigger.java
    java/branches/jeremy-dev2/conditions/   (props changed)
    java/branches/jeremy-dev2/conditions/pom.xml
    java/branches/jeremy-dev2/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
    java/branches/jeremy-dev2/crawler/pom.xml
    java/branches/jeremy-dev2/detector-data/pom.xml
    java/branches/jeremy-dev2/detector-model/pom.xml
    java/branches/jeremy-dev2/distribution/   (props changed)
    java/branches/jeremy-dev2/distribution/pom.xml
    java/branches/jeremy-dev2/ecal-event-display/pom.xml
    java/branches/jeremy-dev2/ecal-readout-sim/pom.xml
    java/branches/jeremy-dev2/ecal-recon/pom.xml
    java/branches/jeremy-dev2/evio/pom.xml
    java/branches/jeremy-dev2/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
    java/branches/jeremy-dev2/integration-tests/src/test/java/org/hps/test/it/ReconSteeringTest.java
    java/branches/jeremy-dev2/job/pom.xml
    java/branches/jeremy-dev2/logging/pom.xml
    java/branches/jeremy-dev2/logging/src/main/resources/org/hps/logging/config/logging.properties
    java/branches/jeremy-dev2/logging/src/main/resources/org/hps/logging/config/test_logging.properties
    java/branches/jeremy-dev2/monitoring-app/   (props changed)
    java/branches/jeremy-dev2/monitoring-app/pom.xml
    java/branches/jeremy-dev2/monitoring-drivers/pom.xml
    java/branches/jeremy-dev2/monitoring-util/pom.xml
    java/branches/jeremy-dev2/parent/pom.xml
    java/branches/jeremy-dev2/plugin/pom.xml
    java/branches/jeremy-dev2/pom.xml
    java/branches/jeremy-dev2/recon/pom.xml
    java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/particle/HpsReconParticleDriver.java
    java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
    java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/vertexing/BilliorVertexer.java
    java/branches/jeremy-dev2/record-util/pom.xml
    java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPNumberedTrigger.java
    java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPPairTrigger.java
    java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPSinglesTrigger.java
    java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/TriggerModule.java
    java/branches/jeremy-dev2/run-database/pom.xml
    java/branches/jeremy-dev2/run-database/src/main/java/org/hps/run/database/RunManager.java
    java/branches/jeremy-dev2/steering-files/pom.xml
    java/branches/jeremy-dev2/tracking/pom.xml
    java/branches/jeremy-dev2/users/pom.xml
    java/branches/jeremy-dev2/util/pom.xml

Modified: java/branches/jeremy-dev2/analysis/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/analysis/pom.xml	(original)
+++ java/branches/jeremy-dev2/analysis/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/analysis/</url>

Modified: java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerData.java
 =============================================================================
--- java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerData.java	(original)
+++ java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerData.java	Wed Apr 13 12:42:42 2016
@@ -7,34 +7,35 @@
  * Class <code>SimTriggerData</code> is a container class that holds
  * simulated trigger data modules. It is intended to be placed in the
  * LCIO data stream by the <code>DataTriggerSimDriver</code> to allow
- * other classes to access triggers simulated from SSP and reconstructed
+ * other classes to access triggers simulated from hardware and software
  * cluster data.
  * 
  * @author Kyle McCarty <[log in to unmask]>
  */
 public class SimTriggerData {
-    private final SimTriggerModule<Cluster> reconTriggers;
-    private final SimTriggerModule<SSPCluster> sspTriggers;
+    private final SimTriggerModule<Cluster> softwareClusterTriggers;
+    private final SimTriggerModule<SSPCluster> hardwareClusterTriggers;
     
     /**
      * Instantiates a new <code>SimTriggerData</code> object with empty
      * trigger results modules.
      */
     SimTriggerData() {
-        reconTriggers = new SimTriggerModule<Cluster>();
-        sspTriggers = new SimTriggerModule<SSPCluster>();
+        softwareClusterTriggers = new SimTriggerModule<Cluster>();
+        hardwareClusterTriggers = new SimTriggerModule<SSPCluster>();
     }
     
     /**
      * Instantiates a new <code>SimTriggerData</code> object that will
      * contain the argument trigger modules.
-     * @param reconTriggers - The simulated reconstructed cluster
-     * triggers module.
-     * @param sspTriggers - The simulated SSP cluster triggers module.
+     * @param softwareClusterTriggers - The module containing triggers
+     * simulated from software simulated clusters.
+     * @param hardwareClusterTriggers - The module containing triggers
+     * simulated from hardware reported clusters.
      */
-    SimTriggerData(SimTriggerModule<Cluster> reconTriggers, SimTriggerModule<SSPCluster> sspTriggers) {
-        this.reconTriggers = reconTriggers;
-        this.sspTriggers = sspTriggers;
+    SimTriggerData(SimTriggerModule<Cluster> softwareClusterTriggers, SimTriggerModule<SSPCluster> hardwareClusterTriggers) {
+        this.softwareClusterTriggers = softwareClusterTriggers;
+        this.hardwareClusterTriggers = hardwareClusterTriggers;
     }
     
     /**
@@ -43,8 +44,9 @@
      * @return Returns the trigger data in a <code>SimTriggerModule</code>
      * object.
      */
+    @Deprecated
     public SimTriggerModule<SSPCluster> getSimSSPTriggers() {
-        return sspTriggers;
+        return hardwareClusterTriggers;
     }
     
     /**
@@ -53,7 +55,28 @@
      * @return Returns the trigger data in a <code>SimTriggerModule</code>
      * object.
      */
+    @Deprecated
     public SimTriggerModule<Cluster> getSimReconTriggers() {
-        return reconTriggers;
+        return softwareClusterTriggers;
+    }
+    
+    /**
+     * Gets the module containing all triggers simulated from hardware
+     * reported clusters for each of the four production triggers.
+     * @return Returns the trigger data in a <code>SimTriggerModule</code>
+     * object.
+     */
+    public SimTriggerModule<SSPCluster> getSimHardwareClusterTriggers() {
+        return hardwareClusterTriggers;
+    }
+    
+    /**
+     * Gets the module containing all triggers simulated from software
+     * simulated clusters for each of the four production triggers.
+     * @return Returns the trigger data in a <code>SimTriggerModule</code>
+     * object.
+     */
+    public SimTriggerModule<Cluster> getSimSoftwareClusterTriggers() {
+        return softwareClusterTriggers;
     }
 }

Modified: java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerModule.java
 =============================================================================
--- java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerModule.java	(original)
+++ java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerModule.java	Wed Apr 13 12:42:42 2016
@@ -51,6 +51,28 @@
     }
     
     /**
+     * Gets the simulated trigger results for the indicated singles
+     * trigger. Note that only inputs of <code>0</code> and <code>1</code>
+     * are allowed.
+     * @param triggerNumber - A value of either <code>0</code>, to
+     * obtain the singles 0 trigger results, or <code>1</code>, to
+     * obtain the singles 1 trigger results.
+     * @return Returns the trigger results as a <code>List</code> of
+     * <code>SinglesTrigger</code> objects.
+     * @throws IllegalArgumentException Occurs if the input argument
+     * is not either <code>0</code> or <code>1</code>.
+     */
+    public List<SinglesTrigger<E>> getSinglesTriggers(int triggerNumber) {
+        // Return the appropriate trigger list.
+        if(triggerNumber == 0) { return getSingles0Triggers(); }
+        else if(triggerNumber == 1) { return getSingles1Triggers(); }
+        
+        // Any other trigger number is not valid and should produce an
+        // exception.
+        throw new IllegalArgumentException("Trigger number " + triggerNumber + " is not valid.");
+    }
+    
+    /**
      * Gets the simulated trigger results for the singles 0 trigger.
      * @return Returns the trigger results as a <code>List</code> of
      * <code>SinglesTrigger</code> objects.
@@ -66,6 +88,28 @@
      */
     public List<SinglesTrigger<E>> getSingles1Triggers() {
         return singles1;
+    }
+    
+    /**
+     * Gets the simulated trigger results for the indicated pair trigger.
+     * Note that only inputs of <code>0</code> and <code>1</code> are
+     * allowed.
+     * @param triggerNumber - A value of either <code>0</code>, to
+     * obtain the pair 0 trigger results, or <code>1</code>, to obtain
+     * the pair 1 trigger results.
+     * @return Returns the trigger results as a <code>List</code> of
+     * <code>PairTrigger</code> objects.
+     * @throws IllegalArgumentException Occurs if the input argument
+     * is not either <code>0</code> or <code>1</code>.
+     */
+    public List<PairTrigger<E[]>> getPairTriggers(int triggerNumber) {
+        // Return the appropriate trigger list.
+        if(triggerNumber == 0) { return getPair0Triggers(); }
+        else if(triggerNumber == 1) { return getPair1Triggers(); }
+        
+        // Any other trigger number is not valid and should produce an
+        // exception.
+        throw new IllegalArgumentException("Trigger number " + triggerNumber + " is not valid.");
     }
     
     /**
@@ -85,4 +129,4 @@
     public List<PairTrigger<E[]>> getPair1Triggers() {
         return pair1;
     }
-}
+}

Modified: java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/PairTrigger.java
 =============================================================================
--- java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/PairTrigger.java	(original)
+++ java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/PairTrigger.java	Wed Apr 13 12:42:42 2016
@@ -163,4 +163,4 @@
                 getStateEnergySumHigh() ? 1 : 0, getStateEnergyDifference() ? 1 : 0,
                 getStateEnergySlope() ? 1 : 0, getStateCoplanarity() ? 1 : 0);
     }
-}
+}

Modified: java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/SinglesTrigger.java
 =============================================================================
--- java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/SinglesTrigger.java	(original)
+++ java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/SinglesTrigger.java	Wed Apr 13 12:42:42 2016
@@ -150,4 +150,4 @@
                 getStateClusterEnergyLow() ? 1 : 0, getStateClusterEnergyHigh() ? 1 : 0,
                 getStateHitCount() ? 1 : 0);
     }
-}
+}

Modified: java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/Trigger.java
 =============================================================================
--- java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/Trigger.java	(original)
+++ java/branches/jeremy-dev2/analysis/src/main/java/org/hps/analysis/trigger/util/Trigger.java	Wed Apr 13 12:42:42 2016
@@ -149,4 +149,4 @@
     protected boolean supportsCut(String cut) {
         return passMap.containsKey(cut);
     }
-}
+}

Modified: java/branches/jeremy-dev2/conditions/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/conditions/pom.xml	(original)
+++ java/branches/jeremy-dev2/conditions/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/conditions/</url>
@@ -51,6 +51,7 @@
         <dependency>
             <groupId>org.hps</groupId>
             <artifactId>hps-detector-data</artifactId>
+            <scope>runtime</scope>
         </dependency>
         <dependency>
             <groupId>org.hps</groupId>
@@ -60,6 +61,7 @@
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
         </dependency>
         <dependency>
             <groupId>org.reflections</groupId>

Modified: java/branches/jeremy-dev2/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
 =============================================================================
--- java/branches/jeremy-dev2/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	(original)
+++ java/branches/jeremy-dev2/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	Wed Apr 13 12:42:42 2016
@@ -9,7 +9,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -49,10 +48,8 @@
 import org.lcsim.util.loop.DetectorConditionsConverter;
 
 /**
- * <p>
  * This class provides the top-level API for accessing database conditions, as well as configuring the database
- * connection, initializing all required components, and loading required converters and table meta data. It is
- * registered as the global <code>ConditionsManager</code> in the constructor.
+ * connection, initializing all required components, and loading required converters and table meta data. 
  * <p>
  * Differences between Test Run and Engineering Run configurations are handled automatically.
  *
@@ -80,7 +77,6 @@
             + DEFAULT_DATABASE + "?"
             + "user=" + DEFAULT_USER + "&"
             + "password=" + DEFAULT_PASSWORD;
-    // + "max-connections=" + DEFAULT_MAX_CONNECTIONS + "&"    
     
     /**
      * Name of system property that can be used to specify custom database connection parameters in a file.
@@ -113,7 +109,7 @@
     private static final int TEST_RUN_MAX_RUN = 1365;
     
     /** 
-     * Data source initialized with default settings. 
+     * The underlying SQL <code>DataSource</code> used to create a database connection.
      */
     private DataSource dataSource;
 
@@ -123,12 +119,7 @@
     private Connection connection;
     
     /**
-     * True to cache all known conditions sets (from keys) during initialization.
-     */
-    private boolean cacheAllConditions = false;
-
-    /**
-     * The current set of conditions for the run.
+     * The current set of conditions records for the run.
      */
     private ConditionsRecordCollection conditionsRecordCollection = null;
 
@@ -138,7 +129,7 @@
     private final ConditionsTagCollection conditionsTagCollection = new ConditionsTagCollection();
 
     /**
-     * Create the global registry of conditions object converters.
+     * The global registry of conditions object converters.
      */
     private final ConverterRegistry converters = ConverterRegistry.create();
 
@@ -148,7 +139,7 @@
     private ConditionsConverter ecalConverter;
 
     /**
-     * The default ECAL detector name in the detector geometry.
+     * The ECAL detector name in the detector geometry.
      */
     private String ecalName = "Ecal";
 
@@ -207,7 +198,6 @@
      * @return the <code>DataSource</code> for connecting to the conditions database
      */
     private static DataSource createDefaultDataSource() {
-        LOGGER.info("creating default data source");
         return createDataSource(DEFAULT_CONNECTION_URI);
     }
            
@@ -233,23 +223,18 @@
         }        
         if (properties.containsKey("user")) {
             user = properties.getProperty("user");
-            LOGGER.info("user prop = " + user);
         }                      
         if (properties.containsKey("password")) {
             password = properties.getProperty("password");
-            LOGGER.info("password prop = " + password);
         }               
         if (properties.containsKey("hostname")) {
             host = properties.getProperty("hostname");
-            LOGGER.info("host prop = " + host);
         }        
         if (properties.containsKey("port")) {
             port = Integer.parseInt(properties.getProperty("port"));
-            LOGGER.info("port prop = " + port);
         }        
         if (properties.containsKey("database")) {
             database = properties.getProperty("database");
-            LOGGER.info("database prop = " + database);
         } 
        
         String connectionUri = "jdbc:mysql://" + host + ":" + port + "/"
@@ -257,9 +242,8 @@
             + "user=" + user + "&"
             + "password=" + password;
 
-        LOGGER.info("returning db connection URL " + connectionUri);
-
-        // + "max-connections=" + DEFAULT_MAX_CONNECTIONS + "&" 
+        LOGGER.info("Conditions database URI " + connectionUri);
+        
         return connectionUri;
     }
         
@@ -303,6 +287,7 @@
     /**
      * Reset the global static instance of the conditions manager to a new object.
      */
+    // FIXME: Not even sure this method should exist! --JM
     public static synchronized void resetInstance() {
 
         // Create a new instance if necessary, which will install it globally as the default.
@@ -311,7 +296,7 @@
         // Register default conditions manager.
         ConditionsManager.setDefaultConditionsManager(dbManager);
 
-        LOGGER.info("DatabaseConditionsManager instance is reset");
+        LOGGER.info("DatabaseConditionsManager instance is now reset.");
     }
 
     /**
@@ -330,7 +315,6 @@
         
         // Create the default data source if alternate connection info was not provided.
         if (this.dataSource == null) {
-            LOGGER.fine("creating default data source");
             dataSource = createDefaultDataSource();
         }
         
@@ -352,17 +336,17 @@
      */
     public void addTag(final String tag) {
         if (!this.tags.contains(tag)) {
-            LOGGER.info("adding tag " + tag);
+            LOGGER.config("Using conditions tag " + tag);
             final ConditionsTagCollection findConditionsTag = this.getCachedConditions(ConditionsTagCollection.class,
                     tag).getCachedData();
             if (findConditionsTag.size() == 0) {
                 throw new IllegalArgumentException("The tag " + tag + " does not exist in the database.");
             }
-            LOGGER.info("adding conditions tag " + tag + " with " + conditionsTagCollection.size() + " records");
+            LOGGER.config("Using conditions tag " + tag + " with " + conditionsTagCollection.size() + " records");
             this.conditionsTagCollection.addAll(findConditionsTag);
             this.tags.add(tag);
         } else {
-            LOGGER.warning("tag " + tag + " is already added");
+            LOGGER.warning("Tag " + tag + " is already being used.");
         }
     }
 
@@ -380,10 +364,11 @@
     /**
      * Cache conditions sets for all known tables.
      */
+    /*
     private void cacheConditionsSets() {
         for (final TableMetaData meta : this.tableRegistry.values()) {
             try {
-                LOGGER.fine("caching conditions " + meta.getKey() + " with type "
+                LOGGER.fine("Caching conditions " + meta.getKey() + " with type "
                         + meta.getCollectionClass().getCanonicalName());
                 this.getCachedConditions(meta.getCollectionClass(), meta.getKey());
             } catch (final Exception e) {
@@ -391,6 +376,7 @@
             }
         }
     }
+    */
 
     /**
      * Clear the tags used to filter the {@link org.hps.conditions.api.ConditionsRecord}s.
@@ -480,9 +466,10 @@
     public synchronized void freeze() {
         if (this.getDetector() != null && this.getRun() != -1) {
             this.isFrozen = true;
-            LOGGER.config("conditions system is frozen");
+            LOGGER.config("Conditions system is frozen.");
         } else {
-            LOGGER.warning("conditions system cannot be frozen because it is not initialized yet");
+            // FIXME: Should this throw an exception instead?
+            LOGGER.warning("Conditions system cannot be frozen because it is not initialized.");
         }
     }
 
@@ -501,7 +488,7 @@
      * @return the set of available conditions tags
      */
     public Set<String> getAvailableTags() {
-        LOGGER.fine("getting list of available conditions tags");
+        LOGGER.fine("Fetching list of available conditions tags ...");
         final Set<String> tags = new LinkedHashSet<String>();
         Statement statement = null;
         ResultSet resultSet = null;
@@ -519,7 +506,7 @@
         }
         
         final StringBuffer sb = new StringBuffer();
-        sb.append("found unique conditions tags: ");
+        sb.append("Found conditions tags: ");
         for (final String tag : tags) {
             sb.append(tag + " ");
         }
@@ -537,8 +524,6 @@
      */
     public synchronized int getCollectionId(final ConditionsObjectCollection<?> collection, final String description)
             throws SQLException {
-        
-        
         final String caller = Thread.currentThread().getStackTrace()[2].getClassName();
         final String log = "created by " + System.getProperty("user.name") + " using "
                 + caller.substring(caller.lastIndexOf('.') + 1);
@@ -585,6 +570,7 @@
             if (this.run == -1 || this.detectorName == null) {
                 throw new IllegalStateException("Conditions system is not initialized.");
             }
+
             // If the collection is null then the new conditions records need to be retrieved from the database.
             if (this.conditionsRecordCollection == null) {
 
@@ -637,14 +623,10 @@
      * @return the JDBC connection
      */
     public Connection getConnection() {
-        LOGGER.info("getting db connection");
         try {
             if (this.connection == null || this.connection.isClosed()) {
-                LOGGER.info("creating new db connection");
                 connection = dataSource.getConnection();
-            } else {
-                LOGGER.info("using existing connection");
-            }
+            } 
         } catch (SQLException e) {
             throw new RuntimeException(e);
         }
@@ -746,27 +728,17 @@
         this.conditionsRecordCollection = null;
 
         // Call the super class's setDetector method to construct the detector object and activate conditions listeners.
-        LOGGER.fine("calling set detector");
         super.setDetector(detectorName, runNumber);
-        LOGGER.fine("done calling set detector");
-
-        // Should all conditions sets be cached?
-        if (this.cacheAllConditions) {
-            // Cache the conditions sets of all registered converters.
-            LOGGER.fine("caching conditions sets");
-            this.cacheConditionsSets();
-        }
-             
+
         // Should the conditions system be frozen now?
         if (this.freezeAfterInitialize) {
             // Freeze the conditions system so subsequent updates will be ignored.
             this.freeze();
-            LOGGER.config("system was frozen after initialization");
         }       
 
         this.isInitialized = true;
 
-        LOGGER.info("Conditions system initialized successfully.");
+        LOGGER.info("Conditions system was initialized successfully.");
     }
    
     /**
@@ -833,23 +805,10 @@
             LOGGER.config("freezeAfterInitialize = " + this.freezeAfterInitialize);
         }
 
-        element = node.getChild("cacheAllCondition");
-        if (element != null) {
-            this.cacheAllConditions = Boolean.parseBoolean(element.getText());
-            LOGGER.config("cacheAllConditions = " + this.cacheAllConditions);
-        }
-
         element = node.getChild("isTestRun");
         if (element != null) {
             this.isTestRun = Boolean.parseBoolean(element.getText());
             LOGGER.config("isTestRun = " + this.isTestRun);
-        }
-
-        element = node.getChild("loginTimeout");
-        if (element != null) {
-            final Integer timeout = Integer.parseInt(element.getText());
-            DriverManager.setLoginTimeout(timeout);
-            LOGGER.config("loginTimeout = " + timeout);
         }
     }
   
@@ -877,6 +836,7 @@
             // Load the default converters.
             this.svtConverter = new SvtConditionsConverter();
             this.ecalConverter = new EcalConditionsConverter();
+            LOGGER.config("registering default conditions converters");
         }
         this.registerConditionsConverter(this.svtConverter);
         this.registerConditionsConverter(this.ecalConverter);
@@ -928,7 +888,7 @@
 
         if (!this.isInitialized || !detectorName.equals(this.getDetector()) || runNumber != this.getRun()) {
             if (!this.isFrozen) {
-                LOGGER.info("new detector " + detectorName + " and run #" + runNumber);
+                LOGGER.info("New detector " + detectorName + " and run " + runNumber);
                 this.initialize(detectorName, runNumber);
             } else {
                 LOGGER.finest("Conditions changed but will be ignored because manager is frozen.");
@@ -975,7 +935,7 @@
                         + " does not exist.");
             }
             this.setConnectionProperties(f);
-            LOGGER.info("connection setup from system property " + CONNECTION_PROPERTY_FILE + " = "
+            LOGGER.info("Connection was setup from system property " + CONNECTION_PROPERTY_FILE + " = "
                     + systemPropertiesConnectionPath);
         }
     }
@@ -989,7 +949,7 @@
                 CONNECTION_PROPERTY_RESOURCE);
         if (systemPropertiesConnectionResource != null) {
             this.setConnectionResource(systemPropertiesConnectionResource);
-            LOGGER.info("connection setup from system property " + CONNECTION_PROPERTY_FILE + " = "
+            LOGGER.info("Connection was setup from system property " + CONNECTION_PROPERTY_FILE + " = "
                     + systemPropertiesConnectionResource);
         }
     }
@@ -1027,6 +987,6 @@
      */
     public synchronized void unfreeze() {
         this.isFrozen = false;
-        LOGGER.info("conditions system unfrozen");
+        LOGGER.info("Conditions system was unfrozen.");
     }
 }

Modified: java/branches/jeremy-dev2/crawler/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/crawler/pom.xml	(original)
+++ java/branches/jeremy-dev2/crawler/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/crawler/</url>

Modified: java/branches/jeremy-dev2/detector-data/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/detector-data/pom.xml	(original)
+++ java/branches/jeremy-dev2/detector-data/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/detector-data/</url>

Modified: java/branches/jeremy-dev2/detector-model/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/detector-model/pom.xml	(original)
+++ java/branches/jeremy-dev2/detector-model/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <build>
         <plugins>

Modified: java/branches/jeremy-dev2/distribution/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/distribution/pom.xml	(original)
+++ java/branches/jeremy-dev2/distribution/pom.xml	Wed Apr 13 12:42:42 2016
@@ -13,7 +13,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>    
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/distribution/</url>

Modified: java/branches/jeremy-dev2/ecal-event-display/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/ecal-event-display/pom.xml	(original)
+++ java/branches/jeremy-dev2/ecal-event-display/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-event-display/</url>

Modified: java/branches/jeremy-dev2/ecal-readout-sim/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/ecal-readout-sim/pom.xml	(original)
+++ java/branches/jeremy-dev2/ecal-readout-sim/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-readout-sim/</url>

Modified: java/branches/jeremy-dev2/ecal-recon/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/ecal-recon/pom.xml	(original)
+++ java/branches/jeremy-dev2/ecal-recon/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-recon/</url>

Modified: java/branches/jeremy-dev2/evio/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/evio/pom.xml	(original)
+++ java/branches/jeremy-dev2/evio/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/evio/</url>

Modified: java/branches/jeremy-dev2/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
 =============================================================================
--- java/branches/jeremy-dev2/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java	(original)
+++ java/branches/jeremy-dev2/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java	Wed Apr 13 12:42:42 2016
@@ -121,6 +121,14 @@
         } else {
             LOGGER.info("Run manager is not initialized; TI time offset not available.");
         }
+        /* Make sure connection is closed immediately. --JM */
+        try {
+            LOGGER.info("Closing run manager db connection ...");
+            RunManager.getRunManager().closeConnection();
+            LOGGER.info("Run manager db connection was closed.");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
     /**
@@ -162,7 +170,11 @@
         LOGGER.finest("created new LCSim event " + lcsimEvent.getEventNumber());
 
         // Put DAQ Configuration info into lcsimEvent.
-        triggerConfigReader.getDAQConfig(evioEvent, lcsimEvent);
+        try {
+            triggerConfigReader.getDAQConfig(evioEvent, lcsimEvent);
+        } catch (final Exception e) {
+            LOGGER.log(Level.SEVERE,"DAQ CONFIG BROKEN.",e);
+        }
 
         // Make RawCalorimeterHit collection, combining top and bottom section
         // of ECal into one list.

Modified: java/branches/jeremy-dev2/integration-tests/src/test/java/org/hps/test/it/ReconSteeringTest.java
 =============================================================================
--- java/branches/jeremy-dev2/integration-tests/src/test/java/org/hps/test/it/ReconSteeringTest.java	(original)
+++ java/branches/jeremy-dev2/integration-tests/src/test/java/org/hps/test/it/ReconSteeringTest.java	Wed Apr 13 12:42:42 2016
@@ -28,7 +28,7 @@
         job.addVariableDefinition("outputFile", outputFile.getPath());
         job.addInputFile(inputFile);
         job.setup(STEERING_RESOURCE);
-        job.setNumberOfEvents(1000);
+        job.setNumberOfEvents(2);
         job.run();
         System.out.println("Done processing " + job.getLCSimLoop().getTotalCountableConsumed() + " events.");
                             

Modified: java/branches/jeremy-dev2/job/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/job/pom.xml	(original)
+++ java/branches/jeremy-dev2/job/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/job/</url>

Modified: java/branches/jeremy-dev2/logging/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/logging/pom.xml	(original)
+++ java/branches/jeremy-dev2/logging/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/logging/</url>

Modified: java/branches/jeremy-dev2/logging/src/main/resources/org/hps/logging/config/logging.properties
 =============================================================================
--- java/branches/jeremy-dev2/logging/src/main/resources/org/hps/logging/config/logging.properties	(original)
+++ java/branches/jeremy-dev2/logging/src/main/resources/org/hps/logging/config/logging.properties	Wed Apr 13 12:42:42 2016
@@ -18,12 +18,12 @@
 java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
 
 # turn minuit logging off
-org.freehep.math.minuit = OFF
+org.freehep.math.minuit.level = OFF
 
 # lcsim job
 org.lcsim.job.level = CONFIG
 org.lcsim.job.EventMarkerDriver.level = ALL
-org.lcsim.job.EventPrintLoopAdapter = ALL
+org.lcsim.job.EventPrintLoopAdapter.level = ALL
 
 # conditions
 org.hps.conditions.api.level = WARNING

Modified: java/branches/jeremy-dev2/logging/src/main/resources/org/hps/logging/config/test_logging.properties
 =============================================================================
--- java/branches/jeremy-dev2/logging/src/main/resources/org/hps/logging/config/test_logging.properties	(original)
+++ java/branches/jeremy-dev2/logging/src/main/resources/org/hps/logging/config/test_logging.properties	Wed Apr 13 12:42:42 2016
@@ -18,16 +18,16 @@
 java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
 
 # turn minuit off
-org.freehep.math.minuit = OFF
+org.freehep.math.minuit.level = OFF
 
 # lcsim job
 org.lcsim.job.level = CONFIG
 org.lcsim.job.EventMarkerDriver.level = OFF
-org.lcsim.job.EventPrintLoopAdapter = ALL
+org.lcsim.job.EventPrintLoopAdapter.level = ALL
 
 # conditions
-org.hps.conditions.api.level = WARNING
-org.hps.conditions.database.level = WARNING
+org.hps.conditions.api.level = ALL
+org.hps.conditions.database.level = ALL
 org.hps.conditions.cli.level = WARNING
 org.hps.conditions.ecal.level = WARNING
 org.hps.conditions.svt.level = WARNING

Modified: java/branches/jeremy-dev2/monitoring-app/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/monitoring-app/pom.xml	(original)
+++ java/branches/jeremy-dev2/monitoring-app/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-app/</url>

Modified: java/branches/jeremy-dev2/monitoring-drivers/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/monitoring-drivers/pom.xml	(original)
+++ java/branches/jeremy-dev2/monitoring-drivers/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-drivers/</url>

Modified: java/branches/jeremy-dev2/monitoring-util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/monitoring-util/pom.xml	(original)
+++ java/branches/jeremy-dev2/monitoring-util/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-util/</url>

Modified: java/branches/jeremy-dev2/parent/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/parent/pom.xml	(original)
+++ java/branches/jeremy-dev2/parent/pom.xml	Wed Apr 13 12:42:42 2016
@@ -6,14 +6,14 @@
     <groupId>org.hps</groupId>
     <artifactId>hps-parent</artifactId>
     <packaging>pom</packaging>
-    <version>3.8-SNAPSHOT</version>
+    <version>3.9-SNAPSHOT</version>
     <name>parent</name>
     <description>HPS Java parent POM</description>
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <org.lcsim.cacheDir>${user.home}</org.lcsim.cacheDir>
-        <lcsimVersion>3.5-SNAPSHOT</lcsimVersion>
+        <lcsimVersion>3.6</lcsimVersion>
         <skipSite>false</skipSite>
         <skipPlugin>false</skipPlugin>
     </properties>
@@ -143,112 +143,112 @@
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-util</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-detector-data</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-detector-model</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-conditions</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-ecal-recon</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-ecal-readout-sim</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-tracking</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-evio</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-recon</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-analysis</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-monitoring-drivers</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-monitoring-app</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-users</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-steering-files</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-distribution</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-ecal-event-display</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-record-util</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-monitoring-util</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-run-database</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-crawler</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-job</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-logging</artifactId>
-                <version>3.8-SNAPSHOT</version>
+                <version>3.9-SNAPSHOT</version>
             </dependency>
             <!-- Next are external dependencies used in multiple modules. -->
             <dependency>

Modified: java/branches/jeremy-dev2/plugin/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/plugin/pom.xml	(original)
+++ java/branches/jeremy-dev2/plugin/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/plugin/</url>

Modified: java/branches/jeremy-dev2/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/pom.xml	(original)
+++ java/branches/jeremy-dev2/pom.xml	Wed Apr 13 12:42:42 2016
@@ -9,7 +9,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>svn://svn.freehep.org/hps/java/trunk/</url>

Modified: java/branches/jeremy-dev2/recon/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/recon/pom.xml	(original)
+++ java/branches/jeremy-dev2/recon/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/recon/</url>

Modified: java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/particle/HpsReconParticleDriver.java
 =============================================================================
--- java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/particle/HpsReconParticleDriver.java	(original)
+++ java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/particle/HpsReconParticleDriver.java	Wed Apr 13 12:42:42 2016
@@ -242,6 +242,7 @@
         BilliorVertexer vtxFitter = new BilliorVertexer(bField);
         // TODO: The beam size should come from the conditions database.
         vtxFitter.setBeamSize(beamSize);
+        vtxFitter.setDebug(debug);
 
         // Perform the vertexing based on the specified constraint.
         switch (constraint) {

Modified: java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
 =============================================================================
--- java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java	(original)
+++ java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java	Wed Apr 13 12:42:42 2016
@@ -573,7 +573,7 @@
     /**
      * Indicates whether debug text should be output or not.
      */
-    private boolean debug = false;
+    protected boolean debug = false;
 
     /**
      * The simple name of the class used for debug print statements.

Modified: java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/vertexing/BilliorVertexer.java
 =============================================================================
--- java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/vertexing/BilliorVertexer.java	(original)
+++ java/branches/jeremy-dev2/recon/src/main/java/org/hps/recon/vertexing/BilliorVertexer.java	Wed Apr 13 12:42:42 2016
@@ -16,394 +16,97 @@
 
 /**
  * @version $Id: BilliorVertexer.java,v 1.3 2013/03/13 19:24:20 mgraham Exp $
- * @version Vertex tracks using least-squares method laid out by billior etal used in the HPS Java package.
+ * @version Vertex tracks using least-squares method laid out by billior etal
+ * used in the HPS Java package.
  */
 public class BilliorVertexer {
     // the value of the magnetic field in the vicinity of the vertex
     // default is a constant field along the z axis
 
     private boolean _debug = false;
-    private double _bField;
-    private boolean _beamspotConstraint = true;
-    private boolean _targetConstraint = false;
-    private double[] _beamSize = {0.001, 0.01, 0.01}; //10um in y and z
+    private final double _bField;
+    private boolean _beamspotConstraint;
+    private boolean _targetConstraint;
+    private String _constraintType;
+    private final double[] _beamSize = {0.001, 0.01, 0.01}; //10um in y and z
+    private final double[] _beamPosition = {0.0, 0.0, 0.0}; //origin
     private int _ntracks;
-    private List<Matrix> paramList = new ArrayList<Matrix>();
-    private List<Matrix> WList = new ArrayList<Matrix>();
-    private List<Matrix> DList = new ArrayList<Matrix>();
-    private List<Matrix> EList = new ArrayList<Matrix>();
-    private Matrix A;
-    private Matrix T;
-    private List<Matrix> BList = new ArrayList<Matrix>();
-    private List<Matrix> CinvList = new ArrayList<Matrix>();
-    private List<Matrix> CList = new ArrayList<Matrix>();
-    private List<Matrix> UList = new ArrayList<Matrix>();
-    private List<Matrix> dqList = new ArrayList<Matrix>();
-    private double[] _v0 = {0.0, 0.0, 0.0};
+    private double[] _v0 = {0.0, 0.0, 0.0}; //initial guess for unconstrained vertex fit
 //    private double[] _vertexPosition = {0., 0.0, 0.0};
-    private Matrix _vertexPosition = new BasicMatrix(3, 1);
-    private Matrix _covVtx = new BasicMatrix(3, 3);
-    private List<Matrix> _pFit = new ArrayList<Matrix>();
+    private Matrix _vertexPosition;
+    private Matrix _covVtx;
+    private List<Matrix> _pFit;
 
     ;//theta,phi_v,rho
-    private List<Matrix> covVtxMomList = new ArrayList<Matrix>();
-    private Matrix[][] covMomList = new Matrix[2][2];//max 2 tracks...just make this bigger for more
+    private List<Matrix> covVtxMomList;
+    private Matrix[][] covMomList;//max 2 tracks...just make this bigger for more
     private Matrix _constrainedFit;
     private Matrix _constrainedCov;
     private double _chiSq;
-     private String _constraintType="Unspecified";
-    // constructor
-    public BilliorVertexer() {
-    }
 
     public BilliorVertexer(double bField) {
         _bField = bField;
-        _constraintType="Unconstrained";
-        _beamspotConstraint =false;
+        _constraintType = "Unconstrained";
+        _beamspotConstraint = false;
         _targetConstraint = false;
     }
-    
-    public BilliorVertexer(double bField,boolean bsConst, boolean constToBS) {
+
+    public BilliorVertexer(double bField, boolean bsConst, boolean constToBS) {
         _bField = bField;
-        _beamspotConstraint =bsConst;
+        _beamspotConstraint = bsConst;
         _targetConstraint = constToBS;
-        if(_beamspotConstraint&&_targetConstraint)
+        if (_beamspotConstraint && _targetConstraint) {
             System.out.println("BilliorVertexer::Warning!!!  Setting both _beamspotConstraint and _targetConstraint to true!");
-        if(_beamspotConstraint)
-            _constraintType="BeamspotConstrained";
-        if(_targetConstraint)
-            _constraintType="TargetConstrained";
+        }
+        if (_beamspotConstraint) {
+            _constraintType = "BeamspotConstrained";
+        }
+        if (_targetConstraint) {
+            _constraintType = "TargetConstrained";
+        }
+    }
+
+    public void setDebug(boolean debug) {
+        _debug = debug;
     }
 
     public BilliorVertex fitVertex(List<BilliorTrack> tracks) {
         _ntracks = tracks.size();
         follow1985Paper(tracks);
-        if (_beamspotConstraint)
-            addV0fromBSConstraint();
-        else if (_targetConstraint)
-            constrainV0toBS();
-        Map<Integer,Hep3Vector> pFitMap=new HashMap<Integer,Hep3Vector>();
-        for(int i=0;i<tracks.size();i++){
-            Hep3Vector pFit=new BasicHep3Vector(this.getFittedMomentum(i));
-            pFitMap.put(i, pFit);            
-        }
-        Hep3Vector vert=new BasicHep3Vector(_vertexPosition.e(0, 0),_vertexPosition.e(1, 0),_vertexPosition.e(2, 0));
-        Hep3Vector vertDet=CoordinateTransformations.transformVectorToDetector(vert);
-        SymmetricMatrix covVtxDet=CoordinateTransformations.transformCovarianceToDetector(new SymmetricMatrix( _covVtx));
-        return new BilliorVertex(vertDet,covVtxDet,_chiSq,getInvMass(),pFitMap,_constraintType);
-    }
-
-    public BilliorVertex fitFastVertex(List<BilliorTrack> tracks) {
-        _ntracks = tracks.size();
-        fastVertex(tracks);
-     Hep3Vector vert=new BasicHep3Vector(_vertexPosition.e(0, 0),_vertexPosition.e(1, 0),_vertexPosition.e(2, 0));
-     return new BilliorVertex((Hep3Vector)_vertexPosition,_covVtx,_chiSq,getInvMass());
-    }
-
-    private void calculateCovariance() {
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix b = (BasicMatrix) BList.get(i);
-            BasicMatrix cinv = (BasicMatrix) CinvList.get(i);
-            BasicMatrix bt = (BasicMatrix) MatrixOp.transposed(b);
-            covVtxMomList.add((MatrixOp.mult(-1, MatrixOp.mult(_covVtx, MatrixOp.mult(b, cinv)))));
-            for (int j = 0; j < _ntracks; j++) {
-                BasicMatrix bj = (BasicMatrix) BList.get(j);
-                BasicMatrix cjinv = (BasicMatrix) CinvList.get(j);
-                BasicMatrix tmp = (BasicMatrix) MatrixOp.mult(cinv, MatrixOp.mult(bt, MatrixOp.mult(_covVtx, MatrixOp.mult(bj, cjinv))));
-                if (i == j)
-                    tmp = (BasicMatrix) MatrixOp.add(tmp, cinv);
-                covMomList[i][j] = tmp;
-            }
-        }
-    }
-
-    private void calculateMomenta() {
-
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix params = (BasicMatrix) paramList.get(i);
-            BasicMatrix b = (BasicMatrix) BList.get(i);
-            BasicMatrix cinv = (BasicMatrix) CinvList.get(i);
-            BasicMatrix u = (BasicMatrix) UList.get(i);
-            //not sure following line is correct...mg 10/21/10
-            BasicMatrix CinvU = (BasicMatrix) MatrixOp.mult(cinv, u);
-            BasicMatrix CinvBTdV = (BasicMatrix) MatrixOp.mult(-1, MatrixOp.mult(cinv, MatrixOp.mult(MatrixOp.transposed(b), _vertexPosition)));
-//            if(_debug)System.out.println(" B = "+b.toString());
-//            if(_debug)System.out.println(" cinv = "+cinv.toString());
-//            if(_debug)System.out.println(" u = "+u.toString());
-//            if(_debug)System.out.println(" CinvU = "+CinvU.toString());
-//            if(_debug)System.out.println(" CinvBTdV = "+CinvBTdV.toString());
-            BasicMatrix tmpP = (BasicMatrix) MatrixOp.add(CinvBTdV, CinvU);
-            tmpP.setElement(0, 0, tmpP.e(0, 0) + params.e(2, 0));
-            tmpP.setElement(1, 0, tmpP.e(1, 0) + params.e(3, 0));
-            tmpP.setElement(2, 0, tmpP.e(2, 0) + params.e(4, 0));
-            _pFit.add(tmpP);
-//            if(_debug)System.out.println("Track "+i+" orig parameters  = "+params);
-//            if(_debug)System.out.println("Track "+i+" deltaP  = "+MatrixOp.add(CinvBTdV, CinvU));
-//            if(_debug)System.out.println("Track " + i + " _pFit  = " + tmpP);
-        }
-    }
-
-    private void calculateVertexPosition() {
-        BasicMatrix tmpcov = new BasicMatrix(3, 3);
-        BasicMatrix tmp = new BasicMatrix(3, 1);
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix b = (BasicMatrix) BList.get(i);
-            BasicMatrix cinv = (BasicMatrix) CinvList.get(i);
-            BasicMatrix u = (BasicMatrix) UList.get(i);
-//            if(_debug)System.out.println("Cinv matrix " + cinv.toString());
-//            if(_debug)System.out.println("B matrix " + b.toString());
-//            if(_debug)System.out.println("U matrix " + u.toString());
-            BasicMatrix bt = (BasicMatrix) MatrixOp.transposed(b);
-            //           if(_debug)System.out.println("Adding this to tmpcov : " + MatrixOp.mult(-1, MatrixOp.mult(b, MatrixOp.mult(cinv, bt))));
-            if (i == 0) {
-                tmpcov = (BasicMatrix) MatrixOp.mult(-1, MatrixOp.mult(b, MatrixOp.mult(cinv, bt)));
-                tmp = (BasicMatrix) MatrixOp.mult(-1, MatrixOp.mult(b, MatrixOp.mult(cinv, u)));
-            } else {
-                tmpcov = (BasicMatrix) MatrixOp.add(tmpcov, MatrixOp.mult(-1, MatrixOp.mult(b, MatrixOp.mult(cinv, bt))));
-                tmp = (BasicMatrix) MatrixOp.add(tmp, MatrixOp.mult(-1, MatrixOp.mult(b, MatrixOp.mult(cinv, u))));
-            }
-//            if(_debug)System.out.println("tmpCov matrix " + tmpcov.toString());
-//            if(_debug)System.out.println("tmp matrix " + tmp.toString());
-        }
-//
-//        if(_debug)System.out.println("A matrix " + A.toString());
-//        if(_debug)System.out.println("tmpCov matrix " + tmpcov.toString());
-//        if(_debug)System.out.println("sum of A and tmpCov = " + MatrixOp.add(A, tmpcov).toString());
-        _covVtx = MatrixOp.inverse(MatrixOp.add(A, tmpcov));
-//        if(_debug)System.out.println("_covVtx matrix " + _covVtx.toString());
-//        if(_debug)System.out.println("T matrix " + T.toString());
-        _vertexPosition = (BasicMatrix) MatrixOp.mult(_covVtx, MatrixOp.add(T, tmp));
-
-    }
-
-    private void makeOtherMatrices() {
-        BasicMatrix tmpA = new BasicMatrix(3, 3);
-        BasicMatrix tmpT = new BasicMatrix(3, 1);
-
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix tmpD = (BasicMatrix) DList.get(i);
-            BasicMatrix tmpE = (BasicMatrix) EList.get(i);
-            BasicMatrix dq = (BasicMatrix) dqList.get(i);
-            BasicMatrix tmpW = (BasicMatrix) WList.get(i);
-
-            if (i == 0) {
-                tmpA = (BasicMatrix) MatrixOp.mult(MatrixOp.transposed(tmpD), MatrixOp.mult(tmpW, tmpD));
-                tmpT = (BasicMatrix) MatrixOp.mult(MatrixOp.transposed(tmpD), MatrixOp.mult(tmpW, dq));
-            } else {
-                tmpT = (BasicMatrix) MatrixOp.add(tmpT, MatrixOp.mult(MatrixOp.transposed(tmpD), MatrixOp.mult(tmpW, dq)));
-                tmpA = (BasicMatrix) MatrixOp.add(tmpA, MatrixOp.mult(MatrixOp.transposed(tmpD), MatrixOp.mult(tmpW, tmpD)));
-            }
-            BList.add(MatrixOp.mult(MatrixOp.transposed(tmpD), MatrixOp.mult(tmpW, tmpE)));
-            BasicMatrix tmpC = (BasicMatrix) MatrixOp.mult(MatrixOp.transposed(tmpE), MatrixOp.mult(tmpW, tmpE));
-            CList.add(tmpC);
-            CinvList.add(MatrixOp.inverse(tmpC));
-            UList.add(MatrixOp.mult(MatrixOp.transposed(tmpE), MatrixOp.mult(tmpW, dq)));
-
-        }
-        A = tmpA;
-        T = tmpT;
-    }
-
-    private void calculateChisq() {
-        _chiSq = 0;
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix params = (BasicMatrix) paramList.get(i);
-            BasicMatrix d = (BasicMatrix) DList.get(i);
-            BasicMatrix e = (BasicMatrix) EList.get(i);
-            BasicMatrix w = (BasicMatrix) WList.get(i);
-            BasicMatrix pi = (BasicMatrix) _pFit.get(i);
-            BasicMatrix Vtilde = (BasicMatrix) MatrixOp.mult(d, _vertexPosition);
-            BasicMatrix Trtilde = (BasicMatrix) MatrixOp.mult(e, pi);
-            BasicMatrix ptilde = (BasicMatrix) MatrixOp.add(Vtilde, Trtilde);
-            //          if(_debug)System.out.println("Vtilde = "+Vtilde);
-            //          if(_debug)System.out.println("Trtilde = "+Trtilde);
-            BasicMatrix resid = (BasicMatrix) MatrixOp.add(params, MatrixOp.mult(-1, ptilde));
-            BasicMatrix residT = (BasicMatrix) MatrixOp.transposed(resid);
-//            if(_debug)System.out.println("ptilde = "+ptilde);
-//              if(_debug)System.out.println("params = "+params);
-//            if(_debug)System.out.println("resid = "+resid);
-//            if(_debug)System.out.println("Covariance = "+MatrixOp.inverse(w));
-//             if(_debug)System.out.println("Weight = "+w);
-            _chiSq = _chiSq + (MatrixOp.mult(residT, MatrixOp.mult(w, resid))).e(0, 0);
-//            if(_debug)System.out.println("_chiSq = "+_chiSq);
-        }
-    }
-
-    private void fastVertex(List<BilliorTrack> tracks) {
-        boolean firstTrack = true;
-        BasicMatrix sumwi = new BasicMatrix(3, 3);
-        BasicMatrix sumwiXi = new BasicMatrix(3, 1);
-        BasicMatrix dX = new BasicMatrix(3, 1);
-
-        for (BilliorTrack bt : tracks) {
-            double[] par = bt.parameters();
-//            if(_debug)System.out.println("Track parameters = (" + par[0] + ", " + par[1] + ", " + par[2] + ", " + par[3] + ", " + par[4] + ")");
-            double cotth = 1. / tan(par[2]);
-            double phiv = par[3];
-            double cosf = cos(phiv);
-            double sinf = sin(phiv);
-
-            double xi = par[0] * sin(par[3]);
-            double yi = -par[0] * cos(par[3]);
-            double zi = par[1];
-
-            dX.setElement(0, 0, xi);
-            dX.setElement(1, 0, yi);
-            dX.setElement(2, 0, zi);
-
-            BasicMatrix tmpD = new BasicMatrix(2, 3);
-            tmpD.setElement(0, 0, sinf);
-            tmpD.setElement(0, 1, -cosf);
-            tmpD.setElement(1, 0, -cotth * cosf);
-            tmpD.setElement(1, 1, -cotth * sinf);
-            tmpD.setElement(1, 2, 1);
-            BasicMatrix trkCov = new BasicMatrix(2, 2);
-            trkCov.setElement(0, 0, bt.covariance().e(0, 0));
-            trkCov.setElement(0, 1, bt.covariance().e(0, 1));
-            trkCov.setElement(1, 0, bt.covariance().e(1, 0));
-            trkCov.setElement(1, 1, bt.covariance().e(1, 1));
-            BasicMatrix tmpW = (BasicMatrix) MatrixOp.inverse(trkCov);
-            BasicMatrix wi = (BasicMatrix) MatrixOp.mult(MatrixOp.transposed(tmpD), MatrixOp.mult(tmpW, tmpD));
-            if (firstTrack) {
-                sumwi = wi;
-                sumwiXi = (BasicMatrix) MatrixOp.mult(wi, dX);
-            } else {
-                sumwi = (BasicMatrix) MatrixOp.add(sumwi, wi);
-                sumwiXi = (BasicMatrix) MatrixOp.add(sumwiXi, MatrixOp.mult(wi, dX));
-            }
-            firstTrack = false;
-        }
-        _covVtx = MatrixOp.inverse(sumwi);
-        if (_debug)
-            System.out.println("fastVertex::_covVtx matrix " + _covVtx.toString());
-        _vertexPosition = (BasicMatrix) MatrixOp.mult(_covVtx, sumwiXi);
-        _chiSq = 0;
-        //get the chisq
-        for (BilliorTrack bt : tracks) {
-            double[] par = bt.parameters();
-//            if(_debug)System.out.println("Track parameters = (" + par[0] + ", " + par[1] + ", " + par[2] + ", " + par[3] + ", " + par[4] + ")");
-            double cotth = 1. / tan(par[2]);
-            double phiv = par[3];
-            double cosf = cos(phiv);
-            double sinf = sin(phiv);
-
-            double xi = par[0] * sin(par[3]);
-            double yi = -par[0] * cos(par[3]);
-            double zi = par[1];
-            //this is xi - fitted vertex now
-            dX.setElement(0, 0, xi - _vertexPosition.e(0, 0));
-            dX.setElement(1, 0, yi - _vertexPosition.e(1, 0));
-            dX.setElement(2, 0, zi - _vertexPosition.e(2, 0));
-
-            BasicMatrix tmpD = new BasicMatrix(2, 3);
-            tmpD.setElement(0, 0, sinf);
-            tmpD.setElement(0, 1, -cosf);
-            tmpD.setElement(1, 0, -cotth * cosf);
-            tmpD.setElement(1, 1, -cotth * sinf);
-            tmpD.setElement(1, 2, 1);
-            BasicMatrix trkCov = new BasicMatrix(2, 2);
-            trkCov.setElement(0, 0, bt.covariance().e(0, 0));
-            trkCov.setElement(0, 1, bt.covariance().e(0, 1));
-            trkCov.setElement(1, 0, bt.covariance().e(1, 0));
-            trkCov.setElement(1, 1, bt.covariance().e(1, 1));
-            BasicMatrix tmpW = (BasicMatrix) MatrixOp.inverse(trkCov);
-            BasicMatrix wi = (BasicMatrix) MatrixOp.mult(MatrixOp.transposed(tmpD), MatrixOp.mult(tmpW, tmpD));
-            _chiSq += MatrixOp.mult(MatrixOp.transposed(dX), MatrixOp.mult(wi, dX)).e(0, 0);
-        }
-    }
-
-    private void makeDerivativeMatrices(List<BilliorTrack> tracks) {
-
-        //DList.clear();
-        //EList.clear();
-        //paramList.clear();
-        //dqList.clear();
-        //WList.clear();
-        BasicMatrix dq = new BasicMatrix(5, 1);
-        BasicMatrix tmpW = new BasicMatrix(5, 5);
-        for (BilliorTrack bt : tracks) {
-            double[] par = bt.parameters();
-            BasicMatrix tmpPar = new BasicMatrix(5, 1);
-            tmpPar.setElement(0, 0, par[0]);
-            tmpPar.setElement(1, 0, par[1]);
-            tmpPar.setElement(2, 0, par[2]);
-            tmpPar.setElement(3, 0, par[3]);
-            tmpPar.setElement(4, 0, par[4]);
-            paramList.add(tmpPar);
-            double cotth = 1. / tan(par[2]);
-            double uu = _v0[0] * cos(par[3]) + _v0[1] * sin(par[3]);//Q
-            double vv = _v0[1] * cos(par[3]) - _v0[0] * sin(par[3]);//R
-            double eps = -vv - .5 * uu * uu * par[4];
-            double zp = _v0[2] - uu * (1 - vv * par[4]) * cotth;
-            // * phi at vertex with these parameters
-            double phiv = par[3] + uu * par[4];
-            double cosf = cos(phiv);
-            double sinf = sin(phiv);
-
-            BasicMatrix tmpD = new BasicMatrix(5, 3);
-            tmpD.setElement(0, 0, sinf);
-            tmpD.setElement(0, 1, -cosf);
-            tmpD.setElement(1, 0, -cotth * cosf);
-            tmpD.setElement(1, 1, -cotth * sinf);
-            tmpD.setElement(1, 2, 1);
-            tmpD.setElement(3, 0, -par[4] * cosf);
-            tmpD.setElement(3, 1, -par[4] * sinf);
-
-            BasicMatrix tmpE = new BasicMatrix(5, 3);
-            tmpE.setElement(0, 1, uu);
-            tmpE.setElement(0, 2, -uu * uu / 2);
-            tmpE.setElement(1, 0, uu * (1 + cotth * cotth));
-            tmpE.setElement(1, 1, -vv * cotth);
-            tmpE.setElement(1, 2, uu * vv * cotth);
-            tmpE.setElement(3, 1, 1);
-            tmpE.setElement(3, 2, -uu);
-            tmpE.setElement(2, 0, 1);  //partial(theta)/dtheta
-            tmpE.setElement(4, 2, 1); //partial (rho)/drho
-            DList.add(tmpD);
-            EList.add(tmpE);
-
-            double deps = par[0] - eps;
-            double dzp = par[1] - zp;
-            double dphi = par[3] - phiv;
-
-            dq.setElement(0, 0, deps);
-            dq.setElement(1, 0, dzp);
-            dq.setElement(3, 0, dphi);
-            dqList.add(dq);
-            tmpW = (BasicMatrix) MatrixOp.inverse(bt.covariance());
-            WList.add(tmpW);
-
-            if (_debug)
-                System.out.println("makeDerivativeMatrices::Params = \n" + tmpPar);
-            if (_debug)
-                System.out.println("D = \n" + tmpD);
-            if (_debug)
-                System.out.println("E = \n" + tmpE);
-            if (_debug)
-                System.out.println("dq = \n" + dq);
-            if (_debug)
-                System.out.println("W = \n" + tmpW);
-        }
-
-    }
-
-    /*  Add the constraint that V0 points back to beamspot
+        if (_beamspotConstraint) {
+            applyBSconstraint(true);
+        } else if (_targetConstraint) {
+            applyBSconstraint(false);
+        }
+        Map<Integer, Hep3Vector> pFitMap = new HashMap<Integer, Hep3Vector>();
+        for (int i = 0; i < tracks.size(); i++) {
+            Hep3Vector pFit = new BasicHep3Vector(this.getFittedMomentum(i));
+            pFitMap.put(i, pFit);
+        }
+        Hep3Vector vert = new BasicHep3Vector(_vertexPosition.e(0, 0), _vertexPosition.e(1, 0), _vertexPosition.e(2, 0));
+        Hep3Vector vertDet = CoordinateTransformations.transformVectorToDetector(vert);
+        SymmetricMatrix covVtxDet = CoordinateTransformations.transformCovarianceToDetector(new SymmetricMatrix(_covVtx));
+        return new BilliorVertex(vertDet, covVtxDet, _chiSq, getInvMass(), pFitMap, _constraintType);
+    }
+
+    /*  Add the constraint that V0 is at/points back to beamspot
      *  this method is based on progressive least squares fit
      *  using the unconstrained fit result as the (k-1) fit
      *
      *  all notation is taken from:
      * W. Hulsbergen, NIM 552 (2005) 566-575
      */
-    private void addV0fromBSConstraint() {
-        BasicMatrix Hk = new BasicMatrix(3 * (_ntracks + 1), 3);
+    private void applyBSconstraint(boolean pointback) {
+        String methodName = pointback ? "constrainV0toBS" : "constrainV0toTarget";
         BasicMatrix Ckm1 = new BasicMatrix(3 * (_ntracks + 1), 3 * (_ntracks + 1));
         BasicMatrix Xkm1 = new BasicMatrix(3 * (_ntracks + 1), 1);
         MatrixOp.setSubMatrix(Ckm1, _covVtx, 0, 0);
         MatrixOp.setSubMatrix(Xkm1, _vertexPosition, 0, 0);
         int n = 1;
         for (Matrix covVtxMom : covVtxMomList) {
-            if (_debug)
-                System.out.println("addV0fromBSConstraint::Track " + n + "  covVtxMom : " + covVtxMom.toString());
+            if (_debug) {
+                System.out.println(methodName + "::Track " + n + "  covVtxMom : " + covVtxMom.toString());
+            }
             MatrixOp.setSubMatrix(Ckm1, covVtxMom, 0, 3 * n);
             MatrixOp.setSubMatrix(Ckm1, MatrixOp.transposed(covVtxMom), 3 * n, 0);
             n++;
@@ -411,10 +114,12 @@
         for (int i = 0; i < _ntracks; i++) {
             BasicMatrix pi = (BasicMatrix) _pFit.get(i);
             MatrixOp.setSubMatrix(Xkm1, pi, 3 * (i + 1), 0);
-            if (_debug)
-                System.out.println("addV0fromBSConstraint::Track " + i + "  p : " + pi.toString());
-            for (int j = 0; j < _ntracks; j++)
+            if (_debug) {
+                System.out.println(methodName + "::Track " + i + "  p : " + pi.toString());
+            }
+            for (int j = 0; j < _ntracks; j++) {
                 MatrixOp.setSubMatrix(Ckm1, covMomList[i][j], 3 * (i + 1), 3 * (j + 1));
+            }
         }
 
         //  now calculate the derivative matrix for the beam constraint.
@@ -443,56 +148,16 @@
             pztot += pz;
         }
         //calculate the position of the A' at X=0
-        BasicMatrix rk = new BasicMatrix(3, 1);
-        if (_debug)
-            System.out.println("addV0fromBSConstraint::Vx = " + Vx + "; Vy = " + Vy + "; Vz = " + Vz + "; pxtot = " + pxtot + "; pytot = " + pytot + "; pztot = " + pztot);
-        rk.setElement(0, 0, 0);
-        rk.setElement(1, 0, 0 - (Vy - pytot / pxtot * Vx));
-        rk.setElement(2, 0, 0 - (Vz - pztot / pxtot * Vx));
-
-//  ok, can set the derivitives wrt to V
-        Hk.setElement(0, 0, 0);
-        Hk.setElement(0, 1, pytot / pxtot);
-        Hk.setElement(0, 2, pztot / pxtot);
-        Hk.setElement(1, 0, 0);
-        Hk.setElement(1, 1, 1);
-        Hk.setElement(1, 2, 0);
-        Hk.setElement(2, 0, 0);
-        Hk.setElement(2, 1, 0);
-        Hk.setElement(2, 2, 1);
-//ok, loop over tracks again to set the derivitives wrt track momenta (theta,phi,rho)
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix pi = (BasicMatrix) _pFit.get(i);
-            double theta = pi.e(0, 0);
-            double phiv = pi.e(1, 0);
-            double rho = pi.e(2, 0);
-            double Pt = Math.abs((1. / rho) * _bField * Constants.fieldConversion);
-            double px = Pt * Math.cos(phiv);
-            double py = Pt * Math.sin(phiv);
-            double pz = Pt * 1 / Math.tan(theta);
-            //derivities wrt theta
-            Hk.setElement(3 * (i + 1), 0, 0);
-            Hk.setElement(3 * (i + 1), 1, 0);
-            Hk.setElement(3 * (i + 1), 2, -Pt / Math.pow(sin(theta), 2) * Vx);
-            //derivities wrt phi
-            Hk.setElement(3 * (i + 1) + 1, 0, 0);
-            Hk.setElement(3 * (i + 1) + 1, 1,
-                    (Pt * Pt * cos(phiv) * sin(phiv) / (pxtot * pxtot)) * Vx);
-            Hk.setElement(3 * (i + 1) + 1, 2, (Pt * sin(phiv) / (pxtot * pxtot)) * Vx * pztot);
-            //derivities wrt rho
-            Hk.setElement(3 * (i + 1) + 2, 0, 0);
-//            Hk.setElement(3 * (i + 1) + 2, 1,
-//                    (pytot / pxtot - 1) * (Pt / rho) * (1 / pxtot) * Vx);
-//            Hk.setElement(3 * (i + 1) + 2, 2,
-//                    (pztot / pxtot - 1) * (Pt / rho) * (1 / pxtot) * Vx);
-            Hk.setElement(3 * (i + 1) + 2, 1,
-                    (cos(phiv) * pytot / pxtot - sin(phiv)) * (Pt / rho) * (1 / pxtot) * Vx);
-            Hk.setElement(3 * (i + 1) + 2, 2,
-                    (cos(phiv) * pztot / pxtot - sin(phiv)) * (Pt / rho) * (1 / pxtot) * Vx);
-            //                   if(_debug)System.out.println("pxtot = "+pxtot+"; rho = "+rho+"; Pt = "+Pt);
-            //                   if(_debug)System.out.println("cos(phiv)*pytot / pxtot - sin(phiv) = "+(cos(phiv)*pytot / pxtot - sin(phiv)));
-            //                   if(_debug)System.out.println("Pt/(rho*pxtot) = "+(Pt / rho) * (1 / pxtot));
-        }
+        BasicMatrix rk = makeRk(Vx, Vy, Vz, pxtot, pytot, pztot, pointback);
+        if (_debug) {
+            System.out.println(methodName + "::rk = " + rk);
+        }
+
+        BasicMatrix Hk = makeHk(_ntracks, pxtot, pytot, pztot, pointback);
+        if (_debug) {
+            System.out.println(methodName + "::Hk = " + Hk);
+        }
+
         // the beam covariance
         BasicMatrix Vk = new BasicMatrix(3, 3);
         Vk.setElement(0, 0, _beamSize[0] * _beamSize[0]);
@@ -501,15 +166,18 @@
 
         //now do the matrix operations to get the constrained parameters
         BasicMatrix Hkt = (BasicMatrix) MatrixOp.transposed(Hk);
-        if (_debug)
-            System.out.println("addV0fromBSConstraint::Ckm1Hk = " + MatrixOp.mult(Ckm1, Hk));
+        if (_debug) {
+            System.out.println(methodName + "::Ckm1Hk = " + MatrixOp.mult(Ckm1, Hk));
+        }
 
         BasicMatrix Rk = (BasicMatrix) MatrixOp.mult(Hkt, MatrixOp.mult(Ckm1, Hk));
-        if (_debug)
+        if (_debug) {
             System.out.println("Pre Vk:  Rk = " + Rk.toString());
+        }
         Rk = (BasicMatrix) MatrixOp.add(Rk, Vk);
-        if (_debug)
+        if (_debug) {
             System.out.println("Post Vk:  Rk = " + Rk.toString());
+        }
         BasicMatrix Rkinv = (BasicMatrix) MatrixOp.inverse(Rk);
         BasicMatrix Kk = (BasicMatrix) MatrixOp.mult(Ckm1, MatrixOp.mult(Hk, Rkinv));
 
@@ -540,6 +208,10 @@
 //        if(_debug)System.out.println("With Constraint : " + _vertexPosition.toString());
 //        if(_debug)System.out.println("With Constraint : " + _covVtx.toString());
 
+        if (_debug) {
+            System.out.println("Constrained vertex: " + _vertexPosition);
+        }
+
         for (int i = 0; i < _ntracks; i++) {
             BasicMatrix ptmp = (BasicMatrix) MatrixOp.getSubMatrix(_constrainedFit, 3 * (i + 1), 0, 3, 1);
             _pFit.set(i, ptmp);
@@ -547,70 +219,28 @@
 
 //        if(_debug)System.out.println("Unconstrained chi^2 = "+_chiSq);
         //ok...add to the chi^2
-        if (_debug)
-            System.out.println(MatrixOp.mult(MatrixOp.transposed(rk), MatrixOp.mult(Rkinv, rk)));
+        if (_debug) {
+            System.out.println("Chisq contribution: " + MatrixOp.mult(MatrixOp.transposed(rk), MatrixOp.mult(Rkinv, rk)));
+        }
         _chiSq += MatrixOp.mult(MatrixOp.transposed(rk), MatrixOp.mult(Rkinv, rk)).e(0, 0);
 //        if(_debug)System.out.println("Constrained chi^2 = "+_chiSq);
     }
 
-    private void constrainV0toBS() {
-        BasicMatrix Hk = new BasicMatrix(3 * (_ntracks + 1), 3);
-        BasicMatrix Ckm1 = new BasicMatrix(3 * (_ntracks + 1), 3 * (_ntracks + 1));
-        BasicMatrix Xkm1 = new BasicMatrix(3 * (_ntracks + 1), 1);
-        MatrixOp.setSubMatrix(Ckm1, _covVtx, 0, 0);
-        MatrixOp.setSubMatrix(Xkm1, _vertexPosition, 0, 0);
-
-        int n = 1;
-        for (Matrix covVtxMom : covVtxMomList) {
-            if (_debug)
-                System.out.println("constrainV0toBS::Track " + n + "  covVtxMom : " + covVtxMom.toString());
-            MatrixOp.setSubMatrix(Ckm1, covVtxMom, 0, 3 * n);
-            MatrixOp.setSubMatrix(Ckm1, MatrixOp.transposed(covVtxMom), 3 * n, 0);
-            n++;
-        }
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix pi = (BasicMatrix) _pFit.get(i);
-            MatrixOp.setSubMatrix(Xkm1, pi, 3 * (i + 1), 0);
-            //           if(_debug)System.out.println("Track "+i+"  p : " + pi.toString());
-            for (int j = 0; j < _ntracks; j++)
-                MatrixOp.setSubMatrix(Ckm1, covMomList[i][j], 3 * (i + 1), 3 * (j + 1));
-        }
-        //  now calculate the derivative matrix for the beam constraint.
-        //  the beamspot is assumed to be at bvec=(0,0,0)
-        //  the V0 production position is Vbvec=(0,0,0)
-        //  where ptot=sum_i (pi)
-        //  need derivites wrt to the vertex position and momentum (theta,phi_v,rho)
+    private BasicMatrix makeHk(int ntracks, double pxtot, double pytot, double pztot, boolean bscon) {
         double Vx = _vertexPosition.e(0, 0);
-        double Vy = _vertexPosition.e(1, 0);
-        double Vz = _vertexPosition.e(2, 0);
-        //first, get the sum of momenta...
-        double pxtot = 0;
-        double pytot = 0;
-        double pztot = 0;
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix pi = (BasicMatrix) _pFit.get(i);
-            double theta = pi.e(0, 0);
-            double phiv = pi.e(1, 0);
-            double rho = pi.e(2, 0);
-            double Pt = Math.abs((1. / rho) * _bField * Constants.fieldConversion);
-            double px = Pt * Math.cos(phiv);
-            double py = Pt * Math.sin(phiv);
-            double pz = Pt * 1 / Math.tan(theta);
-            pxtot += px;
-            pytot += py;
-            pztot += pz;
-        }
-        //calculate the position of the A' at X=0
-        BasicMatrix rk = new BasicMatrix(3, 1);
-        //       if(_debug)System.out.println("Vx = " + Vx + "; Vy = " + Vy + "; Vz = " + Vz + "; pxtot = " + pxtot + "; pytot = " + pytot + "; pztot = " + pztot);
-        rk.setElement(0, 0, -Vx);
-        rk.setElement(1, 0, -Vy);
-        rk.setElement(2, 0, -Vz);
-
+//        double Vy = _vertexPosition.e(1, 0);
+//        double Vz = _vertexPosition.e(2, 0);
+        BasicMatrix Hk = new BasicMatrix(3 * (ntracks + 1), 3);
 //  ok, can set the derivitives wrt to V
-        Hk.setElement(0, 0, 1);
-        Hk.setElement(0, 1, 0);
-        Hk.setElement(0, 2, 0);
+        if (bscon) {
+            Hk.setElement(0, 0, 0);
+            Hk.setElement(0, 1, pytot / pxtot);
+            Hk.setElement(0, 2, pztot / pxtot);
+        } else {
+            Hk.setElement(0, 0, 1);
+            Hk.setElement(0, 1, 0);
+            Hk.setElement(0, 2, 0);
+        }
         Hk.setElement(1, 0, 0);
         Hk.setElement(1, 1, 1);
         Hk.setElement(1, 2, 0);
@@ -618,92 +248,73 @@
         Hk.setElement(2, 1, 0);
         Hk.setElement(2, 2, 1);
 //ok, loop over tracks again to set the derivitives wrt track momenta (theta,phi,rho)
-        for (int i = 0; i < _ntracks; i++) {
+        for (int i = 0; i < ntracks; i++) {
             BasicMatrix pi = (BasicMatrix) _pFit.get(i);
             double theta = pi.e(0, 0);
             double phiv = pi.e(1, 0);
             double rho = pi.e(2, 0);
             double Pt = Math.abs((1. / rho) * _bField * Constants.fieldConversion);
-            double px = Pt * Math.cos(phiv);
-            double py = Pt * Math.sin(phiv);
-            double pz = Pt * 1 / Math.tan(theta);
+//            double px = Pt * Math.cos(phiv);
+//            double py = Pt * Math.sin(phiv);
+//            double pz = Pt * 1 / Math.tan(theta);
             //derivities wrt theta
             Hk.setElement(3 * (i + 1), 0, 0);
             Hk.setElement(3 * (i + 1), 1, 0);
-            Hk.setElement(3 * (i + 1), 2, 0);
+            if (bscon) {
+                Hk.setElement(3 * (i + 1), 2,
+                        -Pt / Math.pow(sin(theta), 2) * Vx);
+            } else {
+                Hk.setElement(3 * (i + 1), 2, 0);
+            }
             //derivities wrt phi
             Hk.setElement(3 * (i + 1) + 1, 0, 0);
-            Hk.setElement(3 * (i + 1) + 1, 1,
-                    0);
-            Hk.setElement(3 * (i + 1) + 1, 2, 0);
+            if (bscon) {
+                Hk.setElement(3 * (i + 1) + 1, 1,
+                        (Pt * Pt * cos(phiv) * sin(phiv) / (pxtot * pxtot)) * Vx);
+                Hk.setElement(3 * (i + 1) + 1, 2,
+                        (Pt * sin(phiv) / (pxtot * pxtot)) * Vx * pztot);
+            } else {
+                Hk.setElement(3 * (i + 1) + 1, 1, 0);
+                Hk.setElement(3 * (i + 1) + 1, 2, 0);
+            }
             //derivities wrt rho
             Hk.setElement(3 * (i + 1) + 2, 0, 0);
 //            Hk.setElement(3 * (i + 1) + 2, 1,
 //                    (pytot / pxtot - 1) * (Pt / rho) * (1 / pxtot) * Vx);
 //            Hk.setElement(3 * (i + 1) + 2, 2,
 //                    (pztot / pxtot - 1) * (Pt / rho) * (1 / pxtot) * Vx);
-            Hk.setElement(3 * (i + 1) + 2, 1,
-                    0);
-            Hk.setElement(3 * (i + 1) + 2, 2,
-                    0);
+            if (bscon) {
+                Hk.setElement(3 * (i + 1) + 2, 1,
+                        (cos(phiv) * pytot / pxtot - sin(phiv)) * (Pt / rho) * (1 / pxtot) * Vx);
+                Hk.setElement(3 * (i + 1) + 2, 2,
+                        (cos(phiv) * pztot / pxtot - sin(phiv)) * (Pt / rho) * (1 / pxtot) * Vx);
+            } else {
+                Hk.setElement(3 * (i + 1) + 2, 1, 0);
+                Hk.setElement(3 * (i + 1) + 2, 2, 0);
+            }
             //                   if(_debug)System.out.println("pxtot = "+pxtot+"; rho = "+rho+"; Pt = "+Pt);
             //                   if(_debug)System.out.println("cos(phiv)*pytot / pxtot - sin(phiv) = "+(cos(phiv)*pytot / pxtot - sin(phiv)));
             //                   if(_debug)System.out.println("Pt/(rho*pxtot) = "+(Pt / rho) * (1 / pxtot));
         }
-        // the beam covariance
-        BasicMatrix Vk = new BasicMatrix(3, 3);
-        Vk.setElement(0, 0, _beamSize[0] * _beamSize[0]);
-        Vk.setElement(1, 1, _beamSize[1] * _beamSize[1]);
-        Vk.setElement(2, 2, _beamSize[2] * _beamSize[2]);
-
-        //now do the matrix operations to get the constrained parameters
-        BasicMatrix Hkt = (BasicMatrix) MatrixOp.transposed(Hk);
-//         if(_debug)System.out.println("Ckm1Hk = " + MatrixOp.mult(Ckm1, Hk));
-
-        BasicMatrix Rk = (BasicMatrix) MatrixOp.mult(Hkt, MatrixOp.mult(Ckm1, Hk));
-//        if(_debug)System.out.println("Pre Vk:  Rk = " + Rk.toString());
-        Rk = (BasicMatrix) MatrixOp.add(Rk, Vk);
-        BasicMatrix Rkinv = (BasicMatrix) MatrixOp.inverse(Rk);
-        BasicMatrix Kk = (BasicMatrix) MatrixOp.mult(Ckm1, MatrixOp.mult(Hk, Rkinv));
-
-//        if(_debug)System.out.println("Ckm1 = " + Ckm1.toString());
-//        if(_debug)System.out.println("Hk = " + Hk.toString());
-//        if(_debug)System.out.println("Rk = " + Rk.toString());
-//        if(_debug)System.out.println("Vk = " + Vk.toString());
-//        if(_debug)System.out.println("rk = " + rk.toString());
-//        if(_debug)System.out.println("Kk = " + Kk.toString());
-        _constrainedFit = MatrixOp.mult(Kk, rk);
-        _constrainedFit = MatrixOp.add(_constrainedFit, Xkm1);//Xk
-
-        //ok, get the new covariance
-        BasicMatrix RkKkt = (BasicMatrix) MatrixOp.mult(Rk, MatrixOp.transposed(Kk));
-        BasicMatrix HkCkm1 = (BasicMatrix) MatrixOp.mult(Hkt, Ckm1);
-        RkKkt = (BasicMatrix) MatrixOp.mult(1, RkKkt);
-        HkCkm1 = (BasicMatrix) MatrixOp.mult(-2, HkCkm1);
-        BasicMatrix sumMatrix = (BasicMatrix) MatrixOp.mult(Kk, MatrixOp.add(HkCkm1, RkKkt));
-        _constrainedCov = (BasicMatrix) MatrixOp.add(Ckm1, sumMatrix);
-
-        //update the regular parameter names to the constrained result
-//        if(_debug)System.out.println("Without Constraint : " + _vertexPosition.toString());
-//        if(_debug)System.out.println("Without Constraint:  x= "+_vertexPosition.e(0,0));
-        //        if(_debug)System.out.println(_constrainedFit.toString());
-//         if(_debug)System.out.println("Without Constraint : " + _covVtx.toString());
-        _vertexPosition = (BasicMatrix) MatrixOp.getSubMatrix(_constrainedFit, 0, 0, 3, 1);
-        _covVtx = (BasicMatrix) MatrixOp.getSubMatrix(_constrainedCov, 0, 0, 3, 3);
-//        if(_debug)System.out.println("With Constraint : " + _vertexPosition.toString());
-//        if(_debug)System.out.println("With Constraint : " + _covVtx.toString());
-
-        for (int i = 0; i < _ntracks; i++) {
-            BasicMatrix ptmp = (BasicMatrix) MatrixOp.getSubMatrix(_constrainedFit, 3 * (i + 1), 0, 3, 1);
-            _pFit.set(i, ptmp);
-        }
-
-//        if(_debug)System.out.println("Unconstrained chi^2 = "+_chiSq);
-        //ok...add to the chi^2
-        if (_debug)
-            System.out.println(MatrixOp.mult(MatrixOp.transposed(rk), MatrixOp.mult(Rkinv, rk)));
-        _chiSq += MatrixOp.mult(MatrixOp.transposed(rk), MatrixOp.mult(Rkinv, rk)).e(0, 0);
-//        if(_debug)System.out.println("Constrained chi^2 = "+_chiSq);
+        return Hk;
+    }
+
+    public BasicMatrix makeRk(double Vx, double Vy, double Vz, double pxtot, double pytot, double pztot, boolean bscon) {
+        //calculate the position of the A' at X=0
+        BasicMatrix rk = new BasicMatrix(3, 1);
+        if (_debug) {
+            System.out.println("makeRk::Vx = " + Vx + "; Vy = " + Vy + "; Vz = " + Vz + "; pxtot = " + pxtot + "; pytot = " + pytot + "; pztot = " + pztot);
+        }
+        if (bscon) {
+            rk.setElement(0, 0, 0);
+            rk.setElement(1, 0, _beamPosition[1] - (Vy - pytot / pxtot * (Vx - _beamPosition[0])));
+            rk.setElement(2, 0, _beamPosition[2] - (Vz - pztot / pxtot * (Vx - _beamPosition[0])));
+        } else {
+            rk.setElement(0, 0, _beamPosition[0] - Vx);
+            rk.setElement(1, 0, _beamPosition[1] - Vy);
+            rk.setElement(2, 0, _beamPosition[2] - Vz);
+        }
+        return rk;
     }
 
     public void setV0(double[] v0) {
@@ -716,15 +327,23 @@
         _beamSize[2] = bs[2];
     }
 
+    public void setBeamPosition(double[] bp) {
+        _beamPosition[0] = bp[0];
+        _beamPosition[1] = bp[1];
+        _beamPosition[2] = bp[2];
+    }
+
     public void doBeamSpotConstraint(boolean bsconst) {
         _beamspotConstraint = bsconst;
-         _constraintType="BeamspotConstrained";
-        
+        _targetConstraint = false;
+        _constraintType = "BeamspotConstrained";
+
     }
 
     public void doTargetConstraint(boolean bsconst) {
+        _beamspotConstraint = false;
         _targetConstraint = bsconst;
-         _constraintType="TargetConstrained";
+        _constraintType = "TargetConstrained";
     }
 
     public double getChiSq() {
@@ -742,12 +361,12 @@
         mom[0] = Pt * Math.cos(phiv);
         mom[1] = Pt * Math.sin(phiv);
         mom[2] = Pt * 1 / Math.tan(theta);
-        if (_debug){
-            System.out.println("getFittedMomentum::  "+mom[0] + "; " + mom[1] + "; " + mom[2]);
-
-            System.out.println("pT= "+Pt+"; phi = "+phiv+"; B = "+ _bField);
-        }
-      return mom;
+        if (_debug) {
+            System.out.println("getFittedMomentum::  " + mom[0] + "; " + mom[1] + "; " + mom[2]);
+
+            System.out.println("pT= " + Pt + "; phi = " + phiv + "; B = " + _bField);
+        }
+        return mom;
     }
 
     private double getInvMass() {
@@ -772,15 +391,17 @@
         double psum = Math.sqrt(pxsum * pxsum + pysum * pysum + pzsum * pzsum);
         double evtmass = esum * esum - psum * psum;
 
-        if (evtmass > 0)
+        if (evtmass > 0) {
             return Math.sqrt(evtmass);
-        else
+        } else {
             return -99;
-    }
-
+        }
+    }
+
+    @Override
     public String toString() {
-        StringBuffer sb = new StringBuffer("Vertex at : \nx= " + _vertexPosition.e(0, 0) + " +/- " + Math.sqrt(_covVtx.e(0, 0)) + "\ny= " + _vertexPosition.e(1, 0) + " +/- " + Math.sqrt(_covVtx.e(1, 1)) + "\nz= " + _vertexPosition.e(2, 0) + " +/- " + Math.sqrt(_covVtx.e(2, 2)));
-        return sb.toString();
+        String sb = "Vertex at : \nx= " + _vertexPosition.e(0, 0) + " +/- " + Math.sqrt(_covVtx.e(0, 0)) + "\ny= " + _vertexPosition.e(1, 0) + " +/- " + Math.sqrt(_covVtx.e(1, 1)) + "\nz= " + _vertexPosition.e(2, 0) + " +/- " + Math.sqrt(_covVtx.e(2, 2));
+        return sb;
     }
 
     private void follow1985Paper(List<BilliorTrack> tracks) {
@@ -789,8 +410,8 @@
         v0.setElement(0, 0, _v0[0]);
         v0.setElement(1, 0, _v0[1]);
         v0.setElement(2, 0, _v0[2]);
-        List<Matrix> params = new ArrayList<Matrix>();
-        List<Matrix> q0s = new ArrayList<Matrix>();
+//        List<Matrix> params = new ArrayList<Matrix>();
+//        List<Matrix> q0s = new ArrayList<Matrix>();
         List<Matrix> Gs = new ArrayList<Matrix>();
         List<Matrix> Ds = new ArrayList<Matrix>();
         List<Matrix> Es = new ArrayList<Matrix>();
@@ -809,13 +430,11 @@
             tmpPar.setElement(2, 0, par[2]);
             tmpPar.setElement(3, 0, par[3]);
             tmpPar.setElement(4, 0, par[4]);
-            params.add(tmpPar);
+//            params.add(tmpPar);
             double theta = par[2];
-            double phiv = par[3];
+//            double phiv = par[3];
             double rho = par[4];
-            double Pt = Math.abs((1. / rho) * _bField * Constants.fieldConversion);
-
-
+//            double Pt = Math.abs((1. / rho) * _bField * Constants.fieldConversion);
 
             double cotth = 1. / tan(par[2]);
             double uu = v0.e(0, 0) * cos(par[3]) + v0.e(1, 0) * sin(par[3]);//Q
@@ -833,15 +452,15 @@
 
             BasicMatrix q0 = new BasicMatrix(3, 1);
             /*   this looks just wrong...
-            q0.setElement(0, 0, Pt * Math.cos(phiv));
-            q0.setElement(1, 0, Pt * Math.sin(phiv));
-            q0.setElement(2, 0, Pt * 1 / Math.tan(theta));
-            q0s.add(q0);
+             q0.setElement(0, 0, Pt * Math.cos(phiv));
+             q0.setElement(1, 0, Pt * Math.sin(phiv));
+             q0.setElement(2, 0, Pt * 1 / Math.tan(theta));
+             q0s.add(q0);
              */
             q0.setElement(0, 0, theta);
             q0.setElement(1, 0, phiVert);
             q0.setElement(2, 0, rho);
-            q0s.add(q0);
+//            q0s.add(q0);
 
             double cosf = cos(phiVert);
             double sinf = sin(phiVert);
@@ -875,10 +494,11 @@
             BasicMatrix tmpG = (BasicMatrix) MatrixOp.inverse(bt.covariance());
             Gs.add(tmpG);
 
-            if (firstTrack)
+            if (firstTrack) {
                 D0 = (BasicMatrix) MatrixOp.mult(MatrixOp.transposed(tmpA), MatrixOp.mult(tmpG, tmpA));
-            else
+            } else {
                 D0 = (BasicMatrix) MatrixOp.add(D0, MatrixOp.mult(MatrixOp.transposed(tmpA), MatrixOp.mult(tmpG, tmpA)));
+            }
 
             BasicMatrix tmpDi = (BasicMatrix) MatrixOp.mult(MatrixOp.transposed(tmpA), MatrixOp.mult(tmpG, tmpB));
             BasicMatrix tmpEi = (BasicMatrix) MatrixOp.mult(MatrixOp.transposed(tmpB), MatrixOp.mult(tmpG, tmpB));
@@ -904,19 +524,21 @@
             BasicMatrix beIbTg = (BasicMatrix) MatrixOp.mult(b, MatrixOp.mult(MatrixOp.inverse(e), MatrixOp.mult(MatrixOp.transposed(b), g)));
             BasicMatrix MinusaTgbeIbTg = (BasicMatrix) MatrixOp.mult(-1, MatrixOp.mult(aTg, beIbTg));
 
-            if (firstTrack)
+            if (firstTrack) {
                 bigsum = (BasicMatrix) MatrixOp.mult(MatrixOp.add(aTg, MinusaTgbeIbTg), p);
-            else
+            } else {
                 bigsum = (BasicMatrix) MatrixOp.add(bigsum, MatrixOp.mult(MatrixOp.add(aTg, MinusaTgbeIbTg), p));
+            }
         }
         BasicMatrix covVtx = (BasicMatrix) MatrixOp.inverse(tmpCovVtx);
         BasicMatrix xtilde = (BasicMatrix) MatrixOp.mult(covVtx, bigsum);
-        if (_debug)
+        if (_debug) {
             System.out.println("follow1985Paper::Vertex at : \nx= " + xtilde.e(0, 0) + " +/- " + Math.sqrt(covVtx.e(0, 0)) + "\ny= " + xtilde.e(1, 0) + " +/- " + Math.sqrt(covVtx.e(1, 1)) + "\nz= " + xtilde.e(2, 0) + " +/- " + Math.sqrt(covVtx.e(2, 2)));
+        }
 
         //ok, now the momentum
-        List<Matrix> qtildes = new ArrayList<Matrix>();
-        List<Matrix> ptildes = new ArrayList<Matrix>();
+//        List<Matrix> qtildes = new ArrayList<Matrix>();
+//        List<Matrix> ptildes = new ArrayList<Matrix>();
         List<Matrix> C0j = new ArrayList<Matrix>();
         List<Matrix> pfit = new ArrayList<Matrix>();
         Matrix[][] Cij = new Matrix[2][2];//max 2 tracks...just make this bigger for more
@@ -934,32 +556,38 @@
             BasicMatrix second = (BasicMatrix) MatrixOp.mult(MatrixOp.inverse(e), MatrixOp.mult(MatrixOp.transposed(b), g));
             second = (BasicMatrix) MatrixOp.mult(second, p);
             BasicMatrix qtilde = (BasicMatrix) MatrixOp.add(first, second);
-            qtildes.add(qtilde);
+//            qtildes.add(qtilde);
             BasicMatrix ptilde = (BasicMatrix) MatrixOp.add(MatrixOp.mult(a, xtilde), MatrixOp.mult(b, qtilde));
-            ptildes.add(ptilde);
+//            ptildes.add(ptilde);
             chisq += MatrixOp.mult(MatrixOp.transposed(MatrixOp.add(p, MatrixOp.mult(-1, ptilde))), MatrixOp.mult(g, MatrixOp.add(p, MatrixOp.mult(-1, ptilde)))).e(0, 0);
-            if (_debug)
+            if (_debug) {
                 System.out.println("\n\nfollow1985Paper::Track #" + j);
-            if (_debug)
+            }
+            if (_debug) {
                 System.out.println("eps(meas)    = " + p.e(0, 0) + "        eps(fit)   =" + ptilde.e(0, 0));
-            if (_debug)
+            }
+            if (_debug) {
                 System.out.println("zp(meas)     = " + p.e(1, 0) + "        zp(fit)    =" + ptilde.e(1, 0));
-            if (_debug)
+            }
+            if (_debug) {
                 System.out.println("theta(meas)  = " + p.e(2, 0) + "        theta(fit) =" + ptilde.e(2, 0));
-            if (_debug)
+            }
+            if (_debug) {
                 System.out.println("phi(meas)    = " + p.e(3, 0) + "        phi(fit)   =" + ptilde.e(3, 0));
-            if (_debug)
+            }
+            if (_debug) {
                 System.out.println("rho(meas)    = " + p.e(4, 0) + "        rho(fit)   =" + ptilde.e(4, 0));
+            }
 
             BasicMatrix tmpC0j = (BasicMatrix) MatrixOp.mult(-1, MatrixOp.mult(covVtx, MatrixOp.mult(d, MatrixOp.inverse(e))));
             C0j.add(tmpC0j);
             for (int i = 0; i < _ntracks; i++) {
-                BasicMatrix ai = (BasicMatrix) As.get(i);
-                BasicMatrix bi = (BasicMatrix) Bs.get(i);
-                BasicMatrix di = (BasicMatrix) Ds.get(i);
-                BasicMatrix ei = (BasicMatrix) Es.get(i);
-                BasicMatrix gi = (BasicMatrix) Gs.get(i);
-                BasicMatrix pi = (BasicMatrix) pis.get(i);
+//                BasicMatrix ai = (BasicMatrix) As.get(i);
+//                BasicMatrix bi = (BasicMatrix) Bs.get(i);
+//                BasicMatrix di = (BasicMatrix) Ds.get(i);
+//                BasicMatrix ei = (BasicMatrix) Es.get(i);
+//                BasicMatrix gi = (BasicMatrix) Gs.get(i);
+//                BasicMatrix pi = (BasicMatrix) pis.get(i);
                 BasicMatrix tmpCij = (BasicMatrix) MatrixOp.mult(-1, MatrixOp.mult(MatrixOp.inverse(e), MatrixOp.mult(MatrixOp.transposed(d), tmpC0j)));
                 Cij[i][j] = tmpCij;
             }
@@ -970,8 +598,9 @@
             pfit.add(tmppfit);
         }
 
-        if (_debug)
+        if (_debug) {
             System.out.println("follow1985Paper::chi^2 = " + chisq);
+        }
 
         _chiSq = chisq;
         _covVtx = covVtx;

Modified: java/branches/jeremy-dev2/record-util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/record-util/pom.xml	(original)
+++ java/branches/jeremy-dev2/record-util/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/record-util/</url>

Modified: java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPNumberedTrigger.java
 =============================================================================
--- java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPNumberedTrigger.java	(original)
+++ java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPNumberedTrigger.java	Wed Apr 13 12:42:42 2016
@@ -21,12 +21,38 @@
     }
     
     /**
+     * Gets the number of the trigger which generated this object.
+     * @return Returns either <code>0</code> or </code>1</code>.
+     */
+    public abstract int getTriggerNumber();
+    
+    /**
+     * Indicates whether the trigger was reported by the trigger number
+     * 0 trigger.
+     * @return <code>true</code> if the trigger was reported by the
+     * trigger number 0 trigger and <code>false</code> if by either
+     * the trigger number 1 or an unknown trigger.
+     */
+    public abstract boolean isTrigger0();
+    
+    /**
+     * Indicates whether the trigger was reported by the trigger number
+     * 1 trigger.
+     * @return <code>true</code> if the trigger was reported by the
+     * trigger number 1 trigger and <code>false</code> if by either
+     * the trigger number 0 or an unknown trigger.
+     */
+    public abstract boolean isTrigger1();
+    
+    
+    /**
      * Indicates whether the trigger was reported by the first of the
      * singles triggers.
      * @return <code>true</code> if the trigger was reported by the
      * first trigger and <code>false</code> if it was reported by the
      * second trigger.
      */
+    @Deprecated
     public abstract boolean isFirstTrigger();
     
     /**
@@ -36,5 +62,6 @@
      * second trigger and <code>false</code> if it was reported by
      * the first trigger.
      */
+    @Deprecated
     public abstract boolean isSecondTrigger();
-}
+}

Modified: java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPPairTrigger.java
 =============================================================================
--- java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPPairTrigger.java	(original)
+++ java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPPairTrigger.java	Wed Apr 13 12:42:42 2016
@@ -20,13 +20,30 @@
     }
     
     @Override
-    public boolean isFirstTrigger() {
+    public int getTriggerNumber() {
+        if(isFirstTrigger()) { return 0; }
+        else if(isSecondTrigger()) { return 1; }
+        else { return -1; }
+    }
+    
+    @Override
+    public boolean isTrigger0() {
         return (type == SSPData.TRIG_TYPE_PAIR0);
     }
     
     @Override
+    public boolean isTrigger1() {
+        return (type == SSPData.TRIG_TYPE_PAIR1);
+    }
+    
+    @Override
+    public boolean isFirstTrigger() {
+        return isTrigger0();
+    }
+    
+    @Override
     public boolean isSecondTrigger() {
-        return (type == SSPData.TRIG_TYPE_PAIR1);
+        return isTrigger1();
     }
     
     /**

Modified: java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPSinglesTrigger.java
 =============================================================================
--- java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPSinglesTrigger.java	(original)
+++ java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/SSPSinglesTrigger.java	Wed Apr 13 12:42:42 2016
@@ -26,13 +26,30 @@
     }
     
     @Override
-    public boolean isFirstTrigger() {
+    public int getTriggerNumber() {
+        if(isFirstTrigger()) { return 0; }
+        else if(isSecondTrigger()) { return 1; }
+        else { return -1; }
+    }
+    
+    @Override
+    public boolean isTrigger0() {
         return (type == SSPData.TRIG_TYPE_SINGLES0_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP);
     }
     
     @Override
+    public boolean isTrigger1() {
+        return (type == SSPData.TRIG_TYPE_SINGLES1_BOT) || (type == SSPData.TRIG_TYPE_SINGLES1_TOP);
+    }
+    
+    @Override
+    public boolean isFirstTrigger() {
+        return isTrigger0();
+    }
+    
+    @Override
     public boolean isSecondTrigger() {
-        return (type == SSPData.TRIG_TYPE_SINGLES1_BOT) || (type == SSPData.TRIG_TYPE_SINGLES1_TOP);
+        return isTrigger1();
     }
     
     /**

Modified: java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/TriggerModule.java
 =============================================================================
--- java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/TriggerModule.java	(original)
+++ java/branches/jeremy-dev2/record-util/src/main/java/org/hps/record/triggerbank/TriggerModule.java	Wed Apr 13 12:42:42 2016
@@ -444,6 +444,38 @@
     }
     
     /**
+     * Gets the angle between the cluster and the centerpoint of the
+     * calorimeter.
+     * @param cluster - The cluster for which to calculate the angle.
+     * @return Returns the cluster angle as an <code>int</code> in units
+     * of degrees.
+     */
+    public static int getClusterAngle(Cluster cluster) {
+        // Get the cluster position.
+        double x = getClusterX(cluster);
+        double y = getClusterY(cluster);
+        
+        // Return the cluster angle.
+        return getClusterAngle(x, y);
+    }
+    
+    /**
+     * Gets the angle between the cluster and the centerpoint of the
+     * calorimeter.
+     * @param cluster - The cluster for which to calculate the angle.
+     * @return Returns the cluster angle as an <code>int</code> in units
+     * of degrees.
+     */
+    public static int getClusterAngle(SSPCluster cluster) {
+        // Get the cluster position.
+        double x = getClusterX(cluster);
+        double y = getClusterY(cluster);
+        
+        // Return the cluster angle.
+        return getClusterAngle(x, y);
+    }
+    
+    /**
      * Calculates the distance between the origin and a cluster.
      * @param cluster - The cluster pair from which the value should
      * be calculated.
@@ -1260,6 +1292,18 @@
     }
     
     /**
+     * Gets the angle between the cluster and the centerpoint of the
+     * calorimeter.
+     * @param x - The cluster seed x-position.
+     * @param y - The cluster seed y-position.
+     * @return Returns the cluster angle as an <code>int</code> in units
+     * of degrees.
+     */
+    private static int getClusterAngle(double x, double y) {
+        return (int) Math.round(Math.atan(x / y) * 180.0 / Math.PI);
+    }
+    
+    /**
      * Calculates the distance between the origin and a cluster.
      * @param x - The cluster's x-position.
      * @param z - The cluster's z-position.
@@ -1309,7 +1353,7 @@
         // Get the cluster angles.
         int[] clusterAngle = new int[2];
         for(int i = 0; i < 2; i++) {
-            clusterAngle[i] = (int) Math.round(Math.atan(x[i] / y[i]) * 180.0 / Math.PI);
+            clusterAngle[i] = getClusterAngle(x[i], y[i]); //(int) Math.round(Math.atan(x[i] / y[i]) * 180.0 / Math.PI);
         }
         
         // Calculate the coplanarity cut value.
@@ -1738,4 +1782,4 @@
             {  340.013,   97.070,  -87.790 }
         }
     };
-}
+}

Modified: java/branches/jeremy-dev2/run-database/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/run-database/pom.xml	(original)
+++ java/branches/jeremy-dev2/run-database/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/run-database/</url>

Modified: java/branches/jeremy-dev2/run-database/src/main/java/org/hps/run/database/RunManager.java
 =============================================================================
--- java/branches/jeremy-dev2/run-database/src/main/java/org/hps/run/database/RunManager.java	(original)
+++ java/branches/jeremy-dev2/run-database/src/main/java/org/hps/run/database/RunManager.java	Wed Apr 13 12:42:42 2016
@@ -108,7 +108,9 @@
         }
         
         String uri = "jdbc:mysql://" + host + ":" + port + "/" + database + "?" + "user=" + user + "&" + "password=" + password;
-        LOGGER.config("run db URI " + uri);
+
+        LOGGER.config("run database URI " + uri);
+
         return DatabaseUtilities.createDataSource(uri);
     }
      

Modified: java/branches/jeremy-dev2/steering-files/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/steering-files/pom.xml	(original)
+++ java/branches/jeremy-dev2/steering-files/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/steering-files/</url>

Modified: java/branches/jeremy-dev2/tracking/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/tracking/pom.xml	(original)
+++ java/branches/jeremy-dev2/tracking/pom.xml	Wed Apr 13 12:42:42 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/tracking/</url>

Modified: java/branches/jeremy-dev2/users/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/users/pom.xml	(original)
+++ java/branches/jeremy-dev2/users/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/users/</url>

Modified: java/branches/jeremy-dev2/util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev2/util/pom.xml	(original)
+++ java/branches/jeremy-dev2/util/pom.xml	Wed Apr 13 12:42:42 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.8-SNAPSHOT</version>
+        <version>3.9-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/util/</url>