lcsim/src/org/lcsim/recon/tracking/cheat
diff -u -r1.4 -r1.5
--- CheatTrackDriver.java 16 Oct 2007 18:17:48 -0000 1.4
+++ CheatTrackDriver.java 20 Nov 2007 16:34:05 -0000 1.5
@@ -16,6 +16,7 @@
import java.util.Map;
import org.lcsim.event.EventHeader;
import org.lcsim.event.MCParticle;
+import org.lcsim.event.Track;
import org.lcsim.event.base.*;
import org.lcsim.event.SimTrackerHit;
import hep.physics.vec.BasicHep3Vector;
@@ -30,6 +31,8 @@
private final CheatTracker _tracker = new CheatTracker();
String outname;
private static final Hep3Vector origin = new BasicHep3Vector();
+ private String MCFastTracks = null;
+ private boolean smeared = false;
/** Creates a new instance of CheatTrackDriver */
public CheatTrackDriver()
@@ -40,15 +43,36 @@
{
outname = name;
}
+ public CheatTrackDriver(String name, String mcfast)
+ {
+ outname = name;
+ MCFastTracks = mcfast;
+ smeared = true;
+ }
public void setOutputName(String name)
{
outname = name;
}
+ public void setMCFastName(String name)
+ {
+ MCFastTracks = name;
+ smeared = true;
+ }
protected void process(EventHeader event)
{
double bField = event.getDetector().getFieldMap().getField(origin).z();
+ List<Track> smearedlist = null;
+ if(smeared)
+ {
+ List<List<Track>> lists = event.get(Track.class);
+ for(List<Track> slist:lists)
+ {
+ if(event.getMetaData(slist).getName().compareTo(MCFastTracks) == 0)smearedlist = slist;
+ }
+ }
List<List<SimTrackerHit>> collections = event.get(SimTrackerHit.class);
+ List<List<BaseTrackMC>> tracks = new ArrayList<List<BaseTrackMC>>();
for (List<SimTrackerHit> collection : collections)
{
List<BaseTrackerHitMC> result = _tracker.createTrackerHits(collection);
@@ -56,12 +80,14 @@
String name = event.getMetaData(collection).getName();
event.put(name+"CheatTrackerHits", result, BaseTrackerHitMC.class, 0);
Map<MCParticle,BaseTrackMC> result2 = _tracker.createTracks(bField,result);
+ List<BaseTrackMC> ol = new ArrayList(result2.values());
+ tracks.add(ol);
int flag = (1<<LCIOConstants.TRBIT_HITS);
- event.put(name+"CheatTracks", new ArrayList(result2.values()), BaseTrackMC.class, flag);
+ event.put(name+"CheatTracks", ol, BaseTrackMC.class, flag);
+ event.getMetaData(ol).setTransient(true);
}
- List<List<BaseTrackMC>> tracks = event.get(BaseTrackMC.class);
- Map<MCParticle, BaseTrackMC> refined = _tracker.findRefinedTracks(bField,tracks);
+ Map<MCParticle, BaseTrackMC> refined = _tracker.findRefinedTracks(bField,tracks, smearedlist);
int flag = 1<<LCIOConstants.TRBIT_HITS;
event.put(outname, new ArrayList(refined.values()), BaseTrackMC.class, flag );
}
lcsim/src/org/lcsim/recon/tracking/cheat
diff -u -r1.2 -r1.3
--- CheatTracker.java 16 Oct 2007 18:17:48 -0000 1.2
+++ CheatTracker.java 20 Nov 2007 16:34:05 -0000 1.3
@@ -11,12 +11,14 @@
package org.lcsim.recon.tracking.cheat;
import org.lcsim.event.SimTrackerHit;
import org.lcsim.event.MCParticle;
+import org.lcsim.event.Track;
import org.lcsim.event.base.*;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import org.lcsim.mc.fast.tracking.DocaTrackParameters;
+import org.lcsim.mc.fast.tracking.ReconTrack;
/**
*
@@ -57,8 +59,18 @@
}
return out;
}
- public Map<MCParticle, BaseTrackMC> findRefinedTracks(double B,List<List<BaseTrackMC>> collections)
+ public Map<MCParticle, BaseTrackMC> findRefinedTracks(double B,List<List<BaseTrackMC>> collections, List<Track> smeared)
{
+ Map<MCParticle,ReconTrack> smearmap = new HashMap<MCParticle,ReconTrack>();
+ if(smeared != null)
+ {
+ for(Track t:smeared)
+ {
+ ReconTrack rt = (ReconTrack) t;
+ MCParticle tp = (MCParticle) rt.getMCParticle();
+ smearmap.put(tp,rt);
+ }
+ }
Map<MCParticle, BaseTrackMC> result = new HashMap<MCParticle,BaseTrackMC>();
for (List<BaseTrackMC> clusters : collections)
{
@@ -68,10 +80,31 @@
BaseTrackMC rc = result.get(p);
if (rc == null)
{
- result.put(p,rc = new BaseTrackMC(p));
- rc.setTrackParameters(cluster.getTrackParameters(), B);
+ if(smeared == null)
+ {
+ result.put(p,rc = new BaseTrackMC(p));
+ rc.setTrackParameters(cluster.getTrackParameters(), B);
+ }
+ else
+ {
+ if(smearmap.containsKey(p))
+ {
+ result.put(p,rc = new BaseTrackMC(p));
+ ReconTrack smt = smearmap.get(p);
+// double[] zzz = {0.,0.,0.};
+// double[] ref = {p.getOriginX(),p.getOriginY(),p.getOriginZ()};
+// rc.setReferencePoint(smt.getDocaPosition(ref));
+ rc.setCovarianceMatrix(smt.getErrorMatrix());
+ rc.setTrackParameters(smt.getTrackParameters(), B);
+ rc.setChisq(smt.getChi2());
+ rc.setNDF(smt.getNDF());
+ rc.setFitSuccess(true);
+ rc.setRefPointIsDCA(true);
+ rc.setTrackType(smt.getType());
+ }
+ }
}
- rc.addHits(cluster.getTrackerHits());
+ if(rc != null)rc.addHits(cluster.getTrackerHits());
}
}
return result;