|
ATLAS Offline Software
|
Go to the documentation of this file.
24 const std::vector<float> &
offset)
41 bool centerEqual = (transfEqual) ? (center() == dsf->
center()) :
false;
42 bool boundsEqual = (centerEqual) ? (bounds() == dsf->
bounds()) :
false;
52 double r0 = bounds().r();
57 float offset = m_depth[m_etaBin.bin(t0 * loc3D0)];
74 const double inttol =
std::max(bounds().
r() * 0.0001, 0.01);
77 float offset = m_depth[m_etaBin.bin(loc3D0)];
84 radius = loc3Dframe.perp();
101 float offset = m_depth[m_etaBin.bin(loc3D0)];
107 return (bchk ? bounds().inside3D(loc3Dbase, tol1, tol2) :
true);
118 float offset = m_depth[m_etaBin.bin(loc3D0)];
124 double sp =
pos.dot(
S);
125 double sc =
X.dot(
S);
130 double A =
ax.dot(
ax);
131 double B =
ax.dot(
dx);
132 double C =
dx.dot(
dx);
133 double currDist =
radius - std::sqrt(C);
134 const double bOverA{B/
A};
136 if (std::abs(currDist) < tol) {
137 return {1, 0.,
true, 0.};
139 return {0, currDist,
true, 0.};
143 double rmin = C - B * bOverA < 0. ? 0. : std::sqrt(C - B * bOverA);
145 return {0, currDist,
true, bOverA};
147 if (std::abs(rmin -
radius) < tol) {
148 return {2, currDist,
true, bOverA, bOverA};
150 const double sqrtTerm = std::sqrt((
radius - rmin) * (
radius + rmin)/
A) ;
151 double first = bOverA - sqrtTerm;
152 double second = bOverA + sqrtTerm;
166 return straightLineDistanceEstimate(
pos,
dir);
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override final
Specialized for DiscSurface: GlobalToLocal method without dynamic memory allocation - boolean checks ...
virtual DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override final
fast straight line distance evaluation to Surface
Eigen::Matrix< double, 2, 1 > Vector2D
virtual const CylinderBounds & bounds() const override final
This method returns the CylinderBounds by reference (NoBounds is not possible for cylinder)
const Amg::Vector3D & center() const
Returns the center position of the Surface.
virtual bool operator==(const Surface &sf) const override final
Equality operator.
std::unique_ptr< Transforms > m_transforms
SlidingCylinderSurface(const CylinderSurface &surf, const Trk::BinUtility &bu, const std::vector< float > &offset)
Constructor.
Eigen::Affine3d Transform3D
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
virtual const Amg::Vector3D & normal() const
Returns the normal vector of the Surface (i.e.
Ensure that the ATLAS eigen extensions are properly loaded.
Eigen::Matrix< double, 3, 1 > Vector3D
virtual bool isOnSurface(const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const override final
This method returns true if the GlobalPosition is on the Surface for both, within or without check of...
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override final
Specialized for DiscSurface: LocalToGlobal method without dynamic memory allocation.