Print

Print


Author: [log in to unmask]
Date: Tue Apr  7 19:10:15 2015
New Revision: 2664

Log:
add basic DQM plots for pair/trident monitoring

Added:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
      - copied, changed from r2663, java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
    java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java	Tue Apr  7 19:10:15 2015
@@ -117,36 +117,42 @@
             sumchisq += trk.getChi2();
 
             int nStrips = 0;
+            int nSeedStrips = 0;
             double meanTime = 0;
-            double rmsTime = 0;
-
-            int nSeedStrips = 0;
-            double rmsSeedTime = 0;
+            double meanSeedTime = 0;
             for (TrackerHit hit : trk.getTrackerHits()) {
-//                System.out.format("cross time: %f\n", hit.getTime());
                 Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
                 for (TrackerHit hts : htsList) {
                     nStrips++;
                     meanTime += hts.getTime();
-                    rmsTime += hts.getTime() * hts.getTime();
-//                    rmsTime += Math.abs(hts.getTime());
-
-//                    System.out.format("strip time: %f\n", hts.getTime());
                     int layer = ((HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement()).getLayerNumber();
                     if (layer <= 6) {
                         nSeedStrips++;
-                        rmsSeedTime += hts.getTime() * hts.getTime();
+                        meanSeedTime += hts.getTime();
                     }
                 }
             }
             meanTime /= nStrips;
-//            rmsTime = Math.sqrt(rmsTime / nStrips);
+            meanSeedTime /= nSeedStrips;
+
+            double rmsTime = 0;
+            double rmsSeedTime = 0;
+            for (TrackerHit hit : trk.getTrackerHits()) {
+                Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+                for (TrackerHit hts : htsList) {
+                    rmsTime += Math.pow(hts.getTime() - meanTime, 2);
+                    int layer = ((HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement()).getLayerNumber();
+                    if (layer <= 6) {
+                        rmsSeedTime += Math.pow(hts.getTime() - meanSeedTime, 2);
+                    }
+                }
+            }
             rmsTime = Math.sqrt(rmsTime / nStrips);
             aida.histogram1D(plotDir + "Mean time of hits on track").fill(meanTime);
             aida.histogram1D(plotDir + "RMS time of hits on track").fill(rmsTime);
             aida.histogram2D(plotDir + "Track chi2 vs. RMS time of hits").fill(rmsTime, trk.getChi2());
 
-            rmsSeedTime = Math.sqrt(rmsSeedTime/nSeedStrips);
+            rmsSeedTime = Math.sqrt(rmsSeedTime / nSeedStrips);
             aida.histogram1D(plotDir + "RMS time of hits on seed layers").fill(rmsSeedTime);
 //            System.out.format("%d seed strips, RMS time %f\n", nSeedStrips, rmsSeedTime);
 

Copied: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java (from r2663, 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/TridentMonitoring.java	Tue Apr  7 19:10:15 2015
@@ -5,29 +5,33 @@
 import hep.aida.IFitResult;
 import hep.aida.IFitter;
 import hep.aida.IHistogram1D;
-import hep.aida.IPlotter;
-import hep.aida.IPlotterStyle;
-import java.io.IOException;
-import java.util.HashMap;
+import hep.aida.IHistogram2D;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 import java.util.Map.Entry;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.LCRelation;
 import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.RelationalTable;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
 import org.lcsim.event.Vertex;
+import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.geometry.Detector;
 
 /**
- * DQM driver V0 particles (i.e. e+e- pars) plots
- * things like number of vertex position an mass
+ * DQM driver V0 particles (i.e. e+e- pars) plots things like number of vertex
+ * position an mass
  *
  * @author mgraham on May 14, 2014
  *
  */
-public class V0Monitoring extends DataQualityMonitor {
-
+public class TridentMonitoring extends DataQualityMonitor {
+
+    private final String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
+    private final String rotatedHelicalTrackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations";
+    private double ebeam = 2.2;
     String finalStateParticlesColName = "FinalStateParticles";
     String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
     String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
@@ -44,54 +48,86 @@
     double sumChi2 = 0.0;
 
     boolean debug = false;
-    private String plotDir = "V0Monitoring/";
+    private String plotDir = "TridentMonitoring/";
+    IHistogram2D trackTime2D;
+    IHistogram1D trackTimeDiff;
+    IHistogram2D vertexMassMomentum;
+    IHistogram2D vertexedTrackMomentum2D;
+    IHistogram2D vertexPxPy;
+    IHistogram1D goodVertexMass;
 
     @Override
     protected void detectorChanged(Detector detector) {
-        System.out.println("V0Monitoring::detectorChanged  Setting up the plotter");
+        System.out.println("TridentMonitoring::detectorChanged  Setting up the plotter");
         aida.tree().cd("/");
 
         /*  V0 Quantities   */
         /*  Mass, vertex, chi^2 of fit */
         /* beamspot constrained */
-        IHistogram1D nV0 = aida.histogram1D(plotDir + "Number of V0 per event", 10, 0, 10);
-        IHistogram1D bsconMass = aida.histogram1D(plotDir + "BS Constrained Mass (GeV)", 100, 0, 0.200);
-        IHistogram1D bsconVx = aida.histogram1D(plotDir + "BS Constrained Vx (mm)", 50, -1, 1);
-        IHistogram1D bsconVy = aida.histogram1D(plotDir + "BS Constrained Vy (mm)", 50, -1, 1);
-        IHistogram1D bsconVz = aida.histogram1D(plotDir + "BS Constrained Vz (mm)", 50, -10, 10);
-        IHistogram1D bsconChi2 = aida.histogram1D(plotDir + "BS Constrained Chi2", 25, 0, 25);
-        /* target constrained */
-        IHistogram1D tarconMass = aida.histogram1D(plotDir + "Target Constrained Mass (GeV)", 100, 0, 0.200);
-        IHistogram1D tarconVx = aida.histogram1D(plotDir + "Target Constrained Vx (mm)", 50, -1, 1);
-        IHistogram1D tarconVy = aida.histogram1D(plotDir + "Target Constrained Vy (mm)", 50, -1, 1);
-        IHistogram1D tarconVz = aida.histogram1D(plotDir + "Target Constrained Vz (mm)", 50, -10, 10);
-        IHistogram1D tarconChi2 = aida.histogram1D(plotDir + "Target Constrained Chi2", 25, 0, 25);
+//        IHistogram1D nV0 = aida.histogram1D(plotDir + "Number of V0 per event", 10, 0, 10);
+//        IHistogram1D bsconMass = aida.histogram1D(plotDir + "BS Constrained Mass (GeV)", 100, 0, 0.200);
+//        IHistogram1D bsconVx = aida.histogram1D(plotDir + "BS Constrained Vx (mm)", 50, -1, 1);
+//        IHistogram1D bsconVy = aida.histogram1D(plotDir + "BS Constrained Vy (mm)", 50, -1, 1);
+//        IHistogram1D bsconVz = aida.histogram1D(plotDir + "BS Constrained Vz (mm)", 50, -10, 10);
+//        IHistogram1D bsconChi2 = aida.histogram1D(plotDir + "BS Constrained Chi2", 25, 0, 25);
+//        /* target constrained */
+//        IHistogram1D tarconMass = aida.histogram1D(plotDir + "Target Constrained Mass (GeV)", 100, 0, 0.200);
+//        IHistogram1D tarconVx = aida.histogram1D(plotDir + "Target Constrained Vx (mm)", 50, -1, 1);
+//        IHistogram1D tarconVy = aida.histogram1D(plotDir + "Target Constrained Vy (mm)", 50, -1, 1);
+//        IHistogram1D tarconVz = aida.histogram1D(plotDir + "Target Constrained Vz (mm)", 50, -10, 10);
+//        IHistogram1D tarconChi2 = aida.histogram1D(plotDir + "Target Constrained Chi2", 25, 0, 25);
+        trackTimeDiff = aida.histogram1D(plotDir + "Track time difference", 100, -25, 25);
+        trackTime2D = aida.histogram2D(plotDir + "Track time vs. track time", 100, -50, 100, 100, -50, 100);
+        vertexMassMomentum = aida.histogram2D(plotDir + "Vertex mass vs. vertex momentum", 100, 0, 4.0, 100, 0, 1.0);
+        vertexedTrackMomentum2D = aida.histogram2D(plotDir + "Positron vs. electron momentum", 100, 0, 2.5, 100, 0, 2.5);
+        vertexPxPy = aida.histogram2D(plotDir + "Vertex Py vs. Px", 100, -0.1, 0.2, 100, -0.1, 0.1);
+        goodVertexMass = aida.histogram1D(plotDir + "Good vertex mass", 100, 0, 0.5);
 
     }
 
     @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;
+        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;
+        }
         nRecoEvents++;
 
+        RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+        List<LCRelation> hitrelations = event.get(LCRelation.class, helicalTrackHitRelationsCollectionName);
+        for (LCRelation relation : hitrelations) {
+            if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+                hittostrip.add(relation.getFrom(), relation.getTo());
+            }
+        }
+
+        RelationalTable hittorotated = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
+        List<LCRelation> rotaterelations = event.get(LCRelation.class, rotatedHelicalTrackHitRelationsCollectionName);
+        for (LCRelation relation : rotaterelations) {
+            if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+                hittorotated.add(relation.getFrom(), relation.getTo());
+            }
+        }
+
         List<ReconstructedParticle> beamConstrainedV0List = event.get(ReconstructedParticle.class, beamConV0CandidatesColName);
-        aida.histogram1D(plotDir + "Number of V0 per event").fill(beamConstrainedV0List.size());
+//        aida.histogram1D(plotDir + "Number of V0 per event").fill(beamConstrainedV0List.size());
         for (ReconstructedParticle bsV0 : beamConstrainedV0List) {
             nTotV0++;
             Vertex bsVert = bsV0.getStartVertex();
-            aida.histogram1D(plotDir + "BS Constrained Vx (mm)").fill(bsVert.getPosition().x());
-            aida.histogram1D(plotDir + "BS Constrained Vy (mm)").fill(bsVert.getPosition().y());
-            aida.histogram1D(plotDir + "BS Constrained Vz (mm)").fill(bsVert.getPosition().z());
-            aida.histogram1D(plotDir + "BS Constrained Mass (GeV)").fill(bsV0.getMass());
-            aida.histogram1D(plotDir + "BS Constrained Chi2").fill(bsVert.getChi2());
+//            aida.histogram1D(plotDir + "BS Constrained Vx (mm)").fill(bsVert.getPosition().x());
+//            aida.histogram1D(plotDir + "BS Constrained Vy (mm)").fill(bsVert.getPosition().y());
+//            aida.histogram1D(plotDir + "BS Constrained Vz (mm)").fill(bsVert.getPosition().z());
+//            aida.histogram1D(plotDir + "BS Constrained Mass (GeV)").fill(bsV0.getMass());
+//            aida.histogram1D(plotDir + "BS Constrained Chi2").fill(bsVert.getChi2());
             sumMass += bsV0.getMass();
             sumVx += bsVert.getPosition().x();
             sumVy += bsVert.getPosition().y();
@@ -102,19 +138,63 @@
         List<ReconstructedParticle> targetConstrainedV0List = event.get(ReconstructedParticle.class, targetV0ConCandidatesColName);
         for (ReconstructedParticle tarV0 : targetConstrainedV0List) {
             Vertex tarVert = tarV0.getStartVertex();
-            aida.histogram1D(plotDir + "Target Constrained Vx (mm)").fill(tarVert.getPosition().x());
-            aida.histogram1D(plotDir + "Target Constrained Vy (mm)").fill(tarVert.getPosition().y());
-            aida.histogram1D(plotDir + "Target Constrained Vz (mm)").fill(tarVert.getPosition().z());
-            aida.histogram1D(plotDir + "Target Constrained Mass (GeV)").fill(tarV0.getMass());
-            aida.histogram1D(plotDir + "Target Constrained Chi2").fill(tarVert.getChi2());
+//            aida.histogram1D(plotDir + "Target Constrained Vx (mm)").fill(tarVert.getPosition().x());
+//            aida.histogram1D(plotDir + "Target Constrained Vy (mm)").fill(tarVert.getPosition().y());
+//            aida.histogram1D(plotDir + "Target Constrained Vz (mm)").fill(tarVert.getPosition().z());
+//            aida.histogram1D(plotDir + "Target Constrained Mass (GeV)").fill(tarV0.getMass());
+//            aida.histogram1D(plotDir + "Target Constrained Chi2").fill(tarVert.getChi2());
+            List<Track> tracks = new ArrayList<Track>();
+            ReconstructedParticle electron = null, positron = null;
+            for (ReconstructedParticle particle : tarV0.getParticles()) {
+                tracks.addAll(particle.getTracks());
+                if (particle.getCharge() > 0) {
+                    positron = particle;
+                } else if (particle.getCharge() < 0) {
+                    electron = particle;
+                } else {
+                    throw new RuntimeException("expected only electron and positron in vertex, got something with charge 0");
+                }
+            }
+            if (tracks.size() != 2) {
+                throw new RuntimeException("expected two tracks in vertex, got " + tracks.size());
+            }
+            List<Double> trackTimes = new ArrayList<Double>();
+            for (Track track : tracks) {
+                int nStrips = 0;
+                double meanTime = 0;
+                for (TrackerHit hit : track.getTrackerHits()) {
+                    Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+                    for (TrackerHit hts : htsList) {
+                        nStrips++;
+                        meanTime += hts.getTime();
+                    }
+                }
+                meanTime /= nStrips;
+                trackTimes.add(meanTime);
+            }
+            trackTime2D.fill(trackTimes.get(0), trackTimes.get(1));
+            trackTimeDiff.fill(trackTimes.get(0) - trackTimes.get(1));
+            boolean trackTimeDiffCut = Math.abs(trackTimes.get(0) - trackTimes.get(1)) < 5.0;
+            boolean pCut = electron.getMomentum().magnitude() > 0.4 && positron.getMomentum().magnitude() > 0.4;
+            boolean pTotCut = tarV0.getMomentum().magnitude() > 0.8 * 2.2 && tarV0.getMomentum().magnitude() < 2.2;
+            if (trackTimeDiffCut) {
+                vertexMassMomentum.fill(tarV0.getMomentum().magnitude(), tarV0.getMass());
+                vertexedTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
+                if (pCut && pTotCut) {
+                    vertexPxPy.fill(tarV0.getMomentum().x(), tarV0.getMomentum().y());
+                    goodVertexMass.fill(tarV0.getMass());
+                }
+            }
+//            System.out.println(tarV0.getTracks())
         }
     }
 
     @Override
     public void printDQMData() {
-        System.out.println("V0Monitoring::printDQMData");
-        for (Entry<String, Double> entry : monitoredQuantityMap.entrySet())
+        System.out.println("TridentMonitoring::printDQMData");
+        for (Entry<String, Double> entry : monitoredQuantityMap.entrySet()) {
             System.out.println(entry.getKey() + " = " + entry.getValue());
+        }
         System.out.println("*******************************");
     }
 
@@ -127,63 +207,66 @@
         IAnalysisFactory analysisFactory = IAnalysisFactory.create();
         IFitFactory fitFactory = analysisFactory.createFitFactory();
         IFitter fitter = fitFactory.createFitter("chi2");
-        IHistogram1D bsconVx = aida.histogram1D(plotDir + "BS Constrained Vx (mm)");
-        IHistogram1D bsconVy = aida.histogram1D(plotDir + "BS Constrained Vy (mm)");
-        IHistogram1D bsconVz = aida.histogram1D(plotDir + "BS Constrained Vz (mm)");
-        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)\"");
-
-        double[] parsVx = resVx.fittedParameters();
-        double[] parsVy = resVy.fittedParameters();
-        double[] parsVz = resVz.fittedParameters();
-
-        for (int i = 0; i < 5; i++)
-            System.out.println("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[0], (double) nTotV0 / nRecoEvents);
-        monitoredQuantityMap.put(fpQuantNames[1], sumMass / nTotV0);
-//        monitoredQuantityMap.put(fpQuantNames[2], sumVx / nTotV0);
-//        monitoredQuantityMap.put(fpQuantNames[3], sumVy / nTotV0);
-//        monitoredQuantityMap.put(fpQuantNames[4], sumVz / nTotV0);
-        monitoredQuantityMap.put(fpQuantNames[2], parsVx[1]);
-        monitoredQuantityMap.put(fpQuantNames[3], parsVy[1]);
-        monitoredQuantityMap.put(fpQuantNames[4], parsVz[1]);
-        monitoredQuantityMap.put(fpQuantNames[5], parsVx[2]);
-        monitoredQuantityMap.put(fpQuantNames[6], parsVy[2]);
-        monitoredQuantityMap.put(fpQuantNames[7], parsVz[2]);
-
-        monitoredQuantityMap.put(fpQuantNames[8], sumChi2 / nTotV0);
+//        IHistogram1D bsconVx = aida.histogram1D(plotDir + "BS Constrained Vx (mm)");
+//        IHistogram1D bsconVy = aida.histogram1D(plotDir + "BS Constrained Vy (mm)");
+//        IHistogram1D bsconVz = aida.histogram1D(plotDir + "BS Constrained Vz (mm)");
+//        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)\"");
+//
+//        double[] parsVx = resVx.fittedParameters();
+//        double[] parsVy = resVy.fittedParameters();
+//        double[] parsVz = resVz.fittedParameters();
+//
+//        for (int i = 0; i < 5; i++) {
+//            System.out.println("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(TridentMonitoring.class.getName()).log(Level.SEVERE, null, ex);
+//            }
+//        }
+//
+//        monitoredQuantityMap.put(fpQuantNames[0], (double) nTotV0 / nRecoEvents);
+//        monitoredQuantityMap.put(fpQuantNames[1], sumMass / nTotV0);
+////        monitoredQuantityMap.put(fpQuantNames[2], sumVx / nTotV0);
+////        monitoredQuantityMap.put(fpQuantNames[3], sumVy / nTotV0);
+////        monitoredQuantityMap.put(fpQuantNames[4], sumVz / nTotV0);
+//        monitoredQuantityMap.put(fpQuantNames[2], parsVx[1]);
+//        monitoredQuantityMap.put(fpQuantNames[3], parsVy[1]);
+//        monitoredQuantityMap.put(fpQuantNames[4], parsVz[1]);
+//        monitoredQuantityMap.put(fpQuantNames[5], parsVx[2]);
+//        monitoredQuantityMap.put(fpQuantNames[6], parsVy[2]);
+//        monitoredQuantityMap.put(fpQuantNames[7], parsVz[2]);
+//
+//        monitoredQuantityMap.put(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
+        {
             System.out.println("ALTER TABLE dqm ADD " + fpQuantNames[i] + " double;");
+        }
     }
 
     IFitResult fitVertexPosition(IHistogram1D h1d, IFitter fitter, double[] init, String range) {

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	Tue Apr  7 19:10:15 2015
@@ -15,6 +15,7 @@
         <driver name="TrackMCEfficiency"/> 
         <driver name="FinalStateMonitoring"/>          
         <driver name="V0Monitoring"/>          
+        <driver name="TridentMonitoring"/>
         <driver name="AidaSaveDriver"/>
         <driver name="CleanupDriver"/>
     </execute>    
@@ -48,6 +49,9 @@
         <driver name="V0Monitoring" type="org.hps.analysis.dataquality.V0Monitoring">
             <overwriteDB>false</overwriteDB>
         </driver>
+        <driver name="TridentMonitoring" type="org.hps.analysis.dataquality.TridentMonitoring">
+            <overwriteDB>false</overwriteDB>
+        </driver>
         <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>
 
     </drivers>

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim	Tue Apr  7 19:10:15 2015
@@ -15,7 +15,7 @@
         <driver name="EcalClusterer" />
         <driver name="ReconParticle" />  
         <driver name="TrackDataDriver" />              
-        <driver name="GBLDriver"/> 
+        <!--<driver name="GBLDriver"/>--> 
         <driver name="LCIOWriter"/>
         <driver name="CleanupDriver"/>
     </execute>    
@@ -26,7 +26,7 @@
         <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup"/>
         <driver name="RawTrackerHitFitterDriver" type="org.hps.recon.tracking.RawTrackerHitFitterDriver">
             <fitAlgorithm>Pileup</fitAlgorithm>
-            <useTimestamps>true</useTimestamps>
+            <useTimestamps>false</useTimestamps>
             <correctT0Shift>false</correctT0Shift>
             <useTruthTime>false</useTruthTime>
             <subtractTOF>true</subtractTOF>

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java	Tue Apr  7 19:10:15 2015
@@ -22,6 +22,7 @@
     private int seedsPassed = 0;
     private int tracksChecked = 0;
     private int tracksPassed = 0;
+    private boolean debug = false;
 
     public HitTimeTrackCheck(double rmsTimeCut) {
         this.rmsTimeCut = rmsTimeCut;
@@ -56,7 +57,7 @@
         if (passCheck) {
             seedsPassed++;
         }
-        if (seedsChecked % 10000 == 0) {
+        if (debug && seedsChecked % 10000 == 0) {
             System.out.format("Checked %d seeds, %d passed (%d failed)\n", seedsChecked, seedsPassed, seedsChecked - seedsPassed);
         }
         return passCheck;
@@ -91,7 +92,7 @@
         if (passCheck) {
             tracksPassed++;
         }
-        if (tracksChecked % 100 == 0) {
+        if (debug && tracksChecked % 100 == 0) {
             System.out.format("Checked %d tracks, %d passed (%d failed)\n", tracksChecked, tracksPassed, tracksChecked - tracksPassed);
         }
         return passCheck;