ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::ConeSurface Class Reference

Class for a conical surface in the ATLAS detector. More...

#include <ConeSurface.h>

Inheritance diagram for Trk::ConeSurface:
Collaboration diagram for Trk::ConeSurface:

Public Types

using ChargedTrackParametersUniquePtr
 Unique ptr types.
using NeutralTrackParametersUniquePtr

Public Member Functions

 ConeSurface ()
 Default Constructor.
ConeSurfaceoperator= (const ConeSurface &csf)
 Assignment operator.
 ConeSurface (const ConeSurface &csf)
 Copy constructor.
 ConeSurface (ConeSurface &&annbo)=default
 Move constructor.
ConeSurfaceoperator= (ConeSurface &&sbo)=default
 Move assignment.
virtual ~ConeSurface ()=default
 Destructor.
 ConeSurface (const Amg::Transform3D &htrans, double alpha, bool symmetric=false)
 Constructor form Transform and an opening angle.
 ConeSurface (const Amg::Transform3D &htrans, double alpha, double locZmin, double locZmax, double halfPhi=M_PI)
 Constructor form Transform, radius halfphi, and halflenght.
 ConeSurface (const Amg::Transform3D &htrans, std::shared_ptr< const ConeBounds > cbounds)
 Constructor from Transform and CylinderBounds.
 ConeSurface (const Amg::Transform3D &htrans)
 Constructor from Amg Transform by ref.
 ConeSurface (const ConeSurface &csf, const Amg::Transform3D &transf)
 Copy constructor with shift.
virtual bool operator== (const Surface &sf) const override
 Equality operator.
bool operator== (const ConeSurface &cf) const
virtual ConeSurfaceclone () const override
 Implicit Constructor.
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.
virtual Surface::ChargedTrackParametersUniquePtr createUniqueTrackParameters (const Amg::Vector3D &position, const Amg::Vector3D &momentum, double charge, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
 Use the Surface as a ParametersBase constructor, from global parameters - charged.
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 NeutralTrackParametersUniquePtr createUniqueNeutralParameters (const Amg::Vector3D &position, const Amg::Vector3D &momentum, double charge, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
 Use the Surface as a ParametersBase constructor, from global parameters - neutral.
template<int DIM, class T>
std::unique_ptr< ParametersT< DIM, T, ConeSurface > > createUniqueParameters (double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(DIM)> cov=std::nullopt) const
 Use the Surface as a ParametersBase constructor, from local parameters.
template<int DIM, class T>
std::unique_ptr< ParametersT< DIM, T, ConeSurface > > createUniqueParameters (const Amg::Vector3D &position, const Amg::Vector3D &momentum, double charge, std::optional< AmgSymMatrix(DIM)> cov=std::nullopt) const
 Use the Surface as a ParametersBase constructor, from global parameters.
virtual constexpr SurfaceType type () const override final
 Return the surface type.
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 Perigee Surface.
virtual const Amg::Vector3DglobalReferencePoint () const override final
 Returns a global reference point: For the Cylinder this is \( (R*cos(\phi), R*sin(\phi),0)*transform() \) Where \( \phi \) denotes the averagePhi() of the cylinderBounds.
virtual Amg::Vector3D normal (const Amg::Vector2D &locpo) const override final
 Return method for surface normal information at a given local point, overwrites the normal() from base class.
virtual const Amg::Vector3DrotSymmetryAxis () const
 Return method for the rotational symmetry axis - the z-Axis of the HepTransform.
virtual const ConeBoundsbounds () const override final
 This method returns the ConeBounds by reference (NoBounds is not possible for cone)
virtual bool insideBounds (const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const override
 This method calls the inside method of ConeBounds.
virtual bool insideBoundsCheck (const Amg::Vector2D &locpos, const BoundaryCheck &bchk) const override final
virtual Amg::Vector2D localParametersToPosition (const LocalParameters &locpars) const override final
 Specialized for ConeSurface : LocalParameters to Vector2D.
virtual void localToGlobal (const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override final
 Specialized for ConeSurface : LocalToGlobal method without dynamic memory allocation.
virtual bool globalToLocal (const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override final
 Specialized for ConeSurface : GlobalToLocal method without dynamic memory allocation - boolean checks if on surface.
virtual Intersection straightLineIntersection (const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool forceDir=false, BoundaryCheck bchk=false) const override final
 fast straight line intersection schema - provides closest intersection and (signed) path length
virtual DistanceSolution straightLineDistanceEstimate (const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override final
 fast straight line distance to Surface
virtual DistanceSolution straightLineDistanceEstimate (const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool bound) const override final
 fast straight line distance to Surface - with bounds options
virtual double pathCorrection (const Amg::Vector3D &, const Amg::Vector3D &) const override
 the pathCorrection for derived classes with thickness
virtual std::string name () const override
 Return properly formatted class name for screen output.
virtual const Amg::Vector3Dnormal () const
 Returns the normal vector of the Surface (i.e.
bool operator!= (const Surface &sf) const
 Non-equality operator.
std::unique_ptr< SurfaceuniqueClone () const
 NVI method returning unique_ptr clone.
const Amg::Transform3DcachedTransform () const
 Return the cached transformation directly.
const Amg::Transform3Dtransform () const
 Returns HepGeom::Transform3D by reference.
const Amg::Vector3Dcenter () const
 Returns the center position of the Surface.
const TrkDetElementBaseassociatedDetectorElement () const
 return associated Detector Element
Identifier associatedDetectorElementIdentifier () const
 return Identifier of the associated Detector Element
const Trk::LayerassociatedLayer () const
 return the associated Layer
const Trk::MaterialLayermaterialLayer () const
 return the material Layer
Trk::MaterialLayermaterialLayer ()
virtual const Trk::SurfacebaseSurface () const
 return the base surface (simplified for persistification)
std::optional< Amg::Vector2DpositionOnSurface (const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const
 positionOnSurface() returns the LocalPosition on the Surface,
If BoundaryCheck==false it just returns the value of globalToLocal (including nullptr possibility), if BoundaryCheck==true it checks whether the point is inside bounds or not (returns std::nullopt in this case).
template<class T>
bool onSurface (const T &parameters, const BoundaryCheck &bchk=BoundaryCheck(true)) const
 The templated Parameters OnSurface method - checks on surface pointer first.
virtual bool isOnSurface (const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const
 This method returns true if the GlobalPosition is on the Surface for both, within or without check of whether the local position is inside boundaries or not.
Amg::Vector3D localToGlobal (const Amg::Vector2D &locpos) const
 This method returns the GlobalPosition from a LocalPosition uses the per surface localToGlobal.
Amg::Vector3D localToGlobal (const Amg::Vector2D &locpos, const Amg::Vector3D &glomom) const
 This method returns the GlobalPosition from a LocalPosition The LocalPosition can be outside Surface bounds - for generality with momentum.
Amg::Vector3D localToGlobal (const LocalParameters &locpars) const
 This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds.
Amg::Vector3D localToGlobal (const LocalParameters &locpars, const Amg::Vector3D &glomom) const
 This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds - for generality with momentum.
std::optional< Amg::Vector2DglobalToLocal (const Amg::Vector3D &glopos, double tol=0.) const
 This method returns the LocalPosition from a provided GlobalPosition.
std::optional< Amg::Vector2DglobalToLocal (const Amg::Vector3D &glopos, const Amg::Vector3D &glomom) const
 This method returns the LocalPosition from a provided GlobalPosition.
template<typename T>
Intersection straightLineIntersection (const T &pars, bool forceDir=false, const Trk::BoundaryCheck &bchk=false) const
 fst straight line intersection schema - templated for charged and neutral parameters
bool isFree () const
 Returns 'true' if this surface is 'free', i.e.
bool isActive () const
 Return 'true' if this surface is owned by the detector element.
void setTransform (const Amg::Transform3D &trans)
 Set the transform updates center and normal.
void setOwner (SurfaceOwner x)
 set Ownership
SurfaceOwner owner () const
 return ownership
void setMaterialLayer (std::shared_ptr< Trk::MaterialLayer > mlay)
 set material layer
virtual MsgStream & dump (MsgStream &sl) const
 Output Method for MsgStream, to be overloaded by child classes.
virtual std::ostream & dump (std::ostream &sl) const
 Output Method for std::ostream, to be overloaded by child classes.
void associateLayer (const Layer &lay)
 method to associate a Trk::Layer.

Static Public Member Functions

static std::size_t numberOfInstantiations ()

Static Public Attributes

static constexpr SurfaceType staticType = SurfaceType::Cone
 The surface type static constexpr.
static std::atomic_size_t s_numberOfInstantiations

Protected Member Functions

Amg::Transform3D inverseTransformHelper () const
 Helper method to factorize in one place common operations calculate inverse transofrm and multiply with position.
Amg::Vector3D inverseTransformMultHelper (const Amg::Vector3D &glopos) const

Protected Attributes

std::shared_ptr< const ConeBoundsm_bounds
 The global reference point (== a point on thesurface)
CxxUtils::CachedUniquePtr< Amg::Vector3Dm_referencePoint
 The rotational symmetry axis.
CxxUtils::CachedUniquePtr< Amg::Vector3Dm_rotSymmetryAxis
std::unique_ptr< Transformsm_transforms {}
 Unique Pointer to the Transforms struct.
const TrkDetElementBasem_associatedDetElement {}
 Not owning Pointer to the Detector Element.
Identifier m_associatedDetElementId {}
 Identifier to the Detector Element.
const Layerm_associatedLayer {}
 The associated layer Trk::Layer This is the layer in which the Surface is embedded.
std::shared_ptr< MaterialLayerm_materialLayer {}
 Possibility to attach a material description to the surface.
SurfaceOwner m_owner {SurfaceOwner::noOwn}
 enum for surface owner : default free surface

Static Protected Attributes

static constexpr double s_onSurfaceTolerance = 10e-5
 Tolerance for being on Surface.

Friends

template<class SURFACE, class BOUNDS_CNV>
class ::BoundSurfaceCnv_p1
template<class SURFACE, class BOUNDS_CNV>
class ::BoundSurfaceCnv_p2
 bounds (shared)

Detailed Description

Class for a conical surface in the ATLAS detector.

It inherits from Surface.

The ConeSurface is special since no corresponding TrackParameters exist since they're numerical instable at the tip of the cone. Propagations to a cone surface will be returned in curvilinear coordinates.

Author
Ian.W.nosp@m.atso.nosp@m.n@cer.nosp@m.n.ch, Andre.nosp@m.as.S.nosp@m.alzbu.nosp@m.rger.nosp@m.@cern.nosp@m..ch

Definition at line 50 of file ConeSurface.h.

Member Typedef Documentation

◆ ChargedTrackParametersUniquePtr

Initial value:
std::unique_ptr<ParametersBase<5, Trk::Charged>>

Unique ptr types.

Definition at line 128 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

◆ NeutralTrackParametersUniquePtr

Initial value:
std::unique_ptr<ParametersBase<5, Trk::Neutral>>

Definition at line 130 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

Constructor & Destructor Documentation

◆ ConeSurface() [1/8]

Trk::ConeSurface::ConeSurface ( )

Default Constructor.

Definition at line 18 of file ConeSurface.cxx.

19 : Trk::Surface()
20 , m_bounds(nullptr)
21 , m_referencePoint(nullptr)
22 , m_rotSymmetryAxis(nullptr)
23{}
CxxUtils::CachedUniquePtr< Amg::Vector3D > m_rotSymmetryAxis
std::shared_ptr< const ConeBounds > m_bounds
The global reference point (== a point on thesurface)
CxxUtils::CachedUniquePtr< Amg::Vector3D > m_referencePoint
The rotational symmetry axis.

◆ ConeSurface() [2/8]

Trk::ConeSurface::ConeSurface ( const ConeSurface & csf)

Copy constructor.

Definition at line 26 of file ConeSurface.cxx.

27 : Trk::Surface(csf)
28 , m_bounds(csf.m_bounds)
29 , m_referencePoint(nullptr)
30 , m_rotSymmetryAxis(nullptr)
31{}

◆ ConeSurface() [3/8]

Trk::ConeSurface::ConeSurface ( ConeSurface && annbo)
default

Move constructor.

◆ ~ConeSurface()

virtual Trk::ConeSurface::~ConeSurface ( )
virtualdefault

Destructor.

◆ ConeSurface() [4/8]

Trk::ConeSurface::ConeSurface ( const Amg::Transform3D & htrans,
double alpha,
bool symmetric = false )

Constructor form Transform and an opening angle.

Definition at line 43 of file ConeSurface.cxx.

46 : Trk::Surface(htrans)
47 , m_bounds(std::make_shared<const Trk::ConeBounds>(alpha, symmetric))
48 , m_referencePoint(nullptr)
49 , m_rotSymmetryAxis(nullptr)
50{}

◆ ConeSurface() [5/8]

Trk::ConeSurface::ConeSurface ( const Amg::Transform3D & htrans,
double alpha,
double locZmin,
double locZmax,
double halfPhi = M_PI )

Constructor form Transform, radius halfphi, and halflenght.

Definition at line 53 of file ConeSurface.cxx.

58 : Trk::Surface(htrans)
59 , m_bounds(std::make_shared<const Trk::ConeBounds>(alpha, zmin, zmax, halfPhi))
60 , m_referencePoint(nullptr)
61 , m_rotSymmetryAxis(nullptr)
62{}

◆ ConeSurface() [6/8]

Trk::ConeSurface::ConeSurface ( const Amg::Transform3D & htrans,
std::shared_ptr< const ConeBounds > cbounds )

Constructor from Transform and CylinderBounds.

Definition at line 65 of file ConeSurface.cxx.

67 : Trk::Surface(htrans)
68 , m_bounds(std::move(cbounds))
69 , m_referencePoint(nullptr)
70 , m_rotSymmetryAxis(nullptr)
71{
72}

◆ ConeSurface() [7/8]

Trk::ConeSurface::ConeSurface ( const Amg::Transform3D & htrans)

Constructor from Amg Transform by ref.

  • bounds is not set.

Definition at line 75 of file ConeSurface.cxx.

76 : Trk::Surface(htrans)
77 , m_bounds(nullptr)
78 , m_referencePoint(nullptr)
79 , m_rotSymmetryAxis(nullptr)
80{}

◆ ConeSurface() [8/8]

Trk::ConeSurface::ConeSurface ( const ConeSurface & csf,
const Amg::Transform3D & transf )

Copy constructor with shift.

Definition at line 34 of file ConeSurface.cxx.

36 : Trk::Surface(csf, transf)
37 , m_bounds(csf.m_bounds)
38 , m_referencePoint(nullptr)
39 , m_rotSymmetryAxis(nullptr)
40{}

Member Function Documentation

◆ associatedDetectorElement()

const TrkDetElementBase * Trk::Surface::associatedDetectorElement ( ) const
inherited

return associated Detector Element

◆ associatedDetectorElementIdentifier()

Identifier Trk::Surface::associatedDetectorElementIdentifier ( ) const
inherited

return Identifier of the associated Detector Element

◆ associatedLayer()

const Trk::Layer * Trk::Surface::associatedLayer ( ) const
inherited

return the associated Layer

◆ associateLayer()

void Trk::Surface::associateLayer ( const Layer & lay)
inherited

method to associate a Trk::Layer.

We do not take ownership as this is typically already owned by the Geometry

◆ baseSurface()

virtual const Trk::Surface * Trk::Surface::baseSurface ( ) const
virtualinherited

return the base surface (simplified for persistification)

◆ bounds()

virtual const ConeBounds & Trk::ConeSurface::bounds ( ) const
finaloverridevirtual

This method returns the ConeBounds by reference (NoBounds is not possible for cone)

Implements Trk::Surface.

◆ cachedTransform()

const Amg::Transform3D * Trk::Surface::cachedTransform ( ) const
inherited

Return the cached transformation directly.

Don't try to make a new transform if it's not here.

◆ center()

const Amg::Vector3D & Trk::Surface::center ( ) const
inherited

Returns the center position of the Surface.

◆ clone()

virtual ConeSurface * Trk::ConeSurface::clone ( ) const
overridevirtual

Implicit Constructor.

Implements Trk::Surface.

◆ createUniqueNeutralParameters() [1/2]

Trk::Surface::NeutralTrackParametersUniquePtr Trk::ConeSurface::createUniqueNeutralParameters ( const Amg::Vector3D & position,
const Amg::Vector3D & momentum,
double charge,
std::optional< AmgSymMatrix(5)> cov = std::nullopt ) const
finaloverridevirtual

Use the Surface as a ParametersBase constructor, from global parameters - neutral.

Implements Trk::Surface.

Definition at line 126 of file ConeSurface.cxx.

128 {
129 return std::make_unique<ParametersT<5, Neutral, ConeSurface>>(
130 position, momentum, charge, *this, std::move(cov));
131}
double charge(const T &p)
Definition AtlasPID.h:997

◆ createUniqueNeutralParameters() [2/2]

Trk::Surface::NeutralTrackParametersUniquePtr Trk::ConeSurface::createUniqueNeutralParameters ( double l1,
double l2,
double phi,
double theta,
double qop,
std::optional< AmgSymMatrix(5)> cov = std::nullopt ) const
finaloverridevirtual

Use the Surface as a ParametersBase constructor, from local parameters - neutral.

Implements Trk::Surface.

Definition at line 116 of file ConeSurface.cxx.

118 {
119 return std::make_unique<ParametersT<5, Neutral, ConeSurface>>(
120 l1, l2, phi, theta, qop, *this, std::move(cov));
121}
@ theta
Definition ParamDefs.h:66
@ phi
Definition ParamDefs.h:75

◆ createUniqueParameters() [1/2]

template<int DIM, class T>
std::unique_ptr< ParametersT< DIM, T, ConeSurface > > Trk::ConeSurface::createUniqueParameters ( const Amg::Vector3D & position,
const Amg::Vector3D & momentum,
double charge,
std::optional< AmgSymMatrix(DIM)> cov = std::nullopt ) const

Use the Surface as a ParametersBase constructor, from global parameters.

◆ createUniqueParameters() [2/2]

template<int DIM, class T>
std::unique_ptr< ParametersT< DIM, T, ConeSurface > > Trk::ConeSurface::createUniqueParameters ( double l1,
double l2,
double phi,
double theta,
double qop,
std::optional< AmgSymMatrix(DIM)> cov = std::nullopt ) const

Use the Surface as a ParametersBase constructor, from local parameters.

◆ createUniqueTrackParameters() [1/2]

Trk::Surface::ChargedTrackParametersUniquePtr Trk::ConeSurface::createUniqueTrackParameters ( const Amg::Vector3D & position,
const Amg::Vector3D & momentum,
double charge,
std::optional< AmgSymMatrix(5)> cov = std::nullopt ) const
finaloverridevirtual

Use the Surface as a ParametersBase constructor, from global parameters - charged.

Implements Trk::Surface.

Definition at line 106 of file ConeSurface.cxx.

108 {
109 return std::make_unique<ParametersT<5, Charged, ConeSurface>>(
110 position, momentum, charge, *this, std::move(cov));
111}

◆ createUniqueTrackParameters() [2/2]

Trk::Surface::ChargedTrackParametersUniquePtr Trk::ConeSurface::createUniqueTrackParameters ( double l1,
double l2,
double phi,
double theta,
double qop,
std::optional< AmgSymMatrix(5)> cov = std::nullopt ) const
finaloverridevirtual

Use the Surface as a ParametersBase constructor, from local parameters - charged.

Implements Trk::Surface.

Definition at line 97 of file ConeSurface.cxx.

99 {
100 return std::make_unique<ParametersT<5, Charged, ConeSurface>>(
101 l1, l2, phi, theta, qop, *this, std::move(cov));
102}

◆ dump() [1/2]

MsgStream & Surface::dump ( MsgStream & sl) const
virtualinherited

Output Method for MsgStream, to be overloaded by child classes.

Reimplemented in Trk::DetElementSurface, and Trk::PerigeeSurface.

Definition at line 157 of file Surface.cxx.

158{
159 sl << std::setiosflags(std::ios::fixed);
160 sl << std::setprecision(4);
161 sl << name() << std::endl;
162 if (associatedDetectorElement()!=nullptr){
163 sl<<" Detector Type = "<<associatedDetectorElement()->detectorTypeString()<<std::endl;
164 }
165 sl << " Center position (x, y, z) = (" << center().x() << ", " << center().y() << ", " << center().z() << ")"
166 << std::endl;
168 Amg::Vector3D rotX(rot.col(0));
169 Amg::Vector3D rotY(rot.col(1));
170 Amg::Vector3D rotZ(rot.col(2));
171 sl << std::setprecision(6);
172 sl << " Rotation: colX = (" << rotX(0) << ", " << rotX(1) << ", " << rotX(2) << ")" << std::endl;
173 sl << " colY = (" << rotY(0) << ", " << rotY(1) << ", " << rotY(2) << ")" << std::endl;
174 sl << " colZ = (" << rotZ(0) << ", " << rotZ(1) << ", " << rotZ(2) << ")" << std::endl;
175 sl << " Bounds : " << bounds();
176 if (!checkTransform(*this)) {
177 sl << std::endl << " NOT a strict rotation matrix." << std::endl;
178 }
179 sl << std::setprecision(-1);
180 return sl;
181}
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
virtual std::string name() const =0
Return properly formatted class name.
std::string detectorTypeString() const
Returns a string of the Detector element type.
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Eigen::Matrix< double, 3, 1 > Vector3D

◆ dump() [2/2]

std::ostream & Surface::dump ( std::ostream & sl) const
virtualinherited

Output Method for std::ostream, to be overloaded by child classes.

Reimplemented in Trk::DetElementSurface, and Trk::PerigeeSurface.

Definition at line 185 of file Surface.cxx.

186{
187 sl << std::setiosflags(std::ios::fixed);
188 sl << std::setprecision(4);
189 sl << name() << std::endl;
190 if (associatedDetectorElement()!=nullptr){
191 sl<<" Detector Type = "<<associatedDetectorElement()->detectorTypeString()<<std::endl;
192 }
193 sl << " Center position (x, y, z) = (" << center().x() << ", " << center().y() << ", " << center().z() << ")"
194 << std::endl;
196 Amg::Vector3D rotX(rot.col(0));
197 Amg::Vector3D rotY(rot.col(1));
198 Amg::Vector3D rotZ(rot.col(2));
199 sl << std::setprecision(6);
200 sl << " Rotation: colX = (" << rotX(0) << ", " << rotX(1) << ", " << rotX(2) << ")" << std::endl;
201 sl << " colY = (" << rotY(0) << ", " << rotY(1) << ", " << rotY(2) << ")" << std::endl;
202 sl << " colZ = (" << rotZ(0) << ", " << rotZ(1) << ", " << rotZ(2) << ")" << std::endl;
203 sl << " Bounds : " << bounds();
204 if (!checkTransform(*this)) {
205 sl << std::endl << " NOT a strict rotation matrix." << std::endl;
206 }
207 sl << std::setprecision(-1);
208 return sl;
209}

◆ globalReferencePoint()

const Amg::Vector3D & Trk::ConeSurface::globalReferencePoint ( ) const
finaloverridevirtual

Returns a global reference point: For the Cylinder this is \( (R*cos(\phi), R*sin(\phi),0)*transform() \) Where \( \phi \) denotes the averagePhi() of the cylinderBounds.

Reimplemented from Trk::Surface.

Definition at line 135 of file ConeSurface.cxx.

136{
137 if (!m_referencePoint) {
138 // this is what was in cylinder
139 // double rMedium = bounds().r();
140 // double phi = bounds().averagePhi();
141 // Trk::GlobalPosition gp(rMedium*cos(phi), rMedium*sin(phi), 0.);
142 Amg::Vector3D gp(0., 0., 0.);
143 m_referencePoint.set(std::make_unique<Amg::Vector3D>(transform() * gp));
144 }
145 return (*m_referencePoint);
146}

◆ globalToLocal() [1/3]

bool Trk::ConeSurface::globalToLocal ( const Amg::Vector3D & glob,
const Amg::Vector3D & mom,
Amg::Vector2D & loc ) const
finaloverridevirtual

Specialized for ConeSurface : GlobalToLocal method without dynamic memory allocation - boolean checks if on surface.

Implements Trk::Surface.

Definition at line 201 of file ConeSurface.cxx.

202{
203 Amg::Vector3D loc3Dframe(inverseTransformMultHelper(glopos));
204 double r = loc3Dframe.z() * bounds().tanAlpha();
205 locpos = Amg::Vector2D(r * atan2(loc3Dframe.y(), loc3Dframe.x()), loc3Dframe.z());
206 // now decide on the quility of the transformation
207 // double inttol = r*0.0001;
208 // inttol = (inttol<0.01) ? 0.01 : 0.01; // ?
209 double inttol = 0.01;
210 return ((loc3Dframe.perp() - r) <= inttol);
211}
double tanAlpha() const
This method returns the average phi.
virtual const ConeBounds & bounds() const override final
This method returns the ConeBounds by reference (NoBounds is not possible for cone)
Amg::Vector3D inverseTransformMultHelper(const Amg::Vector3D &glopos) const
int r
Definition globals.cxx:22
Eigen::Matrix< double, 2, 1 > Vector2D

◆ globalToLocal() [2/3]

std::optional< Amg::Vector2D > Trk::Surface::globalToLocal ( const Amg::Vector3D & glopos,
const Amg::Vector3D & glomom ) const
inherited

This method returns the LocalPosition from a provided GlobalPosition.

If the GlobalPosition is not on the Surface, it returns a nullopt This method does not check if the calculated LocalPosition is inside surface bounds. If this check is needed, use positionOnSurface - for generality with momentum

◆ globalToLocal() [3/3]

std::optional< Amg::Vector2D > Trk::Surface::globalToLocal ( const Amg::Vector3D & glopos,
double tol = 0. ) const
inherited

This method returns the LocalPosition from a provided GlobalPosition.

If the GlobalPosition is not on the Surface, it returns nullopt This method does not check if the calculated LocalPosition is inside surface bounds. If this check is needed, use positionOnSurface - only for planar, cylinder surface fully defined

◆ insideBounds()

virtual bool Trk::ConeSurface::insideBounds ( const Amg::Vector2D & locpos,
double tol1 = 0.,
double tol2 = 0. ) const
overridevirtual

This method calls the inside method of ConeBounds.

Implements Trk::Surface.

◆ insideBoundsCheck()

virtual bool Trk::ConeSurface::insideBoundsCheck ( const Amg::Vector2D & locpos,
const BoundaryCheck & bchk ) const
finaloverridevirtual

Implements Trk::Surface.

◆ inverseTransformHelper()

Amg::Transform3D Trk::Surface::inverseTransformHelper ( ) const
protectedinherited

Helper method to factorize in one place common operations calculate inverse transofrm and multiply with position.

◆ inverseTransformMultHelper()

Amg::Vector3D Trk::Surface::inverseTransformMultHelper ( const Amg::Vector3D & glopos) const
protectedinherited

◆ isActive()

bool Trk::Surface::isActive ( ) const
inherited

Return 'true' if this surface is owned by the detector element.

◆ isFree()

bool Trk::Surface::isFree ( ) const
inherited

Returns 'true' if this surface is 'free', i.e.

it does not belong to a detector element (and returns false otherwise

◆ isOnSurface()

bool Surface::isOnSurface ( const Amg::Vector3D & glopo,
const BoundaryCheck & bchk = true,
double tol1 = 0.,
double tol2 = 0. ) const
virtualinherited

This method returns true if the GlobalPosition is on the Surface for both, within or without check of whether the local position is inside boundaries or not.

Reimplemented in GXF::CylinderSurface, GXF::DiscSurface, PlaneSurface, Trk::CylinderSurface, Trk::DetElementSurface, Trk::DiscSurface, Trk::PerigeeSurface, Trk::PlaneSurface, Trk::SlidingCylinderSurface, Trk::SlidingDiscSurface, and Trk::StraightLineSurface.

Definition at line 123 of file Surface.cxx.

127{
128 std::optional<Amg::Vector2D> posOnSurface =
129 positionOnSurface(glopo, bchk, tol1, tol2);
130 return static_cast<bool>(posOnSurface);
131}
std::optional< Amg::Vector2D > positionOnSurface(const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const
positionOnSurface() returns the LocalPosition on the Surface, If BoundaryCheck==false it just return...
Definition Surface.cxx:106

◆ localParametersToPosition()

virtual Amg::Vector2D Trk::ConeSurface::localParametersToPosition ( const LocalParameters & locpars) const
finaloverridevirtual

Specialized for ConeSurface : LocalParameters to Vector2D.

Reimplemented from Trk::Surface.

◆ localToGlobal() [1/5]

ATH_FLATTEN void Trk::ConeSurface::localToGlobal ( const Amg::Vector2D & locp,
const Amg::Vector3D & mom,
Amg::Vector3D & glob ) const
finaloverridevirtual

Specialized for ConeSurface : LocalToGlobal method without dynamic memory allocation.

Implements Trk::Surface.

Definition at line 190 of file ConeSurface.cxx.

191{
192 // create the position in the local 3d frame
193 double r = locpos[Trk::locZ] * bounds().tanAlpha();
194 double phi = locpos[Trk::locRPhi] / r;
195 Amg::Vector3D loc3Dframe(r * cos(phi), r * sin(phi), locpos[Trk::locZ]);
196 // transport it to the globalframe
197 glopos = transform() * loc3Dframe;
198}
@ locRPhi
Definition ParamDefs.h:40
@ locZ
local cylindrical
Definition ParamDefs.h:42

◆ localToGlobal() [2/5]

Amg::Vector3D Trk::Surface::localToGlobal ( const Amg::Vector2D & locpos) const
inherited

This method returns the GlobalPosition from a LocalPosition uses the per surface localToGlobal.

◆ localToGlobal() [3/5]

Amg::Vector3D Trk::Surface::localToGlobal ( const Amg::Vector2D & locpos,
const Amg::Vector3D & glomom ) const
inherited

This method returns the GlobalPosition from a LocalPosition The LocalPosition can be outside Surface bounds - for generality with momentum.

◆ localToGlobal() [4/5]

Amg::Vector3D Trk::Surface::localToGlobal ( const LocalParameters & locpars) const
inherited

This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds.

◆ localToGlobal() [5/5]

Amg::Vector3D Trk::Surface::localToGlobal ( const LocalParameters & locpars,
const Amg::Vector3D & glomom ) const
inherited

This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds - for generality with momentum.

◆ materialLayer() [1/2]

Trk::MaterialLayer * Trk::Surface::materialLayer ( )
inherited

◆ materialLayer() [2/2]

const Trk::MaterialLayer * Trk::Surface::materialLayer ( ) const
inherited

return the material Layer

◆ measurementFrame()

Amg::RotationMatrix3D Trk::ConeSurface::measurementFrame ( const Amg::Vector3D & glopos,
const Amg::Vector3D & glomom ) const
finaloverridevirtual

Return the measurement frame - this is needed for alignment, in particular for StraightLine and Perigee Surface.

<

Todo
fold in alpha

Reimplemented from Trk::Surface.

Definition at line 170 of file ConeSurface.cxx.

171{
173 // construct the measurement frame
174 Amg::Vector3D measY(transform().rotation().col(2)); // measured Y is the z axis
175 Amg::Vector3D measDepth =
176 Amg::Vector3D(pos.x(), pos.y(), 0.).unit(); // measured z is the position transverse normalized
177 Amg::Vector3D measX(measY.cross(measDepth).unit()); // measured X is what comoes out of it
178 // the columnes
179 mFrame.col(0) = measX;
180 mFrame.col(1) = measY;
181 mFrame.col(2) = measDepth;
182 // return the rotation matrix
184 // return it
185 return mFrame;
186}

◆ name()

virtual std::string Trk::ConeSurface::name ( ) const
overridevirtual

Return properly formatted class name for screen output.

Implements Trk::Surface.

◆ normal() [1/2]

virtual const Amg::Vector3D & Trk::Surface::normal ( ) const
virtual

Returns the normal vector of the Surface (i.e.

in generall z-axis of rotation)

Reimplemented from Trk::Surface.

◆ normal() [2/2]

virtual Amg::Vector3D Trk::ConeSurface::normal ( const Amg::Vector2D & locpo) const
finaloverridevirtual

Return method for surface normal information at a given local point, overwrites the normal() from base class.

Reimplemented from Trk::Surface.

◆ numberOfInstantiations()

std::size_t Trk::ObjectCounter< Trk::Surface >::numberOfInstantiations ( )
inlinestaticinherited

Definition at line 25 of file TrkObjectCounter.h.

26 {
27#ifndef NDEBUG
28 return s_numberOfInstantiations.load();
29#endif
30 return 0;
31 }
Helper to enable counting number of instantiations in debug builds.

◆ onSurface()

template<class T>
bool Trk::Surface::onSurface ( const T & parameters,
const BoundaryCheck & bchk = BoundaryCheck(true) ) const
inherited

The templated Parameters OnSurface method - checks on surface pointer first.

◆ operator!=()

bool Trk::Surface::operator!= ( const Surface & sf) const
inherited

Non-equality operator.

◆ operator=() [1/2]

ConeSurface & Trk::ConeSurface::operator= ( ConeSurface && sbo)
default

Move assignment.

◆ operator=() [2/2]

Trk::ConeSurface & Trk::ConeSurface::operator= ( const ConeSurface & csf)

Assignment operator.

Definition at line 83 of file ConeSurface.cxx.

84{
85 if (this != &csf) {
87 m_bounds = csf.m_bounds;
88 m_referencePoint.store(nullptr);
89 m_rotSymmetryAxis.store(nullptr);
90 }
91 return *this;
92}
Surface & operator=(const Surface &sf)
Definition Surface.cxx:91

◆ operator==() [1/2]

bool Trk::ConeSurface::operator== ( const ConeSurface & cf) const

◆ operator==() [2/2]

bool Trk::ConeSurface::operator== ( const Surface & sf) const
overridevirtual

Equality operator.

Implements Trk::Surface.

Definition at line 149 of file ConeSurface.cxx.

150{
151 // first check the type not to compare apples with oranges
152 if (sf.type()!=Trk::SurfaceType::Cone){
153 return false;
154 }
155 return (*this) == static_cast<const Trk::ConeSurface&>(sf);
156}

◆ owner()

SurfaceOwner Trk::Surface::owner ( ) const
inherited

return ownership

◆ pathCorrection()

double Trk::ConeSurface::pathCorrection ( const Amg::Vector3D & pos,
const Amg::Vector3D & mom ) const
overridevirtual

the pathCorrection for derived classes with thickness

Reimplemented from Trk::Surface.

Definition at line 361 of file ConeSurface.cxx.

362{
363 // (cos phi cos alpha, sin phi cos alpha, sgn z sin alpha)
364 bool applyTransform = !(transform().isApprox(Amg::Transform3D::Identity()));
365 Amg::Vector3D posLocal = applyTransform ? inverseTransformMultHelper(pos) : pos;
366 double phi = posLocal.phi();
367 double sgn = posLocal.z() > 0. ? -1. : +1.;
368 Amg::Vector3D normalC(cos(phi) * bounds().cosAlpha(), sin(phi) * bounds().cosAlpha(), sgn * bounds().sinAlpha());
369 if (applyTransform)
370 normalC = transform().linear() * normalC;
371 // back in global frame
372 double cAlpha = normalC.dot(mom.unit());
373 return (cAlpha != 0.) ? std::abs(1. / cAlpha) : 1.; // ST undefined for cAlpha=0
374}

◆ positionOnSurface()

std::optional< Amg::Vector2D > Surface::positionOnSurface ( const Amg::Vector3D & glopo,
const BoundaryCheck & bchk = true,
double tol1 = 0.,
double tol2 = 0. ) const
inherited

positionOnSurface() returns the LocalPosition on the Surface,
If BoundaryCheck==false it just returns the value of globalToLocal (including nullptr possibility), if BoundaryCheck==true it checks whether the point is inside bounds or not (returns std::nullopt in this case).

Definition at line 106 of file Surface.cxx.

110{
111 std::optional<Amg::Vector2D> posOnSurface = globalToLocal(glopo, tol1);
112 if (!bchk){
113 return posOnSurface;
114 }
115 if (posOnSurface && insideBounds(*posOnSurface, tol1, tol2)){
116 return posOnSurface;
117 }
118 return std::nullopt;
119}
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const =0
Specified by each surface type: GlobalToLocal method without dynamic memory allocation - boolean chec...
virtual bool insideBounds(const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const =0
virtual methods to be overwritten by the inherited surfaces

◆ rotSymmetryAxis()

const Amg::Vector3D & Trk::ConeSurface::rotSymmetryAxis ( ) const
virtual

Return method for the rotational symmetry axis - the z-Axis of the HepTransform.

Definition at line 159 of file ConeSurface.cxx.

160{
161 if (!m_rotSymmetryAxis) {
163 m_rotSymmetryAxis.set(std::make_unique<Amg::Vector3D>(zAxis));
164 }
165 return (*m_rotSymmetryAxis);
166}

◆ setMaterialLayer()

void Trk::Surface::setMaterialLayer ( std::shared_ptr< Trk::MaterialLayer > mlay)
inherited

set material layer

◆ setOwner()

void Trk::Surface::setOwner ( SurfaceOwner x)
inherited

set Ownership

◆ setTransform()

void Trk::Surface::setTransform ( const Amg::Transform3D & trans)
inherited

Set the transform updates center and normal.

◆ straightLineDistanceEstimate() [1/2]

Trk::DistanceSolution Trk::ConeSurface::straightLineDistanceEstimate ( const Amg::Vector3D & pos,
const Amg::Vector3D & dir ) const
finaloverridevirtual

fast straight line distance to Surface

distance to surface

Implements Trk::Surface.

Definition at line 281 of file ConeSurface.cxx.

282{
283 return straightLineDistanceEstimate(pos, dir, false);
284}
virtual DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override final
fast straight line distance to Surface

◆ straightLineDistanceEstimate() [2/2]

Trk::DistanceSolution Trk::ConeSurface::straightLineDistanceEstimate ( const Amg::Vector3D & pos,
const Amg::Vector3D & dir,
bool bound ) const
finaloverridevirtual

fast straight line distance to Surface - with bounds options

Implements Trk::Surface.

Definition at line 287 of file ConeSurface.cxx.

288{
289 double tol = 0.001;
290
291 Amg::Vector3D Cntr = center(); // tip of the cone (i.e. join between halves)
292 Amg::Vector3D N = normal(); // this is the z-direction of the cone in
293 // global coordiantes i believe
294
295 Amg::Vector3D dPos = pos - Cntr; // pos w.r.t. cone tip
296 double posLength = sqrt(dPos.dot(dPos));
297 if (posLength < tol) // at origin of cone => on cone (avoid div by zero)
298 return {1, 0., true, 0.};
299 double posProj = dPos.dot(N);
300 double posProjAngle = acos(posProj / posLength);
301 double currDist = posLength * sin(posProjAngle - atan(bounds().tanAlpha()));
302 // solution on the surface
303 if (std::abs(currDist) < tol)
304 return {1, currDist, true, 0.};
305
306 // transform to a frame with the cone along z, with the tip a 0
307 Amg::Vector3D locFramePos = inverseTransformMultHelper(pos);
308 Amg::Vector3D locFrameDir = transform().rotation().inverse() * dir.normalized();
309
310 // solutions are in the form of a solution to a quadratic eqn.
311 double tan2Alpha = bounds().tanAlpha() * bounds().tanAlpha();
312 double A = locFrameDir.x() * locFrameDir.x() + locFrameDir.y() * locFrameDir.y() -
313 tan2Alpha * locFrameDir.z() * locFrameDir.z();
314 double B = 2 * (locFrameDir.x() * locFramePos.x() + locFrameDir.y() * locFramePos.y() -
315 tan2Alpha * locFrameDir.z() * locFramePos.z());
316 double C = locFramePos.x() * locFramePos.x() + locFramePos.y() * locFramePos.y() -
317 tan2Alpha * locFramePos.z() * locFramePos.z();
318 if (A == 0.)
319 A += 1e-16; // avoid div by zero
320 // use Andreas' quad solver, much more stable than what I wrote
321 Trk::RealQuadraticEquation solns(A, B, C);
322
323 double d2bound = 0.;
324 if (bound && solns.solutions != Trk::none) {
325 std::optional<Amg::Vector2D> p = std::nullopt;
326 if (std::abs(solns.first) < std::abs(solns.second)){
327 p = Surface::globalToLocal(locFramePos + solns.first * locFrameDir);
328 }
329 else{
330 p = Surface::globalToLocal(locFramePos + solns.second * locFrameDir);
331 }
332 if (p) {
333 d2bound = bounds().minDistance(*p);
334 }
335 if (d2bound < 0){
336 d2bound = 0;
337 }
338 }
339 double totDist = d2bound > 0. ? sqrt(d2bound * d2bound + currDist * currDist) : currDist;
340
341 switch (solns.solutions) {
342 case Trk::none:{
343 return {0, totDist, true, 0., 0.};
344 }
345 case Trk::one:{
346 return {1, totDist, true, solns.first};
347 }
348 case Trk::two:{
349 if (std::abs(solns.first) < std::abs(solns.second)){
350 return {2, totDist, true, solns.first, solns.second};
351 }
352 return {2, totDist, true, solns.second, solns.first};
353 }
354 default:{
355 return {0, totDist, true, 0., 0.};
356 }
357 };
358}
virtual double minDistance(const Amg::Vector2D &pos) const override
Minimal distance to boundary ( > 0 if outside and <=0 if inside)
virtual Amg::Vector3D normal(const Amg::Vector2D &locpo) const override final
Return method for surface normal information at a given local point, overwrites the normal() from bas...
struct color C

◆ straightLineIntersection() [1/2]

Trk::Intersection Trk::ConeSurface::straightLineIntersection ( const Amg::Vector3D & pos,
const Amg::Vector3D & dir,
bool forceDir = false,
Trk::BoundaryCheck bchk = false ) const
finaloverridevirtual

fast straight line intersection schema - provides closest intersection and (signed) path length

mathematical motivation:

The calculation will be done in the 3-dim frame of the cone, i.e. the symmetry axis of the cone is the z-axis, x- and y-axis are perpenticular to the the z-axis. In this frame the cone is centered around the origin. Therefore the two points describing the line have to be first recalculated into the new frame. Suppose, this is done, the points of intersection can be obtained as follows:

The cone is described by the implicit equation \(x^2 + y^2 = z^2 \tan \alpha\) where \(\alpha\) is opening half-angle of the cone the and the line by the parameter equation (with \(t\) the parameter and \(x_1\) and \(x_2\) are points on the line) \((x,y,z) = \vec x_1 + (\vec x_2 - \vec x_2) t \). The intersection is the given to the value of \(t\) where the \((x,y,z)\) coordinates of the line satisfy the implicit equation of the cone. Inserting the expression for the points on the line into the equation of the cone and rearranging to the form of a gives (letting \( \vec x_d = \frac{\vec x_2 - \vec x_1}{\abs{\vec x_2 - \vec x_1}} \)): \(t^2 (x_d^2 + y_d^2 - z_d^2 \tan^2 \alpha) + 2 t (x_1 x_d + y_1 y_d - z_1 z_d \tan^2 \alpha) + (x_1^2 + y_1^2 - z_1^2 \tan^2 \alpha) = 0 \) Solving the above for \(t\) and putting the values into the equation of the line gives the points of intersection. \(t\) is also the length of the path, since we normalized \(x_d\) to be unit length.

Implements Trk::Surface.

Definition at line 214 of file ConeSurface.cxx.

218{
219 // transform to a frame with the cone along z, with the tip at 0
220 const Amg::Transform3D surfaceTrans = inverseTransformHelper();
221 Amg::Vector3D tpos1 = surfaceTrans * pos;
222 Amg::Vector3D tdir = surfaceTrans.linear() * dir;
223 // see the header for the formula derivation
224 double tan2Alpha = bounds().tanAlpha() * bounds().tanAlpha();
225 double A = tdir.x() * tdir.x() + tdir.y() * tdir.y() - tan2Alpha * tdir.z() * tdir.z();
226 double B = 2 * (tdir.x() * tpos1.x() + tdir.y() * tpos1.y() - tan2Alpha * dir.z() * tpos1.z());
227 double C = tpos1.x() * tpos1.x() + tpos1.y() * tpos1.y() - tan2Alpha * tpos1.z() * tpos1.z();
228 if (A == 0.)
229 A += 1e-16; // avoid div by zero
230
231 // use Andreas' quad solver, much more stable than what I wrote
232 Trk::RealQuadraticEquation solns(A, B, C);
233
234 Amg::Vector3D solution(0., 0., 0.);
235 double path = 0.;
236 bool isValid = false;
237 if (solns.solutions != Trk::none) {
238 double t1 = solns.first;
239 Amg::Vector3D soln1Loc(tpos1 + t1 * dir);
240 isValid = forceDir ? (t1 > 0.) : true;
241 // there's only one solution
242 if (solns.solutions == Trk::one) {
243 solution = soln1Loc;
244 path = t1;
245 } else {
246 double t2 = solns.second;
247 Amg::Vector3D soln2Loc(tpos1 + t2 * dir);
248 // both solutions have the same sign
249 if (t1 * t2 > 0. || !forceDir) {
250 if (t1 * t1 < t2 * t2) {
251 solution = soln1Loc;
252 path = t1;
253 } else {
254 solution = soln2Loc;
255 path = t2;
256 }
257 } else {
258 if (t1 > 0.) {
259 solution = soln1Loc;
260 path = t1;
261 } else {
262 solution = soln2Loc;
263 path = t2;
264 }
265 }
266 }
267 }
268 solution = transform() * solution;
269
270 isValid = bchk ? (isValid && isOnSurface(solution)) : isValid;
271 return Trk::Intersection(solution, path, isValid);
272}
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878
Amg::Transform3D inverseTransformHelper() const
Helper method to factorize in one place common operations calculate inverse transofrm and multiply wi...
virtual bool isOnSurface(const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const
This method returns true if the GlobalPosition is on the Surface for both, within or without check of...
Definition Surface.cxx:123
std::vector< ALFA_RawDataContainer_p1 > t2
std::vector< ALFA_RawDataCollection_p1 > t1
Eigen::Affine3d Transform3D
path
python interpreter configuration --------------------------------------—
Definition athena.py:128

◆ straightLineIntersection() [2/2]

template<typename T>
Intersection Trk::Surface::straightLineIntersection ( const T & pars,
bool forceDir = false,
const Trk::BoundaryCheck & bchk = false ) const
inlineinherited

fst straight line intersection schema - templated for charged and neutral parameters

Definition at line 352 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

356 {
358 pars.position(), pars.momentum().unit(), forceDir, bchk);
359 }
Intersection straightLineIntersection(const T &pars, bool forceDir=false, const Trk::BoundaryCheck &bchk=false) const
fst straight line intersection schema - templated for charged and neutral parameters

◆ transform()

const Amg::Transform3D & Trk::Surface::transform ( ) const
inherited

Returns HepGeom::Transform3D by reference.

◆ type()

virtual constexpr SurfaceType Trk::ConeSurface::type ( ) const
constexprfinaloverridevirtual

Return the surface type.

Implements Trk::Surface.

◆ uniqueClone()

std::unique_ptr< Surface > Trk::Surface::uniqueClone ( ) const
inherited

NVI method returning unique_ptr clone.

◆ ::BoundSurfaceCnv_p1

template<class SURFACE, class BOUNDS_CNV>
friend class ::BoundSurfaceCnv_p1
friend

Definition at line 270 of file ConeSurface.h.

◆ ::BoundSurfaceCnv_p2

template<class SURFACE, class BOUNDS_CNV>
friend class ::BoundSurfaceCnv_p2
friend

bounds (shared)

Definition at line 272 of file ConeSurface.h.

Member Data Documentation

◆ m_associatedDetElement

const TrkDetElementBase* Trk::Surface::m_associatedDetElement {}
protectedinherited

Not owning Pointer to the Detector Element.

Definition at line 441 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

441{};

◆ m_associatedDetElementId

Identifier Trk::Surface::m_associatedDetElementId {}
protectedinherited

Identifier to the Detector Element.

Definition at line 443 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

443{};

◆ m_associatedLayer

const Layer* Trk::Surface::m_associatedLayer {}
protectedinherited

The associated layer Trk::Layer This is the layer in which the Surface is embedded.

so not owning pointer.

Definition at line 448 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

448{};

◆ m_bounds

std::shared_ptr<const ConeBounds> Trk::ConeSurface::m_bounds
protected

The global reference point (== a point on thesurface)

Definition at line 274 of file ConeSurface.h.

◆ m_materialLayer

std::shared_ptr<MaterialLayer> Trk::Surface::m_materialLayer {}
protectedinherited

Possibility to attach a material description to the surface.

In this case the surface is what holds the MaterialLayer. This is usually done for boundary surfaces so shared ptr.

Definition at line 453 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

453{};

◆ m_owner

SurfaceOwner Trk::Surface::m_owner {SurfaceOwner::noOwn}
protectedinherited

enum for surface owner : default free surface

Definition at line 455 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

◆ m_referencePoint

CxxUtils::CachedUniquePtr<Amg::Vector3D> Trk::ConeSurface::m_referencePoint
protected

The rotational symmetry axis.

Definition at line 276 of file ConeSurface.h.

◆ m_rotSymmetryAxis

CxxUtils::CachedUniquePtr<Amg::Vector3D> Trk::ConeSurface::m_rotSymmetryAxis
protected

Definition at line 278 of file ConeSurface.h.

◆ m_transforms

std::unique_ptr<Transforms> Trk::Surface::m_transforms {}
protectedinherited

Unique Pointer to the Transforms struct.

Definition at line 439 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

439{};

◆ s_numberOfInstantiations

std::atomic_size_t Trk::ObjectCounter< Trk::Surface >::s_numberOfInstantiations
inlinestaticinherited

Definition at line 22 of file TrkObjectCounter.h.

◆ s_onSurfaceTolerance

double Trk::Surface::s_onSurfaceTolerance = 10e-5
staticconstexprprotectedinherited

Tolerance for being on Surface.

Definition at line 458 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

◆ staticType

SurfaceType Trk::ConeSurface::staticType = SurfaceType::Cone
staticconstexpr

The surface type static constexpr.

Definition at line 55 of file ConeSurface.h.


The documentation for this class was generated from the following files: