ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
Acts::RegularSurface Class Referenceabstract

A physical surface which does not depend on the direction you look at it from. More...

#include <Acts/Surfaces/RegularSurface.hpp>

Inheritance diagram for Acts::RegularSurface:
[legend]
Collaboration diagram for Acts::RegularSurface:
[legend]

Public Member Functions

Result< Vector2globalToLocal (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, double tolerance=s_onSurfaceTolerance) const final
 Convert a global position to a local one this is the most generic interface, which is implemented by all surfaces.
virtual Result< Vector2globalToLocal (const GeometryContext &gctx, const Vector3 &position, double tolerance=s_onSurfaceTolerance) const =0
 Convert a global position to a local one.
bool isOnSurface (const GeometryContext &gctx, const Vector3 &position, const BoundaryTolerance &boundaryTolerance=BoundaryTolerance::None(), double tolerance=s_onSurfaceTolerance) const
 The geometric onSurface method.
bool isOnSurface (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, const BoundaryTolerance &boundaryTolerance=BoundaryTolerance::None(), double tolerance=s_onSurfaceTolerance) const
 The geometric onSurface method.
virtual Vector3 localToGlobal (const GeometryContext &gctx, const Vector2 &lposition) const =0
 Local to global transformation.
Vector3 localToGlobal (const GeometryContext &gctx, const Vector2 &lposition, const Vector3 &direction) const final
 Local to global transformation.
virtual Vector3 normal (const GeometryContext &gctx, const Vector2 &lposition) const =0
 Calculate the normal vector of the surface This overload requires an on-surface local position.
Vector3 normal (const GeometryContext &gctx, const Vector3 &pos, const Vector3 &direction) const final
 Calculate the normal vector of the surface This overload is fully generic, fulfills the Surface interface and accepts a global position and a direction.
virtual Vector3 normal (const GeometryContext &gctx, const Vector3 &position) const =0
 Calculate the normal vector of the surface This overload accepts a global position.
 Surface (const GeometryContext &gctx, const Surface &other, const Transform3 &shift) noexcept
 Copy constructor with optional shift.
 Surface (const Surface &other) noexcept
 Copy constructor.
 Surface (const SurfacePlacementBase &placement) noexcept
 Constructor from SurfacePlacement: Element proxy.
 Surface (const Transform3 &transform=Transform3::Identity())
 Constructor with Transform3 as a shared object.
Public Member Functions inherited from Acts::Surface
 ~Surface () noexcept override
AlignmentToBoundMatrix alignmentToBoundDerivative (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, const FreeVector &pathDerivative) const
 The derivative of bound track parameters w.r.t.
virtual AlignmentToPathMatrix alignmentToPathDerivative (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const
 Calculate the derivative of path length at the geometry constraint or point-of-closest-approach w.r.t.
void assignDetectorElement (const SurfacePlacementBase &detelement)
 Assign a detector element.
void assignIsSensitive (bool isSensitive)
 Assign whether the surface is sensitive.
void assignSurfaceMaterial (std::shared_ptr< const ISurfaceMaterial > material)
 Assign the surface material description.
void assignSurfacePlacement (const SurfacePlacementBase &placement)
 Assign a placement object which may dynamically align the surface in space.
void assignThickness (double thick)
 Assign the thickness of the surface in the orthogonal dimension.
const DetectorElementBaseassociatedDetectorElement () const
 Return method for the associated Detector Element.
const LayerassociatedLayer () const
 Return method for the associated Layer in which the surface is embedded.
void associateLayer (const Layer &lay)
 Set Associated Layer Many surfaces can be associated to a Layer, but it might not be known yet during construction of the layer, this can be set afterwards.
virtual const SurfaceBoundsbounds () const =0
 Return method for SurfaceBounds.
virtual BoundToFreeMatrix boundToFreeJacobian (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const
 Calculate the jacobian from local to global which the surface knows best, hence the calculation is done here.
virtual Vector3 center (const GeometryContext &gctx) const
 Return method for the surface center.
virtual Vector2 closestPointOnBoundary (const Vector2 &lposition, const SquareMatrix2 &metric) const
 Calculates the closest point on the boundary of the surface to a given point in local coordinates.
virtual double distanceToBoundary (const Vector2 &lposition) const
 Calculates the distance to the boundary of the surface from a given point in local coordinates.
virtual FreeToBoundMatrix freeToBoundJacobian (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const
 Calculate the jacobian from global to local which the surface knows best, hence the calculation is done here.
virtual FreeToPathMatrix freeToPathDerivative (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const
 Calculate the derivative of path length at the geometry constraint or point-of-closest-approach w.r.t.
std::shared_ptr< SurfacegetSharedPtr ()
 Retrieve a std::shared_ptr for this surface (non-const version).
std::shared_ptr< const SurfacegetSharedPtr () const
 Retrieve a std::shared_ptr for this surface (const version).
virtual bool insideBounds (const Vector2 &lposition, const BoundaryTolerance &boundaryTolerance=BoundaryTolerance::None()) const
 The insideBounds method for local positions.
virtual MultiIntersection3D intersect (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, const BoundaryTolerance &boundaryTolerance=BoundaryTolerance::Infinite(), double tolerance=s_onSurfaceTolerance) const =0
 Straight line intersection schema from position/direction.
bool isAlignable () const
 Returns whether the Surface is alignable.
bool isOnSurface (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, const BoundaryTolerance &boundaryTolerance=BoundaryTolerance::None(), double tolerance=s_onSurfaceTolerance) const
 The geometric onSurface method.
bool isSensitive () const
 Returns whether the Surface is sensitive.
virtual ActsMatrix< 2, 3 > localCartesianToBoundLocalDerivative (const GeometryContext &gctx, const Vector3 &position) const =0
 Calculate the derivative of bound track parameters local position w.r.t.
const Transform3localToGlobalTransform (const GeometryContext &gctx) const
 Return method for the surface Transform3 by reference In case a detector element is associated the surface transform is just forwarded to the detector element in order to keep the (mis-)alignment cache cetrally handled.
virtual std::string name () const =0
 Return properly formatted class name.
Surfaceoperator= (const Surface &other)
 Assignment operator.
bool operator== (const Surface &other) const
 Comparison (equality) operator The strategy for comparison is (a) first pointer comparison (b) then type comparison (c) then bounds comparison (d) then transform comparison.
virtual double pathCorrection (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const =0
 Calculation of the path correction for incident.
virtual Polyhedron polyhedronRepresentation (const GeometryContext &gctx, unsigned int quarterSegments=2u) const =0
 Return a Polyhedron for surface objects.
virtual Acts::RotationMatrix3 referenceFrame (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const
 Return method for the reference frame This is the frame in which the covariance matrix is defined (specialized by all surfaces).
const ISurfaceMaterialsurfaceMaterial () const
 Return method for the associated Material to this surface.
const std::shared_ptr< const ISurfaceMaterial > & surfaceMaterialSharedPtr () const
 Return method for the shared pointer to the associated Material.
const SurfacePlacementBasesurfacePlacement () const
 Return the associated surface placement if there is any.
double thickness () const
 Return the thickness of the surface in the normal direction.
GeometryContextOstreamWrapper< SurfacetoStream (const GeometryContext &gctx) const
 Helper method for printing: the returned object captures the surface and the geometry context and will print the surface.
std::string toString (const GeometryContext &gctx) const
 Output into a std::string.
const Transform3transform (const GeometryContext &gctx) const
 Return method for the surface Transform3 by reference In case a detector element is associated the surface transform is just forwarded to the detector element in order to keep the (mis-)alignment cache cetrally handled.
virtual SurfaceType type () const =0
 Return method for the Surface type to avoid dynamic casts.
void visualize (IVisualization3D &helper, const GeometryContext &gctx, const ViewConfig &viewConfig=s_viewSurface) const
 Visualize the surface for debugging and inspection.
Public Member Functions inherited from Acts::GeometryObject
 GeometryObject ()=default
 Defaulted constructor.
 GeometryObject (const GeometryIdentifier &geometryId)
 Constructor from a value.
 GeometryObject (const GeometryObject &)=default
 Defaulted copy constructor.
virtual ~GeometryObject () noexcept=default
void assignGeometryId (const GeometryIdentifier &geometryId)
 Set the value.
GeometryIdentifier geometryId () const
virtual Vector3 referencePosition (const GeometryContext &gctx, AxisDirection aDir) const =0
 Force a binning position method.
virtual double referencePositionValue (const GeometryContext &gctx, AxisDirection aDir) const
 Implement the binningValue.

Additional Inherited Members

Public Types inherited from Acts::Surface
enum  SurfaceType {
  Cone = 0 , Cylinder = 1 , Disc = 2 , Perigee = 3 ,
  Plane = 4 , Straw = 5 , Curvilinear = 6 , Other = 7
}
 This enumerator simplifies the persistency & calculations, by saving a dynamic_cast, e.g. More...
Static Public Member Functions inherited from Acts::Surface
template<class T, typename... Args>
static std::shared_ptr< T > makeShared (Args &&... args)
 Factory for producing memory managed instances of Surface.
Static Public Attributes inherited from Acts::Surface
static constexpr std::array< std::string_view, Surface::SurfaceType::Other+1 > s_surfaceTypeNames
 Helper strings for screen output.
Protected Member Functions inherited from Acts::Surface
 Surface (const GeometryContext &gctx, const Surface &other, const Transform3 &shift) noexcept
 Copy constructor with optional shift.
 Surface (const Surface &other) noexcept
 Copy constructor.
 Surface (const SurfacePlacementBase &placement) noexcept
 Constructor from SurfacePlacement: Element proxy.
 Surface (const Transform3 &transform=Transform3::Identity())
 Constructor with Transform3 as a shared object.
virtual std::ostream & toStreamImpl (const GeometryContext &gctx, std::ostream &sl) const
 Output Method for std::ostream, to be overloaded by child classes.
Protected Attributes inherited from Acts::Surface
std::unique_ptr< const Transform3m_transform {}
 Transform3 definition that positions (translation, rotation) the surface in global space.
Protected Attributes inherited from Acts::GeometryObject
GeometryIdentifier m_geometryId
 Unique geometry identifier for this object.

Detailed Description

A physical surface which does not depend on the direction you look at it from.

As such it narrows the interface of Surface and allows inspection without providing a global position and direction.

Member Function Documentation

◆ globalToLocal() [1/2]

Result< Vector2 > Acts::RegularSurface::globalToLocal ( const GeometryContext & gctx,
const Vector3 & position,
const Vector3 & direction,
double tolerance = s_onSurfaceTolerance ) const
finalvirtual

Convert a global position to a local one this is the most generic interface, which is implemented by all surfaces.

Note
The position is required to be on-surface, which is indicated by the Result return value.
Parameters
gctxThe current geometry context object, e.g. alignment
positionis the global position to be converted
directionis the direction of the local position (ignored for RegularSurface)
toleranceis the tolerance for the on-surface check
Returns
Result type containing local position by value

Implements Acts::Surface.

◆ globalToLocal() [2/2]

virtual Result< Vector2 > Acts::RegularSurface::globalToLocal ( const GeometryContext & gctx,
const Vector3 & position,
double tolerance = s_onSurfaceTolerance ) const
pure virtual

Convert a global position to a local one.

Note
The position is required to be on-surface, which is indicated by the Result return value.
Parameters
gctxThe current geometry context object, e.g. alignment
positionis the global position to be converted
toleranceis the tolerance for the on-surface check
Returns
Result type containing local position by value

Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, and Acts::PlaneSurface.

◆ isOnSurface() [1/2]

bool Acts::RegularSurface::isOnSurface ( const GeometryContext & gctx,
const Vector3 & position,
const BoundaryTolerance & boundaryTolerance = BoundaryTolerance::None(),
double tolerance = s_onSurfaceTolerance ) const

The geometric onSurface method.

Geometrical check whether position is on Surface

Parameters
gctxThe current geometry context object, e.g. alignment
positionglobal position to be evaludated
boundaryToleranceBoundaryTolerance directive for this onSurface check
toleranceoptional tolerance within which a point is considered on surface
Returns
boolean indication if operation was successful

◆ isOnSurface() [2/2]

bool Acts::Surface::isOnSurface ( const GeometryContext & gctx,
const Vector3 & position,
const Vector3 & direction,
const BoundaryTolerance & boundaryTolerance = BoundaryTolerance::None(),
double tolerance = s_onSurfaceTolerance ) const

The geometric onSurface method.

Geometrical check whether position is on Surface

Parameters
gctxThe current geometry context object, e.g. alignment
positionglobal position to be evaludated
directionglobal momentum direction (required for line-type surfaces)
boundaryToleranceBoundaryTolerance directive for this onSurface check
toleranceoptional tolerance within which a point is considered on surface
Returns
boolean indication if operation was successful

◆ localToGlobal() [1/2]

virtual Vector3 Acts::RegularSurface::localToGlobal ( const GeometryContext & gctx,
const Vector2 & lposition ) const
pure virtual

Local to global transformation.

Parameters
gctxThe current geometry context object, e.g. alignment
lpositionlocal 2D position in specialized surface frame
Returns
The global position by value

Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, and Acts::PlaneSurface.

◆ localToGlobal() [2/2]

Vector3 Acts::RegularSurface::localToGlobal ( const GeometryContext & gctx,
const Vector2 & lposition,
const Vector3 & direction ) const
finalvirtual

Local to global transformation.

This is the most generic interface, which is implemented by all surfaces.

Parameters
gctxThe current geometry context object, e.g. alignment
lpositionlocal 2D position in specialized surface frame
directionglobal 3D momentum direction (ignored for RegularSurface)
Returns
The global position by value

Implements Acts::Surface.

◆ normal() [1/3]

virtual Vector3 Acts::RegularSurface::normal ( const GeometryContext & gctx,
const Vector2 & lposition ) const
pure virtual

Calculate the normal vector of the surface This overload requires an on-surface local position.

Parameters
gctxThe current geometry context object, e.g. alignment
lpositionis the local position where the normal vector is constructed
Returns
normal vector by value

Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, and Acts::PlaneSurface.

◆ normal() [2/3]

Vector3 Acts::RegularSurface::normal ( const GeometryContext & gctx,
const Vector3 & pos,
const Vector3 & direction ) const
finalvirtual

Calculate the normal vector of the surface This overload is fully generic, fulfills the Surface interface and accepts a global position and a direction.

For RegularSurface this is equivalent to the normal overload, ignoring the direction

Parameters
gctxThe current geometry context object, e.g. alignment
posis the global position where the normal vector is constructed
directionis the direction of the normal vector (ignored for RegularSurface)
Returns
Normal vector at the given position

Implements Acts::Surface.

◆ normal() [3/3]

virtual Vector3 Acts::RegularSurface::normal ( const GeometryContext & gctx,
const Vector3 & position ) const
pure virtual

Calculate the normal vector of the surface This overload accepts a global position.

Parameters
positionis the global position where the normal vector is constructed
gctxThe current geometry context object, e.g. alignment
Returns
normal vector by value

Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, and Acts::PlaneSurface.

◆ Surface() [1/4]

Acts::Surface::Surface ( const GeometryContext & gctx,
const Surface & other,
const Transform3 & shift )
explicitnoexcept

Copy constructor with optional shift.

Note
copy construction invalidates the association to detector element and layer
Parameters
gctxThe current geometry context object, e.g. alignment
otherSource surface for copy
shiftAdditional transform applied as: shift * transform

◆ Surface() [2/4]

Acts::Surface::Surface ( const Surface & other)
noexcept

Copy constructor.

Note
copy construction invalidates the association to detector element and layer
Parameters
otherSource surface for copy.

◆ Surface() [3/4]

Acts::Surface::Surface ( const SurfacePlacementBase & placement)
explicitnoexcept

Constructor from SurfacePlacement: Element proxy.

Parameters
placementReference to the surface placement
Note
The Surface does not take any ownership over the SurfacePlacementBase it is expected that the user ensures the life-time of the SurfacePlacementBase and that the Surface is actually owned by the SurfacePlacementBase instance

◆ Surface() [4/4]

Acts::Surface::Surface ( const Transform3 & transform = Transform3::Identity())
explicit

Constructor with Transform3 as a shared object.

Parameters
transformTransform3 positions the surface in 3D global space
Note
also acts as default constructor