Commit in projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim on MAIN
HelixSwimmerYField.java+70added 3157
HelixYField.java+44added 3157
+114
2 added files
Work in progress on swimming tracks correctly in Y field (for Matt to look at).  Doesn't work yet because need to properly implement setTrack() method in HelixSwimmerYField.

projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim
HelixSwimmerYField.java added at 3157
--- 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
HelixYField.java added at 3157
--- 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;
+    }
+}
SVNspam 0.1


Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1