Print

Print


Author: [log in to unmask]
Date: Thu Jan 22 13:17:07 2015
New Revision: 1968

Log:
plots for monitoring hit time reconstruction

Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java	Thu Jan 22 13:17:07 2015
@@ -80,6 +80,9 @@
             createLayerPlot2D(plotDir + "fitT0ChiProb", kk, 200, -100, 100, 100, 0, 1.0);
             createLayerPlot2D(plotDir + "fitAmpChiProb", kk, 200, 0, 20000, 100, 0, 1.0);
             createLayerPlot1D(plotDir + "signalClusterT0", kk, 500, -100, 100);
+            createLayerPlot2D(plotDir + "signalClusterSizeT0", kk, 200, -100, 100, 10, 0.5, 10.5);
+
+            createLayerPlot2D(plotDir + "goodClusterFits", kk, 200, -100, 100, 100, 0, 20000);
             createLayerPlot2D(plotDir + "badClusterFits", kk, 200, -100, 100, 100, 0, 20000);
         }
         resetEfficiencyMap();
@@ -190,6 +193,7 @@
             if (clusters != null) {
                 for (TrackerHit clust : clusters) {
                     getLayerPlot1D(plotDir + "signalClusterT0", simhit.getLayer()).fill(clust.getTime());
+                    getLayerPlot2D(plotDir + "signalClusterSizeT0", simhit.getLayer()).fill(clust.getTime(), clust.getRawHits().size());
 
                     for (int i = 0; i < 16; i++) {
                         if (Math.abs(clust.getTime()) < i + 1) {
@@ -198,7 +202,12 @@
                     }
                     if (Math.abs(clust.getTime()) < t0Cut) {
                         gotCluster = 1;
+                        for (RawTrackerHit rth : (List<RawTrackerHit>) clust.getRawHits()) {
+                            GenericObject fit = (GenericObject) rthtofit.to(rth);
+                            getLayerPlot2D(plotDir + "goodClusterFits", simhit.getLayer()).fill(ShapeFitParameters.getT0(fit), ShapeFitParameters.getAmp(fit));
+                        }
                     } else {
+//                        System.out.println(clust.getRawHits().size());
                         for (RawTrackerHit rth : (List<RawTrackerHit>) clust.getRawHits()) {
                             GenericObject fit = (GenericObject) rthtofit.to(rth);
                             getLayerPlot2D(plotDir + "badClusterFits", simhit.getLayer()).fill(ShapeFitParameters.getT0(fit), ShapeFitParameters.getAmp(fit));

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	Thu Jan 22 13:17:07 2015
@@ -62,7 +62,7 @@
     int findableelectrons = 0;
     int findableTracks = 0;
     double foundTracks = 0;
-    private boolean debugTrackEfficiency = true;
+    private boolean debugTrackEfficiency = false;
     private String plotDir = "TrackMCEfficiency/";
     private String resDir = "TrackMCResolution/";
     private String misidDir = "TrackMCMisId/";
@@ -110,7 +110,7 @@
         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 z0MCRes = hf.createHistogram1D(resDir + "z0 Resolution", 50, -1.0, 1.0);
         IHistogram1D tanLambdaMCRes = hf.createHistogram1D(resDir + "tanLambda Resolution", 50, -0.1, 0.1);
     }
 
@@ -153,24 +153,37 @@
         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, trackHitMCRelationsCollectionName);
-        for (LCRelation relation : mcrelations)
-            if (relation != null && relation.getFrom() != null && relation.getTo() != null)
+        if (debugTrackEfficiency) {
+            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());
+            }
+        }
+        if (debugTrackEfficiency) {
+            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);
@@ -179,9 +192,11 @@
             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
@@ -190,33 +205,46 @@
         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, detectorFrameHitRelationsCollectionName);
-        for (LCRelation relation : hitrelations)
-            if (relation != null && relation.getFrom() != null && relation.getTo() != null)
+        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, trackHitRelationsCollectionName);
-        for (LCRelation relation : rotaterelations)
-            if (relation != null && relation.getFrom() != null && relation.getTo() != null)
+        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);
+        if (debugTrackEfficiency) {
+            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 (debugTrackEfficiency) {
+                    System.out.println(this.getClass().getSimpleName() + ": found MCP match");
+                }
                 trktomc.add(trk, tkanal.getMCParticleNew());
             }
         }
@@ -238,6 +266,9 @@
             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
+            if (debugTrackEfficiency) {
+                System.out.println("MC pt=" + pt);
+            }
             int nhits = findable.LayersHit(mcp);
             boolean isFindable = findable.InnerTrackerIsFindable(mcp, nlayers - 2);
 
@@ -258,14 +289,17 @@
                 //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);
@@ -281,8 +315,9 @@
                 _nchMCP++;
                 findableTracks++;
                 double wgt = 0.;
-                if (ntrk > 0)
+                if (ntrk > 0) {
                     wgt = 1.;
+                }
                 foundTracks += wgt;
                 peffFindable.fill(p, wgt);
                 phieffFindable.fill(phi, wgt);
@@ -295,8 +330,9 @@
                     Set<FittedRawTrackerHit> fitlist = fittomc.allTo(mcp);
                     if (debugTrackEfficiency) {
                         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");
+                        if (!hasHTHInEachLayer(hitlist, fitlist)) {
+                            System.out.println("\t\tThis track failed becasue it's missing a helical track hit");
+                        }
                     }
                 }
 
@@ -305,8 +341,9 @@
                 totelectrons++;
 //                    findableelectrons++;
                 double wgt = 0.;
-                if (ntrk > 0)
+                if (ntrk > 0) {
                     wgt = 1.;
+                }
                 foundelectrons += wgt;
                 peffElectrons.fill(p, wgt);
                 phieffElectrons.fill(phi, wgt);
@@ -349,15 +386,19 @@
     }
 
     private boolean hasHTHInEachLayer(Set<HelicalTrackCross> list, Set<FittedRawTrackerHit> fitlist) {
-        if(list.size()==0)
+        if (list.isEmpty()) {
             return false;
-        if(!(list.toArray()[0] instanceof HelicalTrackCross))
+        }
+        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;

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	Thu Jan 22 13:17:07 2015
@@ -1,11 +1,14 @@
 package org.hps.analysis.dataquality;
 
 import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.LCRelation;
+import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.RelationalTable;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackerHit;
@@ -64,7 +67,9 @@
         IHistogram1D trkz0 = aida.histogram1D(plotDir + "z0 ", 25, -1.0, 1.0);
         IHistogram1D nHits = aida.histogram1D(plotDir + "Hits per Track", 2, 5, 7);
         IHistogram1D trackMeanTime = aida.histogram1D(plotDir + "Mean time of hits on track", 200, -20., 20.);
-        IHistogram1D trackRMSTime = aida.histogram1D(plotDir + "RMS time of hits on track", 200, 0., 10.);
+        IHistogram1D trackRMSTime = aida.histogram1D(plotDir + "RMS time of hits on track", 200, 0., 15.);
+        IHistogram2D trackChi2RMSTime = aida.histogram2D(plotDir + "Track chi2 vs. RMS time of hits", 200, 0., 15., 25, 0, 25.0);
+        IHistogram1D seedRMSTime = aida.histogram1D(plotDir + "RMS time of hits on seed layers", 200, 0., 15.);
 
     }
 
@@ -114,6 +119,9 @@
             int nStrips = 0;
             double meanTime = 0;
             double rmsTime = 0;
+
+            int nSeedStrips = 0;
+            double rmsSeedTime = 0;
             for (TrackerHit hit : trk.getTrackerHits()) {
 //                System.out.format("cross time: %f\n", hit.getTime());
                 Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
@@ -121,14 +129,27 @@
                     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();
+                    }
                 }
             }
             meanTime /= nStrips;
+//            rmsTime = Math.sqrt(rmsTime / nStrips);
             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);
+            aida.histogram1D(plotDir + "RMS time of hits on seed layers").fill(rmsSeedTime);
+//            System.out.format("%d seed strips, RMS time %f\n", nSeedStrips, rmsSeedTime);
+
 //            System.out.format("%d strips, mean time %f, RMS time %f\n", nStrips, meanTime, rmsTime);
         }
     }