lcsim/src/org/lcsim/contrib/SteveMagill
diff -N PerfectTrackDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ PerfectTrackDriver.java 23 Apr 2007 20:03:33 -0000 1.1
@@ -0,0 +1,71 @@
+package org.lcsim.contrib.SteveMagill;
+
+import java.util.*;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+// import org.lcsim.event.Cluster;
+import org.lcsim.event.MCParticle;
+// import org.lcsim.event.CalorimeterHit;
+// import org.lcsim.event.SimCalorimeterHit;
+// import org.lcsim.recon.cluster.util.BasicCluster;
+//import org.lcsim.geometry.util.CalorimeterIDDecoder;
+// import hep.physics.vec.Hep3Vector;
+import org.lcsim.event.Track;
+// import org.lcsim.util.hitmap.HitMap;
+import org.lcsim.event.base.*;
+import org.lcsim.event.ReconstructedParticle;
+
+/**
+ * Defines perfect particle flow objects - perfect charged particles, perfect photons and perfect neutral hadrons
+ */
+
+public class PerfectTrackDriver extends Driver
+{
+ public PerfectTrackDriver()
+ {
+ }
+
+ private String _particlenames;
+ private String _tracknames;
+
+ public void process(EventHeader event)
+ {
+ // Start from the MCReconstructedParticle list and check for charge status
+// List<MCReconstructedParticle> mcrecps = event.get(MCReconstructedParticle.class, _particlenames);
+ List<ReconstructedParticle> recps = event.get(ReconstructedParticle.class, _particlenames);
+ List<PerfectTrack> perftrks = new ArrayList<PerfectTrack>();
+ Map<MCParticle,PerfectTrack> result = new HashMap<MCParticle,PerfectTrack>();
+// for (MCReconstructedParticle mcrecp : mcrecps)
+ for (ReconstructedParticle recp : recps)
+ {
+ int pch = (int) recp.getCharge();
+// System.out.println("Particle charge = " + pch);
+ if (pch != 0)
+ {
+ List<ReconstructedParticle> rppl = recp.getParticles();
+// System.out.println("No of particles in this PP = " + rppl.size());
+ if (rppl.size()>0)
+ {
+ MCReconstructedParticle mcrp = (MCReconstructedParticle) rppl.get(0);
+ MCParticle mcob = mcrp.getMCParticle();
+ PerfectTrack perftrk = result.get(mcob);
+ if (perftrk == null) result.put(mcob, perftrk = new PerfectTrack(mcob));
+ perftrks.add(perftrk);
+ } else
+ {
+ System.out.println("No MC Particles in Perfect Particle");
+ }
+ }
+ }
+ event.put(_tracknames,perftrks);
+ }
+
+ public void setParticleNames(String names)
+ {
+ _particlenames = names;
+ }
+ public void setTrackNames(String tnames)
+ {
+ _tracknames = tnames;
+ }
+}