Print

Print


Commit in lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat on MAIN
PPRParticleDriver.java+711.8 -> 1.9
Add a ReconstructedParticle list containing parent tracks and ignoring the double counting of energy from the neutral daughters

lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat
PPRParticleDriver.java 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- PPRParticleDriver.java	26 Mar 2008 16:34:25 -0000	1.8
+++ PPRParticleDriver.java	24 Jun 2008 13:28:06 -0000	1.9
@@ -24,6 +24,7 @@
 import org.lcsim.event.ReconstructedParticle;
 import org.lcsim.event.base.MCReconstructedParticle;
 import org.lcsim.event.base.BaseReconstructedParticle;
+import org.lcsim.event.base.BaseTrackMC;
 import org.lcsim.mc.fast.tracking.ReconTrack;
 import org.lcsim.util.lcio.LCIOConstants;
 
@@ -41,6 +42,7 @@
     int minChits = 3;
     PPRReconParticleConstructor crpc;
     String fastMC = "FastMCTracks";
+    String reconTracks = "ReconTracks";
     ClusterEnergyCalculator calc;
     ClusterEnergyCalculator scalc;
     /** Creates a new instance of PPRParticleDriver */
@@ -88,6 +90,7 @@
         Map<MCParticle,ReconTrack> rtl = null;
         List<List<Track>> all = event.get(Track.class);
         List<Cluster> pprclusters = new ArrayList<Cluster>();
+        Map<MCParticle,Track> rrtl = new HashMap<MCParticle,Track>();
         for(List<Track> tl:all)
         {
             if(event.getMetaData(tl).getName().compareTo(fastMC) == 0)
@@ -100,7 +103,17 @@
                     rtl.put(pp,rt);
                 }
             }
+            else if(event.getMetaData(tl).getName().compareTo(reconTracks) == 0)
+            {
+                for(Track t:tl)
+                {
+                    BaseTrackMC rt = (BaseTrackMC) t;
+                    MCParticle pp = (MCParticle) rt.getMCParticle();
+                    rrtl.put(pp,rt);
+                }
+            }
         }
+        Map<ReconstructedParticle,ReconstructedParticle> rmap = new HashMap<ReconstructedParticle,ReconstructedParticle>();
         for(MCReconstructedParticle p:rl)
         {
             ReconTrack rt = null;
@@ -141,6 +154,7 @@
                 rp.addParticle(p);
                 outrl.add(rp);
                 outrls.add(rps);
+                rmap.put(rp,rps);
                 outrlMC.add(p.getMCParticle());
             }
         }
@@ -152,6 +166,63 @@
         {
             event.put(outlistMC,outrlMC,MCParticle.class,0);
         }
+//
+// Make another ReconstructedParticleList, this time allow ddouble counting
+// of energy by using parent charge particles (if tracked) ugh!
+//
+        Map<MCParticle,List<ReconstructedParticle>> addremove = new HashMap<MCParticle,List<ReconstructedParticle>>();
+        List<ReconstructedParticle> forjets = new ArrayList<ReconstructedParticle>();
+        for(ReconstructedParticle rp:outrl)
+        {
+            if(rp.getCharge() == 0)
+            {
+                forjets.add(rmap.get(rp));
+            }
+            else
+            {
+                MCParticle p = ( (MCReconstructedParticle) rp.getParticles().get(0)).getMCParticle();
+                MCParticle ltp = p;
+                MCParticle parent = p;
+                while(parent.getParents().size() == 1)
+                {
+                    parent = parent.getParents().get(0);
+                    if(rrtl.containsKey(parent))
+                    {
+                        ltp = parent;
+                    }
+                }
+                if(ltp == p)
+                {
+                    forjets.add(rmap.get(rp));
+                }
+                else
+                {
+                    if(addremove.containsKey(ltp))
+                    {
+                        addremove.get(ltp).add(rmap.get(rp));
+                    }
+                    else
+                    {
+                        List<ReconstructedParticle> nl = new ArrayList<ReconstructedParticle>();
+                        nl.add(rmap.get(rp));
+                        addremove.put(ltp,nl);
+                    }
+                }
+            }
+        }
+        for(MCParticle p:addremove.keySet())
+        {
+            List<Cluster> thiscl = new ArrayList<Cluster>();
+            for(ReconstructedParticle rp:addremove.get(p))
+            {
+                thiscl.addAll(rp.getClusters());
+            }
+            List<Track> thistl = new ArrayList<Track>();
+            thistl.add(rrtl.get(p));
+            ReconstructedParticle rp = crpc.makeReconParticle(p,thiscl,thistl,rtl.get(p));
+            forjets.add(rp);
+        }
+        event.put("J"+outlist,forjets,ReconstructedParticle.class,0);
     }
     
 }
CVSspam 0.2.8