Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN | |||
SvtTrackExtrapolator.java | +31 | -37 | 1.2 -> 1.3 |
Added correction when extrapolating to the target; Code cleanup
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);
} }
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