Print

Print


Commit in lcsim/src/org/lcsim/recon/tracking/seedtracker on MAIN
SeedTrackerTrackStateDriver.java+41-211.4 -> 1.5
TrackState.java+171.2 -> 1.3
+58-21
2 modified files
fixed the problem of kinks in the pandora event display.

lcsim/src/org/lcsim/recon/tracking/seedtracker
SeedTrackerTrackStateDriver.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- SeedTrackerTrackStateDriver.java	26 May 2010 21:02:49 -0000	1.4
+++ SeedTrackerTrackStateDriver.java	8 Oct 2010 18:28:32 -0000	1.5
@@ -1,4 +1,4 @@
-// $Id: SeedTrackerTrackStateDriver.java,v 1.4 2010/05/26 21:02:49 ngraf Exp $
+// $Id: SeedTrackerTrackStateDriver.java,v 1.5 2010/10/08 18:28:32 grefe Exp $
 package org.lcsim.recon.tracking.seedtracker;
 
 import hep.physics.vec.BasicHep3Vector;
@@ -16,6 +16,7 @@
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.fit.helicaltrack.HelixUtils;
 import org.lcsim.fit.helicaltrack.TrackDirection;
+import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.Calorimeter.CalorimeterType;
 import org.lcsim.recon.util.CalorimeterInformation;
 import org.lcsim.spacegeom.SpacePoint;
@@ -36,23 +37,39 @@
 public class SeedTrackerTrackStateDriver extends Driver
 {
 
+	protected CalorimeterInformation calInfo;
+	protected double ecalRadius;
+	protected int ecalNumSides;
+	protected double ecalZ;
+	protected double magField;
+	protected HelixSwimmer swimmer;
+	
+	public SeedTrackerTrackStateDriver() {
+		calInfo = CalorimeterInformation.instance();
+		ecalRadius = 0.;
+		ecalNumSides = 0;
+		ecalZ = 0.;
+		magField = 0.;
+		swimmer = null;
+	}
+	
+	@Override
+	protected void detectorChanged(Detector detector) {
+		// get the magnetic field and set up the helix swimmer
+		magField = detector.getFieldMap().getField(new BasicHep3Vector(0, 0, 0)).magnitude();
+        swimmer = new HelixSwimmer(magField);
+		
+        // get the Ecal geometry
+		calInfo = CalorimeterInformation.instance();
+        ecalRadius = calInfo.getRMin(CalorimeterType.EM_BARREL);
+        ecalNumSides = calInfo.getNSides(CalorimeterType.EM_BARREL);
+        ecalZ = calInfo.getZMin(CalorimeterType.EM_ENDCAP);
+        //System.out.println("ECAL: radius " + ecalRadius + " nsides " + ecalNumSides + " z " + ecalZ);
+	}
+	
     @Override
     public void process(EventHeader event)
     {
-        // Need the B field for extrapolation
-        double magField = event.getDetector().getFieldMap().getField(new BasicHep3Vector(0, 0, 0)).magnitude();
-
-        //TODO cache this and refresh under detectorChanged method
-        CalorimeterInformation calInfo = CalorimeterInformation.instance();
-        double ecalRadius = calInfo.getRMin(CalorimeterType.EM_BARREL);
-        // number of sides
-        int ecalNumSides = calInfo.getNSides(CalorimeterType.EM_BARREL);
-        // inner z of ECal endcap
-        double ecalZ = calInfo.getZMin(CalorimeterType.EM_ENDCAP);
-//        System.out.println("ECAL: radius " + ecalRadius + " nsides " + ecalNumSides + " z " + ecalZ);
-        // the swimmer
-        HelixSwimmer swimmer = new HelixSwimmer(magField);
-
         // Get the Tracks from the event. Collection name is SeedTracker's default.
         List<Track> tracks = event.get(Track.class, "Tracks");
 
@@ -94,10 +111,14 @@
             }
 
             // Set the End TrackState from the outermost hit on the track.
-            double[] xpos = pos.v();
-            double[] xmomentum = VecOp.mult(ptrk.magnitude(), dir).v();
-
-            TrackState endState = new TrackState(xpos[0], xpos[1], xpos[2], xmomentum[0], xmomentum[1], xmomentum[2]);
+            Hep3Vector xmomentum = VecOp.mult(ptrk.magnitude(), dir);
+            
+            // Set the End TrackState to the point of closest approach to the last hit
+            swimmer.setTrack(track);
+            double s = swimmer.getDistanceToPoint(pos);
+            Hep3Vector corPos = swimmer.getPointAtLength(s);
+            
+            TrackState endState = new TrackState(corPos, xmomentum);
             endObjs.add(endState);
 
             // Calculate the Start state and add to list.
@@ -107,8 +128,7 @@
             startObjs.add(startState);
 
             //TODO Should set the ECal TrackState by propagating from the outermost hit on the track.
-            swimmer.setTrack(track);
-            double s = Math.min(swimmer.getDistanceToZ(ecalZ), swimmer.getDistanceToPolyhedra(ecalRadius, ecalNumSides));
+            s = Math.min(swimmer.getDistanceToZ(ecalZ), swimmer.getDistanceToPolyhedra(ecalRadius, ecalNumSides));
 
             SpacePoint ecalPos = swimmer.getPointAtLength(s);
             SpaceVector ecalMom = swimmer.getMomentumAtLength(s);

lcsim/src/org/lcsim/recon/tracking/seedtracker
TrackState.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- TrackState.java	26 May 2010 21:04:09 -0000	1.2
+++ TrackState.java	8 Oct 2010 18:28:32 -0000	1.3
@@ -1,5 +1,7 @@
 package org.lcsim.recon.tracking.seedtracker;
 
+import hep.physics.vec.Hep3Vector;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -54,6 +56,21 @@
         vals.add((float) py);
         vals.add((float) pz);
     }
+    
+    /**
+     * Constructor using Hep3Vectors
+     * 
+     * @param pos position of the track state
+     * @param p momentum at the position
+     */
+    public TrackState(Hep3Vector pos, Hep3Vector p) {
+    	vals.add((float)pos.x());
+    	vals.add((float)pos.y());
+    	vals.add((float)pos.z());
+    	vals.add((float)p.x());
+    	vals.add((float)p.y());
+    	vals.add((float)p.z());
+    }
 
     public double getDoubleVal(int index)
     {
CVSspam 0.2.8