lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat
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);
}
}