Print

Print


Author: [log in to unmask]
Date: Tue Mar  1 11:15:40 2016
New Revision: 4272

Log:
Merge trunk changes into dev branch.

Added:
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/beam/
      - copied from r4271, java/trunk/conditions/src/main/java/org/hps/conditions/beam/
    java/branches/jeremy-dev/conditions/src/test/java/org/hps/conditions/beam/
      - copied from r4271, java/trunk/conditions/src/test/java/org/hps/conditions/beam/
    java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/users/holly/EngineeringRun2015EcalRecon_noTwalk.lcsim
      - copied unchanged from r4271, java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngineeringRun2015EcalRecon_noTwalk.lcsim
Removed:
    java/branches/jeremy-dev/datacat-client/
Modified:
    java/branches/jeremy-dev/   (props changed)
    java/branches/jeremy-dev/analysis/pom.xml
    java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/DataQualityMonitor.java
    java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
    java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
    java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
    java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
    java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/plots/AddPlots.java
    java/branches/jeremy-dev/conditions/   (props changed)
    java/branches/jeremy-dev/conditions/pom.xml
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/cli/AbstractCommand.java
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/database/ConnectionParameters.java
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/MotorPositionLoader.java
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java
    java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/SvtConditionsLoader.java
    java/branches/jeremy-dev/crawler/pom.xml
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatAddFile.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatCrawler.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/MetadataWriter.java
    java/branches/jeremy-dev/detector-data/pom.xml
    java/branches/jeremy-dev/detector-model/pom.xml
    java/branches/jeremy-dev/distribution/   (props changed)
    java/branches/jeremy-dev/distribution/pom.xml
    java/branches/jeremy-dev/ecal-event-display/pom.xml
    java/branches/jeremy-dev/ecal-readout-sim/pom.xml
    java/branches/jeremy-dev/ecal-recon/pom.xml
    java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
    java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRunningPedestalDriver.java
    java/branches/jeremy-dev/evio/pom.xml
    java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/BasicEvioFileReader.java
    java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/EvioToLcio.java
    java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
    java/branches/jeremy-dev/integration-tests/   (props changed)
    java/branches/jeremy-dev/job/pom.xml
    java/branches/jeremy-dev/job/src/main/java/org/hps/job/DatabaseConditionsManagerSetup.java
    java/branches/jeremy-dev/logging/pom.xml
    java/branches/jeremy-dev/monitoring-app/   (props changed)
    java/branches/jeremy-dev/monitoring-app/pom.xml
    java/branches/jeremy-dev/monitoring-app/src/main/java/org/hps/monitoring/application/Main.java
    java/branches/jeremy-dev/monitoring-drivers/pom.xml
    java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
    java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/PlotAndFitUtilities.java
    java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/V0ReconPlots.java
    java/branches/jeremy-dev/monitoring-util/pom.xml
    java/branches/jeremy-dev/parent/pom.xml
    java/branches/jeremy-dev/plugin/pom.xml
    java/branches/jeremy-dev/pom.xml
    java/branches/jeremy-dev/recon/pom.xml
    java/branches/jeremy-dev/record-util/pom.xml
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioEventSkimmer.java
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioFileProducer.java
    java/branches/jeremy-dev/run-database/pom.xml
    java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunDatabaseCommandLine.java
    java/branches/jeremy-dev/steering-files/pom.xml
    java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim   (contents, props changed)
    java/branches/jeremy-dev/tracking/pom.xml
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/BuildCompact.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/BuildMillepedeCompact.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/MillepedeCompactDump.java
    java/branches/jeremy-dev/users/pom.xml
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/jeremym/EvioFileScanner.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/FilterMCBunches.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/MergeMCBunches.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/omoreno/LheToStdhep.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/dataMCPlots.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/ecalPlots.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/trigRate.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/tools/DumpAIDATextFiles.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/tools/mergeSimpleAIDA.java
    java/branches/jeremy-dev/util/pom.xml
    java/branches/jeremy-dev/util/src/main/java/org/hps/util/CalculateAcceptanceFromMadGraph.java
    java/branches/jeremy-dev/util/src/main/java/org/hps/util/ConvertToStdhep.java
    java/branches/jeremy-dev/util/src/main/java/org/hps/util/DumpLHEEventsToASCII.java

Modified: java/branches/jeremy-dev/analysis/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/analysis/pom.xml	(original)
+++ java/branches/jeremy-dev/analysis/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/analysis/</url>

Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/DataQualityMonitor.java
 =============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/DataQualityMonitor.java	(original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/DataQualityMonitor.java	Tue Mar  1 11:15:40 2016
@@ -91,7 +91,7 @@
         printDQMData();
         if (printDQMStrings)
             printDQMStrings();
-        LOGGER.info("Should I write to the database?  " + connectToDB);
+        LOGGER.info("Write to database =  " + connectToDB);
         if (connectToDB) {
             LOGGER.info("Connecting To Database...getting DQMDBManager");
             manager = DQMDatabaseManager.getInstance();

Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
 =============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java	(original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java	Tue Mar  1 11:15:40 2016
@@ -8,6 +8,7 @@
 import java.util.logging.Logger;
 
 import org.apache.commons.math.stat.StatUtils;
+import org.hps.conditions.beam.BeamEnergy.BeamEnergyCollection;
 import org.hps.recon.ecal.cluster.ClusterUtilities;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
@@ -73,13 +74,10 @@
     boolean fillHitPlots = true;
     String[] ecalQuantNames = {"avg_N_hits", "avg_Hit_Energy",
         "avg_N_clusters", "avg_N_hitsPerCluster", "avg_Cluster_Energy", "avg_ClusterTime"};
-    double beamEnergy = 1.1;
     
     double maxFactor = 1.5;
     
-    public void setBeamEnergy(double e){
-    	beamEnergy = e;
-    }
+   
     
     private final String plotHitsDir = "EcalHits/";
     private final String plotClustersDir = "EcalClusters/";
@@ -104,6 +102,10 @@
 
     @Override
     protected void detectorChanged(Detector detector) {
+    	BeamEnergyCollection beamEnergyCollection = 
+			this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();        
+		double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
+    	//this.getConditionsManager().getCachedConditions(org.hps.conditions.EcalChannelCollection.class, "ecal_channels").
         LOGGER.info("EcalMonitoring::detectorChanged  Setting up the plotter");
         aida.tree().cd("/");
         if (fillHitPlots) {
@@ -273,5 +275,5 @@
     public void printDQMStrings() {
 
     }
-
+    
 }

Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
 =============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java	(original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java	Tue Mar  1 11:15:40 2016
@@ -17,6 +17,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.hps.conditions.beam.BeamEnergy.BeamEnergyCollection;
 import org.hps.recon.ecal.cluster.ClusterUtilities;
 import org.hps.recon.tracking.TrackType;
 import org.hps.recon.tracking.TrackUtils;
@@ -60,7 +61,7 @@
     double sumdelY = 0.0;
     double sumEoverP = 0.0;
     private final String plotDir = "FinalStateParticles/";
-    double beamEnergy = 1.05; //GeV
+   // double beamEnergy = 1.05; //GeV
     double maxFactor = 1.5;
     double feeMomentumCut = 0.75; //this number, multiplied by the beam energy, is the actual cut
 
@@ -98,15 +99,18 @@
     IHistogram1D nUnAssTracksHisto;
     
     
-    public void setBeamEnergy(double e){
-    	this.beamEnergy = e;
-    }
+   
     public void setFinalStateParticlesColName(String fsp) {
         this.finalStateParticlesColName = fsp;
     }
 
     @Override
     protected void detectorChanged(Detector detector) {
+    	BeamEnergyCollection beamEnergyCollection = 
+			this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();        
+		double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
+    	
+    	
         LOGGER.info("Setting up the plotter");
         aida.tree().cd("/");
           String trkType="SeedTrack/";

Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
 =============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java	(original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java	Tue Mar  1 11:15:40 2016
@@ -14,6 +14,8 @@
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.logging.Logger;
+
+import org.hps.conditions.beam.BeamEnergy.BeamEnergyCollection;
 import org.hps.recon.ecal.cluster.ClusterUtilities;
 import org.hps.recon.particle.ReconParticleDriver;
 import org.hps.recon.tracking.TrackType;
@@ -73,37 +75,8 @@
 
     private final static Logger LOGGER = Logger.getLogger(TridentMonitoring.class.getPackage().getName());
 
-    private double ebeam = 1.05;
-    
-    public void setBeamEnergy(double ebeam){
-    	this.ebeam = ebeam;
-    	
-    	  plotsMinMass = 0.03 * ebeam;
-    	    plotsMaxMass = 0.04 * ebeam;
-
-
-    	    //v0 plot ranges
-    	    v0PzMax = 1.25 * ebeam;//GeV 
-    	    v0PzMin = 0.1;// GeV
-    	    v0PyMax = 0.04 * ebeam;//GeV absolute value
-    	    v0PxMax = 0.04 * ebeam;//GeV absolute value
-    	    
-    	    //v0 cuts
-    	    v0PzMaxCut = 1.25 * ebeam;//GeV 
-    	    v0PzMinCut = 0.1;// GeV
-    	    v0PyCut = 0.04 * ebeam;//GeV absolute value
-    	    v0PxCut = 0.04 * ebeam;//GeV absolute value
-    	    
-    	//  track quality cuts
-    	    beamPCut = 0.85 * ebeam;
-    	    minPCut = 0.05;
-//    	    private double trkPyMax = 0.2;
-//    	    private double trkPxMax = 0.2;
-    	    radCut = 0.8 * ebeam;
-    	    
-
-    }
-    
+   
+
     private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
 //    private static final int nCuts = 9;
 //    private final String[] cutNames = {"Trk Quality",
@@ -246,45 +219,48 @@
     private final IHistogram1D[][] cutVertexZ = new IHistogram1D[Cut.nCuts][2];
     private final IHistogram2D[][] cutVertexZVsMass = new IHistogram2D[Cut.nCuts][2];
 
-    private  double plotsMinMass = 0.03 * ebeam;
-    private  double plotsMaxMass = 0.04 * ebeam;
+    private final double plotsMinMass = 0.03;
+    private final double plotsMaxMass = 0.04;
 
     //clean up event first
     private final int nTrkMax = 5;
     private final int nPosMax = 1;
 
     private final double maxChi2SeedTrack = 7.0;
-    private final double maxChi2GBLTrack = 15.0;
-    private final double maxVertChi2 = 7.0;
+    private double maxChi2GBLTrack = 15.0;
+    private double maxUnconVertChi2 = 7.0;
+    private double maxBsconVertChi2 = 1000.0; //disable by default
 
     //v0 plot ranges
-    private  double v0PzMax = 1.25 * ebeam;//GeV 
-    private  double v0PzMin = 0.1;// GeV
-    private  double v0PyMax = 0.04 * ebeam;//GeV absolute value
-    private  double v0PxMax = 0.04 * ebeam;//GeV absolute value
+    private final double v0PzMax = 1.25;//GeV 
+    private final double v0PzMin = 0.1;// GeV
+    private final double v0PyMax = 0.04;//GeV absolute value
+    private final double v0PxMax = 0.04;//GeV absolute value
     private final double v0VzMax = 50.0;// mm from target...someday make mass dependent
     private final double v0VyMax = 2.0;// mm from target...someday make mass dependent
     private final double v0VxMax = 2.0;// mm from target...someday make mass dependent
 
     //v0 cuts
-    private  double v0PzMaxCut = 1.25 * ebeam;//GeV 
-    private  double v0PzMinCut = 0.1;// GeV
-    private  double v0PyCut = 0.04 * ebeam;//GeV absolute value
-    private  double v0PxCut = 0.04 * ebeam;//GeV absolute value
-    private final double v0VzCut = 50.0;// mm from target...someday make mass dependent
-    private final double v0VyCut = 2.0;// mm from target...someday make mass dependent
-    private final double v0VxCut = 2.0;// mm from target...someday make mass dependent
-    
+    private final double v0PzMaxCut = 1.25;//GeV 
+    private final double v0PzMinCut = 0.1;// GeV
+    private final double v0PyCut = 0.04;//GeV absolute value
+    private final double v0PxCut = 0.04;//GeV absolute value
+    private final double v0UnconVzCut = 50.0;// mm from target...someday make mass dependent
+    private double v0UnconVyCut = 2.0;// mm from target...someday make mass dependent
+    private double v0UnconVxCut = 2.0;// mm from target...someday make mass dependent
+    private double v0BsconVyCut = 10.0; //disable by default
+    private double v0BsconVxCut = 10.0; //disable by default
+
 //  track quality cuts
-    private  double beamPCut = 0.85 * ebeam;
-    private  double minPCut = 0.05;
+    private final double beamPCut = 0.85;
+    private final double minPCut = 0.05;
 //    private double trkPyMax = 0.2;
 //    private double trkPxMax = 0.2;
-    private  double radCut = 0.8 * ebeam;
+    private final double radCut = 0.8;
     private final double trkTimeDiff = 5.0;
     private final double clusterTimeDiffCut = 2.5;
 
-    private final double l1IsoMin = 1.0;
+    private double l1IsoMin = 0.5;
 
     private double[] beamSize = {0.001, 0.130, 0.050}; //rough estimate from harp scans during engineering run production running
 
@@ -298,13 +274,56 @@
     private float nRecoV0 = 0;
     private final float[] nPassCut = new float[Cut.nCuts];
 
-   
-
+    public void setMaxChi2GBLTrack(double maxChi2GBLTrack) {
+        this.maxChi2GBLTrack = maxChi2GBLTrack;
+    }
+
+    public void setMaxUnconVertChi2(double maxUnconVertChi2) {
+        this.maxUnconVertChi2 = maxUnconVertChi2;
+    }
+
+    public void setMaxBsconVertChi2(double maxBsconVertChi2) {
+        this.maxBsconVertChi2 = maxBsconVertChi2;
+    }
+
+    public void setV0UnconVyCut(double v0UnconVyCut) {
+        this.v0UnconVyCut = v0UnconVyCut;
+    }
+
+    public void setV0UnconVxCut(double v0UnconVxCut) {
+        this.v0UnconVxCut = v0UnconVxCut;
+    }
+
+    public void setV0BsconVyCut(double v0BsconVyCut) {
+        this.v0BsconVyCut = v0BsconVyCut;
+    }
+
+    public void setV0BsconVxCut(double v0BsconVxCut) {
+        this.v0BsconVxCut = v0BsconVxCut;
+    }
+
+    public void setL1IsoMin(double l1IsoMin) {
+        this.l1IsoMin = l1IsoMin;
+    }
+
+    public void setBeamSizeX(double beamSizeX) {
+        this.beamSize[1] = beamSizeX;
+    }
+
+    public void setBeamSizeY(double beamSizeY) {
+        this.beamSize[2] = beamSizeY;
+    }
+
+    
+    double ebeam;
     @Override
     protected void detectorChanged(Detector detector) {
         LOGGER.info("TridendMonitoring::detectorChanged  Setting up the plotter");
         beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2);
 
+        BeamEnergyCollection beamEnergyCollection = 
+			this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();        
+		ebeam = beamEnergyCollection.get(0).getBeamEnergy();
         aida.tree().cd("/");
         String trkType = "SeedTrack/";
         if (isGBL) {
@@ -329,15 +348,15 @@
 
 //        triTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Track time difference", 100, -10, 10);
 //        triTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Track time vs. track time", 100, -10, 10, 100, -10, 10);
-        triTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
+        triTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Positron vs. electron momentum", 100, 0, v0PzMax * ebeam, 100, 0, v0PzMax * ebeam);
         triDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Positron - electron momentum", 100, -1., 1.0);
-        triSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Positron + electron momentum", 100, v0PzMin, v0PzMax);
+        triSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Positron + electron momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam);
         triPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
         triPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
 
-        triMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
-        triZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
-        triMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex mass", 100, 0, 0.11);
+        triMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex mass vs. vertex momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam, 100, 0, 0.1);
+        triZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. vertex momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam, 100, -v0VzMax, v0VzMax);
+        triMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex mass", 100, 0, 0.1 * ebeam);
         triZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
 //        triX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex X", 100, -v0VxMax, v0VxMax);
 //        triY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Y", 100, -v0VyMax, v0VyMax);
@@ -354,9 +373,9 @@
         triRadTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Track time difference", 100, -10, 10);
         triRadTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Track time vs. track time", 100, -10, 10, 100, -10, 10);
 
-        triRadTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
+        triRadTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Positron vs. electron momentum", 100, 0, v0PzMax * ebeam, 100, 0, v0PzMax * ebeam);
         triRadDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Positron - electron momentum", 100, -1., 1.0);
-        triRadSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Positron + electron momentum", 100, v0PzMin, v0PzMax);
+        triRadSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Positron + electron momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam);
         triRadPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
         triRadPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
 
@@ -369,23 +388,23 @@
 //        triRadZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z", 100, -v0VzMax, v0VzMax);
 //        triRadXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
 //        triRadZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
-        triRadPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Px", 100, -v0PxMax, v0PxMax);
-        triRadPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py", 100, -v0PyMax, v0PyMax);
-        triRadPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Pz", 100, v0PzMin, v0PzMax);
-        triRadPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
+        triRadPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Px", 100, -v0PxMax * ebeam, v0PxMax * ebeam);
+        triRadPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py", 100, -v0PyMax * ebeam, v0PyMax * ebeam);
+        triRadPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Pz", 100, v0PzMin * ebeam, v0PzMax * ebeam);
+        triRadPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py vs. Px", 100, -v0PxMax * ebeam, v0PxMax * ebeam, 100, -v0PyMax * ebeam, v0PyMax * ebeam);
         triRadU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Px over Ptot", 100, -0.1, 0.1);
         triRadV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py over Ptot", 100, -0.1, 0.1);
 
 //        vertTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Track time difference", 100, -10, 10);
 //        vertTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Track time vs. track time", 100, -10, 10, 100, -10, 10);
-        vertTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
+        vertTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Positron vs. electron momentum", 100, 0, v0PzMax * ebeam, 100, 0, v0PzMax * ebeam);
         vertDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Positron - electron momentum", 100, -1., 1.0);
-        vertSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Positron + electron momentum", 100, v0PzMin, v0PzMax);
+        vertSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Positron + electron momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam);
         vertPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
         vertPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
 
-        vertMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
-        vertZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
+        vertMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex mass vs. vertex momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam, 100, 0, 0.1);
+        vertZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. vertex momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam, 100, -v0VzMax, v0VzMax);
         vertMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex mass", 100, 0, 0.11);
         vertZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
 //        vertX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex X", 100, -v0VxMax, v0VxMax);
@@ -403,14 +422,14 @@
         vertRadTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Track time difference", 100, -10, 10);
         vertRadTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Track time vs. track time", 100, -10, 10, 100, -10, 10);
 
-        vertRadTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
+        vertRadTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Positron vs. electron momentum", 100, 0, v0PzMax * ebeam, 100, 0, v0PzMax * ebeam);
         vertRadDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Positron - electron momentum", 100, -1., 1.0);
-        vertRadSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Positron + electron momentum", 100, v0PzMin, v0PzMax);
+        vertRadSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Positron + electron momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam);
         vertRadPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
         vertRadPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
 
-        vertRadMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
-        vertRadZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
+        vertRadMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex mass vs. vertex momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam, 100, 0, 0.1);
+        vertRadZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z vs. vertex momentum", 100, v0PzMin * ebeam, v0PzMax * ebeam, 100, -v0VzMax, v0VzMax);
         vertRadMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex mass", 100, 0, 0.11);
         vertRadZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
         vertRadX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex X", 100, -v0VxMax, v0VxMax);
@@ -418,10 +437,10 @@
         vertRadZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z", 100, -v0VzMax, v0VzMax);
         vertRadXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
         vertRadZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
-        vertRadPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Px", 100, -v0PxMax, v0PxMax);
-        vertRadPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Py", 100, -v0PyMax, v0PyMax);
-        vertRadPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Pz", 100, v0PzMin, v0PzMax);
-        vertRadPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
+        vertRadPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Px", 100, -v0PxMax * ebeam, v0PxMax * ebeam);
+        vertRadPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Py", 100, -v0PyMax * ebeam, v0PyMax * ebeam);
+        vertRadPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Pz", 100, v0PzMin * ebeam, v0PzMax * ebeam);
+        vertRadPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Py vs. Px", 100, -v0PxMax * ebeam, v0PxMax * ebeam, 100, -v0PyMax * ebeam, v0PyMax * ebeam);
         vertRadU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Px over Ptot", 100, -0.1, 0.1);
         vertRadV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Py over Ptot", 100, -0.1, 0.1);
 
@@ -559,6 +578,14 @@
                 minL1Iso = Math.min(eleL1Iso, posL1Iso);
             }
 
+            BilliorVertexer vtxFitter = new BilliorVertexer(TrackUtils.getBField(event.getDetector()).y());
+            vtxFitter.setBeamSize(beamSize);
+            List<BilliorTrack> billiorTracks = new ArrayList<BilliorTrack>();
+            billiorTracks.add(new BilliorTrack(electron.getTracks().get(0)));
+            billiorTracks.add(new BilliorTrack(positron.getTracks().get(0)));
+            vtxFitter.doBeamSpotConstraint(true);
+            BilliorVertex bsconVertex = vtxFitter.fitVertex(billiorTracks);
+
             //start applying cuts
             EnumSet<Cut> bits = EnumSet.noneOf(Cut.class);
 
@@ -567,13 +594,13 @@
                 bits.add(Cut.TRK_QUALITY);
             }
 
-            boolean v0QualityCut = uncVert.getChi2() < maxVertChi2;
+            boolean v0QualityCut = uncVert.getChi2() < maxUnconVertChi2 && bsconVertex.getChi2() < maxBsconVertChi2;
             if (v0QualityCut) {
                 bits.add(Cut.VTX_QUALITY);
             }
 
-            boolean vertexMomentumCut = v0MomRot.z() < v0PzMaxCut && v0MomRot.z() > v0PzMinCut && Math.abs(v0MomRot.x()) < v0PxCut && Math.abs(v0MomRot.y()) < v0PyCut;
-            boolean vertexPositionCut = Math.abs(v0Vtx.x()) < v0VxCut && Math.abs(v0Vtx.y()) < v0VyCut && Math.abs(v0Vtx.z()) < v0VzCut;
+            boolean vertexMomentumCut = v0MomRot.z() < v0PzMaxCut * ebeam && v0MomRot.z() > v0PzMinCut * ebeam && Math.abs(v0MomRot.x()) < v0PxCut * ebeam && Math.abs(v0MomRot.y()) < v0PyCut * ebeam;
+            boolean vertexPositionCut = Math.abs(v0Vtx.x()) < v0UnconVxCut && Math.abs(v0Vtx.y()) < v0UnconVyCut && Math.abs(v0Vtx.z()) < v0UnconVzCut && Math.abs(bsconVertex.getPosition().x()) < v0BsconVxCut && Math.abs(bsconVertex.getPosition().y()) < v0BsconVyCut;
             if (vertexMomentumCut && vertexPositionCut) {
                 bits.add(Cut.VERTEX_CUTS);
             }
@@ -584,8 +611,8 @@
             }
 
             boolean topBottomCut = electron.getMomentum().y() * positron.getMomentum().y() < 0;
-            boolean pMinCut = electron.getMomentum().magnitude() > minPCut && positron.getMomentum().magnitude() > minPCut;
-            boolean pMaxCut = electron.getMomentum().magnitude() < beamPCut && positron.getMomentum().magnitude() < beamPCut;
+            boolean pMinCut = electron.getMomentum().magnitude() > minPCut * ebeam && positron.getMomentum().magnitude() > minPCut * ebeam;
+            boolean pMaxCut = electron.getMomentum().magnitude() < beamPCut * ebeam && positron.getMomentum().magnitude() < beamPCut * ebeam;
             if (topBottomCut && pMaxCut && pMinCut) {
                 bits.add(Cut.TRACK_CUTS);
             }
@@ -628,7 +655,7 @@
                 EnumSet<Cut> allButThisCut = EnumSet.allOf(Cut.class);
                 allButThisCut.remove(cut);
                 if (bits.containsAll(allButThisCut)) {
-                    if (uncV0.getMass() > plotsMinMass && uncV0.getMass() < plotsMaxMass) {
+                    if (uncV0.getMass() > plotsMinMass * ebeam && uncV0.getMass() < plotsMaxMass * ebeam) {
                         switch (cut) {
                             case ISOLATION:
                                 l1Iso.fill(minL1Iso);
@@ -657,7 +684,7 @@
                         }
                     }
                     if (!bits.contains(cut)) {
-                        if (uncV0.getMass() > plotsMinMass && uncV0.getMass() < plotsMaxMass) {
+                        if (uncV0.getMass() > plotsMinMass * ebeam && uncV0.getMass() < plotsMaxMass * ebeam) {
                             cutVertexZ[cut.ordinal()][VERTEX].fill(v0Vtx.z());
                         }
                         cutVertexMass[cut.ordinal()][VERTEX].fill(uncV0.getMass());
@@ -669,7 +696,7 @@
                 allTriCutsButThisCut.remove(cut);
                 if (bits.containsAll(allTriCutsButThisCut)) {
                     if (!bits.contains(cut)) {
-                        if (uncV0.getMass() > plotsMinMass && uncV0.getMass() < plotsMaxMass) {
+                        if (uncV0.getMass() > plotsMinMass * ebeam && uncV0.getMass() < plotsMaxMass * ebeam) {
                             cutVertexZ[cut.ordinal()][TRIDENT].fill(v0Vtx.z());
                         }
                         cutVertexMass[cut.ordinal()][TRIDENT].fill(uncV0.getMass());
@@ -730,7 +757,7 @@
 //            triV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
 //            triXY.fill(v0Vtx.x(), v0Vtx.y());
 //            triZY.fill(v0Vtx.y(), v0Vtx.z());
-            if (bestCandidate.getMomentum().magnitude() > radCut) {
+            if (bestCandidate.getMomentum().magnitude() > radCut * ebeam) {
                 triRadTrackTime2D.fill(tEle, tPos);
                 triRadTrackTimeDiff.fill(tEle - tPos);
 //                triRadZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
@@ -799,7 +826,7 @@
 //            vertV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
             vertXY.fill(v0Vtx.x(), v0Vtx.y());
             vertZY.fill(v0Vtx.y(), v0Vtx.z());
-            if (bestCandidate.getMomentum().magnitude() > radCut) {
+            if (bestCandidate.getMomentum().magnitude() > radCut * ebeam) {
 
                 BilliorVertexer vtxFitter = new BilliorVertexer(TrackUtils.getBField(event.getDetector()).y());
                 vtxFitter.setBeamSize(beamSize);
@@ -808,6 +835,8 @@
                 billiorTracks.add(new BilliorTrack(positron.getTracks().get(0)));
                 vtxFitter.doBeamSpotConstraint(true);
                 BilliorVertex bsconVertex = vtxFitter.fitVertex(billiorTracks);
+                vtxFitter.doTargetConstraint(true);
+                BilliorVertex tarconVertex = vtxFitter.fitVertex(billiorTracks);
                 vertRadUnconBsconChi2.fill(unconVertex.getChi2(), bsconVertex.getChi2());
 
                 vertRadTrackTime2D.fill(tEle, tPos);

Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
 =============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java	(original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java	Tue Mar  1 11:15:40 2016
@@ -18,7 +18,7 @@
 import java.util.Map.Entry;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-
+import org.hps.conditions.beam.BeamEnergy.BeamEnergyCollection;
 import org.hps.recon.tracking.TrackType;
 import org.hps.recon.tracking.TrackUtils;
 import org.hps.recon.vertexing.BilliorTrack;
@@ -41,590 +41,624 @@
  */
 public class V0Monitoring extends DataQualityMonitor {
 
-    private static Logger LOGGER = Logger.getLogger(V0Monitoring.class.getPackage().getName());
-    
-    String finalStateParticlesColName = "FinalStateParticles";
-    String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
-    String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
-    String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates";
-    String[] fpQuantNames = {"nV0_per_Event", "avg_BSCon_mass", "avg_BSCon_Vx", "avg_BSCon_Vy", "avg_BSCon_Vz", "sig_BSCon_Vx", "sig_BSCon_Vy", "sig_BSCon_Vz", "avg_BSCon_Chi2"};
-    //some counters
-    int nRecoEvents = 0;
-    int nTotV0 = 0;
-    int nTot2Ele = 0;
-    //some summers
-    double sumMass = 0.0;
-    double sumVx = 0.0;
-    double sumVy = 0.0;
-    double sumVz = 0.0;
-    double sumChi2 = 0.0;
-
-    /*  V0 Quantities   */
-    /*  Mass, vertex, chi^2 of fit */
-    /*  unconstrained */
-    IHistogram1D unconMass;
-    IHistogram1D unconVx;
-    IHistogram1D unconVy;
-    IHistogram1D unconVz;
-    IHistogram1D unconChi2;
-    IHistogram2D unconVzVsChi2;
-    IHistogram2D unconChi2VsTrkChi2;
-    /* beamspot constrained */
-
-    IHistogram1D nV0;
-
-    IHistogram1D v0Time;
-    IHistogram1D v0Dt;
-    IHistogram2D trigTimeV0Time;
-    IHistogram1D trigTime;
-
-    IHistogram1D bsconMass;
-    IHistogram1D bsconVx;
-    IHistogram1D bsconVy;
-    IHistogram1D bsconVz;
-    IHistogram1D bsconChi2;
-    IHistogram2D bsconVzVsChi2;
-    IHistogram2D bsconChi2VsTrkChi2;
-    /* target constrained */
-    IHistogram1D tarconMass;
-    IHistogram1D tarconVx;
-    IHistogram1D tarconVy;
-    IHistogram1D tarconVz;
-    IHistogram1D tarconChi2;
-    IHistogram2D tarconVzVsChi2;
-    IHistogram2D tarconChi2VsTrkChi2;
-
-    IHistogram2D pEleVspPos;
-    IHistogram2D pEleVspPosWithCut;
-    IHistogram2D pyEleVspyPos;
-    IHistogram2D pxEleVspxPos;
-
-    IHistogram2D VtxZVsMass;
-    IHistogram2D VtxYVsVtxZ;
-    IHistogram2D VtxXVsVtxZ;
-    IHistogram2D VtxXVsVtxY;
-    IHistogram2D VtxXVsVtxPx;
-    IHistogram2D VtxYVsVtxPy;
-    IHistogram2D VtxZVsVtxPx;
-    IHistogram2D VtxZVsVtxPy;
-    IHistogram2D VtxZVsVtxPz;
-
-    IHistogram2D VtxZVsL1Iso;
-    IHistogram2D VtxZVsTrkChi2;
-
-    IHistogram2D pEleVspEle;
-    IHistogram2D phiEleVsphiEle;
-    IHistogram2D pyEleVspyEle;
-    IHistogram2D pxEleVspxEle;
-    IHistogram2D pEleVspEleNoBeam;
-    IHistogram2D pyEleVspyEleNoBeam;
-    IHistogram2D pxEleVspxEleNoBeam;
-    IHistogram2D pEleVspEleMoller;
-    IHistogram2D pEleVsthetaMoller;
-    IHistogram2D thetaEleVsthetaMoller;
-    IHistogram2D pEleVspEleBeamBeam;
-    IHistogram2D pEleVsthetaBeamBeam;
-    IHistogram2D thetaEleVsthetaBeamBeam;
-
-    IHistogram1D mollerMass;
-    IHistogram1D mollerMassVtxCut;
-    IHistogram1D mollerVx;
-    IHistogram1D mollerVy;
-    IHistogram1D mollerVz;
-    IHistogram1D mollerVzVtxCut;
-    IHistogram2D mollerXVsVtxZ;
-    IHistogram2D mollerYVsVtxZ;
-    IHistogram2D mollerXVsVtxY;
-    
-    IHistogram1D mollerUx;
-    IHistogram1D mollerUy;
-    
-    
-
-    IHistogram1D sumChargeHisto;
-    IHistogram1D numChargeHisto;
-
-    private final String plotDir = "V0Monitoring/";
-
-    double beamEnergy = 1.05; //GeV
-    private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
-
-    double maxFactor = 1.25;
-    
-    
-    double thetaMax = 0.06;
-    double thetaMin = 0.015;
-    
-    public void setBeamEnergy(double e){
-    	this.beamEnergy = e;
-    	feeMomentumCut = 0.75*beamEnergy; //GeV
-
-        v0ESumMinCut = 0.8 * beamEnergy;
-        v0ESumMaxCut = 1.25 * beamEnergy;
-        /*double v0MaxPCut = 1.1;//GeV
-        double molPSumMin = 0.85;
-        double molPSumMax = 1.3;
-        double beambeamCut = 0.85;
-        */
-        v0MaxPCut = 1.05*beamEnergy;//GeV
-        molPSumMin = 0.80*beamEnergy;
-        molPSumMax = 1.25*beamEnergy;
-        beambeamCut = 0.80*beamEnergy;
-    	
-    }
-    
-    double feeMomentumCut, v0ESumMinCut, v0MaxPCut, v0ESumMaxCut,
-    	molPSumMin, molPSumMax, beambeamCut;
-    
-    
-
-    @Override
-    protected void detectorChanged(Detector detector) {
-    	setBeamEnergy(beamEnergy);
-    	
-    	
-    	
-        beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2);
-
-        LOGGER.info("Setting up the plotter");
-        aida.tree().cd("/");
-        String xtra = "Extras";
-        String trkType = "SeedTrack/";
-        if (isGBL)
-            trkType = "GBLTrack/";
-        
-        double maxMass = .2*beamEnergy;
-        double maxMassMoller = .1*Math.sqrt(beamEnergy);
-        /*  V0 Quantities   */
-        /*  Mass, vertex, chi^2 of fit */
-        /*  unconstrained */
-        unconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Invariant Mass (GeV)", 100, 0, maxMass);
-        unconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
-        unconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
-        unconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
-        unconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Chi2", 25, 0, 25);
-        unconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
-        unconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
-        /* beamspot constrained */
-        bsconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Mass (GeV)", 100, 0, maxMass);
-        bsconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
-        bsconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
-        bsconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
-        bsconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2", 25, 0, 25);
-        bsconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
-        bsconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
-        /* target constrained */
-        tarconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Mass (GeV)", 100, 0, maxMass);
-        tarconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vx (mm)", 50, -1, 1);
-        tarconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vy (mm)", 50, -1, 1);
-        tarconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vz (mm)", 50, -10, 10);
-        tarconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Chi2", 25, 0, 25);
-        tarconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
-        tarconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
-
-        nV0 = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of V0 per event", 10, 0, 10);
-        v0Time = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 mean time", 100, -25, 25);
-        v0Dt = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 time difference", 100, -25, 25);
-        trigTimeV0Time = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase vs. V0 mean time", 100, -25, 25, 6, 0, 24);
-        trigTime = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase", 6, 0, 24);
-
-        pEleVspPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
-        pEleVspPosWithCut = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p): Radiative", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
-        pyEleVspyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Py(e) vs Py(p)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
-        pxEleVspxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Px(e) vs Px(p)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
-        VtxZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Mass", 50, 0, maxMass, 50, -50, 80);
-        VtxXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vz", 100, -10, 10, 100, -50, 80);
-        VtxYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Vz", 100, -5, 5, 100, -50, 80);
-        VtxXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vy", 100, -10, 10, 100, -5, 5);
-        VtxXVsVtxPx = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Px", 100, -0.1, 0.1, 100, -10, 10);
-        VtxYVsVtxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Py", 100, -0.1, 0.1, 100, -5, 5);
-        VtxZVsVtxPx = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Px", 100, -0.1, 0.1, 100, -50, 80);
-        VtxZVsVtxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Py", 100, -0.1, 0.1, 100, -50, 80);
-        VtxZVsVtxPz = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Pz", 100, 0.0, beamEnergy * maxFactor, 100, -50, 80);
-        VtxZVsL1Iso = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs L1 Isolation", 100, 0.0, 5.0, 50, -50, 80);
-        VtxZVsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Track Chi2", 50, 0, 50, 50, -50, 80);
-        pEleVspEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
-        phiEleVsphiEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/phi(e) vs phi(e)", 50, -Math.PI, Math.PI, 50, -Math.PI, Math.PI);
-        pyEleVspyEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
-        pxEleVspxEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e)", 50, -0.02*beamEnergy, 0.06*beamEnergy, 50, -0.02*beamEnergy, 0.06*beamEnergy);
-        pEleVspEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) NoBeam", 50, 0, beambeamCut, 50, 0, beambeamCut);
-        pEleVspEleMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) Moller", 50, 0, beambeamCut, 50, 0, beambeamCut);
-        pEleVspEleBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, beambeamCut, beamEnergy * maxFactor);
-        pyEleVspyEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e) NoBeam", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
-        pxEleVspxEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e) NoBeam", 50, -0.02*beamEnergy, 0.06*beamEnergy, 50, -0.02*beamEnergy, 0.06*beamEnergy);
-        sumChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Total Charge of  Event", 5, -2, 3);
-        numChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of Charged Particles", 6, 0, 6);
-
-        pEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs Theta Moller", 50, 0, beambeamCut, 50, thetaMin, thetaMax);
-        thetaEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Theta vs Theta Moller", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
-        pEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs Theta BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, thetaMin, thetaMax);
-        thetaEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Theta vs Theta BeamBeam", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
-
-        mollerMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV)", 100, 0, maxMassMoller);
-        mollerMassVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV): VtxCut", 100, 0, maxMassMoller);
-        mollerVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx (mm)", 50, -10, 10);
-        mollerVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy (mm)", 50, -2, 2);
-        mollerVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm)", 50, -50, 50);
-        mollerVzVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm): VtxCut", 50, -50, 50);
-        mollerXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx vs Vz", 100, -5, 5, 100, -50, 50);
-        mollerYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy vs Vz", 100, -2, 2, 100, -50, 50);
-        mollerXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx vs Vy", 100, -5, 5, 100, -2, 2);
-    
-        mollerUx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Ux", 100, .015, .045);
-        mollerUy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Uy", 100, -.01, .01);
-    
-        
-        
-    }
-
-    @Override
-    public void process(EventHeader event) {
-        /*  make sure everything is there */
-        if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName))
-            return;
-        if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName))
-            return;
-        if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName))
-            return;
-        if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName))
-            return;
-
-        //check to see if this event is from the correct trigger (or "all");
-        if (!matchTrigger(event))
-            return;
-
-        nRecoEvents++;
-
-        RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
-        RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
-
-        List<ReconstructedParticle> unonstrainedV0List = event.get(ReconstructedParticle.class, unconstrainedV0CandidatesColName);
-        for (ReconstructedParticle uncV0 : unonstrainedV0List) {
-            if (isGBL != TrackType.isGBL(uncV0.getType()))
-                continue;
-            Vertex uncVert = uncV0.getStartVertex();
-            Hep3Vector pVtxRot = VecOp.mult(beamAxisRotation, uncV0.getMomentum());
-            Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, uncVert.getPosition());
-            double theta = Math.acos(pVtxRot.z() / pVtxRot.magnitude());
-            double phi = Math.atan2(pVtxRot.y(), pVtxRot.x());
-            unconVx.fill(vtxPosRot.x());
-            unconVy.fill(vtxPosRot.y());
-            unconVz.fill(vtxPosRot.z());
-            unconMass.fill(uncV0.getMass());
-            unconChi2.fill(uncVert.getChi2());
-            unconVzVsChi2.fill(uncVert.getChi2(), vtxPosRot.z());
-            unconChi2VsTrkChi2.fill(Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1).getTracks().get(0).getChi2()), uncVert.getChi2());
-
-            VtxZVsMass.fill(uncV0.getMass(), vtxPosRot.z());
-            VtxXVsVtxZ.fill(vtxPosRot.x(), vtxPosRot.z());
-            VtxYVsVtxZ.fill(vtxPosRot.y(), vtxPosRot.z());
-            VtxXVsVtxY.fill(vtxPosRot.x(), vtxPosRot.y());
-            VtxXVsVtxPx.fill(pVtxRot.x(), vtxPosRot.x());
-            VtxYVsVtxPy.fill(pVtxRot.y(), vtxPosRot.y());
-            VtxZVsVtxPx.fill(pVtxRot.x(), vtxPosRot.z());
-            VtxZVsVtxPy.fill(pVtxRot.y(), vtxPosRot.z());
-            VtxZVsVtxPz.fill(pVtxRot.z(), vtxPosRot.z());
-
-            //this always has 2 tracks. 
-            List<ReconstructedParticle> trks = uncV0.getParticles();
-//            Track ele = trks.get(0).getTracks().get(0);
-//            Track pos = trks.get(1).getTracks().get(0);
-//            //if track #0 has charge>0 it's the electron!  This seems mixed up, but remember the track 
-//            //charge is assigned assuming a positive B-field, while ours is negative
-//            if (trks.get(0).getCharge() > 0) {
-//                pos = trks.get(0).getTracks().get(0);
-//                ele = trks.get(1).getTracks().get(0);
-//            }
-//            aida.histogram2D(plotDir + trkType + triggerType + "/" + "P(e) vs P(p)").fill(getMomentum(ele), getMomentum(pos));
-//            aida.histogram2D(plotDir + trkType + triggerType + "/" + "Px(e) vs Px(p)").fill(ele.getTrackStates().get(0).getMomentum()[1], pos.getTrackStates().get(0).getMomentum()[1]);
-//            aida.histogram2D(plotDir + trkType + triggerType + "/" + "Py(e) vs Py(p)").fill(ele.getTrackStates().get(0).getMomentum()[2], pos.getTrackStates().get(0).getMomentum()[2]);
-            ReconstructedParticle ele = trks.get(0);
-            ReconstructedParticle pos = trks.get(1);
-            //ReconParticles have the charge correct. 
-            if (trks.get(0).getCharge() > 0) {
-                pos = trks.get(0);
-                ele = trks.get(1);
-            }
-            if (ele.getCharge() < 0 && pos.getCharge() > 0) {
-                VtxZVsTrkChi2.fill(Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1).getTracks().get(0).getChi2()), uncVert.getPosition().z());
-
-                Double[] eleIso = TrackUtils.getIsolations(ele.getTracks().get(0), hitToStrips, hitToRotated);
-                Double[] posIso = TrackUtils.getIsolations(pos.getTracks().get(0), hitToStrips, hitToRotated);
-                if (eleIso[0] != null && posIso[0] != null) {
-                    double eleL1Iso = Math.min(Math.abs(eleIso[0]), Math.abs(eleIso[1]));
-                    double posL1Iso = Math.min(Math.abs(posIso[0]), Math.abs(posIso[1]));
-                    double minL1Iso = Math.min(eleL1Iso, posL1Iso);
-                    VtxZVsL1Iso.fill(minL1Iso, uncVert.getPosition().z());
-                }
-
-                double pe = ele.getMomentum().magnitude();
-                double pp = pos.getMomentum().magnitude();
-                Hep3Vector pEleRot = VecOp.mult(beamAxisRotation, ele.getMomentum());
-                Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, pos.getMomentum());
-
-                pEleVspPos.fill(pe, pp);
-                pxEleVspxPos.fill(pEleRot.x(), pPosRot.x());
-                pyEleVspyPos.fill(pEleRot.y(), pPosRot.y());
-                if (pe < v0MaxPCut && pp < v0MaxPCut && (pe + pp) > v0ESumMinCut && (pe + pp) < v0ESumMaxCut)//enrich radiative-like events
-                
-                    pEleVspPosWithCut.fill(pe, pp);
-            }
-
-            double eleT = TrackUtils.getTrackTime(ele.getTracks().get(0), hitToStrips, hitToRotated);
-            double posT = TrackUtils.getTrackTime(pos.getTracks().get(0), hitToStrips, hitToRotated);
-            double meanT = (eleT + posT) / 2.0;
-            v0Time.fill(meanT);
-            v0Dt.fill(eleT - posT);
-            trigTimeV0Time.fill(meanT, event.getTimeStamp() % 24);
-            trigTime.fill(event.getTimeStamp() % 24);
-        }
-
-        List<ReconstructedParticle> beamConstrainedV0List = event.get(ReconstructedParticle.class, beamConV0CandidatesColName);
-        nV0.fill(beamConstrainedV0List.size());
-        for (ReconstructedParticle bsV0 : beamConstrainedV0List) {
-
-            if (isGBL != TrackType.isGBL(bsV0.getType()))
-                continue;
-            nTotV0++;
-            Vertex bsVert = bsV0.getStartVertex();
-            Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, bsVert.getPosition());
-            bsconVx.fill(vtxPosRot.x());
-            bsconVy.fill(vtxPosRot.y());
-            bsconVz.fill(vtxPosRot.z());
-            bsconMass.fill(bsV0.getMass());
-            bsconChi2.fill(bsVert.getChi2());
-            bsconVzVsChi2.fill(bsVert.getChi2(), vtxPosRot.z());
-            bsconChi2VsTrkChi2.fill(Math.max(bsV0.getParticles().get(0).getTracks().get(0).getChi2(), bsV0.getParticles().get(1).getTracks().get(0).getChi2()), bsVert.getChi2());
-            sumMass += bsV0.getMass();
-            sumVx += vtxPosRot.x();
-            sumVy += vtxPosRot.y();
-            sumVz += vtxPosRot.z();
-            sumChi2 += bsVert.getChi2();
-        }
-
-        List<ReconstructedParticle> targetConstrainedV0List = event.get(ReconstructedParticle.class, targetV0ConCandidatesColName);
-        for (ReconstructedParticle tarV0 : targetConstrainedV0List) {
-
-            if (isGBL != TrackType.isGBL(tarV0.getType()))
-                continue;
-
-            Vertex tarVert = tarV0.getStartVertex();
-            Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, tarVert.getPosition());
-            tarconVx.fill(vtxPosRot.x());
-            tarconVy.fill(vtxPosRot.y());
-            tarconVz.fill(vtxPosRot.z());
-            tarconMass.fill(tarV0.getMass());
-            tarconChi2.fill(tarVert.getChi2());
-            tarconVzVsChi2.fill(tarVert.getChi2(), vtxPosRot.z());
-            tarconChi2VsTrkChi2.fill(Math.max(tarV0.getParticles().get(0).getTracks().get(0).getChi2(), tarV0.getParticles().get(1).getTracks().get(0).getChi2()), tarVert.getChi2());
-        }
-        List<ReconstructedParticle> finalStateParticles = event.get(ReconstructedParticle.class, finalStateParticlesColName);
-        if (debug)
-            LOGGER.info("This events has " + finalStateParticles.size() + " final state particles");
-
-        ReconstructedParticle ele1 = null;
-        ReconstructedParticle ele2 = null;
-        int sumCharge = 0;
-        int numChargedParticles = 0;
-        for (ReconstructedParticle fsPart : finalStateParticles) {
-            if (isGBL != TrackType.isGBL(fsPart.getType()))
-                continue;
-            if (debug)
-                LOGGER.info("PDGID = " + fsPart.getParticleIDUsed() + "; charge = " + fsPart.getCharge() + "; pz = " + fsPart.getMomentum().x());
-            double charge = fsPart.getCharge();
-            sumCharge += charge;
-            if (charge != 0) {
-                numChargedParticles++;
-                if (charge < 1)
-                    if (ele1 == null)
-                        ele1 = fsPart;
-                    else if (!hasSharedStrips(ele1, fsPart, hitToStrips, hitToRotated))
-                        ele2 = fsPart;
-            }
-        }
-        sumChargeHisto.fill(sumCharge);
-        numChargeHisto.fill(numChargedParticles);
-
-        if (ele1 != null && ele2 != null) {
-            Hep3Vector p1 = VecOp.mult(beamAxisRotation, ele1.getMomentum());
-            Hep3Vector p2 = VecOp.mult(beamAxisRotation, ele2.getMomentum());
-//            Hep3Vector beamAxis = new BasicHep3Vector(Math.sin(0.0305), 0, Math.cos(0.0305));
-//            LOGGER.info(p1);
-//            LOGGER.info(VecOp.mult(rot, p1));
-
-            double theta1 = Math.acos(p1.z() / p1.magnitude());
-            double theta2 = Math.acos(p2.z() / p2.magnitude());
-            double phi1 = Math.atan2(p1.y(), p1.x());
-            double phi2 = Math.atan2(p2.y(), p2.x());
-            phiEleVsphiEle.fill(phi1, phi2);
-            pEleVspEle.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
-            pyEleVspyEle.fill(ele1.getMomentum().y(), ele2.getMomentum().y());
-            pxEleVspxEle.fill(ele1.getMomentum().x(), ele2.getMomentum().x());
-            //remove beam electrons
-            if (ele1.getMomentum().magnitude() < beambeamCut && ele2.getMomentum().magnitude() < beambeamCut) {
-                pEleVspEleNoBeam.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
-                pyEleVspyEleNoBeam.fill(ele1.getMomentum().y(), ele2.getMomentum().y());
-                pxEleVspxEleNoBeam.fill(ele1.getMomentum().x(), ele2.getMomentum().x());
-            }
-            //look at beam-beam events
-            if (ele1.getMomentum().magnitude() > beambeamCut && ele2.getMomentum().magnitude() > beambeamCut) {
-                pEleVspEleBeamBeam.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
-                pEleVsthetaBeamBeam.fill(p1.magnitude(), theta1);
-                pEleVsthetaBeamBeam.fill(p2.magnitude(), theta2);
-                thetaEleVsthetaBeamBeam.fill(theta1, theta2);
-            }
-
-            //look at "Moller" events (if that's what they really are
-            if (ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() > molPSumMin
-                    && ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() < molPSumMax
-                    && (p1.magnitude() < beambeamCut && p2.magnitude() < beambeamCut)) {
-
-                Track ele1trk = ele1.getTracks().get(0);
-                Track ele2trk = ele2.getTracks().get(0);
-                SeedTrack stEle1 = TrackUtils.makeSeedTrackFromBaseTrack(ele1trk);
-                SeedTrack stEle2 = TrackUtils.makeSeedTrackFromBaseTrack(ele2trk);
-                BilliorTrack btEle1 = new BilliorTrack(stEle1.getSeedCandidate().getHelix());
-                BilliorTrack btEle2 = new BilliorTrack(stEle2.getSeedCandidate().getHelix());
-                BilliorVertex bv = fitVertex(btEle1, btEle2);
-//                LOGGER.info("ee vertex: "+bv.toString());
-                mollerMass.fill(bv.getParameters().get("invMass"));
-                mollerVx.fill(bv.getPosition().x());
-                mollerVy.fill(bv.getPosition().y());
-                mollerVz.fill(bv.getPosition().z());
-                mollerXVsVtxZ.fill(bv.getPosition().x(), bv.getPosition().z());
-                mollerYVsVtxZ.fill(bv.getPosition().y(), bv.getPosition().z());
-                mollerXVsVtxY.fill(bv.getPosition().x(), bv.getPosition().y());
-                
-                double ux = (ele1.getMomentum().x()+ele2.getMomentum().x())/(ele1.getMomentum().z()+ele2.getMomentum().z());
-                double uy = (ele1.getMomentum().y()+ele2.getMomentum().y())/(ele1.getMomentum().z()+ele2.getMomentum().z());
-                mollerUx.fill(ux);
-                mollerUy.fill(uy);
-                
-                if (Math.abs(bv.getPosition().x()) < 2
-                        && Math.abs(bv.getPosition().y()) < 0.5) {
-                    mollerMassVtxCut.fill(bv.getParameters().get("invMass"));
-                    mollerVzVtxCut.fill(bv.getPosition().z());
-                }
-                pEleVspEleMoller.fill(p1.magnitude(), p2.magnitude());
-                pEleVsthetaMoller.fill(p1.magnitude(), theta1);
-                pEleVsthetaMoller.fill(p2.magnitude(), theta2);
-                thetaEleVsthetaMoller.fill(theta1, theta2);
-            }
-        }
-    }
-
-    @Override
-    public void printDQMData() {
-        LOGGER.info("V0Monitoring::printDQMData");
-        for (Entry<String, Double> entry : monitoredQuantityMap.entrySet())
-            LOGGER.info(entry.getKey() + " = " + entry.getValue());
-        LOGGER.info("*******************************");
-    }
-
-    /**
-     * Calculate the averages here and fill the map
-     */
-    @Override
-    public void calculateEndOfRunQuantities() {
-
-        IAnalysisFactory analysisFactory = IAnalysisFactory.create();
-        IFitFactory fitFactory = analysisFactory.createFitFactory();
-        IFitter fitter = fitFactory.createFitter("chi2");
-        double[] init = {50.0, 0.0, 0.2, 1.0, 0.0};
-        IFitResult resVx = fitVertexPosition(bsconVx, fitter, init, "range=\"(-0.5,0.5)\"");
-        double[] init2 = {50.0, 0.0, 0.04, 1.0, 0.0};
-        IFitResult resVy = fitVertexPosition(bsconVy, fitter, init2, "range=\"(-0.2,0.2)\"");
-        double[] init3 = {50.0, 0.0, 3.0, 1.0, 0.0};
-        IFitResult resVz = fitVertexPosition(bsconVz, fitter, init3, "range=\"(-6,6)\"");
-
-        if (resVx != null && resVy != null & resVz != null) {
-            double[] parsVx = resVx.fittedParameters();
-            double[] parsVy = resVy.fittedParameters();
-            double[] parsVz = resVz.fittedParameters();
-
-            for (int i = 0; i < 5; i++)
-                LOGGER.info("Vertex Fit Parameters:  " + resVx.fittedParameterNames()[i] + " = " + parsVx[i] + "; " + parsVy[i] + "; " + parsVz[i]);
-
-            IPlotter plotter = analysisFactory.createPlotterFactory().create("Vertex Position");
-            plotter.createRegions(1, 3);
-            IPlotterStyle pstyle = plotter.style();
-            pstyle.legendBoxStyle().setVisible(false);
-            pstyle.dataStyle().fillStyle().setColor("green");
-            pstyle.dataStyle().lineStyle().setColor("black");
-            plotter.region(0).plot(bsconVx);
-            plotter.region(0).plot(resVx.fittedFunction());
-            plotter.region(1).plot(bsconVy);
-            plotter.region(1).plot(resVy.fittedFunction());
-            plotter.region(2).plot(bsconVz);
-            plotter.region(2).plot(resVz.fittedFunction());
-            if (outputPlots)
-                try {
-                    plotter.writeToFile(outputPlotDir + "vertex.png");
-                } catch (IOException ex) {
-                    Logger.getLogger(V0Monitoring.class.getName()).log(Level.SEVERE, null, ex);
-                }
-
-//        monitoredQuantityMap.put(fpQuantNames[2], sumVx / nTotV0);
-//        monitoredQuantityMap.put(fpQuantNames[3], sumVy / nTotV0);
-//        monitoredQuantityMap.put(fpQuantNames[4], sumVz / nTotV0);
-            monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[2], parsVx[1]);
-            monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[3], parsVy[1]);
-            monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[4], parsVz[1]);
-            monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[5], parsVx[2]);
-            monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[6], parsVy[2]);
-            monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[7], parsVz[2]);
-        }
-        monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[0], (double) nTotV0 / nRecoEvents);
-        monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[1], sumMass / nTotV0);
-        monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[8], sumChi2 / nTotV0);
-
-    }
-
-    @Override
-    public void printDQMStrings() {
-        for (int i = 0; i < 9; i++)//TODO:  do this in a smarter way...loop over the map
-            LOGGER.info("ALTER TABLE dqm ADD " + fpQuantNames[i] + " double;");
-    }
-
-    IFitResult fitVertexPosition(IHistogram1D h1d, IFitter fitter, double[] init, String range
-    ) {
-        IFitResult ifr = null;
-        try {
-            ifr = fitter.fit(h1d, "g+p1", init, range);
-        } catch (RuntimeException ex) {
-            LOGGER.info(this.getClass().getSimpleName() + ":  caught exception in fitGaussian");
-        }
-        return ifr;
-    }
-
-    private BilliorVertex fitVertex(BilliorTrack electron, BilliorTrack positron) {
-        // Create a vertex fitter from the magnetic field.
-        double bField = 0.24;
-        double[] beamSize = {0.001, 0.2, 0.02};
-        BilliorVertexer vtxFitter = new BilliorVertexer(bField);
-        // TODO: The beam size should come from the conditions database.
-        vtxFitter.setBeamSize(beamSize);
-
-        // Perform the vertexing based on the specified constraint.
-        vtxFitter.doBeamSpotConstraint(false);
-
-        // Add the electron and positron tracks to a track list for
-        // the vertex fitter.
-        List<BilliorTrack> billiorTracks = new ArrayList<BilliorTrack>();
-
-        billiorTracks.add(electron);
-
-        billiorTracks.add(positron);
-
-        // Find and return a vertex based on the tracks.
-        return vtxFitter.fitVertex(billiorTracks);
-    }
-
-    private static boolean hasSharedStrips(ReconstructedParticle vertex, RelationalTable hittostrip, RelationalTable hittorotated) {
-        return hasSharedStrips(vertex.getParticles().get(0), vertex.getParticles().get(1), hittostrip, hittorotated);
-    }
-
-    private static boolean hasSharedStrips(ReconstructedParticle fs1, ReconstructedParticle fs2, RelationalTable hittostrip, RelationalTable hittorotated) {
-        return TrackUtils.hasSharedStrips(fs1.getTracks().get(0), fs2.getTracks().get(0), hittostrip, hittorotated);
-    }
+	private static Logger LOGGER = Logger.getLogger(V0Monitoring.class.getPackage().getName());
+
+	String finalStateParticlesColName = "FinalStateParticles";
+	String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
+	String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
+	String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates";
+	String[] fpQuantNames = {"nV0_per_Event", "avg_BSCon_mass", "avg_BSCon_Vx", "avg_BSCon_Vy", "avg_BSCon_Vz", "sig_BSCon_Vx", "sig_BSCon_Vy", "sig_BSCon_Vz", "avg_BSCon_Chi2"};
+	//some counters
+	int nRecoEvents = 0;
+	int nTotV0 = 0;
+	int nTot2Ele = 0;
+	//some summers
+	double sumMass = 0.0;
+	double sumVx = 0.0;
+	double sumVy = 0.0;
+	double sumVz = 0.0;
+	double sumChi2 = 0.0;
+
+	/*  V0 Quantities   */
+	/*  Mass, vertex, chi^2 of fit */
+	/*  unconstrained */
+	IHistogram1D unconMass;
+	IHistogram1D unconVx;
+	IHistogram1D unconVy;
+	IHistogram1D unconVz;
+	IHistogram1D unconChi2;
+	IHistogram2D unconVzVsChi2;
+	IHistogram2D unconChi2VsTrkChi2;
+	/* beamspot constrained */
+
+	IHistogram1D nV0;
+
+	IHistogram1D v0Time;
+	IHistogram1D v0Dt;
+	IHistogram2D trigTimeV0Time;
+	IHistogram1D trigTime;
+
+	IHistogram1D bsconMass;
+	IHistogram1D bsconVx;
+	IHistogram1D bsconVy;
+	IHistogram1D bsconVz;
+	IHistogram1D bsconChi2;
+	IHistogram2D bsconVzVsChi2;
+	IHistogram2D bsconChi2VsTrkChi2;
+	/* target constrained */
+	IHistogram1D tarconMass;
+	IHistogram1D tarconVx;
+	IHistogram1D tarconVy;
+	IHistogram1D tarconVz;
+	IHistogram1D tarconChi2;
+	IHistogram2D tarconVzVsChi2;
+	IHistogram2D tarconChi2VsTrkChi2;
+
+	IHistogram2D pEleVspPos;
+	IHistogram1D pEle;
+	IHistogram1D pPos;
+
+	IHistogram2D pEleVspPosWithCut;
+	IHistogram2D pyEleVspyPos;
+	IHistogram2D pxEleVspxPos;
+
+	IHistogram2D VtxZVsMass;
+	IHistogram2D VtxYVsVtxZ;
+	IHistogram2D VtxXVsVtxZ;
+	IHistogram2D VtxXVsVtxY;
+	IHistogram2D VtxXVsVtxPx;
+	IHistogram2D VtxYVsVtxPy;
+	IHistogram2D VtxZVsVtxPx;
+	IHistogram2D VtxZVsVtxPy;
+	IHistogram2D VtxZVsVtxPz;
+
+	IHistogram2D VtxZVsL1Iso;
+	IHistogram2D VtxZVsTrkChi2;
+
+	IHistogram2D pEleVspEle;
+	IHistogram2D phiEleVsphiEle;
+	IHistogram2D pyEleVspyEle;
+	IHistogram2D pxEleVspxEle;
+	IHistogram2D pEleVspEleNoBeam;
+	IHistogram2D pyEleVspyEleNoBeam;
+	IHistogram2D pxEleVspxEleNoBeam;
+	IHistogram2D pEleVspEleMoller;
+	IHistogram2D pEleVsthetaMoller;
+	IHistogram2D thetaEleVsthetaMoller;
+	IHistogram2D pEleVspEleBeamBeam;
+	IHistogram2D pEleVsthetaBeamBeam;
+	IHistogram2D thetaEleVsthetaBeamBeam;
+
+	IHistogram1D mollerMass;
+	IHistogram1D mollerMassVtxCut;
+	IHistogram1D mollerVx;
+	IHistogram1D mollerVy;
+	IHistogram1D mollerVz;
+	IHistogram1D mollerVzVtxCut;
+	IHistogram2D mollerXVsVtxZ;
+	IHistogram2D mollerYVsVtxZ;
+	IHistogram2D mollerXVsVtxY;
+
+	IHistogram1D mollerUx;
+	IHistogram1D mollerUy;
+
+
+
+	IHistogram1D sumChargeHisto;
+	IHistogram1D numChargeHisto;
+
+	private final String plotDir = "V0Monitoring/";
+
+	private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
+
+	double maxFactor = 1.25;
+
+
+	double thetaMax = 0.06;
+	double thetaMin = 0.015;
+
+
+
+	double feeMomentumCut, v0ESumMinCut, v0MaxPCut, v0ESumMaxCut,
+	molPSumMin, molPSumMax, beambeamCut;
+
+
+
+	@Override
+	protected void detectorChanged(Detector detector) {
+
+		BeamEnergyCollection beamEnergyCollection = 
+			this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();        
+		double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
+		feeMomentumCut = 0.75*beamEnergy; //GeV
+
+		v0ESumMinCut = 0.8 * beamEnergy;
+		v0ESumMaxCut = 1.25 * beamEnergy;
+		
+		v0MaxPCut = 1.05*beamEnergy;//GeV
+		molPSumMin = 0.80*beamEnergy;
+		molPSumMax = 1.25*beamEnergy;
+		beambeamCut = 0.80*beamEnergy;
+
+
+
+		beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2);
+
+		LOGGER.info("Setting up the plotter");
+		aida.tree().cd("/");
+		String xtra = "Extras";
+		String trkType = "SeedTrack/";
+		if (isGBL)
+			trkType = "GBLTrack/";
+
+		double maxMass = .2*beamEnergy;
+		double maxMassMoller = .1*Math.sqrt(beamEnergy);
+		/*  V0 Quantities   */
+		/*  Mass, vertex, chi^2 of fit */
+		/*  unconstrained */
+		unconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Invariant Mass (GeV)", 100, 0, maxMass);
+		unconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
+		unconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
+		unconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
+		unconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Chi2", 25, 0, 25);
+		unconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
+		unconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
+		/* beamspot constrained */
+		bsconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Mass (GeV)", 100, 0, maxMass);
+		bsconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
+		bsconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
+		bsconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
+		bsconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2", 25, 0, 25);
+		bsconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
+		bsconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
+		/* target constrained */
+		tarconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Mass (GeV)", 100, 0, maxMass);
+		tarconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vx (mm)", 50, -1, 1);
+		tarconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vy (mm)", 50, -1, 1);
+		tarconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vz (mm)", 50, -10, 10);
+		tarconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Chi2", 25, 0, 25);
+		tarconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
+		tarconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
+
+		nV0 = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of V0 per event", 10, 0, 10);
+		v0Time = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 mean time", 100, -25, 25);
+		v0Dt = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 time difference", 100, -25, 25);
+		trigTimeV0Time = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase vs. V0 mean time", 100, -25, 25, 6, 0, 24);
+		trigTime = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase", 6, 0, 24);
+
+		pEleVspPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
+
+
+		pEle = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e)", 50, 0, beamEnergy * maxFactor);
+		pPos = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(p)", 50, 0, beamEnergy * maxFactor);
+
+		pEleVspPosWithCut = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p): Radiative", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
+		pyEleVspyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Py(e) vs Py(p)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
+		pxEleVspxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Px(e) vs Px(p)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
+		VtxZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Mass", 50, 0, maxMass, 50, -50, 80);
+		VtxXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vz", 100, -10, 10, 100, -50, 80);
+		VtxYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Vz", 100, -5, 5, 100, -50, 80);
+		VtxXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vy", 100, -10, 10, 100, -5, 5);
+		VtxXVsVtxPx = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Px", 100, -0.1, 0.1, 100, -10, 10);
+		VtxYVsVtxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Py", 100, -0.1, 0.1, 100, -5, 5);
+		VtxZVsVtxPx = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Px", 100, -0.1, 0.1, 100, -50, 80);
+		VtxZVsVtxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Py", 100, -0.1, 0.1, 100, -50, 80);
+		VtxZVsVtxPz = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Pz", 100, 0.0, beamEnergy * maxFactor, 100, -50, 80);
+		VtxZVsL1Iso = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs L1 Isolation", 100, 0.0, 5.0, 50, -50, 80);
+		VtxZVsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Track Chi2", 50, 0, 50, 50, -50, 80);
+		phiEleVsphiEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/phi(e) vs phi(e)", 50, -Math.PI, Math.PI, 50, -Math.PI, Math.PI);
+		pyEleVspyEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
+		pxEleVspxEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e)", 50, -0.02*beamEnergy, 0.06*beamEnergy, 50, -0.02*beamEnergy, 0.06*beamEnergy);
+		
+		// electron vs electron momentum with different cuts
+		// 1) no cut
+		// 2) cut out FEE 
+		// 3) cut out FEE and also cut on momentum sum
+		// 4) cut out everything except FEE coincidentals
+		pEleVspEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
+		pEleVspEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) NoBeam", 50, 0, beambeamCut, 50, 0, beambeamCut);
+		pEleVspEleMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) Moller", 50, 0, beambeamCut, 50, 0, beambeamCut);
+		pEleVspEleBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, beambeamCut, beamEnergy * maxFactor);
+		
+		pyEleVspyEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e) NoBeam", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
+		pxEleVspxEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e) NoBeam", 50, -0.02*beamEnergy, 0.06*beamEnergy, 50, -0.02*beamEnergy, 0.06*beamEnergy);
+		sumChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Total Charge of  Event", 5, -2, 3);
+		numChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of Charged Particles", 6, 0, 6);
+
+		pEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs Theta Moller", 50, 0, beambeamCut, 50, thetaMin, thetaMax);
+		thetaEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Theta vs Theta Moller", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
+		pEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs Theta BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, thetaMin, thetaMax);
+		thetaEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Theta vs Theta BeamBeam", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
+
+		mollerMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV)", 100, 0, maxMassMoller);
+		mollerMassVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV): VtxCut", 100, 0, maxMassMoller);
+		mollerVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx (mm)", 50, -10, 10);
+		mollerVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy (mm)", 50, -2, 2);
+		mollerVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm)", 50, -50, 50);
+		mollerVzVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm): VtxCut", 50, -50, 50);
+		mollerXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx vs Vz", 100, -5, 5, 100, -50, 50);
+		mollerYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy vs Vz", 100, -2, 2, 100, -50, 50);
+		mollerXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx vs Vy", 100, -5, 5, 100, -2, 2);
+
+		mollerUx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Ux", 100, .015, .045);
+		mollerUy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Uy", 100, -.01, .01);
+
+		mollerHiP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(high)", 100, 0, beamEnergy*maxFactor);
+		mollerLoP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(low)", 100, 0, beamEnergy*maxFactor);
+
+		mollerEitherP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(either)", 100, 0, beamEnergy*maxFactor);
+		mollerPsum = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Psum", 100, 0, beamEnergy*maxFactor);
+
+	}
+
+	IHistogram1D mollerHiP, mollerLoP, mollerEitherP, mollerPsum;
+
+	@Override
+	public void process(EventHeader event) {
+		/*  make sure everything is there */
+		if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName))
+			return;
+		if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName))
+			return;
+		if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName))
+			return;
+		if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName))
+			return;
+
+		//check to see if this event is from the correct trigger (or "all");
+		if (!matchTrigger(event))
+			return;
+
+		nRecoEvents++;
+
+		RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
+		RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
+
+		List<ReconstructedParticle> unonstrainedV0List = event.get(ReconstructedParticle.class, unconstrainedV0CandidatesColName);
+		for (ReconstructedParticle uncV0 : unonstrainedV0List) {
+			if (isGBL != TrackType.isGBL(uncV0.getType()))
+				continue;
+			Vertex uncVert = uncV0.getStartVertex();
+			Hep3Vector pVtxRot = VecOp.mult(beamAxisRotation, uncV0.getMomentum());
+			Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, uncVert.getPosition());
+			double theta = Math.acos(pVtxRot.z() / pVtxRot.magnitude());
+			double phi = Math.atan2(pVtxRot.y(), pVtxRot.x());
+			unconVx.fill(vtxPosRot.x());
+			unconVy.fill(vtxPosRot.y());
+			unconVz.fill(vtxPosRot.z());
+			unconMass.fill(uncV0.getMass());
+			unconChi2.fill(uncVert.getChi2());
+			unconVzVsChi2.fill(uncVert.getChi2(), vtxPosRot.z());
+			unconChi2VsTrkChi2.fill(Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1).getTracks().get(0).getChi2()), uncVert.getChi2());
+
+			VtxZVsMass.fill(uncV0.getMass(), vtxPosRot.z());
+			VtxXVsVtxZ.fill(vtxPosRot.x(), vtxPosRot.z());
+			VtxYVsVtxZ.fill(vtxPosRot.y(), vtxPosRot.z());
+			VtxXVsVtxY.fill(vtxPosRot.x(), vtxPosRot.y());
+			VtxXVsVtxPx.fill(pVtxRot.x(), vtxPosRot.x());
+			VtxYVsVtxPy.fill(pVtxRot.y(), vtxPosRot.y());
+			VtxZVsVtxPx.fill(pVtxRot.x(), vtxPosRot.z());
+			VtxZVsVtxPy.fill(pVtxRot.y(), vtxPosRot.z());
+			VtxZVsVtxPz.fill(pVtxRot.z(), vtxPosRot.z());
+
+			//this always has 2 tracks. 
+			List<ReconstructedParticle> trks = uncV0.getParticles();
+			//            Track ele = trks.get(0).getTracks().get(0);
+			//            Track pos = trks.get(1).getTracks().get(0);
+			//            //if track #0 has charge>0 it's the electron!  This seems mixed up, but remember the track 
+			//            //charge is assigned assuming a positive B-field, while ours is negative
+			//            if (trks.get(0).getCharge() > 0) {
+			//                pos = trks.get(0).getTracks().get(0);
+			//                ele = trks.get(1).getTracks().get(0);
+			//            }
+			//            aida.histogram2D(plotDir + trkType + triggerType + "/" + "P(e) vs P(p)").fill(getMomentum(ele), getMomentum(pos));
+			//            aida.histogram2D(plotDir + trkType + triggerType + "/" + "Px(e) vs Px(p)").fill(ele.getTrackStates().get(0).getMomentum()[1], pos.getTrackStates().get(0).getMomentum()[1]);
+			//            aida.histogram2D(plotDir + trkType + triggerType + "/" + "Py(e) vs Py(p)").fill(ele.getTrackStates().get(0).getMomentum()[2], pos.getTrackStates().get(0).getMomentum()[2]);
+			ReconstructedParticle ele = trks.get(0);
+			ReconstructedParticle pos = trks.get(1);
+			//ReconParticles have the charge correct. 
+			if (trks.get(0).getCharge() > 0) {
+				pos = trks.get(0);
+				ele = trks.get(1);
+			}
+			if (ele.getCharge() < 0 && pos.getCharge() > 0) {
+				VtxZVsTrkChi2.fill(Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1).getTracks().get(0).getChi2()), uncVert.getPosition().z());
+
+				Double[] eleIso = TrackUtils.getIsolations(ele.getTracks().get(0), hitToStrips, hitToRotated);
+				Double[] posIso = TrackUtils.getIsolations(pos.getTracks().get(0), hitToStrips, hitToRotated);
+				if (eleIso[0] != null && posIso[0] != null) {
+					double eleL1Iso = Math.min(Math.abs(eleIso[0]), Math.abs(eleIso[1]));
+					double posL1Iso = Math.min(Math.abs(posIso[0]), Math.abs(posIso[1]));
+					double minL1Iso = Math.min(eleL1Iso, posL1Iso);
+					VtxZVsL1Iso.fill(minL1Iso, uncVert.getPosition().z());
+				}
+
+				double pe = ele.getMomentum().magnitude();
+				double pp = pos.getMomentum().magnitude();
+				Hep3Vector pEleRot = VecOp.mult(beamAxisRotation, ele.getMomentum());
+				Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, pos.getMomentum());
+
+				pEleVspPos.fill(pe, pp);
+				pEle.fill(pe);
+				pPos.fill(pp);
+
+
+				pxEleVspxPos.fill(pEleRot.x(), pPosRot.x());
+				pyEleVspyPos.fill(pEleRot.y(), pPosRot.y());
+				if (pe < v0MaxPCut && pp < v0MaxPCut && (pe + pp) > v0ESumMinCut && (pe + pp) < v0ESumMaxCut)//enrich radiative-like events
+
+				pEleVspPosWithCut.fill(pe, pp);
+			}
+
+			double eleT = TrackUtils.getTrackTime(ele.getTracks().get(0), hitToStrips, hitToRotated);
+			double posT = TrackUtils.getTrackTime(pos.getTracks().get(0), hitToStrips, hitToRotated);
+			double meanT = (eleT + posT) / 2.0;
+			v0Time.fill(meanT);
+			v0Dt.fill(eleT - posT);
+			trigTimeV0Time.fill(meanT, event.getTimeStamp() % 24);
+			trigTime.fill(event.getTimeStamp() % 24);
+		}
+
+		List<ReconstructedParticle> beamConstrainedV0List = event.get(ReconstructedParticle.class, beamConV0CandidatesColName);
+		nV0.fill(beamConstrainedV0List.size());
+		for (ReconstructedParticle bsV0 : beamConstrainedV0List) {
+
+			if (isGBL != TrackType.isGBL(bsV0.getType()))
+				continue;
+			nTotV0++;
+			Vertex bsVert = bsV0.getStartVertex();
+			Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, bsVert.getPosition());
+			bsconVx.fill(vtxPosRot.x());
+			bsconVy.fill(vtxPosRot.y());
+			bsconVz.fill(vtxPosRot.z());
+			bsconMass.fill(bsV0.getMass());
+			bsconChi2.fill(bsVert.getChi2());
+			bsconVzVsChi2.fill(bsVert.getChi2(), vtxPosRot.z());
+			bsconChi2VsTrkChi2.fill(Math.max(bsV0.getParticles().get(0).getTracks().get(0).getChi2(), bsV0.getParticles().get(1).getTracks().get(0).getChi2()), bsVert.getChi2());
+			sumMass += bsV0.getMass();
+			sumVx += vtxPosRot.x();
+			sumVy += vtxPosRot.y();
+			sumVz += vtxPosRot.z();
+			sumChi2 += bsVert.getChi2();
+		}
+
+		List<ReconstructedParticle> targetConstrainedV0List = event.get(ReconstructedParticle.class, targetV0ConCandidatesColName);
+		for (ReconstructedParticle tarV0 : targetConstrainedV0List) {
+
+			if (isGBL != TrackType.isGBL(tarV0.getType()))
+				continue;
+
+			Vertex tarVert = tarV0.getStartVertex();
+			Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, tarVert.getPosition());
+			tarconVx.fill(vtxPosRot.x());
+			tarconVy.fill(vtxPosRot.y());
+			tarconVz.fill(vtxPosRot.z());
+			tarconMass.fill(tarV0.getMass());
+			tarconChi2.fill(tarVert.getChi2());
+			tarconVzVsChi2.fill(tarVert.getChi2(), vtxPosRot.z());
+			tarconChi2VsTrkChi2.fill(Math.max(tarV0.getParticles().get(0).getTracks().get(0).getChi2(), tarV0.getParticles().get(1).getTracks().get(0).getChi2()), tarVert.getChi2());
+		}
+		List<ReconstructedParticle> finalStateParticles = event.get(ReconstructedParticle.class, finalStateParticlesColName);
+		if (debug)
+			LOGGER.info("This events has " + finalStateParticles.size() + " final state particles");
+
+		ReconstructedParticle ele1 = null;
+		ReconstructedParticle ele2 = null;
+		int sumCharge = 0;
+		int numChargedParticles = 0;
+		for (ReconstructedParticle fsPart : finalStateParticles) {
+			if (isGBL != TrackType.isGBL(fsPart.getType()))
+				continue;
+			if (debug)
+				LOGGER.info("PDGID = " + fsPart.getParticleIDUsed() + "; charge = " + fsPart.getCharge() + "; pz = " + fsPart.getMomentum().x());
+			double charge = fsPart.getCharge();
+			sumCharge += charge;
+			if (charge != 0) {
+				numChargedParticles++;
+				if (charge < 1)
+					if (ele1 == null)
+						ele1 = fsPart;
+					else if (!hasSharedStrips(ele1, fsPart, hitToStrips, hitToRotated))
+						ele2 = fsPart;
+			}
+		}
+		sumChargeHisto.fill(sumCharge);
+		numChargeHisto.fill(numChargedParticles);
+
+		if (ele1 != null && ele2 != null) {
+			Hep3Vector p1 = VecOp.mult(beamAxisRotation, ele1.getMomentum());
+			Hep3Vector p2 = VecOp.mult(beamAxisRotation, ele2.getMomentum());
+			//            Hep3Vector beamAxis = new BasicHep3Vector(Math.sin(0.0305), 0, Math.cos(0.0305));
+			//            LOGGER.info(p1);
+			//            LOGGER.info(VecOp.mult(rot, p1));
+
+			double theta1 = Math.acos(p1.z() / p1.magnitude());
+			double theta2 = Math.acos(p2.z() / p2.magnitude());
+			double phi1 = Math.atan2(p1.y(), p1.x());
+			double phi2 = Math.atan2(p2.y(), p2.x());
+			phiEleVsphiEle.fill(phi1, phi2);
+			pEleVspEle.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
+			pyEleVspyEle.fill(ele1.getMomentum().y(), ele2.getMomentum().y());
+			pxEleVspxEle.fill(ele1.getMomentum().x(), ele2.getMomentum().x());
+			//remove beam electrons
+			if (ele1.getMomentum().magnitude() < beambeamCut && ele2.getMomentum().magnitude() < beambeamCut) {
+				pEleVspEleNoBeam.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
+				pyEleVspyEleNoBeam.fill(ele1.getMomentum().y(), ele2.getMomentum().y());
+				pxEleVspxEleNoBeam.fill(ele1.getMomentum().x(), ele2.getMomentum().x());
+			}
+			//look at beam-beam events
+			if (ele1.getMomentum().magnitude() > beambeamCut && ele2.getMomentum().magnitude() > beambeamCut) {
+				pEleVspEleBeamBeam.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
+				pEleVsthetaBeamBeam.fill(p1.magnitude(), theta1);
+				pEleVsthetaBeamBeam.fill(p2.magnitude(), theta2);
+				thetaEleVsthetaBeamBeam.fill(theta1, theta2);
+			}
+
+			//look at "Moller" events (if that's what they really are
+			if (ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() > molPSumMin
+					&& ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() < molPSumMax
+					&& (p1.magnitude() < beambeamCut && p2.magnitude() < beambeamCut)) {
+
+				Track ele1trk = ele1.getTracks().get(0);
+				Track ele2trk = ele2.getTracks().get(0);
+				SeedTrack stEle1 = TrackUtils.makeSeedTrackFromBaseTrack(ele1trk);
+				SeedTrack stEle2 = TrackUtils.makeSeedTrackFromBaseTrack(ele2trk);
+				BilliorTrack btEle1 = new BilliorTrack(stEle1.getSeedCandidate().getHelix());
+				BilliorTrack btEle2 = new BilliorTrack(stEle2.getSeedCandidate().getHelix());
+				BilliorVertex bv = fitVertex(btEle1, btEle2, TrackUtils.getBField(event.getDetector()).magnitude());
+				//                LOGGER.info("ee vertex: "+bv.toString());
+				double invMass = bv.getParameters().get("invMass");
+				mollerMass.fill(invMass);
+				mollerVx.fill(bv.getPosition().x());
+				mollerVy.fill(bv.getPosition().y());
+				mollerVz.fill(bv.getPosition().z());
+				mollerXVsVtxZ.fill(bv.getPosition().x(), bv.getPosition().z());
+				mollerYVsVtxZ.fill(bv.getPosition().y(), bv.getPosition().z());
+				mollerXVsVtxY.fill(bv.getPosition().x(), bv.getPosition().y());
+
+				double ux = (ele1.getMomentum().x()+ele2.getMomentum().x())/(ele1.getMomentum().z()+ele2.getMomentum().z());
+				double uy = (ele1.getMomentum().y()+ele2.getMomentum().y())/(ele1.getMomentum().z()+ele2.getMomentum().z());
+				mollerUx.fill(ux);
+				mollerUy.fill(uy);
+
+				//higher and lower energy electrons in moller pair
+				double pt1 = ele1.getMomentum().magnitude();
+				double pt2 = ele2.getMomentum().magnitude();
+				double ph = (pt1>pt2) ? pt1 : pt2;
+				double pl = (pt1>pt2) ? pt2 : pt1;
+
+				mollerHiP.fill(ph);
+				mollerLoP.fill(pl);
+
+				mollerEitherP.fill(ph);
+				mollerEitherP.fill(pl);
+				mollerPsum.fill(pt1+pt2);
+
+
+				if (Math.abs(bv.getPosition().x()) < 2
+						&& Math.abs(bv.getPosition().y()) < 0.5) {
+					mollerMassVtxCut.fill(invMass);
+					mollerVzVtxCut.fill(bv.getPosition().z());
+				}
+				pEleVspEleMoller.fill(p1.magnitude(), p2.magnitude());
+				pEleVsthetaMoller.fill(p1.magnitude(), theta1);
+				pEleVsthetaMoller.fill(p2.magnitude(), theta2);
+				thetaEleVsthetaMoller.fill(theta1, theta2);
+			}
+		}
+	}
+
+	@Override
+	public void printDQMData() {
+		LOGGER.info("V0Monitoring::printDQMData");
+		for (Entry<String, Double> entry : monitoredQuantityMap.entrySet())
+			LOGGER.info(entry.getKey() + " = " + entry.getValue());
+		LOGGER.info("*******************************");
+	}
+
+	/**
+	 * Calculate the averages here and fill the map
+	 */
+	@Override
+	public void calculateEndOfRunQuantities() {
+
+		IAnalysisFactory analysisFactory = IAnalysisFactory.create();
+		IFitFactory fitFactory = analysisFactory.createFitFactory();
+		IFitter fitter = fitFactory.createFitter("chi2");
+		double[] init = {50.0, 0.0, 0.2, 1.0, 0.0};
+		IFitResult resVx = fitVertexPosition(bsconVx, fitter, init, "range=\"(-0.5,0.5)\"");
+		double[] init2 = {50.0, 0.0, 0.04, 1.0, 0.0};
+		IFitResult resVy = fitVertexPosition(bsconVy, fitter, init2, "range=\"(-0.2,0.2)\"");
+		double[] init3 = {50.0, 0.0, 3.0, 1.0, 0.0};
+		IFitResult resVz = fitVertexPosition(bsconVz, fitter, init3, "range=\"(-6,6)\"");
+
+		if (resVx != null && resVy != null & resVz != null) {
+			double[] parsVx = resVx.fittedParameters();
+			double[] parsVy = resVy.fittedParameters();
+			double[] parsVz = resVz.fittedParameters();
+
+			for (int i = 0; i < 5; i++)
+				LOGGER.info("Vertex Fit Parameters:  " + resVx.fittedParameterNames()[i] + " = " + parsVx[i] + "; " + parsVy[i] + "; " + parsVz[i]);
+
+			IPlotter plotter = analysisFactory.createPlotterFactory().create("Vertex Position");
+			plotter.createRegions(1, 3);
+			IPlotterStyle pstyle = plotter.style();
+			pstyle.legendBoxStyle().setVisible(false);
+			pstyle.dataStyle().fillStyle().setColor("green");
+			pstyle.dataStyle().lineStyle().setColor("black");
+			plotter.region(0).plot(bsconVx);
+			plotter.region(0).plot(resVx.fittedFunction());
+			plotter.region(1).plot(bsconVy);
+			plotter.region(1).plot(resVy.fittedFunction());
+			plotter.region(2).plot(bsconVz);
+			plotter.region(2).plot(resVz.fittedFunction());
+			if (outputPlots)
+				try {
+					plotter.writeToFile(outputPlotDir + "vertex.png");
+				} catch (IOException ex) {
+					Logger.getLogger(V0Monitoring.class.getName()).log(Level.SEVERE, null, ex);
+				}
+
+				//        monitoredQuantityMap.put(fpQuantNames[2], sumVx / nTotV0);
+				//        monitoredQuantityMap.put(fpQuantNames[3], sumVy / nTotV0);
+				//        monitoredQuantityMap.put(fpQuantNames[4], sumVz / nTotV0);
+				monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[2], parsVx[1]);
+				monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[3], parsVy[1]);
+				monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[4], parsVz[1]);
+				monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[5], parsVx[2]);
+				monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[6], parsVy[2]);
+				monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[7], parsVz[2]);
+		}
+		monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[0], (double) nTotV0 / nRecoEvents);
+		monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[1], sumMass / nTotV0);
+		monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[8], sumChi2 / nTotV0);
+
+	}
+
+	@Override
+	public void printDQMStrings() {
+		for (int i = 0; i < 9; i++)//TODO:  do this in a smarter way...loop over the map
+			LOGGER.info("ALTER TABLE dqm ADD " + fpQuantNames[i] + " double;");
+	}
+
+	IFitResult fitVertexPosition(IHistogram1D h1d, IFitter fitter, double[] init, String range
+	) {
+		IFitResult ifr = null;
+		try {
+			ifr = fitter.fit(h1d, "g+p1", init, range);
+		} catch (RuntimeException ex) {
+			LOGGER.info(this.getClass().getSimpleName() + ":  caught exception in fitGaussian");
+		}
+		return ifr;
+	}
+
+	private BilliorVertex fitVertex(BilliorTrack electron, BilliorTrack positron, double bField) {
+		// Create a vertex fitter from the magnetic field.
+		double[] beamSize = {0.001, 0.2, 0.02};
+		BilliorVertexer vtxFitter = new BilliorVertexer(bField);
+		// TODO: The beam size should come from the conditions database.
+		vtxFitter.setBeamSize(beamSize);
+
+		// Perform the vertexing based on the specified constraint.
+		vtxFitter.doBeamSpotConstraint(false);
+
+		// Add the electron and positron tracks to a track list for
+		// the vertex fitter.
+		List<BilliorTrack> billiorTracks = new ArrayList<BilliorTrack>();
+
+		billiorTracks.add(electron);
+
+		billiorTracks.add(positron);
+
+		// Find and return a vertex based on the tracks.
+		return vtxFitter.fitVertex(billiorTracks);
+	}
+
+	private static boolean hasSharedStrips(ReconstructedParticle vertex, RelationalTable hittostrip, RelationalTable hittorotated) {
+		return hasSharedStrips(vertex.getParticles().get(0), vertex.getParticles().get(1), hittostrip, hittorotated);
+	}
+
+	private static boolean hasSharedStrips(ReconstructedParticle fs1, ReconstructedParticle fs2, RelationalTable hittostrip, RelationalTable hittorotated) {
+		return TrackUtils.hasSharedStrips(fs1.getTracks().get(0), fs2.getTracks().get(0), hittostrip, hittorotated);
+	}
 }

Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/plots/AddPlots.java
 =============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/plots/AddPlots.java	(original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/plots/AddPlots.java	Tue Mar  1 11:15:40 2016
@@ -15,7 +15,7 @@
 import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.lcsim.util.aida.AIDA;
@@ -43,7 +43,7 @@
     }
     
     public static void main(String[] args) throws Exception {
-        CommandLine cl = new DefaultParser().parse(OPTIONS, args);        
+        CommandLine cl = new PosixParser().parse(OPTIONS, args);        
         if (cl.getArgList().isEmpty()) {
             throw new RuntimeException("No input AIDA files to add.");
         }        

Modified: java/branches/jeremy-dev/conditions/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/conditions/pom.xml	(original)
+++ java/branches/jeremy-dev/conditions/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/conditions/</url>
@@ -37,6 +37,7 @@
                         <exclude>org/hps/conditions/api/ConditionsTagTest.java</exclude>
                         <exclude>org/hps/conditions/HPSJAVA_529_Test.java</exclude>
                         <exclude>org/hps/conditions/dummy/**.java</exclude>
+                        <exclude>org/hps/conditions/beam/BeamEnergyTest.java</exclude>
                     </excludes>
                 </configuration>
             </plugin>

Modified: java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java
 =============================================================================
--- java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java	(original)
+++ java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java	Tue Mar  1 11:15:40 2016
@@ -249,11 +249,11 @@
                     record = keyRecords.get(0);
                 } else {
                     if (action.equals(MultipleCollectionsAction.LAST_UPDATED)) {
-                        record = sortedByUpdated().get(this.size() - 1);
+                        record = keyRecords.sortedByUpdated().get(keyRecords.size() - 1);
                     } else if (action.equals(MultipleCollectionsAction.LAST_CREATED)) {
-                        record = sortedByCreated().get(this.size() - 1);
+                        record = keyRecords.sortedByCreated().get(keyRecords.size() - 1);
                     } else if (action.equals(MultipleCollectionsAction.LATEST_RUN_START)) {
-                        record = sortedByRunStart().get(this.size() - 1);
+                        record = keyRecords.sortedByRunStart().get(keyRecords.size() - 1);
                     } else if (action.equals(MultipleCollectionsAction.ERROR)) {
                         throw new RuntimeException("Multiple ConditionsRecord object found for conditions key " + key + ".");
                     }

Modified: java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/cli/AbstractCommand.java
 =============================================================================
--- java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/cli/AbstractCommand.java	(original)
+++ java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/cli/AbstractCommand.java	Tue Mar  1 11:15:40 2016
@@ -1,7 +1,7 @@
 package org.hps.conditions.cli;
 
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
@@ -32,7 +32,7 @@
     /**
      * The parser for the options.
      */
-    private final DefaultParser parser = new DefaultParser();
+    private final PosixParser parser = new PosixParser();
 
     /**
      * Class constructor.

Modified: java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java
 =============================================================================
--- java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java	(original)
+++ java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java	Tue Mar  1 11:15:40 2016
@@ -11,7 +11,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
 
@@ -79,7 +79,7 @@
     /**
      * The options parser.
      */
-    private final DefaultParser parser = new DefaultParser();
+    private final PosixParser parser = new PosixParser();
 
     /**
      * Exit with the given status.

Modified: java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/database/ConnectionParameters.java
 =============================================================================
--- java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/database/ConnectionParameters.java	(original)
+++ java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/database/ConnectionParameters.java	Tue Mar  1 11:15:40 2016
@@ -13,7 +13,8 @@
 import java.util.logging.Logger;
 
 /**
- * This class encapsulates the parameters for connecting to a database, including host name, port, user and password.
+ * This class encapsulates the parameters for connecting to a database,
+ * including host name, port, user and password.
  *
  * @author Jeremy McCormick, SLAC
  */
@@ -28,6 +29,12 @@
      * Number of connection retries allowed.
      */
     private static final int MAX_ATTEMPTS = 10;
+    
+    /**
+     * Wait time (in millis) for the first retry. The nth retry waits for
+     * n*RETRY_WAIT millis.
+     */
+    private static final int RETRY_WAIT = 5000;
 
     /**
      * Configure the connection parameters from a properties file.
@@ -46,7 +53,8 @@
     }
 
     /**
-     * Configure the connection parameters from an <code>InputStream</code> of properties.
+     * Configure the connection parameters from an <code>InputStream</code> of
+     * properties.
      *
      * @param in the InputStream of the properties
      * @return the connection parameters
@@ -71,7 +79,8 @@
     }
 
     /**
-     * Configure the connection parameters from an embedded classpath resource which should be a properties file.
+     * Configure the connection parameters from an embedded classpath resource
+     * which should be a properties file.
      *
      * @param resource the resource path
      * @return the connection parameters
@@ -146,8 +155,8 @@
     }
 
     /**
-     * Create a database connection from these parameters. The caller becomes the "owner" and is responsible for closing
-     * it when finished.
+     * Create a database connection from these parameters. The caller becomes
+     * the "owner" and is responsible for closing it when finished.
      *
      * @return the new <code>Connection</code> object
      */
@@ -166,7 +175,7 @@
                     throw new RuntimeException("Failed to connect to database after " + attempt + " attempts: " + this.getConnectionString(), x);
                 }
                 try {
-                    Thread.sleep(attempt * 1000);
+                    Thread.sleep(attempt * RETRY_WAIT);
                 } catch (InterruptedException ex) {
                     Logger.getLogger(ConnectionParameters.class.getName()).log(Level.SEVERE, null, ex);
                 }
@@ -247,13 +256,13 @@
     String getUser() {
         return this.user;
     }
-    
+
     /**
      * Convert to human readable string.
-     * 
+     *
      * @return this object converted to a string
      */
-    public String toString() {                        
+    public String toString() {
         return "ConnectionParameters { database: " + database + ", hostname: " + hostname + ", password: " + password
                 + ", port: " + port + ", user: " + user + " }";
     }

Modified: java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
 =============================================================================
--- java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	(original)
+++ java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	Tue Mar  1 11:15:40 2016
@@ -348,7 +348,7 @@
      * Close the database connection.
      */
     public synchronized void closeConnection() {
-        //LOGGER.finer("closing connection");
+        LOGGER.fine("closing connection");
         if (this.connection != null) {
             try {
                 if (!this.connection.isClosed()) {
@@ -360,7 +360,7 @@
         }
         this.connection = null;
         this.isConnected = false;
-        //LOGGER.finer("connection closed");
+        LOGGER.fine("connection closed");
     }
 
     /**

Modified: java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/MotorPositionLoader.java
 =============================================================================
--- java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/MotorPositionLoader.java	(original)
+++ java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/MotorPositionLoader.java	Tue Mar  1 11:15:40 2016
@@ -16,7 +16,7 @@
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 
 /**
  * Load SVT motor positions from a MYA dump, figure out time ranges (same position for > 10 seconds), and then convert
@@ -195,7 +195,7 @@
      */
     void run(final String args[]) {
 
-        final DefaultParser parser = new DefaultParser();
+        final PosixParser parser = new PosixParser();
 
         CommandLine cl = null;
         try {

Modified: java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java
 =============================================================================
--- java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java	(original)
+++ java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java	Tue Mar  1 11:15:40 2016
@@ -23,7 +23,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.run.RunRange;
@@ -176,7 +176,7 @@
 //        options.addOption(new Option("b", true, "beam current file"));
         options.addOption(new Option("s", false, "Show plots"));
 
-        final CommandLineParser parser = new DefaultParser();
+        final CommandLineParser parser = new PosixParser();
         CommandLine cl = null;
         try {
             cl = parser.parse(options, args);

Modified: java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/SvtConditionsLoader.java
 =============================================================================
--- java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/SvtConditionsLoader.java	(original)
+++ java/branches/jeremy-dev/conditions/src/main/java/org/hps/conditions/svt/SvtConditionsLoader.java	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.TableMetaData;
 import org.hps.conditions.database.DatabaseConditionsManager;
@@ -60,7 +60,7 @@
         final Options options = setupCommandLineOptions();
 
         // Parse the command line arguments
-        final CommandLineParser parser = new DefaultParser();
+        final CommandLineParser parser = new PosixParser();
         final CommandLine commandLine;
         try {
             commandLine = parser.parse(options, args);

Modified: java/branches/jeremy-dev/crawler/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/crawler/pom.xml	(original)
+++ java/branches/jeremy-dev/crawler/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/crawler/</url>

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatAddFile.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatAddFile.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatAddFile.java	Tue Mar  1 11:15:40 2016
@@ -6,7 +6,7 @@
 import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
@@ -55,7 +55,7 @@
     /**
      * The options parser.
      */
-    private final DefaultParser parser = new DefaultParser();
+    private final PosixParser parser = new PosixParser();
     
     /**
      * Parse command line options.

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatCrawler.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatCrawler.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatCrawler.java	Tue Mar  1 11:15:40 2016
@@ -13,7 +13,7 @@
 import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
@@ -83,7 +83,7 @@
     /**
      * The options parser.
      */
-    private final DefaultParser parser = new DefaultParser();
+    private final PosixParser parser = new PosixParser();
     
     /**
      * Parse command line options.

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/MetadataWriter.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/MetadataWriter.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/MetadataWriter.java	Tue Mar  1 11:15:40 2016
@@ -9,7 +9,7 @@
 import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
@@ -39,7 +39,7 @@
     private MetadataWriter parse(final String[] args) {
         
         try { 
-            final CommandLine cl = new DefaultParser().parse(OPTIONS, args);
+            final CommandLine cl = new PosixParser().parse(OPTIONS, args);
 
             // Print help.
             if (cl.hasOption("h") || args.length == 0) {

Modified: java/branches/jeremy-dev/detector-data/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/detector-data/pom.xml	(original)
+++ java/branches/jeremy-dev/detector-data/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/detector-data/</url>

Modified: java/branches/jeremy-dev/detector-model/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/detector-model/pom.xml	(original)
+++ java/branches/jeremy-dev/detector-model/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <build>
         <plugins>

Modified: java/branches/jeremy-dev/distribution/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/distribution/pom.xml	(original)
+++ java/branches/jeremy-dev/distribution/pom.xml	Tue Mar  1 11:15:40 2016
@@ -13,7 +13,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>    
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/distribution/</url>

Modified: java/branches/jeremy-dev/ecal-event-display/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/ecal-event-display/pom.xml	(original)
+++ java/branches/jeremy-dev/ecal-event-display/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-event-display/</url>

Modified: java/branches/jeremy-dev/ecal-readout-sim/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/ecal-readout-sim/pom.xml	(original)
+++ java/branches/jeremy-dev/ecal-readout-sim/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-readout-sim/</url>

Modified: java/branches/jeremy-dev/ecal-recon/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/ecal-recon/pom.xml	(original)
+++ java/branches/jeremy-dev/ecal-recon/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-recon/</url>

Modified: java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
 =============================================================================
--- java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java	(original)
+++ java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java	Tue Mar  1 11:15:40 2016
@@ -18,14 +18,18 @@
 import org.lcsim.util.Driver;
 
 /**
- * This class is used to convert between collections of {@link org.lcsim.event.RawCalorimeterHit}
- * and {@link org.lcsim.event.RawTrackerHit}, objects with ADC/sample information, and
- * collections of {@link org.lcsim.event.CalorimeterHit}, objects with energy/time information.
- * 
- * org.hps.recon.ecal.EcalRawConverter is called to do most of the lower level work.
- *
- *
-*/
+ * This <code>Driver</code> converts raw ECal data collections to {@link org.lcsim.event.CalorimeterHit} collections 
+ * with energy and time information.  The {@link EcalRawConverter} does most of the low-level work.
+ * <p>
+ * The following input collections are used:
+ * <ul>
+ * <li>EcalReadoutHits<li>
+ * <li>EcalReadoutExtraDataRelations</li>
+ * <li>EcalRunningPedestals</li>
+ * </ul>
+ * <p>
+ * The results are by default written to the <b>EcalCalHits</b> output collection.
+ */
 public class EcalRawConverterDriver extends Driver {
 
     // To import database conditions

Modified: java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRunningPedestalDriver.java
 =============================================================================
--- java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRunningPedestalDriver.java	(original)
+++ java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRunningPedestalDriver.java	Tue Mar  1 11:15:40 2016
@@ -18,18 +18,21 @@
 import org.lcsim.util.Driver;
 
 /**
- * Calculate a running pedestal average for every channel from Mode7 FADCs. Uses
- * pedestals from the database if not available from the data.
- * 
- * May 2015:  Updated to also work on Mode1 data.
- * 
- * TODO: Use Logger.
+ * This <code>Driver</code> takes Mode-1 or Mode-7 ECal data and computes a running pedestal 
+ * average for every channel.  Pedestals from the database will be used if this is not available.
+ * <p>
+ * The following input collections are used:
+ * <ul>
+ * <li>EcalReadoutHits</li>
+ * <li>EcalReadoutExtraDataRelations</li>
+ * </ul>
+ * <p>
+ * Results are by default written to the <b>EcalRunningPedestals</b> output collection.
  * 
  * TODO: Timestamps from EVIO for some runs appear to not be monotonically increasing.
  *       This interferes with minLookbackTime, so it defaults to disabled and its setter
- *       is left private for now.
+ *       is left private for now. (Should be a JIRA item??? --JM)
  * 
- * @version $Id: ECalRunningPedestalDriver.java,v 1.0 2015/02/10 00:00:00
  * @author <[log in to unmask]>
  */
 public class EcalRunningPedestalDriver extends Driver {

Modified: java/branches/jeremy-dev/evio/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/evio/pom.xml	(original)
+++ java/branches/jeremy-dev/evio/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/evio/</url>

Modified: java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/BasicEvioFileReader.java
 =============================================================================
--- java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/BasicEvioFileReader.java	(original)
+++ java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/BasicEvioFileReader.java	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.hps.record.evio.EvioEventUtilities;
 import org.hps.record.triggerbank.AbstractIntData.IntBankDefinition;
 import org.hps.record.triggerbank.HeadBankData;
@@ -33,7 +33,7 @@
         if (args.length == 0) {
             printUsage(options);
         }
-        final CommandLineParser parser = new DefaultParser();
+        final CommandLineParser parser = new PosixParser();
         CommandLine cl = null;
         try {
             cl = parser.parse(options, args);

Modified: java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/EvioToLcio.java
 =============================================================================
--- java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/EvioToLcio.java	(original)
+++ java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/EvioToLcio.java	Tue Mar  1 11:15:40 2016
@@ -21,7 +21,6 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
 import org.apache.commons.cli.PosixParser;
 import org.freehep.record.source.NoSuchRecordException;
 import org.hps.conditions.database.DatabaseConditionsManager;

Modified: java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
 =============================================================================
--- java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java	(original)
+++ java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java	Tue Mar  1 11:15:40 2016
@@ -107,7 +107,7 @@
      * @param run the run number
      */
     private void setTiTimeOffsetForRun(int run) {
-        currentTiTimeOffset = null; /* Reset TI offset to null indicating it is not available for the run. */
+        currentTiTimeOffset = null;
         RunManager runManager = RunManager.getRunManager();
         if (runManager.getRun() != null) {
             if (runManager.runExists()) {
@@ -121,6 +121,10 @@
         } else {
             LOGGER.info("Run manager is not initialized; TI time offset not available.");
         }
+        try {
+            RunManager.getRunManager().closeConnection();
+        } catch (Exception e) {
+        }
     }
 
     /**

Modified: java/branches/jeremy-dev/job/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/job/pom.xml	(original)
+++ java/branches/jeremy-dev/job/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/job/</url>

Modified: java/branches/jeremy-dev/job/src/main/java/org/hps/job/DatabaseConditionsManagerSetup.java
 =============================================================================
--- java/branches/jeremy-dev/job/src/main/java/org/hps/job/DatabaseConditionsManagerSetup.java	(original)
+++ java/branches/jeremy-dev/job/src/main/java/org/hps/job/DatabaseConditionsManagerSetup.java	Tue Mar  1 11:15:40 2016
@@ -59,10 +59,13 @@
      */
     @Override
     public void configure() {
-            
+
+        LOGGER.info("configuring conditions system");
+
         // Initialize the db conditions manager.
+        DatabaseConditionsManager.resetInstance();
         DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
-        
+
         if (enableRunManager) {
             LOGGER.config("adding run manager conditions listener");
             conditionsManager.addConditionsListener(RunManager.getRunManager());
@@ -82,6 +85,8 @@
         for (ConditionsListener listener : listeners) {
             conditionsManager.addConditionsListener(listener);
         }
+
+        LOGGER.info("done configuring conditions system");
     }
      
     /**
@@ -91,10 +96,12 @@
      */
     @Override
     public void postInitialize() {
+        LOGGER.config("conditions setup post init");
         if (DatabaseConditionsManager.getInstance().isInitialized() || this.freeze) {
             LOGGER.config("Job manager is freezing the conditions system.");
             DatabaseConditionsManager.getInstance().freeze();
         }
+        LOGGER.config("done with post init");
     }
     
     /**
@@ -104,7 +111,9 @@
      */
     @Override
     public void cleanup() {
-        
+ 
+        LOGGER.config("conditions cleanup");
+
         // Close the conditions database connection.
         Connection connection = DatabaseConditionsManager.getInstance().getConnection();
         try {
@@ -119,5 +128,7 @@
         if (enableRunManager) {
             RunManager.getRunManager().closeConnection();
         }
+
+        LOGGER.config("done cleaning up");
     }
 }

Modified: java/branches/jeremy-dev/logging/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/logging/pom.xml	(original)
+++ java/branches/jeremy-dev/logging/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/logging/</url>

Modified: java/branches/jeremy-dev/monitoring-app/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/monitoring-app/pom.xml	(original)
+++ java/branches/jeremy-dev/monitoring-app/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-app/</url>

Modified: java/branches/jeremy-dev/monitoring-app/src/main/java/org/hps/monitoring/application/Main.java
 =============================================================================
--- java/branches/jeremy-dev/monitoring-app/src/main/java/org/hps/monitoring/application/Main.java	(original)
+++ java/branches/jeremy-dev/monitoring-app/src/main/java/org/hps/monitoring/application/Main.java	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.hps.monitoring.application.model.Configuration;
 
 /**
@@ -29,7 +29,7 @@
         final Options options = new Options();
         options.addOption(new Option("h", false, "Print help."));
         options.addOption(new Option("c", true, "Load a properties file with configuration parameters."));
-        final CommandLineParser parser = new DefaultParser();
+        final CommandLineParser parser = new PosixParser();
 
         // Parse command line arguments.
         final CommandLine cl;

Modified: java/branches/jeremy-dev/monitoring-drivers/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/pom.xml	(original)
+++ java/branches/jeremy-dev/monitoring-drivers/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-drivers/</url>

Modified: java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
 =============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java	(original)
+++ java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java	Tue Mar  1 11:15:40 2016
@@ -216,13 +216,13 @@
         plotters.get("Raw hit counts/Event").createRegions(2, 2);
 
         hitCountPlots.put("Raw hit counts/Event",
-                histogramFactory.createHistogram1D("Raw hit counts", 100, 0, 100));
+                histogramFactory.createHistogram1D("Raw hit counts", 100, 0, 500));
         plotters.get("Raw hit counts/Event").region(0).plot(hitCountPlots.get("Raw hit counts/Event"), SvtPlotUtils.createStyle(plotterFactory, "Number of Raw Hits", ""));
         hitCountPlots.put("SVT top raw hit counts/Event",
-                histogramFactory.createHistogram1D("SVT top raw hit counts", 100, 0, 100));
+                histogramFactory.createHistogram1D("SVT top raw hit counts", 100, 0, 300));
         plotters.get("Raw hit counts/Event").region(2).plot(hitCountPlots.get("SVT top raw hit counts/Event"), SvtPlotUtils.createStyle(plotterFactory, "Number of Raw Hits in Top Volume", ""));
         hitCountPlots.put("SVT bottom raw hit counts/Event",
-                histogramFactory.createHistogram1D("SVT bottom raw hit counts", 100, 0, 100));
+                histogramFactory.createHistogram1D("SVT bottom raw hit counts", 100, 0, 300));
         plotters.get("Raw hit counts/Event").region(3).plot(hitCountPlots.get("SVT bottom raw hit counts/Event"), SvtPlotUtils.createStyle(plotterFactory, "Number of Raw Bits in the Bottom Volume", ""));
 
         plotters.put("First sample distributions (pedestal shifts)", plotterFactory.create("First sample distributions (pedestal shifts)"));

Modified: java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/PlotAndFitUtilities.java
 =============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/PlotAndFitUtilities.java	(original)
+++ java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/PlotAndFitUtilities.java	Tue Mar  1 11:15:40 2016
@@ -50,7 +50,7 @@
     static void plot(IPlotter plotter, IBaseHistogram histogram, IPlotterStyle style, int region) {
         if (style == null)
             style = getPlotterStyle(histogram);
-        System.out.println("Putting plot in region " + region);
+        //System.out.println("Putting plot in region " + region);
         plotter.region(region).plot(histogram, style);
 
     }

Modified: java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/V0ReconPlots.java
 =============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/V0ReconPlots.java	(original)
+++ java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/V0ReconPlots.java	Tue Mar  1 11:15:40 2016
@@ -58,7 +58,7 @@
 
     @Override
     protected void detectorChanged(Detector detector) {
-        System.out.println("V0Monitoring::detectorChanged  Setting up the plotter");
+        //System.out.println("V0Monitoring::detectorChanged  Setting up the plotter");
 
         IAnalysisFactory fac = aida.analysisFactory();
         IPlotterFactory pfac = fac.createPlotterFactory("V0 Recon");

Modified: java/branches/jeremy-dev/monitoring-util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/monitoring-util/pom.xml	(original)
+++ java/branches/jeremy-dev/monitoring-util/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-util/</url>

Modified: java/branches/jeremy-dev/parent/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/parent/pom.xml	(original)
+++ java/branches/jeremy-dev/parent/pom.xml	Tue Mar  1 11:15:40 2016
@@ -6,13 +6,14 @@
     <groupId>org.hps</groupId>
     <artifactId>hps-parent</artifactId>
     <packaging>pom</packaging>
-    <version>3.6-SNAPSHOT</version>
+    <version>3.7-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.2-SNAPSHOT</lcsimVersion>
+        <lcsimVersion>3.2</lcsimVersion>
         <skipSite>false</skipSite>
         <skipPlugin>false</skipPlugin>
     </properties>
@@ -142,117 +143,112 @@
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-util</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-detector-data</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-detector-model</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-conditions</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-ecal-recon</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-ecal-readout-sim</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-tracking</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-evio</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-recon</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-analysis</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-monitoring-drivers</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-monitoring-app</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-users</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-steering-files</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-distribution</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-ecal-event-display</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-record-util</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-monitoring-util</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-run-database</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-crawler</artifactId>
-                <version>3.6-SNAPSHOT</version>
-            </dependency>
-            <dependency>
-                <groupId>org.hps</groupId>
-                <artifactId>hps-datacat-client</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-job</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.hps</groupId>
                 <artifactId>hps-logging</artifactId>
-                <version>3.6-SNAPSHOT</version>
+                <version>3.7-SNAPSHOT</version>
             </dependency>
             <!-- Next are external dependencies used in multiple modules. -->
             <dependency>
@@ -298,7 +294,7 @@
             <dependency>
                 <groupId>srs</groupId>
                 <artifactId>org-srs-datacat-client</artifactId>
-                <version>0.5-SNAPSHOT</version>
+                <version>0.5-TEST3</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
@@ -504,9 +500,6 @@
                 <role>release manager</role>
             </roles>
             <timezone>-8</timezone>
-            <properties>
-                <aim>jeremyslac</aim>
-            </properties>
         </developer>
         <developer>
             <name>Norman Graf</name>
@@ -517,9 +510,6 @@
                 <role>developer</role>
             </roles>
             <timezone>-8</timezone>
-            <properties>
-                <aim>ngraf137</aim>
-            </properties>
         </developer>
         <developer>
             <name>Maurik Holtrop</name>

Modified: java/branches/jeremy-dev/plugin/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/plugin/pom.xml	(original)
+++ java/branches/jeremy-dev/plugin/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/plugin/</url>

Modified: java/branches/jeremy-dev/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/pom.xml	(original)
+++ java/branches/jeremy-dev/pom.xml	Tue Mar  1 11:15:40 2016
@@ -9,7 +9,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>svn://svn.freehep.org/hps/java/trunk/</url>
@@ -107,7 +107,6 @@
         <module>analysis</module>
         <module>conditions</module>
         <module>crawler</module>
-        <module>datacat-client</module>
         <module>detector-data</module>
         <module>detector-model</module>
         <module>distribution</module>

Modified: java/branches/jeremy-dev/recon/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/recon/pom.xml	(original)
+++ java/branches/jeremy-dev/recon/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/recon/</url>

Modified: java/branches/jeremy-dev/record-util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/record-util/pom.xml	(original)
+++ java/branches/jeremy-dev/record-util/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/record-util/</url>

Modified: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioEventSkimmer.java
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioEventSkimmer.java	(original)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioEventSkimmer.java	Tue Mar  1 11:15:40 2016
@@ -14,7 +14,7 @@
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.jlab.coda.jevio.EventWriter;
 import org.jlab.coda.jevio.EvioEvent;
 import org.jlab.coda.jevio.EvioReader;
@@ -51,7 +51,7 @@
      */
     public static void main(String[] args) {
 
-        DefaultParser parser = new DefaultParser();
+        PosixParser parser = new PosixParser();
 
         CommandLine commandLine = null;
         try {

Modified: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioFileProducer.java
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioFileProducer.java	(original)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioFileProducer.java	Tue Mar  1 11:15:40 2016
@@ -16,7 +16,7 @@
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.jlab.coda.et.EtAttachment;
 import org.jlab.coda.et.EtConstants;
 import org.jlab.coda.et.EtEvent;
@@ -195,7 +195,7 @@
     public void run(final String[] args) {
 
         // Command line parser.
-        final DefaultParser parser = new DefaultParser();
+        final PosixParser parser = new PosixParser();
 
         try {
 

Modified: java/branches/jeremy-dev/run-database/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/run-database/pom.xml	(original)
+++ java/branches/jeremy-dev/run-database/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/run-database/</url>
@@ -24,4 +24,17 @@
             <artifactId>org-srs-datacat-client</artifactId>
         </dependency>
     </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>org/hps/run/database/RunBuilderTest.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

Modified: java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunDatabaseCommandLine.java
 =============================================================================
--- java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunDatabaseCommandLine.java	(original)
+++ java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunDatabaseCommandLine.java	Tue Mar  1 11:15:40 2016
@@ -4,7 +4,7 @@
 import java.net.URISyntaxException;
 
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
@@ -119,7 +119,7 @@
      */
     private RunDatabaseCommandLine parse(final String args[]) {
         try {
-            final CommandLine cl = new DefaultParser().parse(OPTIONS, args);
+            final CommandLine cl = new PosixParser().parse(OPTIONS, args);
 
             // Print help and exit.
             if (cl.hasOption("h") || args.length == 0) {

Modified: java/branches/jeremy-dev/steering-files/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/steering-files/pom.xml	(original)
+++ java/branches/jeremy-dev/steering-files/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/steering-files/</url>

Modified: java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim
 =============================================================================
--- java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim	(original)
+++ java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim	Tue Mar  1 11:15:40 2016
@@ -27,7 +27,8 @@
         <driver name="TrackingMonitoringGBLSingles0"/>  
         <driver name="TrackingResidualsSingles0"/>
         <driver name="FinalStateMonitoringSingles0"/>          
-        <driver name="V0MonitoringSingles0"/>          
+        <driver name="V0MonitoringSingles0"/>              
+        <driver name="V0MonitoringGBLSingles0"/>         
         <driver name="TridentMonitoringSingles0"/>
         <!-- Singles1 -->
         <driver name="EcalMonitoringSingles1"/>  
@@ -48,7 +49,8 @@
         <driver name="TrackingMonitoringGBLPairs0"/>  
         <driver name="TrackingResidualsPairs0"/>
         <driver name="FinalStateMonitoringPairs0"/>          
-        <driver name="V0MonitoringPairs0"/>          
+        <driver name="V0MonitoringPairs0"/>                
+        <driver name="V0MonitoringGBLPairs0"/>         
         <driver name="TridentMonitoringPairs0"/>
         <!-- Pairs1 -->
         <driver name="EcalMonitoringPairs1"/> 
@@ -84,11 +86,9 @@
         <!-- all triggers  -->
         <driver name="EcalMonitoring" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>all</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="EcalMonitoringCorr" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>all</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
             <fillHitPlots>false</fillHitPlots>
         </driver>
@@ -104,15 +104,12 @@
         </driver>
         <driver name="FinalStateMonitoring" type="org.hps.analysis.dataquality.FinalStateMonitoring">
             <triggerType>all</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="V0Monitoring" type="org.hps.analysis.dataquality.V0Monitoring">
             <triggerType>all</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="TridentMonitoring" type="org.hps.analysis.dataquality.TridentMonitoring">
             <triggerType>all</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
        <driver name="TrackingMonitoringGBL" type="org.hps.analysis.dataquality.TrackingMonitoring">
             <trackCollectionName>GBLTracks</trackCollectionName>
@@ -120,28 +117,23 @@
         </driver>    
         <driver name="FinalStateMonitoringGBL" type="org.hps.analysis.dataquality.FinalStateMonitoring">
             <triggerType>all</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <isGBL>true</isGBL>
         </driver>
         <driver name="V0MonitoringGBL" type="org.hps.analysis.dataquality.V0Monitoring">
             <triggerType>all</triggerType>
             <isGBL>true</isGBL>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="TridentMonitoringGBL" type="org.hps.analysis.dataquality.TridentMonitoring">
             <triggerType>all</triggerType>
             <isGBL>true</isGBL>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
 
         <!-- singles0 triggers  -->
         <driver name="EcalMonitoringSingles0" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>singles0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="EcalMonitoringCorrSingles0" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>singles0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
             <fillHitPlots>false</fillHitPlots>
         </driver>
@@ -160,25 +152,24 @@
         </driver>
         <driver name="FinalStateMonitoringSingles0" type="org.hps.analysis.dataquality.FinalStateMonitoring">
             <triggerType>singles0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="V0MonitoringSingles0" type="org.hps.analysis.dataquality.V0Monitoring">
             <triggerType>singles0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
+        </driver>
+         <driver name="V0MonitoringGBLSingles0" type="org.hps.analysis.dataquality.V0Monitoring">
+            <triggerType>singles0</triggerType>
+            <isGBL>true</isGBL>
         </driver>
         <driver name="TridentMonitoringSingles0" type="org.hps.analysis.dataquality.TridentMonitoring">
             <triggerType>singles0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
 
         <!-- singles1 triggers  -->
         <driver name="EcalMonitoringSingles1" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>singles1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="EcalMonitoringCorrSingles1" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>singles1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
             <fillHitPlots>false</fillHitPlots>
         </driver>
@@ -197,40 +188,32 @@
         </driver>
         <driver name="FinalStateMonitoringSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
             <triggerType>singles1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
          <driver name="V0MonitoringSingles1" type="org.hps.analysis.dataquality.V0Monitoring">
             <triggerType>singles1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="TridentMonitoringSingles1" type="org.hps.analysis.dataquality.TridentMonitoring">
-            <triggerType>singles1</triggerType> 
-            <beamEnergy>${beamEnergy}</beamEnergy>           
+            <triggerType>singles1</triggerType>            
         </driver>
        <driver name="FinalStateMonitoringGBLSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
                <triggerType>singles1</triggerType>
             <isGBL>true</isGBL>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="V0MonitoringGBLSingles1" type="org.hps.analysis.dataquality.V0Monitoring">
             <triggerType>singles1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <isGBL>true</isGBL>
         </driver>
         <driver name="TridentMonitoringGBLSingles1" type="org.hps.analysis.dataquality.TridentMonitoring">
             <triggerType>singles1</triggerType>
             <isGBL>true</isGBL>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
  
         <!-- pairs0 triggers  -->
         <driver name="EcalMonitoringPairs0" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>pairs0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="EcalMonitoringCorrPairs0" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>pairs0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
             <fillHitPlots>false</fillHitPlots>
         </driver>
@@ -249,26 +232,25 @@
         </driver>
         <driver name="FinalStateMonitoringPairs0" type="org.hps.analysis.dataquality.FinalStateMonitoring">
             <triggerType>pairs0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="V0MonitoringPairs0" type="org.hps.analysis.dataquality.V0Monitoring">
             <triggerType>pairs0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
+        </driver>
+        <driver name="V0MonitoringGBLPairs0" type="org.hps.analysis.dataquality.V0Monitoring">
+            <triggerType>pairs0</triggerType>
+            <isGBL>true</isGBL>
         </driver>
         <driver name="TridentMonitoringPairs0" type="org.hps.analysis.dataquality.TridentMonitoring">
             <triggerType>pairs0</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
 
 
         <!-- pairs1 triggers  -->
         <driver name="EcalMonitoringPairs1" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>pairs1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="EcalMonitoringCorrPairs1" type="org.hps.analysis.dataquality.EcalMonitoring">         
             <triggerType>pairs1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
             <fillHitPlots>false</fillHitPlots>
         </driver>
@@ -287,30 +269,24 @@
         </driver>
         <driver name="FinalStateMonitoringPairs1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
             <triggerType>pairs1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="V0MonitoringPairs1" type="org.hps.analysis.dataquality.V0Monitoring">
             <triggerType>pairs1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="TridentMonitoringPairs1" type="org.hps.analysis.dataquality.TridentMonitoring">
             <triggerType>pairs1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
     <driver name="FinalStateMonitoringGBLPairs1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
             <triggerType>pairs1</triggerType>
             <isGBL>true</isGBL>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
         <driver name="V0MonitoringGBLPairs1" type="org.hps.analysis.dataquality.V0Monitoring">
             <triggerType>pairs1</triggerType>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <isGBL>true</isGBL>
         </driver>
         <driver name="TridentMonitoringGBLPairs1" type="org.hps.analysis.dataquality.TridentMonitoring">
             <triggerType>pairs1</triggerType>
             <isGBL>true</isGBL>
-            <beamEnergy>${beamEnergy}</beamEnergy>
         </driver>
 
         <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>

Modified: java/branches/jeremy-dev/tracking/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/tracking/pom.xml	(original)
+++ java/branches/jeremy-dev/tracking/pom.xml	Tue Mar  1 11:15:40 2016
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/tracking/</url>

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java	Tue Mar  1 11:15:40 2016
@@ -41,15 +41,39 @@
 import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType;
 
 /**
- * Driver used to create stereo hits from clusters.
- *
+ * This <code>Driver</code> creates 3D hits from SVT strip clusters of stereo pairs, which by default
+ * are read from the <b>StripClusterer_SiTrackerHitStrip1D</b> input collection.
+ * <p>
+ * The following collections will be added to the output event:
+ * <ul>
+ * <li>HelicalTrackHits</li>
+ * <li>RotatedHelicalTrackHits</li>
+ * <li>HelicalTrackHitRelations</li>
+ * <li>RotatedHelicalTrackHitRelations</li>
+ * <li>HelicalTrackMCRelations</li>
+ * <li>RotatedHelicalTrackMCRelations<li>
+ * </ul>
+ * <p>
+ * Class has the following default parameters values in the code (or from <code>EngineeringRun2015FullRecon.lcsim</code>):
+ * <ul>
+ * <li>{@link #setClusterTimeCut(double)} - 12.0 (ns)</li>
+ * <li>{@link #setMaxDt(double)} - 16.0 (ns)</li>
+ * <li>{@link #setClusterAmplitudeCut(double)} - 400.0</li>
+ * <li>{@link #setRejectGhostHits(boolean)} - <code>false</code></li>
+ * <li>{@link #setDebug(boolean)} - <code>false</code></li>
+ * <li>{@link #setEpsParallel(double)} - 0.013</li>
+ * <li>{@link #setEpsStereo(double)} - 0.01</li>
+ * <li>{@link #setSaveAxialHits(boolean)} - <code>false</code></li>
+ * <li>{@link #setStripHitsCollectionName(String)} - StripClusterer_SiTrackerHitStrip1D</li>
+ * <li>{@link #setHelicalTrackHitRelationsCollectionName(String)} - HelicalTrackHitRelations</li>
+ * <li>{@link #setHelicalTrackMCRelationsCollectionName(String)} -  HelicalTrackMCRelations</li>
+ * <li>{@link #setOutputHitCollectionName(String)} - HelicalTrackHits</li>
+ * </ul>
  *
  * @author Mathew Graham <[log in to unmask]>
  * @author Per Hansson <[log in to unmask]>
  * @author Omar Moreno <[log in to unmask]>
- *
  */
-// TODO: Add class documentation.
 // FIXME: The option to run using the Common geometry should be removed
 public class HelicalTrackHitDriver extends org.lcsim.fit.helicaltrack.HelicalTrackHitDriver {
 

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/BuildCompact.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/BuildCompact.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/BuildCompact.java	Tue Mar  1 11:15:40 2016
@@ -23,7 +23,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 
 import org.jdom.Document;
 import org.jdom.Element;
@@ -156,7 +156,7 @@
 			printHelpAndExit(options);
 		}
 
-		CommandLineParser parser = new DefaultParser();
+		CommandLineParser parser = new PosixParser();
 		CommandLine cl = null;
 		try {
 			cl = parser.parse(options, args);

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/BuildMillepedeCompact.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/BuildMillepedeCompact.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/BuildMillepedeCompact.java	Tue Mar  1 11:15:40 2016
@@ -29,7 +29,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.hps.recon.tracking.CoordinateTransformations;
 import org.jdom.Attribute;
 import org.jdom.DataConversionException;
@@ -85,7 +85,7 @@
 			printHelpAndExit(options);
 		}
 
-		CommandLineParser parser = new DefaultParser();
+		CommandLineParser parser = new PosixParser();
 		CommandLine cl = null;
 		try {
 			cl = parser.parse(options, args);

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/MillepedeCompactDump.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/MillepedeCompactDump.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/svt/alignment/MillepedeCompactDump.java	Tue Mar  1 11:15:40 2016
@@ -15,7 +15,7 @@
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
@@ -54,7 +54,7 @@
 			printHelpAndExit(options);
 		}
 
-		CommandLineParser parser = new DefaultParser();
+		CommandLineParser parser = new PosixParser();
 		CommandLine cl = null;
 		try {
 			cl = parser.parse(options, args);

Modified: java/branches/jeremy-dev/users/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/users/pom.xml	(original)
+++ java/branches/jeremy-dev/users/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/users/</url>

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/jeremym/EvioFileScanner.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/jeremym/EvioFileScanner.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/jeremym/EvioFileScanner.java	Tue Mar  1 11:15:40 2016
@@ -28,7 +28,7 @@
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.hps.conditions.database.ConnectionParameters;
 import org.hps.record.evio.EvioEventConstants;
 import org.hps.record.evio.EvioEventUtilities;
@@ -484,7 +484,7 @@
 
     final Set<Integer> acceptRuns = new HashSet<Integer>();
 
-    final DefaultParser parser = new DefaultParser();
+    final PosixParser parser = new PosixParser();
 
     boolean printSummary = false;
 

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/FilterMCBunches.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/FilterMCBunches.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/FilterMCBunches.java	Tue Mar  1 11:15:40 2016
@@ -17,7 +17,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.RawCalorimeterHit;
@@ -70,7 +70,7 @@
     public static void main(String[] args) {
         // Set up command line parsing.
         Options options = createCommandLineOptions();
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
 
         // Parse command line arguments.
         CommandLine cl = null;

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/MergeMCBunches.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/MergeMCBunches.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/MergeMCBunches.java	Tue Mar  1 11:15:40 2016
@@ -13,7 +13,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.SimCalorimeterHit;
@@ -49,7 +49,7 @@
     public static void main(String[] args) {
         // Set up command line parsing.
         Options options = createCommandLineOptions();
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
 
         // Parse command line arguments.
         CommandLine cl = null;
@@ -191,4 +191,4 @@
             throw new RuntimeException(e);
         }
     }
-}
+}

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java	Tue Mar  1 11:15:40 2016
@@ -12,7 +12,7 @@
 import java.util.logging.Logger;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
@@ -50,7 +50,7 @@
         options.addOption(new Option("t", false, "use TI timestamp instead of Unix time (higher precision, but requires TI time offset in run DB)"));
         options.addOption(new Option("c", false, "get TI time offset from CSV log file instead of run DB"));
 
-        final CommandLineParser parser = new DefaultParser();
+        final CommandLineParser parser = new PosixParser();
         CommandLine cl = null;
         try {
             cl = parser.parse(options, args);

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/omoreno/LheToStdhep.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/omoreno/LheToStdhep.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/omoreno/LheToStdhep.java	Tue Mar  1 11:15:40 2016
@@ -15,7 +15,7 @@
 import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.jdom.Document;
 import org.jdom.Element;
 import org.jdom.JDOMException;
@@ -58,7 +58,7 @@
 		String stdhepFileName = "output.stdhep";
 		
 		// Instantiate te command line parser
-		CommandLineParser parser = new DefaultParser(); 
+		CommandLineParser parser = new PosixParser(); 
 
 		// Create the Options
 		// TODO: Add ability to parse list of files.

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/dataMCPlots.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/dataMCPlots.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/dataMCPlots.java	Tue Mar  1 11:15:40 2016
@@ -25,7 +25,7 @@
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.lcsim.util.aida.AIDA;
 
 /**
@@ -93,7 +93,7 @@
             help.printHelp(" ", opts);
             System.exit(1);
         }
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
         CommandLine cmd=null;
         try {
             cmd = parser.parse(opts, args);

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/ecalPlots.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/ecalPlots.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/ecalPlots.java	Tue Mar  1 11:15:40 2016
@@ -19,7 +19,7 @@
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 
 /**
  *
@@ -72,7 +72,7 @@
             help.printHelp(" ", opts);
             System.exit(1);
         }
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
         CommandLine cmd=null;
         try {
             cmd = parser.parse(opts, args);

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/trigRate.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/trigRate.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/testrun/trigRate.java	Tue Mar  1 11:15:40 2016
@@ -17,7 +17,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 
 /**
  *
@@ -73,7 +73,7 @@
             help.printHelp(" ", options);
             System.exit(1);
         }
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
         
         CommandLine cl = null;
         try {

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/tools/DumpAIDATextFiles.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/tools/DumpAIDATextFiles.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/tools/DumpAIDATextFiles.java	Tue Mar  1 11:15:40 2016
@@ -21,7 +21,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 
 /**
  *
@@ -116,7 +116,7 @@
             help.printHelp(" ", options);
             System.exit(1);
         }
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
         CommandLine cl = null;
         try {
             cl = parser.parse(options, args);

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/tools/mergeSimpleAIDA.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/tools/mergeSimpleAIDA.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/tools/mergeSimpleAIDA.java	Tue Mar  1 11:15:40 2016
@@ -20,7 +20,7 @@
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.lcsim.util.aida.AIDA;
 
 /**
@@ -52,7 +52,7 @@
             help.printHelp(" ", opts);
             System.exit(1);
         }
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
         CommandLine cmd = null;
         try {
             cmd = parser.parse(opts, args);

Modified: java/branches/jeremy-dev/util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/util/pom.xml	(original)
+++ java/branches/jeremy-dev/util/pom.xml	Tue Mar  1 11:15:40 2016
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.6-SNAPSHOT</version>
+        <version>3.7-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/util/</url>

Modified: java/branches/jeremy-dev/util/src/main/java/org/hps/util/CalculateAcceptanceFromMadGraph.java
 =============================================================================
--- java/branches/jeremy-dev/util/src/main/java/org/hps/util/CalculateAcceptanceFromMadGraph.java	(original)
+++ java/branches/jeremy-dev/util/src/main/java/org/hps/util/CalculateAcceptanceFromMadGraph.java	Tue Mar  1 11:15:40 2016
@@ -21,7 +21,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.lcsim.fit.helicaltrack.HelixParamCalculator;
 
 public class CalculateAcceptanceFromMadGraph {
@@ -165,7 +165,7 @@
         // Set up command line parsing.
         Options options = createCommandLineOptions();
 
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
 
         // Parse command line arguments.
         CommandLine cl = null;

Modified: java/branches/jeremy-dev/util/src/main/java/org/hps/util/ConvertToStdhep.java
 =============================================================================
--- java/branches/jeremy-dev/util/src/main/java/org/hps/util/ConvertToStdhep.java	(original)
+++ java/branches/jeremy-dev/util/src/main/java/org/hps/util/ConvertToStdhep.java	Tue Mar  1 11:15:40 2016
@@ -31,7 +31,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.lcsim.detector.IRotation3D;
 import org.lcsim.detector.RotationGeant;
 
@@ -95,7 +95,7 @@
         // Set up command line parsing.
         Options options = createCommandLineOptions();
 
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
 
         // Parse command line arguments.
         CommandLine cl = null;

Modified: java/branches/jeremy-dev/util/src/main/java/org/hps/util/DumpLHEEventsToASCII.java
 =============================================================================
--- java/branches/jeremy-dev/util/src/main/java/org/hps/util/DumpLHEEventsToASCII.java	(original)
+++ java/branches/jeremy-dev/util/src/main/java/org/hps/util/DumpLHEEventsToASCII.java	Tue Mar  1 11:15:40 2016
@@ -26,7 +26,7 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.PosixParser;
 import org.lcsim.detector.IRotation3D;
 import org.lcsim.detector.RotationGeant;
 
@@ -89,7 +89,7 @@
         // Set up command line parsing.
         Options options = createCommandLineOptions();
 
-        CommandLineParser parser = new DefaultParser();
+        CommandLineParser parser = new PosixParser();
 
         // Parse command line arguments.
         CommandLine cl = null;