lcsim/src/org/lcsim/recon/tracking/seedtracker/example
diff -N MCTrackStateDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ MCTrackStateDriver.java 18 Mar 2010 20:58:58 -0000 1.1
@@ -0,0 +1,175 @@
+// $Id: MCTrackStateDriver.java,v 1.1 2010/03/18 20:58:58 jeremy Exp $
+package org.lcsim.recon.tracking.seedtracker.example;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseRawTrackerHit;
+import org.lcsim.util.Driver;
+
+/**
+ * Adds dummy TrackState information to the event for testing slicPandora.
+ * @author jeremym
+ */
+public class MCTrackStateDriver extends Driver
+{
+ /**
+ * Dummy implementation of TrackState for Pandora PFA New input.
+ * @author jeremym
+ */
+ class MyTrackState implements GenericObject
+ {
+ List<Float> vals = new ArrayList<Float>();
+
+ /**
+ * Float constructor.
+ * @param x
+ * @param y
+ * @param z
+ * @param px
+ * @param py
+ * @param pz
+ */
+ MyTrackState(float x, float y, float z, float px, float py, float pz)
+ {
+ vals.add(x);
+ vals.add(y);
+ vals.add(z);
+ vals.add(px);
+ vals.add(py);
+ vals.add(pz);
+ }
+
+ /**
+ * Double constructor.
+ * @param x
+ * @param y
+ * @param z
+ * @param px
+ * @param py
+ * @param pz
+ */
+ MyTrackState(double x, double y, double z, double px, double py, double pz)
+ {
+ vals.add((float)x);
+ vals.add((float)y);
+ vals.add((float)z);
+ vals.add((float)px);
+ vals.add((float)py);
+ vals.add((float)pz);
+ }
+
+ public double getDoubleVal(int index)
+ {
+ return 0;
+ }
+
+ public float getFloatVal(int index)
+ {
+ return vals.get(index);
+ }
+
+ public int getIntVal(int index)
+ {
+ return 0;
+ }
+
+ public int getNDouble()
+ {
+ return 0;
+ }
+
+ public int getNFloat()
+ {
+ return 6;
+ }
+
+ public int getNInt()
+ {
+ return 0;
+ }
+
+ public boolean isFixedSize()
+ {
+ return true;
+ }
+ }
+
+ public MCTrackStateDriver()
+ {}
+
+ /**
+ * Make collections of GenericObjects containing dummy TrackStates for testing slicPandora.
+ */
+ public void process(EventHeader event)
+ {
+ List<Track> tracks = event.get(Track.class, "Tracks");
+
+ // Setup start lists.
+ List<GenericObject> startObjs = new ArrayList<GenericObject>();
+
+ // Setup end lists.
+ List<GenericObject> endObjs = new ArrayList<GenericObject>();
+
+ // Setup ECal lists.
+ List<GenericObject> ecalObjs = new ArrayList<GenericObject>();
+
+ for (Track track : tracks)
+ {
+ // Get hits contributing to this track.
+ List<TrackerHit> trackerHits = track.getTrackerHits();
+ double tmax = 0;
+ SimTrackerHit outermostHit = null;
+ for (TrackerHit trackerHit : trackerHits)
+ {
+ //System.out.println(trackerHit.getClass().getName());
+ //System.out.println("TrackerHit.getTime = " + trackerHit.getTime());
+
+ BaseRawTrackerHit rawHit = (BaseRawTrackerHit)trackerHit.getRawHits().get(0);
+ SimTrackerHit simHit = rawHit.getSimTrackerHits().get(0);
+
+ //System.out.println("simHit.getTime = " + simHit.getTime());
+
+ // Find outtermost hit.
+ if (simHit.getTime() > tmax)
+ {
+ tmax = simHit.getTime();
+ outermostHit = simHit;
+ }
+ }
+
+ //System.out.println("tmax = " + tmax);
+
+ double[] pos = outermostHit.getPosition();
+ double[] momentum = outermostHit.getMomentum();
+
+ MyTrackState ecalState = new MyTrackState(pos[0], pos[1], pos[2], momentum[0], momentum[1], momentum[2]);
+ ecalObjs.add(ecalState);
+
+ MyTrackState endState = new MyTrackState(pos[0], pos[1], pos[2], momentum[0], momentum[1], momentum[2]);
+ endObjs.add(endState);
+
+ MCParticle particle = outermostHit.getMCParticle();
+ double[] ppos = particle.getOrigin().v();
+ double[] pmom = particle.getMomentum().v();
+
+ MyTrackState startState = new MyTrackState(ppos[0], ppos[1], ppos[2], pmom[0], pmom[1], pmom[2]);
+ startObjs.add(startState);
+ }
+
+ // Write out start states.
+ event.put("StateAtStart", startObjs, GenericObject.class, 0);
+
+ // Write out ecal states.
+ event.put("StateAtECal", ecalObjs, GenericObject.class, 0);
+
+ // Write out end states.
+ event.put("StateAtEnd", endObjs, GenericObject.class, 0);
+ }
+}
\ No newline at end of file