Print

Print


Commit in lcsim on MAIN
src/org/lcsim/contrib/JanStrube/tracking/SwimmerTest.py+3-31.2 -> 1.3
                                        /TrackingCalculator.py+4-41.2 -> 1.3
                                        /NewFastMCTrackFactory.java+3-31.5 -> 1.6
                                        /Helix.java+4-41.2 -> 1.3
test/org/lcsim/contrib/JanStrube/tracking/HelixSwimmerTrackConsistencyTest.java+31-231.3 -> 1.4
+45-37
5 modified files
Major bug fix. This fixes the last known issue. Track and HelixSwimmer now appear to be consistent.

lcsim/src/org/lcsim/contrib/JanStrube/tracking
SwimmerTest.py 1.2 -> 1.3
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
TrackingCalculator.py 1.2 -> 1.3
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
NewFastMCTrackFactory.java 1.5 -> 1.6
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
Helix.java 1.2 -> 1.3
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
HelixSwimmerTrackConsistencyTest.java 1.3 -> 1.4
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)
CVSspam 0.2.8