View Javadoc

1   package org.lcsim.util.swim;
2   
3   import hep.physics.matrix.BasicMatrix;
4   import hep.physics.vec.Hep3Vector;
5   
6   import org.lcsim.spacegeom.CartesianPoint;
7   import org.lcsim.spacegeom.SpacePoint;
8   
9   /**
10   * Helix for swimming in Y B-field.
11   * @author Jeremy McCormick <jeremym@slac.stanford.edu>
12   */
13  public class HelixYField extends Helix {
14  
15      public HelixYField(Hep3Vector org, double r, double p, double lambda) {
16          super(org, r, p, lambda);
17      }
18  
19      public SpacePoint getPointAtDistance(double alpha) {
20          double darg = alpha * cosLambda / radius - phi;
21          double x = xCenter + radius * Math.sin(darg);
22          double y = yCenter + radius * Math.cos(darg);
23          double z = origin.z() + alpha * sinLambda;
24          CartesianPoint trkpoint = new CartesianPoint(x, y, z);
25          CartesianPoint labpoint = getLabPoint(trkpoint);
26        //  System.out.println(trkpoint.toString() + labpoint.toString());
27          return labpoint;
28      }
29  
30      private CartesianPoint getLabPoint(CartesianPoint pos) {
31          BasicMatrix detToTrk;
32          detToTrk = new BasicMatrix(3, 3);
33          detToTrk.setElement(0, 2, 1);
34          detToTrk.setElement(1, 0, 1);
35          detToTrk.setElement(2, 1, 1);
36          BasicMatrix _trkToDet;
37          _trkToDet = new BasicMatrix(3, 3);
38          _trkToDet.setElement(0, 1, 1);
39          _trkToDet.setElement(1, 2, 1);
40          _trkToDet.setElement(2, 0, 1);
41          double[] trk = { 0, 0, 0 };
42          trk[0] = _trkToDet.e(0, 0) * pos.x() + _trkToDet.e(0, 1) * pos.y() + _trkToDet.e(0, 2) * pos.z();
43          trk[1] = _trkToDet.e(1, 0) * pos.x() + _trkToDet.e(1, 1) * pos.y() + _trkToDet.e(1, 2) * pos.z();
44          trk[2] = _trkToDet.e(2, 0) * pos.x() + _trkToDet.e(2, 1) * pos.y() + _trkToDet.e(2, 2) * pos.z();
45          CartesianPoint retpt = new CartesianPoint(trk[0], trk[1], trk[2]);
46          return retpt;
47      }
48  }