lcsim-contrib/src/main/java/org/lcsim/contrib/jeremym
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());
}
}