LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  February 2016

HPS-SVN February 2016

Subject:

r4264 - in /java/trunk: analysis/src/main/java/org/hps/analysis/dataquality/ steering-files/src/main/resources/org/hps/steering/production/

From:

[log in to unmask]

Reply-To:

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

Date:

Mon, 29 Feb 2016 01:34:16 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1601 lines)

Author: [log in to unmask]
Date: Sun Feb 28 17:34:14 2016
New Revision: 4264

Log:
you dont need the beam line energy in an argument anymore

Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
    java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java	Sun Feb 28 17:34:14 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/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java	Sun Feb 28 17:34:14 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/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java	Sun Feb 28 17:34:14 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,11 +75,7 @@
 
     private final static Logger LOGGER = Logger.getLogger(TridentMonitoring.class.getPackage().getName());
 
-    private double ebeam = 1.05;
-
-    public void setBeamEnergy(double ebeam) {
-        this.ebeam = ebeam;
-    }
+   
 
     private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
 //    private static final int nCuts = 9;
@@ -316,11 +314,16 @@
         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) {

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java	Sun Feb 28 17:34:14 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,622 +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;
-    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/";
-
-    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);
-        
-
-        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);
-        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);
-    
-        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);
-            }
-        }
-    }
+	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
-    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);
-    }
+	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/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim	Sun Feb 28 17:34:14 2016
@@ -86,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>
@@ -106,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>
@@ -122,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>
@@ -162,30 +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>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <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>
@@ -204,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>
@@ -256,31 +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>
-            <beamEnergy>${beamEnergy}</beamEnergy>
             <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>
@@ -299,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"/>

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

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

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

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

Privacy Notice, Security Notice and Terms of Use