hps-java/src/main/java/org/lcsim/hps/recon/tracking
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);
}
}