24 const std::vector<float> &
offset)
41 bool centerEqual = (transfEqual) ? (
center() == dsf->
center()) :
false;
42 bool boundsEqual = (centerEqual) ? (
bounds() == dsf->
bounds()) :
false;
74 const double inttol = std::max(
bounds().
r() * 0.0001, 0.01);
84 radius = loc3Dframe.perp();
87 radius = glopos.perp();
104 (loc3Dframe.perp() -
offset) * std::sin(loc3Dframe.phi()),
107 return (bchk ?
bounds().inside3D(loc3Dbase, tol1, tol2) :
true);
124 double sp = pos.dot(S);
125 double sc = X.dot(S);
126 double dp = dir.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;
154 return {2, currDist,
true, first, second};
155 }
if (second <= 0.) {
156 return {2, currDist,
true, second, first};
158 return {2, currDist,
true, second, first};
A generic symmetric BinUtility, for fully symmetric binning in terms of binning grid and binning type...
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
Class for a CylinderSurface in the ATLAS detector.
CylinderSurface()
Default Constructor.
virtual const CylinderBounds & bounds() const override final
This method returns the CylinderBounds by reference (NoBounds is not possible for cylinder)
Access to distance solutions.
Class for a Calo CylinderSurface with variable depth in the ATLAS detector.
virtual DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override final
fast straight line distance evaluation to Surface
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 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.
const std::vector< float > & offset() const
This method allows access to the radial offset values.
SlidingCylinderSurface(const CylinderSurface &surf, const Trk::BinUtility &bu, const std::vector< float > &offset)
Constructor.
virtual bool operator==(const Surface &sf) const override final
Equality operator.
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...
std::vector< float > m_depth
Abstract Base Class for tracking surfaces.
virtual const Amg::Vector3D & normal() const
Returns the normal vector of the Surface (i.e.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
std::unique_ptr< Transforms > m_transforms
Unique Pointer to the Transforms struct.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
hold the test vectors and ease the comparison