Print

Print


Author: [log in to unmask]
Date: Fri Sep 11 16:18:28 2015
New Revision: 3591

Log:
Use TrackState in extrapolation

Modified:
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java	Fri Sep 11 16:18:28 2015
@@ -48,7 +48,6 @@
 import org.lcsim.util.swim.Helix;
 import org.lcsim.util.swim.Line;
 import org.lcsim.util.swim.Trajectory;
-
 import org.hps.recon.tracking.EventQuality.Quality;
 import org.hps.recon.tracking.gbl.HelicalTrackStripGbl;
 
@@ -81,6 +80,11 @@
     public static Hep3Vector extrapolateHelixToXPlane(Track track, double x) {
         return extrapolateHelixToXPlane(getHTF(track), x);
     }
+    
+    public static Hep3Vector extrapolateHelixToXPlane(TrackState track, double x) {
+        return extrapolateHelixToXPlane(getHTF(track), x);
+    }
+    
 
     /**
      * Extrapolate helix to a position along the x-axis. Re-use HelixUtils.
@@ -1043,6 +1047,24 @@
         return isolations;
     }
    
+    
+    
+    /**
+     * Backward compatibility function for {@code extrapolateTrackUsingFieldMap}.
+     */
+    public static TrackState extrapolateTrackUsingFieldMap(Track track, double startPositionX, double endPositionX, double stepSize, FieldMap fieldMap) { 
+        TrackState stateAtIP = null;
+        for( TrackState state: track.getTrackStates()) {
+            if( state.getLocation() == TrackState.AtIP )
+                stateAtIP = state;
+        }
+        if( stateAtIP == null )
+            throw new RuntimeException("No track state at IP was found so this function shouldn't be used.");
+        
+        // Extrapolate this track state
+        return extrapolateTrackUsingFieldMap(stateAtIP, startPositionX, endPositionX, stepSize, fieldMap);
+    }
+    
     /**
      * Iteratively extrapolates a track to a specified value of x 
      * (z in detector frame) using the full 3D field map.
@@ -1059,7 +1081,7 @@
      *         that the "Tracking" frame is used for the reference point 
      *         coordinate system.
      */
-    public static TrackState extrapolateTrackUsingFieldMap(Track track, double startPositionX, double endPositionX, double stepSize, FieldMap fieldMap) { 
+    public static TrackState extrapolateTrackUsingFieldMap(TrackState track, double startPositionX, double endPositionX, double stepSize, FieldMap fieldMap) { 
 
         // Start by extrapolating the track to the approximate point where the
         // fringe field begins.
@@ -1090,7 +1112,7 @@
         //System.out.println("Track momentum vector: " + currentMomentum.toString());
 
         // Get the charge of the track.
-        double q = Math.signum(track.getTrackStates().get(0).getOmega());
+        double q = Math.signum(track.getOmega());
         // HACK: LCSim doesn't deal well with negative fields so they are 
         //       turned to positive for tracking purposes.  As a result, 
         //       the charge calculated using the B-field, will be wrong
@@ -1153,8 +1175,8 @@
        // Create a track state at the extrapolation point
        TrackState trackState = new BaseTrackState(trackParameters, 
                currentPosition.v(), 
-               track.getTrackStates().get(0).getCovMatrix(), 
-               TrackState.AtOther, 
+               track.getCovMatrix(), 
+               TrackState.AtCalorimeter, 
                bFieldY);
        
        return trackState;