10#include "GaudiKernel/MsgStream.h"
17 double denom = dir.dot(planeNormal);
18 if (std::abs(denom) < 0.00001) denom = 0.00001;
19 double u = (planeNormal.dot(planePos - pos)) / (denom);
32 double radiusCylinder)
const {
33 double sinThsqinv = 1. / dir.perp2();
34 double stepLength = (-pos.x() * dir.x() - pos.y() * dir.y()) * sinThsqinv;
35 double deltaRSq = (radiusCylinder * radiusCylinder - pos.perp2()) * sinThsqinv + stepLength * stepLength;
36 if (deltaRSq > 0.) stepLength += std::sqrt(deltaRSq);
38 return pos + dir * stepLength;
43 double cosAngle = dirLine.dot(dir);
44 double stepLength = (posLine - pos).
dot(dir - dirLine * cosAngle) / (1. - cosAngle * cosAngle);
45 return pos + stepLength * dir;
66 if (disk)
return propagate(pos, dir, *disk);
69 if (cylinder)
return propagate(pos, dir, *cylinder);
71 log << MSG::WARNING <<
"propagation failed, unkown surface type" <<
endmsg;
Amg::Vector3D propagateToStraightLine(const Amg::Vector3D &pos, const Amg::Vector3D &dir, const Amg::Vector3D &posLine, const Amg::Vector3D &dirLine) const
Propagator track parameters to a straight line.
Amg::Vector3D propagateToPerigee(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const
Propagator track parameters to the perigee.
Amg::Vector3D propagateToPlane(const Amg::Vector3D &pos, const Amg::Vector3D &dir, const Amg::Vector3D &planePos, const Amg::Vector3D &planeNormal) const
Propagator track parameters to a plane.
Amg::Vector3D propagateToCylinder(const Amg::Vector3D &pos, const Amg::Vector3D &dir, double radiusCylinder) const
Propagator track parameters to a cylinder paralel to the z-axis, centered at (0.,0....
Amg::Vector3D propagate(const Amg::Vector3D &pos, const Amg::Vector3D &dir, const MuonCalibSurface &surf) const
Propagator track parameters to a plane paralel to the xy plane.
singleton-like access to IMessageSvc via open function and helper
Eigen::Matrix< double, 3, 1 > Vector3D
IMessageSvc * getMessageSvc(bool quiet=false)
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.