lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat
diff -u -r1.10 -r1.11
--- CheatReconDriver.java 19 Aug 2008 14:56:43 -0000 1.10
+++ CheatReconDriver.java 1 Sep 2008 17:05:24 -0000 1.11
@@ -37,6 +37,8 @@
import hep.physics.vec.Hep3Vector;
import hep.physics.vec.BasicHep3Vector;
import org.lcsim.util.aida.AIDA;
+import org.lcsim.event.LCRelation;
+import org.lcsim.digisim.MyLCRelation;
/**
*
* @author cassell
@@ -144,16 +146,22 @@
List<MCParticle> trreconfs = new ArrayList<MCParticle>();
List<Track> fstracks = new ArrayList<Track>();
List<Track> tracks = new ArrayList<Track>();
+ List<Track> forvtxingt = new ArrayList<Track>();
List<Cluster> fsclusters = new ArrayList<Cluster>();
List<Cluster> nonfsclusters = new ArrayList<Cluster>();
List<ReconstructedParticle> perfect = new ArrayList<ReconstructedParticle>();
List<ReconstructedParticle> visperfect = new ArrayList<ReconstructedParticle>();
List<ReconstructedParticle> genperfect = new ArrayList<ReconstructedParticle>();
List<ReconstructedParticle> genvisperfect = new ArrayList<ReconstructedParticle>();
+ List<ReconstructedParticle> forvtxingperfect = new ArrayList<ReconstructedParticle>();
tmap = new HashMap<MCParticle,Track>();
//
-// Make a map of trackable tracks
+// Make a map of trackable tracks, and add LCRelations to event:
+// "ReconTracksToMCP" -> from=Track, to = MCParticle
+// "TracksToParent" -> from=Track, to=Track, linking tracks to parent tracks. Most to Tracks are null
//
+ List<LCRelation> lcrelationList = new ArrayList<LCRelation>();
+ List<LCRelation> parentage = new ArrayList<LCRelation>();
for(Track t:inittracks)
{
MCParticle p = ((BaseTrackMC) t).getMCParticle();
@@ -161,8 +169,18 @@
{
tmap.put(p,t);
tracks.add(t);
+ lcrelationList.add(new MyLCRelation(t,p));
}
}
+ for(MCParticle p:tmap.keySet())
+ {
+ Track t = tmap.get(p);
+ Track pt = getParentTrack(p);
+ parentage.add(new MyLCRelation(t,pt));
+ if(pt == null)forvtxingt.add(t);
+ }
+ event.put("ReconTracksToMCP", lcrelationList, LCRelation.class, 0);
+ event.put("TracksToParent", parentage, LCRelation.class, 0);
//
// Start with the generator final state particles
//
@@ -343,6 +361,7 @@
int flag = 1<<LCIOConstants.TRBIT_HITS;
event.put(outTname,tracks,BaseTrackMC.class,flag);
event.put(outFSTname,fstracks,BaseTrackMC.class,flag);
+ event.put("ForVtxingTracks",forvtxingt,BaseTrackMC.class,flag);
event.getMetaData(fstracks).setSubset(true);
flag = 1<<LCIOConstants.CLBIT_HITS;
event.put(outCname,fsclusters,CheatCluster.class,flag);
@@ -360,8 +379,17 @@
perfect.add(rp);
if(tmap.containsKey(p)||fsclmap.containsKey(p))visperfect.add(rp);
}
+ for(Track t:forvtxingt)
+ {
+ MCParticle p = ((BaseTrackMC) t).getMCParticle();
+ MCReconstructedParticle rp = new MCReconstructedParticle(p);
+ rp.addTrack(t);
+ if(fsclmap.containsKey(p))rp.addCluster(fsclmap.get(p));
+ forvtxingperfect.add(rp);
+ }
event.put(outRname,perfect);
event.put(outVRname,visperfect);
+ event.put("ForVtxingPerfect",forvtxingperfect);
for(MCParticle p:initfs)
{
//
@@ -423,6 +451,20 @@
}
return tr;
}
+ private Track getParentTrack(MCParticle p)
+ {
+ Track rtr = null;
+ MCParticle parent = p;
+ while((parent.getParents().size() == 1)&&(rtr == null))
+ {
+ parent = parent.getParents().get(0);
+ if(tmap.containsKey(parent))
+ {
+ rtr = tmap.get(parent);
+ }
+ }
+ return rtr;
+ }
private boolean hasTrackableDaughters(MCParticle p)
{
boolean htd = false;
lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat
diff -u -r1.9 -r1.10
--- PPRParticleDriver.java 24 Jun 2008 13:28:06 -0000 1.9
+++ PPRParticleDriver.java 1 Sep 2008 17:05:24 -0000 1.10
@@ -91,6 +91,7 @@
List<List<Track>> all = event.get(Track.class);
List<Cluster> pprclusters = new ArrayList<Cluster>();
Map<MCParticle,Track> rrtl = new HashMap<MCParticle,Track>();
+ Map<MCParticle,Track> vtl = new HashMap<MCParticle,Track>();
for(List<Track> tl:all)
{
if(event.getMetaData(tl).getName().compareTo(fastMC) == 0)
@@ -112,6 +113,16 @@
rrtl.put(pp,rt);
}
}
+ else if(event.getMetaData(tl).getName().compareTo("ForVtxingTracks") == 0)
+ {
+ for(Track t:tl)
+ {
+ BaseTrackMC rt = (BaseTrackMC) t;
+ MCParticle pp = (MCParticle) rt.getMCParticle();
+ vtl.put(pp,rt);
+ }
+ }
+
}
Map<ReconstructedParticle,ReconstructedParticle> rmap = new HashMap<ReconstructedParticle,ReconstructedParticle>();
for(MCReconstructedParticle p:rl)
@@ -223,6 +234,13 @@
forjets.add(rp);
}
event.put("J"+outlist,forjets,ReconstructedParticle.class,0);
+ List<ReconstructedParticle> forvtxing = new ArrayList<ReconstructedParticle>();
+ for(MCParticle p:vtl.keySet())
+ {
+ ReconstructedParticle rp = crpc.makeReconParticleChNoCuts(p,vtl.get(p),rtl.get(p));
+ forvtxing.add(rp);
+ }
+ event.put("ForVtxingReconParticles",forvtxing,ReconstructedParticle.class,0);
}
}