Print

Print


Commit in lcsim on MAIN
src/org/lcsim/util/swim/Helix.java+5-31.5 -> 1.6
                       /Trajectory.java+3-11.2 -> 1.3
test/org/lcsim/util/swim/HelixTest.java+31-21.1 -> 1.2
+39-6
3 modified files
More helix improvements

lcsim/src/org/lcsim/util/swim
Helix.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- Helix.java	22 Aug 2005 03:31:16 -0000	1.5
+++ Helix.java	22 Aug 2005 17:51:47 -0000	1.6
@@ -19,7 +19,7 @@
  * All quantities in this class are dimensionless. It has no dependencies
  * except for Hep3Vector (which could easily be removed).
  * @author tonyj
- * @version $Id: Helix.java,v 1.5 2005/08/22 03:31:16 tonyj Exp $
+ * @version $Id: Helix.java,v 1.6 2005/08/22 17:51:47 tonyj Exp $
  */
 public class Helix implements Trajectory
 {
@@ -62,10 +62,12 @@
    
    public double getDistanceToInfiniteCylinder(double r)
    {
+      if (r<0) throw new IllegalArgumentException("radius "+r+"<0");
       double darg  = r*r/(2.*radius*radiusOfCenter) - radiusOfCenter/(2.*radius) - radius/(2.*radiusOfCenter);
       double diff  = asin(darg) + phi - phiToCenter;
-      if (diff < 0) diff += 2*Math.PI;
-      return (Math.abs(radius)/cosLambda)*diff;
+      double result = (radius/cosLambda)*diff;
+      if (result < 0) result += Math.abs(radius/cosLambda)*2*Math.PI;
+      return result;
    }
    
    /**

lcsim/src/org/lcsim/util/swim
Trajectory.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- Trajectory.java	20 Aug 2005 23:25:07 -0000	1.2
+++ Trajectory.java	22 Aug 2005 17:51:47 -0000	1.3
@@ -5,7 +5,7 @@
 /**
  * A particle trajectory (either a Helix or a Line)
  * @author tonyj
- * @version $Id: Trajectory.java,v 1.2 2005/08/20 23:25:07 tonyj Exp $
+ * @version $Id: Trajectory.java,v 1.3 2005/08/22 17:51:47 tonyj Exp $
  */
 public interface Trajectory
 {
@@ -16,6 +16,8 @@
   /**
     * Calculates the distance at which the trajectory first reaches radius R.
     * Returns Double.NaN if the trajectory does not intercept the cylinder.
+    * In principle there could be multiple solutions, so this method should
+    * always return the minimum <b>positive</b> solution.
     */
    
    public double getDistanceToInfiniteCylinder(double r);

lcsim/test/org/lcsim/util/swim
HelixTest.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- HelixTest.java	18 Aug 2005 15:24:04 -0000	1.1
+++ HelixTest.java	22 Aug 2005 17:51:47 -0000	1.2
@@ -10,7 +10,7 @@
 /**
  *
  * @author tonyj
- * @version $Id: HelixTest.java,v 1.1 2005/08/18 15:24:04 tonyj Exp $
+ * @version $Id: HelixTest.java,v 1.2 2005/08/22 17:51:47 tonyj Exp $
  */
 public class HelixTest extends TestCase
 {
@@ -41,6 +41,13 @@
       assertTrue(Double.isNaN(circle.getDistanceToInfiniteCylinder(2)));
       assertTrue(Double.isNaN(circle.getDistanceToInfiniteCylinder(0)));     
       assertEquals(0,circle.getDistanceToInfiniteCylinder(1),1e-14);     
+      
+      System.out.println(circle.getDOCA(new BasicHep3Vector(-.5, 0,0)));
+      System.out.println(circle.getDOCA(new BasicHep3Vector(.5, 0,0)));
+      System.out.println(circle.getDOCA(new BasicHep3Vector(0,.5,0)));
+      System.out.println(circle.getDOCA(new BasicHep3Vector(0,-.5,0)));
+      System.out.println(circle.getDOCA(new BasicHep3Vector(0,.5,1)));
+      System.out.println(circle.getDOCA(new BasicHep3Vector(0,-.5,1)));
    }
    public void testCircle2()
    {
@@ -76,9 +83,30 @@
       assertEquals(d,helix.getDistanceToZPlane(Math.PI*2));
       assertTrue(Double.isNaN(helix.getDistanceToInfiniteCylinder(3*radius)));
       assertEquals(d/2,helix.getDistanceToInfiniteCylinder(2*radius),1e-14);
+      assertEquals(1.4809609793861218,helix.getDistanceToInfiniteCylinder(radius),1e-14);
+      assertEquals(0,helix.getDistanceToInfiniteCylinder(0),1e-14);     
+   }
+   public void testHelix2()
+   {
+      Hep3Vector origin = new BasicHep3Vector(0,0,0);
+      double radius = -1;
+      double phi = Math.PI/2;
+      double lambda = -Math.PI/4;
+      Helix helix = new Helix(origin,radius,phi,lambda);
+
+      assertEquals(origin, helix.getPointAtDistance(0));
+      double d = Math.PI*2*Math.sqrt(2);
+      assertEquals(new BasicHep3Vector(0,0,-Math.PI*2), helix.getPointAtDistance(d));
+      assertEquals(new BasicHep3Vector(-2,0,-Math.PI), helix.getPointAtDistance(d/2));
+      
+      assertEquals(d/2,helix.getDistanceToZPlane(-Math.PI));
+      assertEquals(d,helix.getDistanceToZPlane(-Math.PI*2));
+      assertTrue(Double.isNaN(helix.getDistanceToInfiniteCylinder(3)));
+      assertEquals(d/2,helix.getDistanceToInfiniteCylinder(2),1e-14);
+      assertEquals(1.4809609793861218,helix.getDistanceToInfiniteCylinder(1),1e-14);
       assertEquals(0,helix.getDistanceToInfiniteCylinder(0),1e-14);     
    }
-   public void testHelix2() throws IOException
+   public void testHelix3() throws IOException
    {
       Hep3Vector origin = new BasicHep3Vector(0,0,0);
       double radius = 1;
@@ -105,6 +133,7 @@
       assertEquals(Math.sqrt(2)/2,xy.rmsY(),1e-14);
       aida.saveAs("helix.aida");    
    }
+
    private void assertEquals(Hep3Vector v1, Hep3Vector v2)
    {
       assertEquals(v1.x(),v2.x(), 1e-14);
CVSspam 0.2.8