Commit in projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim on MAIN | |||
HelixSwimmerYField.java | +70 | added 3157 | |
HelixYField.java | +44 | added 3157 | |
+114 |
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 (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 (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; + } +}
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