|
ACTS
Experiment-independent tracking
|
Abstract Base Class for tracking surfaces. More...
#include <Acts/Surfaces/Surface.hpp>
Public Types | |
| 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... | |
Public Member Functions | |
| ~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 DetectorElementBase * | associatedDetectorElement () const |
| Return method for the associated Detector Element. | |
| const Layer * | associatedLayer () 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 SurfaceBounds & | bounds () 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< Surface > | getSharedPtr () |
Retrieve a std::shared_ptr for this surface (non-const version). | |
| std::shared_ptr< const Surface > | getSharedPtr () const |
Retrieve a std::shared_ptr for this surface (const version). | |
| virtual Result< Vector2 > | globalToLocal (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, double tolerance=s_onSurfaceTolerance) const =0 |
| Global to local transformation Generalized global to local transformation for the surface types. | |
| 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. | |
| virtual Vector3 | localToGlobal (const GeometryContext &gctx, const Vector2 &lposition, const Vector3 &direction) const =0 |
| Local to global transformation Generalized local to global transformation for the surface types. | |
| const Transform3 & | localToGlobalTransform (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. | |
| virtual Vector3 | normal (const GeometryContext &gctx, const Vector3 &pos, const Vector3 &direction) const =0 |
Return the surface normal at a given position and direction. | |
| Surface & | operator= (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 ISurfaceMaterial * | surfaceMaterial () 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 SurfacePlacementBase * | surfacePlacement () const |
| Return the associated surface placement if there is any. | |
| double | thickness () const |
| Return the thickness of the surface in the normal direction. | |
| GeometryContextOstreamWrapper< Surface > | toStream (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 Transform3 & | transform (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. | |
Static Public Member Functions | |
| template<class T, typename... Args> | |
| static std::shared_ptr< T > | makeShared (Args &&... args) |
| Factory for producing memory managed instances of Surface. | |
Static Public Attributes | |
| static constexpr std::array< std::string_view, Surface::SurfaceType::Other+1 > | s_surfaceTypeNames |
| Helper strings for screen output. | |
Protected Member Functions | |
| 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 | |
| std::unique_ptr< const Transform3 > | m_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. | |
Abstract Base Class for tracking surfaces.
The Surface class builds the core of the Acts Tracking Geometry. All other geometrical objects are either extending the surface or are built from it.
Surfaces are either owned by Detector elements or the Tracking Geometry, in which case they are not copied within the data model objects.
|
explicitprotected |
Constructor with Transform3 as a shared object.
| transform | Transform3 positions the surface in 3D global space |
|
protectednoexcept |
Copy constructor.
| other | Source surface for copy. |
|
explicitprotectednoexcept |
Constructor from SurfacePlacement: Element proxy.
| placement | Reference to the surface placement |
|
explicitprotectednoexcept |
Copy constructor with optional shift.
| gctx | The current geometry context object, e.g. alignment |
| other | Source surface for copy |
| shift | Additional transform applied as: shift * transform |
|
overridenoexcept |
| AlignmentToBoundMatrix Acts::Surface::alignmentToBoundDerivative | ( | const GeometryContext & | gctx, |
| const Vector3 & | position, | ||
| const Vector3 & | direction, | ||
| const FreeVector & | pathDerivative ) const |
The derivative of bound track parameters w.r.t.
alignment parameters of its reference surface (i.e. local frame origin in global 3D Cartesian coordinates and its rotation represented with extrinsic Euler angles)
| gctx | The current geometry context object, e.g. alignment change of alignment parameters |
| position | global 3D position |
| direction | global 3D momentum direction |
| pathDerivative | is the derivative of free parameters w.r.t. path length |
|
virtual |
Calculate the derivative of path length at the geometry constraint or point-of-closest-approach w.r.t.
alignment parameters of the surface (i.e. local frame origin in global 3D Cartesian coordinates and its rotation represented with extrinsic Euler angles)
| gctx | The current geometry context object, e.g. alignment |
| position | global 3D position |
| direction | global 3D momentum direction |
Reimplemented in Acts::ConeSurface, Acts::CylinderSurface, and Acts::LineSurface.
| void Acts::Surface::assignDetectorElement | ( | const SurfacePlacementBase & | detelement | ) |
Assign a detector element.
| detelement | Detector element which is represented by this surface |
| void Acts::Surface::assignIsSensitive | ( | bool | isSensitive | ) |
Assign whether the surface is sensitive.
| isSensitive | Boolean flag to set sensitivity |
| logic_error | if the surface is associated to a detector element |
| void Acts::Surface::assignSurfaceMaterial | ( | std::shared_ptr< const ISurfaceMaterial > | material | ) |
Assign the surface material description.
The material is usually derived in a complicated way and loaded from a framework given source. As various surfaces may share the same source this is provided by a shared pointer
| material | Material description associated to this surface |
| void Acts::Surface::assignSurfacePlacement | ( | const SurfacePlacementBase & | placement | ) |
Assign a placement object which may dynamically align the surface in space.
| placement | Placement object defining the surface's position |
| void Acts::Surface::assignThickness | ( | double | thick | ) |
Assign the thickness of the surface in the orthogonal dimension.
| thick | Thickness parameter to assign (>=0) |
| const DetectorElementBase * Acts::Surface::associatedDetectorElement | ( | ) | const |
Return method for the associated Detector Element.
| const Layer * Acts::Surface::associatedLayer | ( | ) | const |
Return method for the associated Layer in which the surface is embedded.
| void Acts::Surface::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.
| lay | the assignment Layer by reference |
|
pure virtual |
Return method for SurfaceBounds.
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::LineSurface, and Acts::PlaneSurface.
|
virtual |
Calculate the jacobian from local to global which the surface knows best, hence the calculation is done here.
| gctx | The current geometry context object, e.g. alignment |
| position | global 3D position |
| direction | global 3D momentum direction |
Reimplemented in Acts::DiscSurface, and Acts::LineSurface.
|
virtual |
Return method for the surface center.
| gctx | The current geometry context object, e.g. alignment |
|
virtual |
Calculates the closest point on the boundary of the surface to a given point in local coordinates.
| lposition | The local position to check |
| metric | The metric to use for the calculation |
|
virtual |
Calculates the distance to the boundary of the surface from a given point in local coordinates.
| lposition | The local position to check |
|
virtual |
Calculate the jacobian from global to local which the surface knows best, hence the calculation is done here.
| gctx | The current geometry context object, e.g. alignment |
| position | global 3D position |
| direction | global 3D momentum direction |
Reimplemented in Acts::DiscSurface.
|
virtual |
Calculate the derivative of path length at the geometry constraint or point-of-closest-approach w.r.t.
free parameters. The calculation is identical for all surfaces where the reference frame does not depend on the direction
| gctx | The current geometry context object, e.g. alignment |
| position | global 3D position |
| direction | global 3D momentum direction |
Reimplemented in Acts::LineSurface.
| std::shared_ptr< Surface > Acts::Surface::getSharedPtr | ( | ) |
Retrieve a std::shared_ptr for this surface (non-const version).
makeShared factory since it needs access to the original reference. In C++14 this is undefined behavior (but most likely implemented as a bad_weak_ptr exception), in C++17 it is defined as that exception. | std::shared_ptr< const Surface > Acts::Surface::getSharedPtr | ( | ) | const |
Retrieve a std::shared_ptr for this surface (const version).
makeShared factory since it needs access to the original reference. In C++14 this is undefined behavior, but most likely implemented as a bad_weak_ptr exception, in C++17 it is defined as that exception.
|
pure virtual |
Global to local transformation Generalized global to local transformation for the surface types.
Since some surface types need the global momentum/direction to resolve sign ambiguity this is also provided
| gctx | The current geometry context object, e.g. alignment |
| position | global 3D position - considered to be on surface but not inside bounds (check is done) |
| direction | global 3D momentum direction |
| tolerance | optional tolerance within which a point is considered valid on surface |
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::LineSurface, Acts::PlaneSurface, and Acts::RegularSurface.
|
virtual |
The insideBounds method for local positions.
| lposition | The local position to check |
| boundaryTolerance | BoundaryTolerance directive for this onSurface check |
|
pure virtual |
Straight line intersection schema from position/direction.
| gctx | The current geometry context object, e.g. alignment |
| position | The position to start from |
| direction | The direction at start |
| boundaryTolerance | the BoundaryTolerance |
| tolerance | the tolerance used for the intersection |
MultiIntersection3D intersection object Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::LineSurface, and Acts::PlaneSurface.
| bool Acts::Surface::isAlignable | ( | ) | const |
Returns whether the Surface is alignable.
| 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
| gctx | The current geometry context object, e.g. alignment |
| position | global position to be evaludated |
| direction | global momentum direction (required for line-type surfaces) |
| boundaryTolerance | BoundaryTolerance directive for this onSurface check |
| tolerance | optional tolerance within which a point is considered on surface |
| bool Acts::Surface::isSensitive | ( | ) | const |
Returns whether the Surface is sensitive.
|
pure virtual |
Calculate the derivative of bound track parameters local position w.r.t.
position in local 3D Cartesian coordinates
| gctx | The current geometry context object, e.g. alignment |
| position | The position of the parameters in global |
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::LineSurface, and Acts::PlaneSurface.
|
pure virtual |
Local to global transformation Generalized local to global transformation for the surface types.
Since some surface types need the global momentum/direction to resolve sign ambiguity this is also provided
| gctx | The current geometry context object, e.g. alignment |
| lposition | local 2D position in specialized surface frame |
| direction | global 3D momentum direction |
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::LineSurface, Acts::PlaneSurface, and Acts::RegularSurface.
| const Transform3 & Acts::Surface::localToGlobalTransform | ( | 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.
| gctx | The current geometry context object, e.g. alignment |
|
static |
Factory for producing memory managed instances of Surface.
Will forward all parameters and will attempt to find a suitable constructor.
| args | Constructor arguments to forward to surface creation |
|
pure virtual |
Return properly formatted class name.
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::LineSurface, Acts::PerigeeSurface, Acts::PlaneSurface, and Acts::StrawSurface.
|
pure virtual |
Return the surface normal at a given position and direction.
This method is fully generic, and valid for all surface types.
direction is ignored, but it is not safe to pass in a zero vector! | gctx | The current geometry context object, e.g. alignment |
| pos | The position at which to calculate the normal |
| direction | The direction at which to calculate the normal |
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::LineSurface, Acts::PlaneSurface, and Acts::RegularSurface.
Assignment operator.
| other | Source surface for the assignment |
| bool Acts::Surface::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.
| other | source surface for the comparison |
|
pure virtual |
Calculation of the path correction for incident.
| gctx | The current geometry context object, e.g. alignment |
| position | global 3D position |
position is either ignored, or it is coerced to be on the surface, depending on the surface type. | direction | global 3D momentum direction |
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::LineSurface, and Acts::PlaneSurface.
|
pure virtual |
Return a Polyhedron for surface objects.
| gctx | The current geometry context object, e.g. alignment |
| quarterSegments | The number of segemtns to approximate a 0.5*pi sector, which represents a quarter of the full circle |
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::PerigeeSurface, Acts::PlaneSurface, and Acts::StrawSurface.
|
virtual |
Return method for the reference frame This is the frame in which the covariance matrix is defined (specialized by all surfaces).
| gctx | The current geometry context object, e.g. alignment |
| position | global 3D position - considered to be on surface but not inside bounds (check is done) |
| direction | global 3D momentum direction (optionally ignored) |
Reimplemented in Acts::ConeSurface, Acts::CylinderSurface, and Acts::LineSurface.
| const ISurfaceMaterial * Acts::Surface::surfaceMaterial | ( | ) | const |
Return method for the associated Material to this surface.
| const std::shared_ptr< const ISurfaceMaterial > & Acts::Surface::surfaceMaterialSharedPtr | ( | ) | const |
Return method for the shared pointer to the associated Material.
| const SurfacePlacementBase * Acts::Surface::surfacePlacement | ( | ) | const |
Return the associated surface placement if there is any.
| double Acts::Surface::thickness | ( | ) | const |
Return the thickness of the surface in the normal direction.
| GeometryContextOstreamWrapper< Surface > Acts::Surface::toStream | ( | const GeometryContext & | gctx | ) | const |
Helper method for printing: the returned object captures the surface and the geometry context and will print the surface.
| gctx | The current geometry context object, e.g. alignment |
|
protectedvirtual |
Output Method for std::ostream, to be overloaded by child classes.
| gctx | The current geometry context object, e.g. alignment |
| sl | is the ostream to be dumped into |
Reimplemented in Acts::PerigeeSurface.
| std::string Acts::Surface::toString | ( | const GeometryContext & | gctx | ) | const |
Output into a std::string.
| gctx | The current geometry context object, e.g. alignment |
| const Transform3 & Acts::Surface::transform | ( | 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.
| gctx | The current geometry context object, e.g. alignment |
|
pure virtual |
Return method for the Surface type to avoid dynamic casts.
Implemented in Acts::ConeSurface, Acts::CylinderSurface, Acts::DiscSurface, Acts::PerigeeSurface, Acts::PlaneSurface, and Acts::StrawSurface.
| void Acts::Surface::visualize | ( | IVisualization3D & | helper, |
| const GeometryContext & | gctx, | ||
| const ViewConfig & | viewConfig = s_viewSurface ) const |
Visualize the surface for debugging and inspection.
| helper | Visualization helper for 3D rendering |
| gctx | Geometry context for coordinate transformations |
| viewConfig | Visual configuration (color, style, etc.) |
|
protected |
Transform3 definition that positions (translation, rotation) the surface in global space.
|
staticconstexpr |
Helper strings for screen output.