Print

Print


Author: [log in to unmask]
Date: Tue May  5 16:27:13 2015
New Revision: 2911

Log:
Add plots for clusters associated with tracks.

Modified:
    java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java

Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java	Tue May  5 16:27:13 2015
@@ -15,13 +15,17 @@
 import hep.aida.ITree;
 import hep.aida.ref.rootwriter.RootFileStore;
 
-import org.hps.recon.tracking.FittedRawTrackerHit;
 import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
 import org.lcsim.util.Driver; 
+import org.lcsim.fit.helicaltrack.HelicalTrackCross;
+import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
 import org.lcsim.geometry.Detector;
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.hps.recon.tracking.FittedRawTrackerHit;
 
 /**
  * 
@@ -44,17 +48,21 @@
     ITree tree; 
     IHistogramFactory histogramFactory; 
 	IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
+	protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>(); 
 	
-	protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>(); 
 	private Map<HpsSiSensor, IHistogram1D> clusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
+	private Map<HpsSiSensor, IHistogram1D> singleHitClusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
+	private Map<HpsSiSensor, IHistogram1D> multHitClusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
+	private Map<HpsSiSensor, IHistogram1D> trackClusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
 	private Map<HpsSiSensor, IHistogram1D> signalToNoisePlots = new HashMap<HpsSiSensor, IHistogram1D>();
-	private Map<HpsSiSensor, IHistogram1D> singleHitClusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
 	private Map<HpsSiSensor, IHistogram1D> singleHitSignalToNoisePlots = new HashMap<HpsSiSensor, IHistogram1D>();
-	private Map<HpsSiSensor, IHistogram1D> multHitClusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
 	private Map<HpsSiSensor, IHistogram1D> multHitSignalToNoisePlots = new HashMap<HpsSiSensor, IHistogram1D>();
+	private Map<HpsSiSensor, IHistogram1D> trackHitSignalToNoisePlots = new HashMap<HpsSiSensor, IHistogram1D>();
+	private Map<HpsSiSensor, IHistogram1D> clusterMultiplicityPlots = new HashMap<HpsSiSensor, IHistogram1D>();
 	private Map<HpsSiSensor, IHistogram1D> clusterTimePlots = new HashMap<HpsSiSensor, IHistogram1D>();
+	private Map<HpsSiSensor, IHistogram1D> trackClusterTimePlots = new HashMap<HpsSiSensor, IHistogram1D>();
 	private Map<HpsSiSensor, IHistogram2D> clusterChargeVsTimePlots = new HashMap<HpsSiSensor, IHistogram2D>();
-    
+	
     // Detector name
     private static final String SUBDETECTOR_NAME = "Tracker";
     
@@ -63,6 +71,7 @@
     private String fittedHitsCollectionName = "SVTFittedRawTrackerHits";
     
     private int runNumber = -1; 
+        
     
     /**
      * Default Ctor
@@ -117,6 +126,9 @@
         plotters.put("Signal to Noise", plotterFactory.create("Signal to Noise"));
         plotters.get("Signal to Noise").createRegions(6, 6);
         
+        plotters.put("Cluster Multiplicity", plotterFactory.create("Cluster Multiplicity"));
+        plotters.get("Cluster Multiplicity").createRegions(6, 6);
+        
         plotters.put("Cluster Time", plotterFactory.create("Cluster Time"));
         plotters.get("Cluster Time").createRegions(6, 6);
         
@@ -129,7 +141,7 @@
                     histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Charge", 100, 0, 5000));
             plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
                                              .plot(clusterChargePlots.get(sensor), this.createStyle(1, "Cluster Amplitude [ADC Counts]", ""));
-        
+       
             singleHitClusterChargePlots.put(sensor, 
                     histogramFactory.createHistogram1D(sensor.getName() + " - Single Hit Cluster Charge", 100, 0, 5000));
             plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
@@ -139,6 +151,11 @@
                     histogramFactory.createHistogram1D(sensor.getName() + " - Multiple Hit Cluster Charge", 100, 0, 5000));
             plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
                                              .plot(multHitClusterChargePlots.get(sensor), this.createStyle(2, "Cluster Amplitude [ADC Counts]", ""));
+
+            trackClusterChargePlots.put(sensor, 
+                    histogramFactory.createHistogram1D(sensor.getName() + " - Tracker Cluster Charge", 100, 0, 5000));
+            plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
+                                             .plot(trackClusterChargePlots.get(sensor), this.createStyle(3, "Cluster Amplitude [ADC Counts]", ""));
             
             signalToNoisePlots.put(sensor, 
                     histogramFactory.createHistogram1D(sensor.getName() + " - Signal to Noise", 50, 0, 50));
@@ -154,18 +171,31 @@
                     histogramFactory.createHistogram1D(sensor.getName() + " - Multiple Hit Signal to Noise", 50, 0, 50));
             plotters.get("Signal to Noise").region(this.computePlotterRegion(sensor))
                                            .plot(multHitSignalToNoisePlots.get(sensor), this.createStyle(2, "Signal to Noise", ""));
-        
+
+            trackHitSignalToNoisePlots.put(sensor, 
+                    histogramFactory.createHistogram1D(sensor.getName() + " - Track Signal to Noise", 50, 0, 50));
+            plotters.get("Signal to Noise").region(this.computePlotterRegion(sensor))
+                                           .plot(trackHitSignalToNoisePlots.get(sensor), this.createStyle(3, "Signal to Noise", ""));
+            
+            clusterMultiplicityPlots.put(sensor,
+                    histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Multiplicity", 10, 0, 10));
+            plotters.get("Cluster Multiplicity").region(this.computePlotterRegion(sensor))
+                                                .plot(clusterMultiplicityPlots.get(sensor), this.createStyle(1, "Cluster Multiplicity", ""));
             
             clusterTimePlots.put(sensor,
                     histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Time", 100, -100, 100));
             plotters.get("Cluster Time").region(this.computePlotterRegion(sensor))
                                         .plot(clusterTimePlots.get(sensor), this.createStyle(1, "Cluster Time [ns]", ""));
+
+            trackClusterTimePlots.put(sensor,
+                    histogramFactory.createHistogram1D(sensor.getName() + " - Track Cluster Time", 100, -100, 100));
+            plotters.get("Cluster Time").region(this.computePlotterRegion(sensor))
+                                        .plot(trackClusterTimePlots.get(sensor), this.createStyle(3, "Cluster Time [ns]", ""));
             
             clusterChargeVsTimePlots.put(sensor,
                     histogramFactory.createHistogram2D(sensor.getName() + " - Cluster Amplitude vs Time", 100, 0, 5000, 100, -100, 100));
             plotters.get("Cluster Amplitude vs Cluster Time").region(this.computePlotterRegion(sensor))
                                                              .plot(clusterChargeVsTimePlots.get(sensor));
-            
         }
         
 		for (IPlotter plotter : plotters.values()) { 
@@ -191,9 +221,10 @@
         
         // Get the list of clusters in the event
         List<SiTrackerHitStrip1D> clusters = event.get(SiTrackerHitStrip1D.class, clusterCollectionName);
+        System.out.println("Number of clusters: " + clusters.size()); 
        
         for (SiTrackerHitStrip1D cluster : clusters) { 
-            
+           
             // Get the sensor associated with this cluster
             HpsSiSensor sensor = (HpsSiSensor) cluster.getSensor();
             
@@ -217,7 +248,9 @@
                 
                 noise += channelNoise * this.getFittedHit(rawHit).getAmp();
             }
-       
+      
+            clusterMultiplicityPlots.get(sensor).fill(cluster.getRawHits().size());
+            
             // Calculate the signal weighted noise
             noise = noise/amplitude;
             
@@ -233,6 +266,52 @@
             } else { 
                 multHitClusterChargePlots.get(sensor).fill(amplitude);
                 multHitSignalToNoisePlots.get(sensor).fill(amplitude/noise);
+            }
+        }
+        
+        if (!event.hasCollection(Track.class, "MatchedTracks")) return;
+        
+        List<Track> tracks = event.get(Track.class, "MatchedTracks");
+        
+        for (Track track : tracks) { 
+            
+            for (TrackerHit stereoHit : track.getTrackerHits()) { 
+               
+                for (HelicalTrackStrip cluster : ((HelicalTrackCross) stereoHit).getStrips()) {
+                    
+                    // Get the raw hits composing this cluster and use them to calculate the amplitude of the hit
+                    double amplitude = 0;
+                    double noise = 0;
+                    HpsSiSensor sensor = null;
+                    for (Object hit : cluster.rawhits()) { 
+                        RawTrackerHit rawHit = (RawTrackerHit) hit;
+                   
+                        sensor = (HpsSiSensor) rawHit.getDetectorElement();
+                        
+                        // Get the channel of the raw hit
+                        int channel = rawHit.getIdentifierFieldValue("strip");
+                
+                        // Add the amplitude of that channel to the total amplitude
+                        amplitude += this.getFittedHit(rawHit).getAmp();
+                
+                        // Calculate the mean noise for the channel
+                        double channelNoise = 0;
+                        for (int sampleN = 0; sampleN < 6; sampleN++) { 
+                            channelNoise += sensor.getNoise(channel, sampleN);
+                        }
+                        channelNoise = channelNoise/6;
+                
+                        noise += channelNoise * this.getFittedHit(rawHit).getAmp();
+                    }
+                    
+                    // Calculate the signal weighted noise
+                    noise = noise/amplitude;
+                   
+                    // Fill all plots
+                    trackClusterChargePlots.get(sensor).fill(amplitude);
+                    trackHitSignalToNoisePlots.get(sensor).fill(amplitude/noise);
+                    trackClusterTimePlots.get(sensor).fill(cluster.time());
+                }
             }
         }
     }
@@ -307,6 +386,10 @@
             style.dataStyle().fillStyle().setColor("93, 228, 47, 1");
             style.dataStyle().outlineStyle().setColor("93, 228, 47, 1");
             style.dataStyle().fillStyle().setOpacity(.70);
+        } else if (color == 3) { 
+            style.dataStyle().fillStyle().setColor("255, 38, 38, 1");
+            style.dataStyle().outlineStyle().setColor("255, 38, 38, 1");
+            style.dataStyle().fillStyle().setOpacity(.70);
         }
         style.dataStyle().errorBarStyle().setVisible(false);