projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim
--- projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixSwimmerYField.java (rev 0)
+++ projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixSwimmerYField.java 2014-06-26 20:58:58 UTC (rev 3157)
@@ -0,0 +1,70 @@
+package org.lcsim.util.swim;
+
+import static java.lang.Math.atan;
+import static java.lang.Math.sqrt;
+import static org.lcsim.event.LCIOParameters.ParameterName.omega;
+import static org.lcsim.event.LCIOParameters.ParameterName.phi0;
+import static org.lcsim.event.LCIOParameters.ParameterName.tanLambda;
+import hep.physics.matrix.BasicMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+
+import org.lcsim.event.LCIOParameters;
+import org.lcsim.event.Track;
+import org.lcsim.spacegeom.CartesianPoint;
+import org.lcsim.spacegeom.CartesianVector;
+import org.lcsim.spacegeom.SpacePoint;
+
+public class HelixSwimmerYField extends HelixSwimmer {
+
+ public HelixSwimmerYField(double B) {
+ super(B);
+ }
+
+ public void setTrack(Track t) {
+ double pt = sqrt(t.getPX() * t.getPX() + t.getPY() * t.getPY());
+ LCIOParameters parameters = new LCIOParameters(t.getTrackParameters(), pt);
+
+ SpacePoint ref = new CartesianPoint(t.getReferencePoint());
+ SpacePoint origin = LCIOParameters.Parameters2Position(parameters, ref);
+ _trajectory = new Helix(origin, 1 / parameters.get(omega), parameters
+ .get(phi0), atan(parameters.get(tanLambda)));
+ // Hep3Vectors have too many shortcomings
+ _momentum = new CartesianVector(LCIOParameters.Parameters2Momentum(parameters).v());
+ }
+
+ /*
+ public void setTrack(Hep3Vector origp, Hep3Vector origr0, int iq) {
+ Hep3Vector p = getTrackPoint(origp);
+ Hep3Vector r0 = getTrackPoint(origr0);
+ double pt = Math.sqrt(p.x() * p.x() + p.y() * p.y());
+ double phi = Math.atan2(p.y(), p.x());
+ double lambda = Math.atan2(p.z(), pt);
+ if (iq != 0 && field != 0) {
+ double radius = pt / (iq * field);
+ _trajectory = new HelixYField(r0, radius, phi, lambda);
+ } else {
+ _trajectory = new Line(r0, phi, lambda);
+ }
+ _momentum = new CartesianVector(p.v());
+ _charge = iq;
+ System.out.println("momentum_x: " + _momentum.x());
+ System.out.println("momentum_y: " + _momentum.y());
+ System.out.println("momentum_z: " + _momentum.z());
+ }
+ */
+
+ private Hep3Vector getTrackPoint(Hep3Vector pos) {
+ BasicMatrix _detToTrk;
+ _detToTrk = new BasicMatrix(3, 3);
+ _detToTrk.setElement(0, 2, 1);
+ _detToTrk.setElement(1, 0, 1);
+ _detToTrk.setElement(2, 1, 1);
+ double[] trk = { 0, 0, 0 };
+ trk[0] = _detToTrk.e(0, 0) * pos.x() + _detToTrk.e(0, 1) * pos.y() + _detToTrk.e(0, 2) * pos.z();
+ trk[1] = _detToTrk.e(1, 0) * pos.x() + _detToTrk.e(1, 1) * pos.y() + _detToTrk.e(1, 2) * pos.z();
+ trk[2] = _detToTrk.e(2, 0) * pos.x() + _detToTrk.e(2, 1) * pos.y() + _detToTrk.e(2, 2) * pos.z();
+ Hep3Vector retpt = new BasicHep3Vector(trk[0], trk[1], trk[2]);
+ return retpt;
+ }
+}
projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim
--- projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixYField.java (rev 0)
+++ projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixYField.java 2014-06-26 20:58:58 UTC (rev 3157)
@@ -0,0 +1,44 @@
+package org.lcsim.util.swim;
+
+import hep.physics.matrix.BasicMatrix;
+import hep.physics.vec.Hep3Vector;
+
+import org.lcsim.spacegeom.CartesianPoint;
+import org.lcsim.spacegeom.SpacePoint;
+
+public class HelixYField extends Helix {
+
+ public HelixYField(Hep3Vector org, double r, double p, double lambda) {
+ super(org, r, p, lambda);
+ }
+
+ public SpacePoint getPointAtDistance(double alpha) {
+ double darg = alpha * cosLambda / radius - phi;
+ double x = xCenter + radius * Math.sin(darg);
+ double y = yCenter + radius * Math.cos(darg);
+ double z = origin.z() + alpha * sinLambda;
+ CartesianPoint trkpoint = new CartesianPoint(x, y, z);
+ CartesianPoint labpoint = getLabPoint(trkpoint);
+ System.out.println(trkpoint.toString() + labpoint.toString());
+ return labpoint;
+ }
+
+ private CartesianPoint getLabPoint(CartesianPoint pos) {
+ BasicMatrix detToTrk;
+ detToTrk = new BasicMatrix(3, 3);
+ detToTrk.setElement(0, 2, 1);
+ detToTrk.setElement(1, 0, 1);
+ detToTrk.setElement(2, 1, 1);
+ BasicMatrix _trkToDet;
+ _trkToDet = new BasicMatrix(3, 3);
+ _trkToDet.setElement(0, 1, 1);
+ _trkToDet.setElement(1, 2, 1);
+ _trkToDet.setElement(2, 0, 1);
+ double[] trk = { 0, 0, 0 };
+ trk[0] = _trkToDet.e(0, 0) * pos.x() + _trkToDet.e(0, 1) * pos.y() + _trkToDet.e(0, 2) * pos.z();
+ trk[1] = _trkToDet.e(1, 0) * pos.x() + _trkToDet.e(1, 1) * pos.y() + _trkToDet.e(1, 2) * pos.z();
+ trk[2] = _trkToDet.e(2, 0) * pos.x() + _trkToDet.e(2, 1) * pos.y() + _trkToDet.e(2, 2) * pos.z();
+ CartesianPoint retpt = new CartesianPoint(trk[0], trk[1], trk[2]);
+ return retpt;
+ }
+}