|
ATLAS Offline Software
|
Go to the documentation of this file.
19 #include "GaudiKernel/MsgStream.h"
29 , m_referencePoint(nullptr)
35 , m_bounds(dsf.m_bounds)
36 , m_referencePoint(nullptr)
43 , m_bounds(dsf.m_bounds)
44 , m_referencePoint(nullptr)
53 , m_referencePoint(nullptr)
62 , m_bounds(std::make_shared<
Trk::
DiscBounds>(rmin, rmax, hphisec))
63 , m_referencePoint(nullptr)
80 , m_referencePoint(nullptr)
88 , m_referencePoint(nullptr)
96 , m_referencePoint(nullptr)
101 m_bounds(annpcbounds),
102 m_referencePoint(nullptr)
107 m_referencePoint(nullptr)
110 if(detElem !=
nullptr) {
117 std::shared_ptr<AnnulusBoundsPC> annpcbounds(
res.first.clone());
118 double phiShift =
res.second;
128 originTrf = transl * rot;
137 , m_referencePoint(nullptr)
144 , m_referencePoint(nullptr)
153 m_referencePoint.store(
nullptr);
172 double l1,
double l2,
double phi,
double theta,
double qop,
174 return std::make_unique<ParametersT<5, Charged, DiscSurface>>(
183 return std::make_unique<ParametersT<5, Charged, DiscSurface>>(
191 double l1,
double l2,
double phi,
double theta,
double qop,
193 return std::make_unique<ParametersT<5, Neutral, DiscSurface>>(
203 return std::make_unique<ParametersT<5, Neutral, DiscSurface>>(
210 if (!m_referencePoint) {
214 double rMedium = bounds().
r();
217 m_referencePoint.set(std::make_unique<Amg::Vector3D>(
transform() * gp));
223 double rMedium = bounds().
r();
226 m_referencePoint.set(std::make_unique<Amg::Vector3D>(
transform() * gp));
229 return (*m_referencePoint);
253 Amg::Vector3D loc3Dframe = inverseTransformMultHelper(glopos);
255 return (std::fabs(loc3Dframe.z()) <= s_onSurfaceTolerance);
265 double u = (normal().dot((center() -
pos))) / (
denom);
268 bool isValid = forceDir ? (
u > 0.) :
true;
291 Amg::Vector3D loc3Dframe = inverseTransformMultHelper(glopo);
292 if (std::abs(loc3Dframe.z()) > (s_onSurfaceTolerance + tol1)) {
297 Amg::Vector2D(loc3Dframe.perp(), loc3Dframe.phi()), tol1, tol2)
312 double b =
S < 0. ? -1 : 1;
315 double A =
b *
dir.dot(
N);
318 return {1, 0.,
true, 0.};
320 return {0,
d,
true, 0.};
323 double D =
b * (
S - (
pos.dot(
N))) /
A;
324 return {1,
d,
true, D};
333 const double Az[3] = { T(0, 2), T(1, 2), T(2, 2) };
337 const double dx =
pos[0] - T(0, 3);
338 const double dy =
pos[1] - T(1, 3);
339 const double dz =
pos[2] - T(2, 3);
340 const double z =
dx * Az[0] +
dy * Az[1] + dz * Az[2];
341 const double az =
dir[0] * Az[0] +
dir[1] * Az[1] +
dir[2] * Az[2];
351 double dist = std::abs(
z);
353 return {
ns, dist,
true,
s};
358 const double x =
dx * T(0, 0) +
dy * T(1, 0) + dz * T(2, 0);
359 const double y =
dx * T(0, 1) +
dy * T(1, 1) + dz * T(2, 1);
363 double d = bounds().minDistance(lp);
365 dist = std::sqrt(dist * dist +
d *
d);
368 return {
ns, dist,
true,
s};
const TrkDetElementBase * m_associatedDetElement
Not owning Pointer to the TrkDetElementBase.
Eigen::Quaternion< double > Rotation3D
double averagePhi() const
This method returns the average phi.
@ z
global position (cartesian)
std::unique_ptr< ParametersBase< 5, Trk::Charged > > ChargedTrackParametersUniquePtr
Unique ptr types.
Eigen::Matrix< double, 2, 1 > Vector2D
virtual bool isOnSurface(const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const override
This method returns true if the GlobalPosition is on the Surface for both, within or without check of...
DiscSurface & operator=(const DiscSurface &dsf)
Assignement operator.
std::unique_ptr< ParametersBase< 5, Trk::Neutral > > NeutralTrackParametersUniquePtr
virtual double r() const override
This method returns the maximum expansion on the plane (=rMax)
virtual Identifier identify() const =0
Identifier.
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
virtual const Amg::Vector3D & globalReferencePoint() const override final
Returns a global reference point: For the Disc this is Where denote the r(), averagePhi() of the Bo...
DiscSurface()
Default Constructor.
@ u
Enums for curvilinear frames.
virtual Intersection straightLineIntersection(const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool forceDir=false, Trk::BoundaryCheck bchk=false) const override final
fast straight line intersection schema - standard: provides closest intersection and (signed) path le...
AmgSymMatrix(5) &GXFTrackState
Surface & operator=(const Surface &sf)
std::unique_ptr< Transforms > m_transforms
Class that implements the asymmetric shape of the ITk strip endcap modules.
SharedObject< const SurfaceBounds > m_bounds
reference Point on the Surface
Eigen::Affine3d Transform3D
std::pair< std::vector< unsigned int >, bool > res
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
double averagePhi() const
This method returns the average phi.
def dot(G, fn, nodesToHighlight=[])
static std::pair< AnnulusBoundsPC, double > fromCartesian(AnnulusBounds &annbo)
Static factory method to produce an instance of this class from the cartesian implementation.
Ensure that the ATLAS eigen extensions are properly loaded.
virtual Surface::ChargedTrackParametersUniquePtr createUniqueTrackParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
Use the Surface as a ParametersBase constructor, from local parameters - charged.
double charge(const T &p)
Eigen::Matrix< double, 3, 1 > Vector3D
virtual bool operator==(const Surface &sf) const override
Equality operator.
Identifier m_associatedDetElementId
Identifier for the TrkDetElementBase.
virtual NeutralTrackParametersUniquePtr createUniqueNeutralParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
Use the Surface as a ParametersBase constructor, from local parameters - neutral.
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override
Specialized for DiscSurface: GlobalToLocal method without dynamic memory allocation - boolean checks ...
Eigen::Translation< double, 3 > Translation3D
Eigen::AngleAxisd AngleAxis3D
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override
Specialized for DiscSurface: LocalToGlobal method without dynamic memory allocation.
virtual double r() const override final
This method returns the maximum expansion on the plane (=rMax)
static const NoBounds s_boundless
virtual DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override
fast straight line distance evaluation to Surface