Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN
SvtTrackExtrapolator.java+31-371.2 -> 1.3
Added correction when extrapolating to the target; Code cleanup

hps-java/src/main/java/org/lcsim/hps/recon/tracking
SvtTrackExtrapolator.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SvtTrackExtrapolator.java	29 May 2012 17:44:29 -0000	1.2
+++ SvtTrackExtrapolator.java	31 May 2012 06:56:08 -0000	1.3
@@ -11,8 +11,9 @@
 	SeedTrack track;
 	TrackUtils trackUtils;
 	
-	public static final double ECAL_FACE   = 1600;  // mm
+	public static final double ECAL_FACE   = 1524;  // mm
 	public static final double DIPOLE_EDGE = 914; // mm
+	private static final double HARP_POSITION = -674.062; // mm
 	
 	/**
 	 * 
@@ -34,52 +35,45 @@
 	 * 
 	 */
 	public Hep3Vector getTrackPositionAtEcal(){
-		
 		return this.extrapolateTrack(ECAL_FACE);
 	}
 	
+	public Hep3Vector getTrackPositionAtHarp(){
+		return this.extrapolateTrack(HARP_POSITION);
+	}
+	
+	
 	/**
 	 * 
 	 */
-	public Hep3Vector extrapolateTrack(double x){
+	public Hep3Vector extrapolateTrack(double z){
 	
 		if(track == null) throw new RuntimeException("Track has not been set!");
 		
-		if(x >= DIPOLE_EDGE){
-			double yDipole = trackUtils.getYOnHelixProjection(DIPOLE_EDGE);
-			double s = trackUtils.arcLength(DIPOLE_EDGE, yDipole);
-			double zDipole = trackUtils.getZ0() + s*trackUtils.getTanLambda();
-			double phi = trackUtils.getPhi0() - s/trackUtils.getR();
-			
-			double dx = x - DIPOLE_EDGE;
-			double r = dx/(Math.cos(phi)*(1/Math.sqrt(1 + Math.pow(trackUtils.getTanLambda(), 2))));
-			double dy = r*Math.sin(phi)*(1/Math.sqrt(1 + Math.pow(trackUtils.getTanLambda(), 2)));
-			double dz = r*(trackUtils.getTanLambda()/Math.sqrt(1 + Math.pow(trackUtils.getTanLambda(), 2)));
-			
-			double y = yDipole + dy;
-			double z = zDipole + dz;
-			
-			return new BasicHep3Vector(x, y, z);
-			
-		} else if( x > 0 && x < DIPOLE_EDGE){
+		Hep3Vector trackPosition = null;
+		double dz = 0;
+		if(z >= DIPOLE_EDGE){
+			trackPosition = trackUtils.extrapolateHelixToXPlane(DIPOLE_EDGE);
+			dz = z - DIPOLE_EDGE;
+		} else if(z <= 0){
+			trackPosition  = trackUtils.extrapolateHelixToXPlane(0);
+			dz = z - trackPosition.x();
+		} else return trackUtils.extrapolateHelixToXPlane(z);
+		
+		// Get the track azimuthal angle
+		double phi = trackUtils.getPhi(trackPosition);
 
-			double y = trackUtils.getYOnHelixProjection(x);
-			double s = trackUtils.arcLength(x, y);
-			double z = trackUtils.getZ0() + s*trackUtils.getTanLambda();
-			return new BasicHep3Vector(x, y, z);
-		} else if(x <= 0){
-			
-			double dx = x - trackUtils.getX0();
-			double r = dx/(Math.cos(trackUtils.getPhi0())*(1/Math.sqrt(1 + Math.pow(trackUtils.getTanLambda(), 2))));
-			double dy = r*Math.sin(trackUtils.getPhi0())*(1/Math.sqrt(1 + Math.pow(trackUtils.getTanLambda(), 2)));
-			double dz = r*(trackUtils.getTanLambda()/Math.sqrt(1 + Math.pow(trackUtils.getTanLambda(), 2)));
-			
-			double y = trackUtils.getY0() + dy;
-			double z = trackUtils.getZ0() + dz;
-			
-			return new BasicHep3Vector(x, y, z);
-			
-		} else throw new RuntimeException(x + " value is invalid! z-coordinate must lie outside dipole volume.");
+		// Find the distance to the point of interest
+		double sinTheta = trackUtils.getSinTheta();
+		double cosTheta = trackUtils.getCosTheta();
+		double r = dz/(sinTheta*Math.cos(phi));
+		double dx = r*sinTheta*Math.sin(phi);
+		double dy = r*cosTheta;
+		
+		// Find the track position at the point of interest
+		double x = trackPosition.y() + dx;
+		double y = trackPosition.z() + dy;
 		
+		return new BasicHep3Vector(x, y, z);
 	}
 }
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1