lcsim/src/org/lcsim/contrib/JanStrube/tracking
diff -u -r1.2 -r1.3
--- SwimmerTest.py 19 Jul 2006 04:01:58 -0000 1.2
+++ SwimmerTest.py 19 Jul 2006 23:14:01 -0000 1.3
@@ -1,8 +1,8 @@
from TrackingCalculator import *
-point = ThreeVector(1, .5, 1)
+point = ThreeVector(3, .5, 1)
momentum = ThreeVector(2, 2, 1)
-t1 = Track(momentum=momentum, position=point, charge=-1)
+t1 = ArbTrack(momentum=momentum, position=point, charge=-1)
print t1
@@ -15,6 +15,6 @@
m.omega = par.omega
m.z0 = par.z0
-print Track(parameters=m)
+print ArbTrack(parameters=m)
lcsim/src/org/lcsim/contrib/JanStrube/tracking
diff -u -r1.2 -r1.3
--- TrackingCalculator.py 19 Jul 2006 04:01:58 -0000 1.2
+++ TrackingCalculator.py 19 Jul 2006 23:14:01 -0000 1.3
@@ -65,10 +65,10 @@
def calc5VecFromSpaceMomentum(self):
par = self.parameters
par.phi0 = atan2(self.momentum.y, self.momentum.x)
- par.d0 = sqrt(self.origin.x**2 + self.origin.y**2)#- (self.origin.x - self.refPoint.x)*sin(par.phi0) + (self.origin.y-self.refPoint.y)*cos(par.phi0)
+ par.d0 = - (self.origin.x - self.refPoint.x)*sin(par.phi0) + (self.origin.y-self.refPoint.y)*cos(par.phi0)
+ print sqrt((self.origin.x-self.refPoint.x)**2 + (self.origin.y-self.refPoint.y)**2)
par.z0 = self.origin.z - self.refPoint.z
- par.pt = sqrt(self.momentum.x*self.momentum.x +
- self.momentum.y*self.momentum.y)
+ par.pt = sqrt(self.momentum.x**2 + self.momentum.y**2)
par.tanLambda = self.momentum.z/par.pt
par.omega = self.charge*Track.fieldConst/par.pt
@@ -112,7 +112,7 @@
pt0 = sqrt(px0*px0 + py0*py0)
phi = atan(mom.y / mom.x)
par.pt = sqrt(mom.x*mom.x + mom.y*mom.y)
- l = (atan(py0 / px0) - phi)*par.pt/self.charge/Track.fieldConst
+ self.l = (atan(py0 / px0) - phi)*par.pt/self.charge/Track.fieldConst
par.d0 = (par.pt-pt0)/(Track.fieldConst*self.charge)
par.phi0 = atan(py0 / px0)
par.omega = self.charge*Track.fieldConst/par.pt
lcsim/src/org/lcsim/contrib/JanStrube/tracking
diff -u -r1.5 -r1.6
--- NewFastMCTrackFactory.java 18 Jul 2006 13:20:41 -0000 1.5
+++ NewFastMCTrackFactory.java 19 Jul 2006 23:14:01 -0000 1.6
@@ -1,5 +1,5 @@
/**
- * @version $Id: NewFastMCTrackFactory.java,v 1.5 2006/07/18 13:20:41 jstrube Exp $
+ * @version $Id: NewFastMCTrackFactory.java,v 1.6 2006/07/19 23:14:01 jstrube Exp $
*/
package org.lcsim.contrib.JanStrube.tracking;
@@ -163,8 +163,8 @@
? smearParameters(parameters, errorMatrix, random)
: parameters;
- System.out.println("TrackFactory: POCA " + poca);
- System.out.println("TrackFactory: Momentum " + momentumAtPoca);
+// System.out.println("TrackFactory: POCA " + poca);
+// System.out.println("TrackFactory: Momentum " + momentumAtPoca);
return new NewTrack(referencePoint, smearParams, errorMatrix, charge);
}
lcsim/src/org/lcsim/contrib/JanStrube/tracking
diff -u -r1.2 -r1.3
--- Helix.java 18 Jul 2006 03:26:50 -0000 1.2
+++ Helix.java 19 Jul 2006 23:14:01 -0000 1.3
@@ -22,7 +22,7 @@
* For more info on swimming see <a href="doc-files/transport.pdf">this paper</a> by Paul Avery.
*
* @author tonyj
- * @version $Id: Helix.java,v 1.2 2006/07/18 03:26:50 jstrube Exp $
+ * @version $Id: Helix.java,v 1.3 2006/07/19 23:14:01 jstrube Exp $
*/
public class Helix implements Trajectory {
private Hep3Vector origin;
@@ -108,7 +108,7 @@
* @return The unit vector of the momentum
*/
public SpacePoint getMomentumAtLength(double alpha) {
- double angle = phi - alpha / radius;
+ double angle = phi + alpha * rho;
return new CartesianPoint(cos(angle), sin(angle), sinLambda / cosLambda);
}
@@ -118,8 +118,8 @@
*/
public SpacePoint getPointAtDistance(double alpha) {
double angle = phi + alpha * rho;
- double x = xCenter + radius * sin(angle);
- double y = yCenter - radius * cos(angle);
+ double x = xCenter - radius * sin(angle);
+ double y = yCenter + radius * cos(angle);
double z = origin.z() + alpha * sinLambda;
return new CartesianPoint(x, y, z);
}
lcsim/test/org/lcsim/contrib/JanStrube/tracking
diff -u -r1.3 -r1.4
--- HelixSwimmerTrackConsistencyTest.java 19 Jul 2006 04:01:59 -0000 1.3
+++ HelixSwimmerTrackConsistencyTest.java 19 Jul 2006 23:14:02 -0000 1.4
@@ -1,5 +1,5 @@
/**
- * @version $Id: HelixSwimmerTrackConsistencyTest.java,v 1.3 2006/07/19 04:01:59 jstrube Exp $
+ * @version $Id: HelixSwimmerTrackConsistencyTest.java,v 1.4 2006/07/19 23:14:02 jstrube Exp $
*/
package org.lcsim.contrib.JanStrube.tracking;
@@ -14,6 +14,7 @@
import static java.lang.Math.atan2;
import static java.lang.Math.sin;
+import static java.lang.Math.abs;
import static java.lang.Math.sqrt;
import junit.framework.TestCase;
@@ -48,16 +49,16 @@
// swim to pocas of several points and compare position and momentum at these points
double alpha = swimmerRaw.getTrackLengthToPoint(location);
double beta = swimmerTrack.getTrackLengthToPoint(location);
- assertEquals(swimmerRaw.getPointAtDistance(alpha), swimmerTrack.getPointAtDistance(beta), 4e-4);
- assertEquals(swimmerRaw.getMomentumAtDistance(alpha), swimmerTrack.getMomentumAtDistance(beta), 1e-5);
+ assertEquals(swimmerRaw.getPointAtDistance(alpha), swimmerTrack.getPointAtDistance(beta), 1e-10);
+ assertEquals(swimmerRaw.getMomentumAtDistance(alpha), swimmerTrack.getMomentumAtDistance(beta), 1e-10);
// use the momentum components as another random point to swim to
alpha = swimmerRaw.getTrackLengthToPoint(momentum);
beta = swimmerTrack.getTrackLengthToPoint(momentum);
// TODO there are obviously some floating point precision issues, probably related to the trigonometric functions.
// Investigation can be put off to a later date
- assertEquals(swimmerRaw.getPointAtDistance(alpha), swimmerTrack.getPointAtDistance(beta), 4e-4);
- assertEquals(swimmerRaw.getMomentumAtDistance(alpha), swimmerTrack.getMomentumAtDistance(beta), 4e-4);
+ assertEquals(swimmerRaw.getPointAtDistance(alpha), swimmerTrack.getPointAtDistance(beta), 1e-10);
+ assertEquals(swimmerRaw.getMomentumAtDistance(alpha), swimmerTrack.getMomentumAtDistance(beta), 1e-10);
}
public void testHelix_TrackFactoryConsistency2() {
@@ -77,38 +78,45 @@
// The track is already at the reference point
assertEquals(beta, 0, 1e-10);
// Whereas the origin for the helix is the original location
- assertEquals(alpha, -1 * swimmerTrack.getTrackLengthToPoint(location), 1e-3);
+ assertEquals(alpha, -1 * swimmerTrack.getTrackLengthToPoint(location), 1e-10);
// swim to random points. The values for the tracklength must differ by alpha
SpacePoint p1 = new CartesianPoint(7, 7, 7);
- assertEquals(swimmerRaw.getTrackLengthToPoint(p1), swimmerTrack.getTrackLengthToPoint(p1)+alpha, 1e-3);
+ double alpha_raw = swimmerRaw.getTrackLengthToPoint(p1);
+ double alpha_track = swimmerTrack.getTrackLengthToPoint(p1)+alpha;
+ assertEquals(alpha_raw, alpha_track, 1e-10);
+ // then the POCA to that point must be the same, too
+ assertEquals(swimmerRaw.getPointAtDistance(alpha_raw), swimmerTrack.getPointAtDistance(alpha_track-alpha), 1e-10);
// d0 is the distance between P0 and Pref in the x-y plane
double d0 = t.getParameter(Track.ParameterName.d0);
SpacePoint origin = swimmerTrack.getPointAtDistance(0);
double dist = VectorArithmetic.subtract(origin, t.getReferencePoint()).rxy();
- assertEquals(d0, dist, 5e-4);
+ assertEquals(abs(d0), abs(dist), 1e-6);
- double phi = atan2(momentum.y(), momentum.x());
- double phi_0 = t.getParameter(Track.ParameterName.phi0);
- double omega = t.getParameter(Track.ParameterName.omega);
- System.out.printf("phi: %f\nphi0: %f\nomega: %f\nalpha: %f\n", phi, phi_0, omega, alpha);
+// double phi = atan2(momentum.y(), momentum.x());
+// double phi_0 = t.getParameter(Track.ParameterName.phi0);
+// double omega = t.getParameter(Track.ParameterName.omega);
+// System.out.printf("phi: %f\nphi0: %f\nomega: %f\nalpha: %f\n", phi, phi_0, omega, alpha);
// The Track and the helix should be the same, except for being offset by alpha.
- System.out.println("Raw:\n" + (Helix)swimmerRaw.getTrajectory());
- System.out.println("Track:\n" + (Helix)swimmerTrack.getTrajectory());
- double tanLambda = t.getParameter(Track.ParameterName.tanLambda);
- double cosLambda = 1 / sqrt(1+tanLambda*tanLambda);
+// System.out.println("Raw:\n" + (Helix)swimmerRaw.getTrajectory());
+// System.out.println("Track:\n" + (Helix)swimmerTrack.getTrajectory());
+// double tanLambda = t.getParameter(Track.ParameterName.tanLambda);
+// double cosLambda = 1 / sqrt(1+tanLambda*tanLambda);
- System.out.println(swimmerRaw.getPointAtDistance(alpha/cosLambda));
- System.out.println(swimmerTrack.getPointAtDistance(-alpha));
- System.out.printf("Pt: %f\n", t.getPt());
- for (Track.ParameterName n : Track.ParameterName.values()) {
- System.out.printf("%s: %f\n", n.name(), t.getParameter(n));
- }
+// System.out.println(swimmerRaw.getPointAtDistance(alpha/cosLambda));
+// System.out.println(swimmerTrack.getPointAtDistance(-alpha));
+// System.out.printf("Pt: %f\n", t.getPt());
+// for (Track.ParameterName n : Track.ParameterName.values()) {
+// System.out.printf("%s: %f\n", n.name(), t.getParameter(n));
+// }
// The points at these two locations should be the same, too.
-// assertEquals(swimmerRaw.getPointAtDistance(alpha), swimmerTrack.getPointAtDistance(0), 4e-4);
+ for (int i=-70; i<70; i++) {
+ double alpha_i = i/10;
+ assertEquals(swimmerRaw.getPointAtDistance(alpha_i), swimmerTrack.getPointAtDistance(alpha_i-alpha), 1e-10);
+ }
}
/* (non-Javadoc)