Print

Print


Author: [log in to unmask]
Date: Mon Nov 10 18:24:53 2014
New Revision: 1491

Log:
Modifications to analysis classes to let us use HPS style HelicalTrackHit2D and non-bend only fits

Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java
    java/trunk/analysis/src/main/java/org/hps/analysis/examples/TrackAnalysis.java

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	Mon Nov 10 18:24:53 2014
@@ -40,7 +40,7 @@
 
     String finalStateParticlesColName = "FinalStateParticles";
 
-    String[] fpQuantNames = {"nEle_per_Event", "nPos_per_Event", "nPhoton_per_Event", "nUnAssociatedTracks_per_Event", "avg_delX_at_ECal", "avg_delY_at_ECal", "avg_E_Over_P","avg_mom_beam_elec","sig_mom_beam_elec"};
+    String[] fpQuantNames = {"nEle_per_Event", "nPos_per_Event", "nPhoton_per_Event", "nUnAssociatedTracks_per_Event", "avg_delX_at_ECal", "avg_delY_at_ECal", "avg_E_Over_P", "avg_mom_beam_elec", "sig_mom_beam_elec"};
     //some counters
     int nRecoEvents = 0;
     int nTotEle = 0;
@@ -206,10 +206,9 @@
         IFitter fitter = fitFactory.createFitter("chi2");
         IHistogram1D beamE = aida.histogram1D(plotDir + "Beam Electrons Pz (GeV)");
         IFitResult result = fitBeamEnergyPeak(beamE, fitter, "range=\"(-10.0,10.0)\"");
-        double[] pars=result.fittedParameters();
-        for (int i = 0; i < 5; i++) {           
+        double[] pars = result.fittedParameters();
+        for (int i = 0; i < 5; i++)
             System.out.println("Beam Energy Peak:  " + result.fittedParameterNames()[i] + " = " + pars[i]);
-        }
 
         monitoredQuantityMap.put(fpQuantNames[0], (double) nTotEle / nRecoEvents);
         monitoredQuantityMap.put(fpQuantNames[1], (double) nTotPos / nRecoEvents);
@@ -225,14 +224,15 @@
         IPlotterStyle pstyle = plotter.style();
         pstyle.legendBoxStyle().setVisible(false);
         pstyle.dataStyle().fillStyle().setColor("green");
-        pstyle.dataStyle().lineStyle().setColor("black");        
-        plotter.region(0).plot(beamE);              
+        pstyle.dataStyle().lineStyle().setColor("black");
+        plotter.region(0).plot(beamE);
         plotter.region(0).plot(result.fittedFunction());
-        try {
-            plotter.writeToFile("beamEnergyElectrons.png");
-        } catch (IOException ex) {
-            Logger.getLogger(FinalStateMonitoring.class.getName()).log(Level.SEVERE, null, ex);
-        }
+        if (outputPlots)
+            try {
+                plotter.writeToFile(outputPlotDir + "beamEnergyElectrons.png");
+            } catch (IOException ex) {
+                Logger.getLogger(FinalStateMonitoring.class.getName()).log(Level.SEVERE, null, ex);
+            }
     }
 
     @Override
@@ -243,9 +243,9 @@
 
     IFitResult fitBeamEnergyPeak(IHistogram1D h1d, IFitter fitter, String range) {
 //        return fitter.fit(h1d, "g", range);
-   
+
 //        return fitter.fit(h1d, "g+p1", init, range);
-  double[] init = {20.0, 2.2, 0.12, 10, 0.0};
+        double[] init = {20.0, 2.2, 0.12, 10, 0.0};
 //        double[] init = {20.0, 2.2, 0.1};
         return fitter.fit(h1d, "g+p1", init);
     }

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java	Mon Nov 10 18:24:53 2014
@@ -1,5 +1,6 @@
 package org.hps.analysis.dataquality;
 
+import hep.aida.IHistogram1D;
 import hep.aida.IHistogramFactory;
 import hep.aida.IProfile1D;
 import hep.physics.vec.BasicHep3Vector;
@@ -8,11 +9,9 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import org.hps.analysis.examples.LCIOTrackAnalysis;
 import org.hps.analysis.examples.TrackAnalysis;
 import org.hps.recon.tracking.FindableTrack;
 import org.hps.recon.tracking.FittedRawTrackerHit;
-import org.lcsim.detector.tracker.silicon.SiSensor;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.LCRelation;
 import org.lcsim.event.MCParticle;
@@ -20,14 +19,13 @@
 import org.lcsim.event.RelationalTable;
 import org.lcsim.event.SimTrackerHit;
 import org.lcsim.event.Track;
+import org.lcsim.event.TrackState;
 import org.lcsim.event.TrackerHit;
 import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.fit.helicaltrack.HelicalTrackCross;
 import org.lcsim.fit.helicaltrack.HelixParamCalculator;
 import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.IDDecoder;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
 
 /**
  * DQM driver for the monte carlo track efficiency; makes a bunch of efficiency
@@ -41,15 +39,14 @@
 public class TrackMCEfficiency extends DataQualityMonitor {
 
     private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
-    private String helicalTrackHitCollectionName = "HelicalTrackHits";
-    private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits";
+    private String trackHitCollectionName = "RotatedHelicalTrackHits";
+    private String fittedSVTHitCollectionName = "SVTFittedRawTrackerHits";
     private String trackerHitCollectionName = "TrackerHits";
     private String siClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
-    private String rotatedMCRelationsCollectionName = "RotatedHelicalTrackMCRelations";
-    private final String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
-    private final String rotatedHelicalTrackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations";
+    private String trackHitMCRelationsCollectionName = "RotatedHelicalTrackMCRelations";
+    private String detectorFrameHitRelationsCollectionName = "HelicalTrackHitRelations";
+    private String trackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations";
     private String trackCollectionName = "MatchedTracks";
-    private String trackerName = "Tracker";
     private Detector detector = null;
     IDDecoder dec;
     private IProfile1D peffFindable;
@@ -65,13 +62,25 @@
     int findableelectrons = 0;
     int findableTracks = 0;
     double foundTracks = 0;
-    private static final String nameStrip = "Tracker_TestRunModule_";
-    private List<SiSensor> sensors;
-    private boolean debugTrackEfficiency = false;
+    private boolean debugTrackEfficiency = true;
     private String plotDir = "TrackMCEfficiency/";
-
-    public void setHelicalTrackHitCollectionName(String helicalTrackHitCollectionName) {
-        this.helicalTrackHitCollectionName = helicalTrackHitCollectionName;
+    private String resDir = "TrackMCResolution/";
+    private String misidDir = "TrackMCMisId/";
+
+    public void setTrackHitCollectionName(String trackHitCollectionName) {
+        this.trackHitCollectionName = trackHitCollectionName;
+    }
+
+    public void setTrackHitMCRelationsCollectionName(String trackHitMCRelationsCollectionName) {
+        this.trackHitMCRelationsCollectionName = trackHitMCRelationsCollectionName;
+    }
+
+    public void setDetectorFrameHitRelationsCollectionName(String detectorFrameHitRelationsCollectionName) {
+        this.detectorFrameHitRelationsCollectionName = detectorFrameHitRelationsCollectionName;
+    }
+
+    public void setTrackHitRelationsCollectionName(String trackHitRelationsCollectionName) {
+        this.trackHitRelationsCollectionName = trackHitRelationsCollectionName;
     }
 
     public void setTrackCollectionName(String trackCollectionName) {
@@ -86,17 +95,23 @@
     protected void detectorChanged(Detector detector) {
         this.detector = detector;
         aida.tree().mkdir(plotDir);
+        aida.tree().mkdir(resDir);
+        aida.tree().mkdir(misidDir);
         aida.tree().cd("/");
         IHistogramFactory hf = aida.histogramFactory();
 
         peffFindable = hf.createProfile1D(plotDir + "Findable Efficiency vs p", "", 20, 0., beamP);
         phieffFindable = hf.createProfile1D(plotDir + "Findable Efficiency vs phi", "", 25, -0.25, 0.25);
         ctheffFindable = hf.createProfile1D(plotDir + "Findable Efficiency vs cos(theta)", "", 25, -0.25, 0.25);
-
         peffElectrons = hf.createProfile1D(plotDir + "Electrons Efficiency vs p", "", 20, 0., beamP);
         phieffElectrons = hf.createProfile1D(plotDir + "Electrons Efficiency vs phi", "", 25, -0.25, 0.25);
         ctheffElectrons = hf.createProfile1D(plotDir + "Electrons Efficiency vs cos(theta)", "", 25, -0.25, 0.25);
 
+        IHistogram1D pMCRes = hf.createHistogram1D(resDir + "Momentum Resolution", 50, -0.5, 0.5);
+        IHistogram1D phi0MCRes = hf.createHistogram1D(resDir + "phi0 Resolution", 50, -0.1, 0.1);
+        IHistogram1D d0MCRes = hf.createHistogram1D(resDir + "d0 Resolution", 50, -0.5, 0.5);
+        IHistogram1D z0MCRes = hf.createHistogram1D(resDir + "z0 Resolution", 50, -1.0,1.0);
+        IHistogram1D tanLambdaMCRes = hf.createHistogram1D(resDir + "tanLambda Resolution", 50, -0.1, 0.1);
     }
 
     @Override
@@ -106,22 +121,28 @@
 
         //make sure the required collections exist
         if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
-            return;
-        }
-        if (!event.hasCollection(LCRelation.class, fittedTrackerHitCollectionName)) {
+            System.out.println(this.getClass().getSimpleName() + ": no collection found " + rawTrackerHitCollectionName);
+            return;
+        }
+        if (!event.hasCollection(LCRelation.class, fittedSVTHitCollectionName)) {
+            System.out.println(this.getClass().getSimpleName() + ": no collection found " + fittedSVTHitCollectionName);
             return;
         }
         if (!event.hasCollection(Track.class, trackCollectionName)) {
-            return;
-        }
-        if (!event.hasCollection(LCRelation.class, rotatedMCRelationsCollectionName)) {
+            System.out.println(this.getClass().getSimpleName() + ": no collection found " + trackCollectionName);
+            return;
+        }
+        if (!event.hasCollection(LCRelation.class, trackHitMCRelationsCollectionName)) {
+            System.out.println(this.getClass().getSimpleName() + ": no collection found " + trackHitMCRelationsCollectionName);
             return;
         }
         if (!event.hasCollection(TrackerHit.class, siClusterCollectionName)) {
+            System.out.println(this.getClass().getSimpleName() + ": no collection found " + siClusterCollectionName);
             return;
         }
 
         if (!event.hasCollection(SimTrackerHit.class, trackerHitCollectionName)) {
+            System.out.println(this.getClass().getSimpleName() + ": no collection found " + trackerHitCollectionName);
             return;
         }
         //
@@ -131,33 +152,27 @@
         //make some maps and relation tables        
         Map<Track, TrackAnalysis> tkanalMap = new HashMap<Track, TrackAnalysis>();
         RelationalTable hittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
-        List<LCRelation> mcrelations = event.get(LCRelation.class, rotatedMCRelationsCollectionName);
-        for (LCRelation relation : mcrelations) {
-            if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+        List<LCRelation> mcrelations = event.get(LCRelation.class, trackHitMCRelationsCollectionName);
+        System.out.println(this.getClass().getSimpleName() + ": number of MC relations = " + mcrelations.size());
+        for (LCRelation relation : mcrelations)
+            if (relation != null && relation.getFrom() != null && relation.getTo() != null)
                 hittomc.add(relation.getFrom(), relation.getTo());
-            }
-        }
-
+        System.out.println(this.getClass().getSimpleName() + ": number of hittomc relations = " + hittomc.size());
         RelationalTable mcHittomcP = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
         //  Get the collections of SimTrackerHits
         List<List<SimTrackerHit>> simcols = event.get(SimTrackerHit.class);
         //  Loop over the SimTrackerHits and fill in the relational table
-        for (List<SimTrackerHit> simlist : simcols) {
-            for (SimTrackerHit simhit : simlist) {
-                if (simhit.getMCParticle() != null) {
+        for (List<SimTrackerHit> simlist : simcols)
+            for (SimTrackerHit simhit : simlist)
+                if (simhit.getMCParticle() != null)
                     mcHittomcP.add(simhit, simhit.getMCParticle());
-                }
-            }
-        }
         RelationalTable trktomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
         RelationalTable rawtomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
         if (event.hasCollection(LCRelation.class, "SVTTrueHitRelations")) {
             List<LCRelation> trueHitRelations = event.get(LCRelation.class, "SVTTrueHitRelations");
-            for (LCRelation relation : trueHitRelations) {
-                if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+            for (LCRelation relation : trueHitRelations)
+                if (relation != null && relation.getFrom() != null && relation.getTo() != null)
                     rawtomc.add(relation.getFrom(), relation.getTo());
-                }
-            }
         }
         // make relational table for strip clusters to mc particle
         List<TrackerHit> siClusters = event.get(TrackerHit.class, siClusterCollectionName);
@@ -166,54 +181,46 @@
             List<RawTrackerHit> rawHits = cluster.getRawHits();
             for (RawTrackerHit rth : rawHits) {
                 Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
-                if (simTrackerHits != null) {
-                    for (SimTrackerHit simhit : simTrackerHits) {
+                if (simTrackerHits != null)
+                    for (SimTrackerHit simhit : simTrackerHits)
                         clustertosimhit.add(cluster, simhit);
-                    }
-                }
             }
         }
         //relational tables from mc particle to raw and fitted tracker hits
         RelationalTable fittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
-        List<LCRelation> fittedTrackerHits = event.get(LCRelation.class, fittedTrackerHitCollectionName);
+        List<LCRelation> fittedTrackerHits = event.get(LCRelation.class, fittedSVTHitCollectionName);
         for (LCRelation hit : fittedTrackerHits) {
             RawTrackerHit rth = FittedRawTrackerHit.getRawTrackerHit(hit);
             Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
-            if (simTrackerHits != null) {
-                for (SimTrackerHit simhit : simTrackerHits) {
-                    if (simhit.getMCParticle() != null) {
+            if (simTrackerHits != null)
+                for (SimTrackerHit simhit : simTrackerHits)
+                    if (simhit.getMCParticle() != null)
                         fittomc.add(hit, simhit.getMCParticle());
-                    }
-                }
-            }
         }
 
         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) {
+        List<LCRelation> hitrelations = event.get(LCRelation.class, detectorFrameHitRelationsCollectionName);
+        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) {
+        List<LCRelation> rotaterelations = event.get(LCRelation.class, trackHitRelationsCollectionName);
+        for (LCRelation relation : rotaterelations)
+            if (relation != null && relation.getFrom() != null && relation.getTo() != null)
                 hittorotated.add(relation.getFrom(), relation.getTo());
-            }
-        }
 
         //  Instantiate the class that determines if a track is "findable"
         FindableTrack findable = new FindableTrack(event);
 
         List<Track> tracks = event.get(Track.class, trackCollectionName);
+        System.out.println(this.getClass().getSimpleName() + ": nTracks = " + tracks.size());
         for (Track trk : tracks) {
             TrackAnalysis tkanal = new TrackAnalysis(trk, hittomc, rawtomc, hittostrip, hittorotated);
             tkanalMap.put(trk, tkanal);
             MCParticle mcp = tkanal.getMCParticleNew();
-            if (mcp != null) //  Create a map between the tracks found and the assigned MC particle
-            {
+            if (mcp != null) {//  Create a map between the tracks found and the assigned MC particle            
+                System.out.println(this.getClass().getSimpleName() + ": found MCP match");
                 trktomc.add(trk, tkanal.getMCParticleNew());
             }
         }
@@ -235,7 +242,7 @@
             double eta = -Math.log(Math.tan(Math.atan2(pt, pz) / 2));
             double phi = Math.atan2(px, pz);
             //  Find the number of layers hit by this mc particle
-//            System.out.println("MC pt=" + pt);
+            System.out.println("MC pt=" + pt);
             int nhits = findable.LayersHit(mcp);
             boolean isFindable = findable.InnerTrackerIsFindable(mcp, nlayers - 2);
 
@@ -256,17 +263,14 @@
                 //it's the A'...let's see if we found both tracks.
                 List<MCParticle> daughters = mcp.getDaughters();
                 for (MCParticle d : daughters) {
-                    if (trktomc.allTo(d).isEmpty()) {
+                    if (trktomc.allTo(d).isEmpty())
                         bothreco = false;
-                    }
-                    if (!findable.InnerTrackerIsFindable(d, nlayers - 2)) {
+                    if (!findable.InnerTrackerIsFindable(d, nlayers - 2))
                         bothfindable = false;
-                    }
                 }
                 double vtxWgt = 0;
-                if (bothreco) {
+                if (bothreco)
                     vtxWgt = 1.0;
-                }
 //                VxEff.fill(mcp.getOriginX(), vtxWgt);
 //                VyEff.fill(mcp.getOriginY(), vtxWgt);
 //                VzEff.fill(mcp.getOriginZ(), vtxWgt);
@@ -282,23 +286,22 @@
                 _nchMCP++;
                 findableTracks++;
                 double wgt = 0.;
-                if (ntrk > 0) {
+                if (ntrk > 0)
                     wgt = 1.;
-                }
                 foundTracks += wgt;
                 peffFindable.fill(p, wgt);
                 phieffFindable.fill(phi, wgt);
                 ctheffFindable.fill(cth, wgt);
 
                 if (wgt == 0) {
+
                     Set<SimTrackerHit> mchitlist = mcHittomcP.allTo(mcp);
                     Set<HelicalTrackCross> hitlist = hittomc.allTo(mcp);
                     Set<FittedRawTrackerHit> fitlist = fittomc.allTo(mcp);
                     if (debugTrackEfficiency) {
-                        System.out.println("TrackMCEfficiencyMonitoring::  Missed a findable track with MC p = " + p);
-                        if (!hasHTHInEachLayer(hitlist, fitlist)) {
-                            System.out.println("This track failed becasue it's missing a helical track hit");
-                        }
+                        System.out.println(this.getClass().getSimpleName() + ":  Missed a findable track with MC p = " + p);
+                            if (!hasHTHInEachLayer(hitlist, fitlist))
+                                System.out.println("\t\tThis track failed becasue it's missing a helical track hit");
                     }
                 }
 
@@ -307,13 +310,26 @@
                 totelectrons++;
 //                    findableelectrons++;
                 double wgt = 0.;
-                if (ntrk > 0) {
+                if (ntrk > 0)
                     wgt = 1.;
-                }
                 foundelectrons += wgt;
                 peffElectrons.fill(p, wgt);
                 phieffElectrons.fill(phi, wgt);
                 ctheffElectrons.fill(cth, wgt);
+                if (ntrk == 1) {
+                    Track trk = (Track) trklist.toArray()[0];
+                    TrackState ts = trk.getTrackStates().get(0);
+                    double deld0 = d0 - ts.getD0();
+                    double delz0 = z0 - ts.getZ0();
+                    double delp = p - calcMagnitude(ts.getMomentum());
+                    double delphi0 = phi - ts.getPhi();
+                    double deltanlam = cth - ts.getTanLambda();
+                    aida.histogram1D(resDir + "Momentum Resolution").fill(delp);
+                    aida.histogram1D(resDir + "z0 Resolution").fill(delz0);
+                    aida.histogram1D(resDir + "d0 Resolution").fill(deld0);
+                    aida.histogram1D(resDir + "phi0 Resolution").fill(delphi0);
+                    aida.histogram1D(resDir + "tanLambda Resolution").fill(deltanlam);
+                }
 
                 //               }
             }
@@ -338,13 +354,15 @@
     }
 
     private boolean hasHTHInEachLayer(Set<HelicalTrackCross> list, Set<FittedRawTrackerHit> fitlist) {
+        if(list.size()==0)
+            return false;
+        if(!(list.toArray()[0] instanceof HelicalTrackCross))
+            return false;
         for (int layer = 1; layer < nlayers - 2; layer += 2) {
-            boolean hasThisLayer = false;
-            for (HelicalTrackCross hit : list) {
-                if (hit.Layer() == layer) {
+            boolean hasThisLayer = false;            
+            for (HelicalTrackCross hit : list)
+                if (hit.Layer() == layer)
                     hasThisLayer = true;
-                }
-            }
             if (!hasThisLayer) {
                 System.out.println("Missing reconstructed hit in layer = " + layer);
                 boolean hasFitHitSL1 = false;
@@ -366,12 +384,10 @@
 
                     }
                 }
-                if (!hasFitHitSL1) {
+                if (!hasFitHitSL1)
                     System.out.println("MISSING a hit in SL1!!!");
-                }
-                if (!hasFitHitSL2) {
+                if (!hasFitHitSL2)
                     System.out.println("MISSING a hit in SL2!!!");
-                }
 
                 return false;
             }
@@ -379,4 +395,8 @@
         return true;
     }
 
+    private double calcMagnitude(double[] vec) {
+        return Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]);
+    }
+
 }

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/examples/TrackAnalysis.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/examples/TrackAnalysis.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/examples/TrackAnalysis.java	Mon Nov 10 18:24:53 2014
@@ -6,9 +6,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.TreeMap;
-
-import hep.physics.matrix.BasicMatrix;
 import hep.physics.matrix.SymmetricMatrix;
 import hep.physics.vec.BasicHep3Matrix;
 import hep.physics.vec.BasicHep3Vector;
@@ -16,11 +13,11 @@
 import hep.physics.vec.VecOp;
 
 import org.apache.commons.math3.linear.Array2DRowRealMatrix;
-import org.apache.commons.math3.linear.ArrayRealVector;
 import org.apache.commons.math3.linear.EigenDecomposition;
 import org.apache.commons.math3.linear.RealMatrix;
 
 import org.lcsim.detector.tracker.silicon.HpsSiSensor; 
+import org.hps.recon.tracking.axial.HelicalTrack2DHit;
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.identifier.Identifier;
 import org.lcsim.event.MCParticle;
@@ -29,15 +26,11 @@
 import org.lcsim.event.SimTrackerHit;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackerHit;
-import org.lcsim.fit.helicaltrack.HelicalTrack2DHit;
-import org.lcsim.fit.helicaltrack.HelicalTrack3DHit;
 import org.lcsim.fit.helicaltrack.HelicalTrackCross;
-import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
 
 //===> import org.hps.conditions.deprecated.SvtUtils;
 import static org.hps.recon.tracking.CoordinateTransformations.transformVectorToTracking;
-import org.hps.recon.tracking.TrackerHitUtils;
 
 /**
  *
@@ -97,7 +90,6 @@
         _hasLayerOne = false;
         //  Loop over the hits on the track and make sure we have HelicalTrackHits (which contain the MC particle)
         for (TrackerHit hit : trk.getTrackerHits()) {
-
             //  get the set of MCParticles associated with this hit and update the hit count for each MCParticle
             Set<MCParticle> mclist = hittomc.allFrom(hit);
             for (MCParticle mcp : mclist) {
@@ -107,7 +99,6 @@
                 mchits++;
                 mcmap.put(mcp, mchits);
             }
-
             if (hit instanceof HelicalTrackCross)
                 countHit((HelicalTrackCross) hit);
             else if (hit instanceof HelicalTrack2DHit)