|
ATLAS Offline Software
|
Go to the documentation of this file.
13 #include "Identifier/Identifier.h"
17 #include "GaudiKernel/MsgStream.h"
45 , m_bounds(std::make_shared<Trk::CylinderBounds>(
radius, halez))
62 , m_bounds(slsf.m_bounds)
71 , m_bounds(csf.m_bounds)
100 double l1,
double l2,
double phi,
double theta,
double qop,
102 return std::make_unique<ParametersT<5, Charged, StraightLineSurface>>(
111 return std::make_unique<ParametersT<5, Charged, StraightLineSurface>>(
119 double l1,
double l2,
double phi,
double theta,
double qop,
121 return std::make_unique<ParametersT<5, Neutral, StraightLineSurface>>(
131 return std::make_unique<ParametersT<5, Neutral, StraightLineSurface>>(
144 Amg::Vector3D radiusAxisGlobal(lineDirection().cross(glomom));
168 Amg::Vector3D loc3Dframe = inverseTransformMultHelper(glopos);
173 double sign = ((lineDirection().cross(glomom)).
dot(decVec) < 0.) ? -1. : 1.;
190 double tol1,
double tol2)
const
198 Amg::Vector3D loc3Dframe = inverseTransformMultHelper(glopo);
200 return (locCand[
Trk::locR] < bounds().
r() + tol1 && bounds().insideLoc2(locCand, tol2));
210 double D =
dir.dot(
S);
211 double A = (1. - D) * (1. + D);
214 double currDist = sqrt(
dx.dot(
dx));
217 return {1, currDist,
false, 0.};
220 return {1, currDist,
false, sol};
233 mFrame.col(0) = measX;
234 mFrame.col(1) = measY;
235 mFrame.col(2) = measDepth;
250 double D =
dir.dot(Az);
251 double Lz = dxyz.dot(Az);
252 double A = (1. - D) * (1. + D);
258 s = (D * Lz - (
dir.dot(dxyz))) /
A;
260 return {1, 0.,
false,
s};
267 if (m_bounds.get()) {
268 Rm = m_bounds.get()->r();
269 Lzm = m_bounds.get()->halflengthZ();
285 double dist = dxyz.dot(dxyz) - Lz * Lz;
286 dist = (dist > Rm * Rm) ? sqrt(dist) - Rm : 0.;
287 double dL = fabs(Lz) - Lzm;
289 dist = sqrt(dist * dist + dL * dL);
291 return {1, dist,
false,
s};
309 double eaTeb = ea.dot(eb);
310 double denom = 1 - eaTeb * eaTeb;
311 if (fabs(
denom) > 10
e-7) {
312 double lambda0 = (mab.dot(ea) - mab.dot(eb) * eaTeb) /
denom;
314 bool isValid = forceDir ? (lambda0 > 0.) :
true;
321 return {
pos, 0.,
false};
const TrkDetElementBase * m_associatedDetElement
Not owning Pointer to the TrkDetElementBase.
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 final
This method checks if the provided GlobalPosition is inside the assigned straw radius,...
std::unique_ptr< ParametersBase< 5, Trk::Neutral > > NeutralTrackParametersUniquePtr
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override final
Specified for StraightLineSurface: GlobalToLocal method without dynamic memory allocation This method...
AmgSymMatrix(5) &GXFTrackState
virtual bool operator==(const Surface &sf) const override
Equality operator.
Surface & operator=(const Surface &sf)
virtual Amg::RotationMatrix3D measurementFrame(const Amg::Vector3D &glopos, const Amg::Vector3D &glomom) const override final
Return the measurement frame - this is needed for alignment, in particular for StraightLine and Perig...
virtual DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override final
fast straight line distance evaluation to Surface
StraightLineSurface()
Default Constructor - needed for persistency.
Eigen::Affine3d Transform3D
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
static const NoBounds s_boundless
SharedObject< const CylinderBounds > m_bounds
NoBounds as return object when no bounds are declared.
def dot(G, fn, nodesToHighlight=[])
CxxUtils::CachedValue< Amg::Vector3D > m_lineDirection
bounds (shared)
double charge(const T &p)
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override final
Specified for StraightLineSurface: LocalToGlobal method without dynamic memory allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
Identifier m_associatedDetElementId
Identifier for the TrkDetElementBase.
virtual Intersection straightLineIntersection(const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool forceDir, Trk::BoundaryCheck bchk) const override final
fast straight line intersection schema - standard: provides closest intersection and (signed) path le...
const double mb
1mb to cm2
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
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.
StraightLineSurface & operator=(const StraightLineSurface &slsf)
Assignment operator.
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const =0
Specified by each surface type: LocalToGlobal method without dynamic memory allocation.
double halflengthZ() const
This method returns the halflengthZ.
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 double r() const override final
This method returns the radius.