Print

Print


Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/jeremym on MAIN
ReconstructedParticleAnalysisDriver.java+51-221.1 -> 1.2


lcsim-contrib/src/main/java/org/lcsim/contrib/jeremym
ReconstructedParticleAnalysisDriver.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- ReconstructedParticleAnalysisDriver.java	14 Apr 2010 23:44:33 -0000	1.1
+++ ReconstructedParticleAnalysisDriver.java	29 Nov 2010 20:30:17 -0000	1.2
@@ -2,11 +2,14 @@
 
 import hep.aida.ICloud1D;
 import hep.aida.ICloud2D;
+import hep.aida.ITree;
 import hep.physics.vec.VecOp;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.lcsim.event.CalorimeterHit;
@@ -29,7 +32,7 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  * @author Norman Graf <[log in to unmask]>
- * @version $Id: ReconstructedParticleAnalysisDriver.java,v 1.1 2010/04/14 23:44:33 jeremy Exp $
+ * @version $Id: ReconstructedParticleAnalysisDriver.java,v 1.2 2010/11/29 20:30:17 jeremy Exp $
  */
 public class ReconstructedParticleAnalysisDriver extends Driver
 {
@@ -42,39 +45,35 @@
     private ICloud1D c1dCount;
     private ICloud1D c1dMcpEnergy;
     private ICloud2D c2dPhiVsEnergy;
-    //private ICloud2D c2dNormPhiVsEnergy;
+    private ICloud2D c2dThetaVsEnergy;
     private ICloud1D c1dMCParticleCount;
     private ICloud1D c1dClusterE;
     private ICloud1D c1dClusterCount;
     private ICloud1D c1dTrackCount;
+    private ICloud1D c1dLargestMcpHitEnergy;
+    private ICloud1D c1dMcpHitEnergy;
+    
         
     private String ecalBarrelSimCollectionName = null;
     private String ecalEndcapSimCollectionName = null;
     private String hcalBarrelSimCollectionName = null;
     private String hcalEndcapSimCollectionName = null;    
     
-    /*
-    private HitMap ecalBarrelHitMap = null;
-    private HitMap ecalEndcapHitMap = null;
-    private HitMap hcalBarrelHitMap = null;
-    private HitMap hcalEndcapHitMap = null;
-    */
     private HitMap calHitMap = null;    
     
     public ReconstructedParticleAnalysisDriver()
     {
-        name = "PandoraPFOCollection";
-        //name = "ReconstructedParticles";
+        // Default collection name from LCSim.
+        name = "ReconstructedParticles";
     }
     
-    public void setInputCollectionName(String name)
+    public void setCollectionName(String name)
     {
         this.name = name;
     }
     
     public void detectorChanged(Detector det)
     {
-        //System.out.println("detectorChanged");
         this.detector = det;
         
         for (Subdetector subdet : det.getSubdetectors().values())
@@ -92,25 +91,21 @@
                 }
                 Calorimeter cal = (Calorimeter) subdet;
                 Calorimeter.CalorimeterType calType = cal.getCalorimeterType();
-                //System.out.println("proc calType = " + Calorimeter.CalorimeterType.toString(calType));
+
                 if (calType == Calorimeter.CalorimeterType.EM_BARREL)
                 {
-                    //System.out.println("EM_BARREL");
                     ecalBarrelSimCollectionName = readoutName;                    
                 }
                 else if (calType == Calorimeter.CalorimeterType.EM_ENDCAP)
                 {
-                    //System.out.println("EM_ENDCAP");
                     ecalEndcapSimCollectionName = readoutName;
                 }
                 else if (calType == Calorimeter.CalorimeterType.HAD_BARREL)
                 {
-                    //System.out.println("HAD_BARREL");
                     hcalBarrelSimCollectionName = readoutName;
                 }
                 else if (calType == Calorimeter.CalorimeterType.HAD_ENDCAP)
                 {
-                    //System.out.println("HAD_ENDCAP");
                     hcalEndcapSimCollectionName = readoutName;
                 }
             }
@@ -120,20 +115,28 @@
     public void startOfData()
     {
         // TODO: axis labels
+        ITree tree = AIDA.defaultInstance().tree();
+        tree.cd("/");
+        tree.mkdir(name);
+        tree.cd(name);        
         
         c1dEnergy = aida.cloud1D("Particle Energy");
         c1dMcpEnergy = aida.cloud1D("Particle Energy Minus Total MCParticle Energy");
         c1dCount = aida.cloud1D("Particle Count by Event");
         c2dPhiVsEnergy = aida.cloud2D("Phi vs Energy");    
-        //c2dNormPhiVsEnergy = aida.cloud2D("Normalized Phi vs Energy");
         c1dMCParticleCount = aida.cloud1D("MCParticles per Particle");
         c1dClusterE = aida.cloud1D("Cluster Energy");
         c1dClusterCount = aida.cloud1D("Clusters per Particle");
         c1dTrackCount = aida.cloud1D("Tracks per Particle");
+        c1dLargestMcpHitEnergy = aida.cloud1D("Greatest MCParticle Energy Fraction");
+        c2dThetaVsEnergy = aida.cloud2D("Theta vs Energy");
+        c1dMcpHitEnergy = aida.cloud1D("MCParticle Energy Fraction");
     }
     
     public void process(EventHeader event)
     {
+        AIDA.defaultInstance().tree().cd("/" + name);
+        
         makeHitMaps(event);
                 
         List<ReconstructedParticle> particles = 
@@ -147,9 +150,11 @@
         for (ReconstructedParticle p : particles)
         {
             double phi = VecOp.phi(p.getMomentum()); 
+            double theta = VecOp.cosTheta(p.getMomentum());
             
             c1dEnergy.fill(p.getEnergy());
-            c2dPhiVsEnergy.fill(phi, p.getEnergy());           
+            c2dPhiVsEnergy.fill(phi, p.getEnergy());
+            c2dThetaVsEnergy.fill(theta, p.getEnergy());
             
             Set<MCParticle> mcparticles = findMCParticles(p);
             double mcESum = 0.;
@@ -157,15 +162,41 @@
             {
                 mcESum += mcp.getEnergy();
             }
+            // (ReconstructedParticle Energy) - (MCParticle Energy)
             c1dMcpEnergy.fill(p.getEnergy() - mcESum);
+            
+            // Number of MCParticles.
             c1dMCParticleCount.fill(mcparticles.size());
             
-            double clusTotalE = 0.;
+            double clusTotalE = 0.;            
             for (Cluster cluster : p.getClusters())
             {
                 double clusE = getClusterEnergy(cluster);
                 c1dClusterE.fill(clusE);
                 clusTotalE += clusE;
+                
+                // Make a map of MCParticles to energy contribution.
+                Map<MCParticle,Double> mcpEnergyMap = new HashMap<MCParticle,Double>();                
+                for (CalorimeterHit hit : cluster.getCalorimeterHits())
+                {
+                    MCParticle mcp = findMCParticle(hit);
+                    if (!mcpEnergyMap.containsKey(mcp))
+                        mcpEnergyMap.put(mcp, 0.);
+                    double mcpEnergy = mcpEnergyMap.get(mcp);
+                    mcpEnergy += hit.getCorrectedEnergy();
+                    mcpEnergyMap.put(mcp, mcpEnergy);
+                }
+                
+                // Find the largest contributing MCParticle to this cluster.
+                double maxMcpE = 0.;
+                MCParticle largestContrib = null;
+                for (MCParticle mcp : mcpEnergyMap.keySet())
+                {                    
+                    if (mcpEnergyMap.get(mcp) > maxMcpE)
+                        largestContrib = mcp;
+                    c1dMcpHitEnergy.fill(mcpEnergyMap.get(mcp)/clusE);
+                }
+                c1dLargestMcpHitEnergy.fill(mcpEnergyMap.get(largestContrib)/clusE);
             }
             c1dClusterCount.fill(p.getClusters().size());
             c1dTrackCount.fill(p.getTracks().size());
@@ -215,7 +246,6 @@
         {            
             LCMetaData meta = event.getMetaData(calCollection);
             String collName = meta.getName();
-            //System.out.println("makeHitMaps - " + collName);
             if (collName.equals(ecalBarrelSimCollectionName) 
                     || collName.equals(ecalEndcapSimCollectionName) 
                     || collName.equals(hcalBarrelSimCollectionName)
@@ -225,6 +255,5 @@
             }            
         }        
         calHitMap = new HitMap(allHits);
-        //System.out.println("Event " + event.getEventNumber() + " calHitMap size: " + calHitMap.size());
     }
 }
CVSspam 0.2.8