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
11
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
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 }