Print

Print


Author: [log in to unmask]
Date: Tue Apr 21 08:58:07 2015
New Revision: 2762

Log:
Add helical track hit monitoring plots...probably needs some improvement to the axis ranges etal. 

Modified:
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackingReconPlots.java

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackingReconPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackingReconPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackingReconPlots.java	Tue Apr 21 08:58:07 2015
@@ -18,7 +18,9 @@
 
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.LCIOParameters.ParameterName;
+import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
 import org.lcsim.fit.helicaltrack.HelicalTrackFit;
 import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.IDDecoder;
@@ -35,18 +37,22 @@
 
     private AIDA aida = AIDA.defaultInstance();
     private String trackCollectionName = "MatchedTracks";
+    private String helicalTrackHitCollectionName = "HelicalTrackHits";
     String ecalSubdetectorName = "Ecal";
     String ecalCollectionName = "EcalClusters";
     IDDecoder dec;
     private String outputPlots = null;
     private boolean debug = false;
 
-    double feeMomentumCut = 1.6;
+    double feeMomentumCut = 0.8;
+    int nmodules = 6;
 
     IPlotter plotter;
     IPlotter plotter22;
     IPlotter plotterECal;
     IPlotter plotterFEE;
+    IPlotter plotterHTH;
+    IPlotter plotterXvsY;
 
     IHistogram1D nTracks;
     IHistogram1D nhits;
@@ -69,6 +75,11 @@
     IHistogram1D hfeePOverE;
     IHistogram2D hfeeClustPos;
 
+    IHistogram1D[] hthTop = new IHistogram1D[nmodules];
+    IHistogram1D[] hthBot = new IHistogram1D[nmodules];
+    IHistogram2D[] xvsyTop = new IHistogram2D[nmodules];
+    IHistogram2D[] xvsyBot = new IHistogram2D[nmodules];
+
     @Override
     protected void detectorChanged(Detector detector) {
         aida.tree().cd("/");
@@ -145,6 +156,25 @@
 
         plotterFEE.show();
 
+        plotterHTH = pfac.create("Track Hits");
+        plotterHTH.createRegions(3, 4);
+        plotterXvsY = pfac.create("3d Hit Positions");
+        plotterXvsY.createRegions(3, 4);
+
+        for (int i = 1; i <= nmodules; i++) {
+
+            xvsyTop[i - 1] = aida.histogram2D("Module " + i + " Top", 50, -10, 10, 50, 0, 4);
+            xvsyBot[i - 1] = aida.histogram2D("Module " + i + " Bottom", 50, -10, 10, 50, 0, 4);
+            hthTop[i - 1] = aida.histogram1D("Module " + i + "Top: Track Hits", 25, 0, 25);
+            hthBot[i - 1] = aida.histogram1D("Module " + i + "Bot: Track Hits", 25, 0, 25);
+            plot(plotterHTH, hthTop[i - 1], null, computePlotterRegion(i - 1, true));
+            plot(plotterHTH, hthBot[i - 1], null, computePlotterRegion(i - 1, false));
+             plot(plotterXvsY, xvsyTop[i - 1], null, computePlotterRegion(i - 1, true));
+            plot(plotterXvsY, xvsyBot[i - 1], null, computePlotterRegion(i - 1, false));
+        }
+        plotterHTH.show();
+        plotterXvsY.show();
+
     }
 
     public TrackingReconPlots() {
@@ -169,6 +199,42 @@
         if (!event.hasCollection(Track.class, trackCollectionName)) {
             nTracks.fill(0);
             return;
+        }
+
+        if (!event.hasCollection(TrackerHit.class, helicalTrackHitCollectionName))
+            return;
+
+        int[] topHits = {0, 0, 0, 0, 0, 0};
+        int[] botHits = {0, 0, 0, 0, 0, 0};
+        List<TrackerHit> hth = event.get(TrackerHit.class, helicalTrackHitCollectionName);
+        for (TrackerHit hit : hth) {
+            int module = -99;
+            int layer = ((RawTrackerHit) hit.getRawHits().get(0)).getLayerNumber();
+            if (layer < 2)
+                module = 1;
+            else if (layer < 4)
+                module = 2;
+            else if (layer < 6)
+                module = 3;
+            else if (layer < 8)
+                module = 4;
+            else if (layer < 10)
+                module = 5;
+            else
+                module = 6;
+
+            if (hit.getPosition()[1] > 0) {
+                topHits[module - 1]++;
+                xvsyTop[module - 1].fill(hit.getPosition()[0], hit.getPosition()[0]);
+            } else {
+                botHits[module - 1]++;
+                xvsyBot[module - 1].fill(hit.getPosition()[0], Math.abs(hit.getPosition()[0]));
+            }
+        }
+
+        for (int i = 0; i < nmodules; i++) {
+            hthTop[i].fill(topHits[i]);
+            hthBot[i].fill(botHits[i]);
         }
 
         List<Track> tracks = event.get(Track.class, trackCollectionName);
@@ -268,4 +334,20 @@
         return closest;
     }
 
+    private int computePlotterRegion(int i, boolean istop) {
+
+        int region = -99;
+        if (i < 3)
+            if (istop)
+                region = i * 4;
+            else
+                region = i * 4 + 1;
+        else if (istop)
+            region = (i - 3) * 4 + 2;
+        else
+            region = (i - 3) * 4 + 3;
+//     System.out.println("Setting region to "+region);
+        return region;
+    }
+
 }