Commit in lcsim/src/org/lcsim/recon/particle on MAIN
CheatParticleDriver.java+125added 1.1
Make list of Cheating ReconstructedParticles

lcsim/src/org/lcsim/recon/particle
CheatParticleDriver.java added at 1.1
diff -N CheatParticleDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CheatParticleDriver.java	15 Feb 2007 18:31:18 -0000	1.1
@@ -0,0 +1,125 @@
+/*
+ * CheatParticleDriver.java
+ *
+ */
+
+package org.lcsim.recon.particle.cheat;
+import org.lcsim.util.Driver;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.base.*;
+import org.lcsim.event.Track;
+import org.lcsim.event.Cluster;
+import org.lcsim.recon.cluster.cheat.CheatCluster;
+
+/**
+ *
+ * @author cassell
+ */
+public class CheatParticleDriver extends Driver
+{
+    String Clusters;
+    String Tracks;
+    String FSParticles;
+    String outName;
+    /** Creates a new instance of CheatTrackDriver */
+    public CheatParticleDriver(String Cl, String Tr, String FS)
+    {
+        Clusters = Cl;
+        Tracks = Tr;
+        FSParticles = FS;
+        outName = "CheatReconstructedParticles";
+    }
+    public CheatParticleDriver(String Cl, String Tr)
+    {
+        Clusters = Cl;
+        Tracks = Tr;
+        FSParticles = "default";
+        outName = "PerfectReconstructedParticles";
+    }
+    public void setOutputName(String s)
+    {
+        outName = s;
+    }
+
+    protected void process(EventHeader event)
+    {
+        List<CheatCluster> cl = event.get(CheatCluster.class,Clusters);
+        List<BaseTrackMC> tl = event.get(BaseTrackMC.class,Tracks);
+        Map<MCParticle,MCReconstructedParticle> rl = new HashMap<MCParticle,MCReconstructedParticle>();
+        if(FSParticles.compareTo("default") == 0)
+        {
+            for(CheatCluster cc:cl)
+            {
+                MCParticle p = cc.getMCParticle();
+                MCReconstructedParticle rp = new MCReconstructedParticle(p);
+                rp.addCluster(cc);
+                rl.put(p, rp);
+            }
+            for(BaseTrackMC t:tl)
+            {
+                MCParticle p = t.getMCParticle();
+                MCReconstructedParticle rp = rl.get(p);
+                if(rp == null)rl.put(p,rp = new MCReconstructedParticle(p));
+                rp.addTrack(t);
+            }
+        }
+        else
+        {
+            List<MCParticle> fs = event.get(MCParticle.class,FSParticles);
+            for(CheatCluster cc:cl)
+            {
+                MCParticle p = traceit(cc.getMCParticle(),fs);
+                if(p != null)
+                {
+                    MCReconstructedParticle rp = rl.get(p);
+                    if(rp == null)rl.put(p,rp = new MCReconstructedParticle(p));
+                    rp.addCluster(cc);
+                }
+            }
+            for(BaseTrackMC t:tl)
+            {
+                MCParticle p = traceit(t.getMCParticle(),fs);
+                if(p != null)
+                {
+                    MCReconstructedParticle rp = rl.get(p);
+                    if(rp == null)rl.put(p,rp = new MCReconstructedParticle(p));
+                    rp.addTrack(t);
+                }
+            }
+            
+        }
+        event.put(outName,new ArrayList(rl.values()));
+    }
+
+    public String toString()
+    {
+        return "CheatParticleDriver";
+    }
+    public MCParticle traceit(MCParticle p, List<MCParticle> fs)
+    {
+       MCParticle rp = null;
+//
+// If the particle is in the final state list, we're done
+//
+       if(fs.contains(p))return p;
+//
+// If not, check its parent. No need to go farther than single parent case
+//
+       MCParticle pp = p;
+       while( pp.getParents().size() == 1)
+       {
+          pp = pp.getParents().get(0);
+          if(fs.contains(pp))return pp;
+       }
+//
+// Didn't find one, return null
+//
+       return rp;
+    }
+    
+}
CVSspam 0.2.8