Print

Print


Commit in lcsim/src/org/lcsim/recon/tracking/seedtracker/example on MAIN
MCTrackStateDriver.java+175added 1.1
driver for MC track states

lcsim/src/org/lcsim/recon/tracking/seedtracker/example
MCTrackStateDriver.java added at 1.1
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
CVSspam 0.2.8