|
ACTS
Experiment-independent tracking
|
Class for a disc surface (or a segment thereof). More...
#include <Acts/Surfaces/DiscSurface.hpp>
Public Member Functions | |
| void | assignSurfaceBounds (std::shared_ptr< const DiscBounds > newBounds) |
| Overwrite the existing surface bounds with new ones. | |
| const SurfaceBounds & | bounds () const final |
| This method returns the bounds by reference. | |
| const std::shared_ptr< const DiscBounds > & | boundsPtr () const |
| This method returns the shared_ptr to the DiscBounds. | |
| BoundToFreeMatrix | boundToFreeJacobian (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const final |
| Calculate the jacobian from local to global which the surface knows best, hence the calculation is done here. | |
| FreeToBoundMatrix | freeToBoundJacobian (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const final |
| Calculate the jacobian from global to local which the surface knows best, hence the calculation is done here. | |
| Result< Vector2 > | globalToLocal (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. | |
| Result< Vector2 > | globalToLocal (const GeometryContext &gctx, const Vector3 &position, double tolerance=s_onSurfaceTolerance) const final |
| Global to local transformation. | |
| Vector2 | globalToLocalCartesian (const GeometryContext &gctx, const Vector3 &position, double tol=0.) const |
| Special method for DiscSurface : global<->local from cartesian coordinates. | |
| MultiIntersection3D | intersect (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, const BoundaryTolerance &boundaryTolerance=BoundaryTolerance::Infinite(), double tolerance=s_onSurfaceTolerance) const final |
| Straight line intersection schema. | |
| ActsMatrix< 2, 3 > | localCartesianToBoundLocalDerivative (const GeometryContext &gctx, const Vector3 &position) const final |
| Calculate the derivative of bound track parameters local position w.r.t. | |
| Vector3 | localCartesianToGlobal (const GeometryContext &gctx, const Vector2 &lposition) const |
| Special method for DiscSurface : local<->global transformation when provided cartesian coordinates. | |
| Vector2 | localCartesianToPolar (const Vector2 &lcart) const |
| Special method for Disc surface : local<->local transformations polar <-> cartesian. | |
| Vector2 | localPolarToCartesian (const Vector2 &lpolar) const |
| Special method for DiscSurface : local<->local transformations polar <-> cartesian. | |
| Vector2 | localPolarToLocalCartesian (const Vector2 &locpol) const |
| Special method for DiscSurface : local<->local transformations polar <-> cartesian. | |
| Vector3 | localToGlobal (const GeometryContext &gctx, const Vector2 &lposition) const final |
| Local to global transformation For planar surfaces the momentum direction is ignored in the local to global transformation. | |
| Vector3 | localToGlobal (const GeometryContext &gctx, const Vector2 &lposition, const Vector3 &direction) const final |
| Local to global transformation. | |
| std::pair< std::shared_ptr< DiscSurface >, bool > | mergedWith (const DiscSurface &other, AxisDirection direction, bool externalRotation, const Logger &logger=getDummyLogger()) const |
| Merge two disc surfaces into a single one. | |
| std::string | name () const override |
| Return properly formatted class name for screen output. | |
| Vector3 | normal (const GeometryContext &gctx) const |
| Get the normal vector, independent of the location. | |
| Vector3 | normal (const GeometryContext &gctx, const Vector2 &lposition) const final |
| Normal vector return. | |
| 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. | |
| Vector3 | normal (const GeometryContext &gctx, const Vector3 &position) const final |
| Get the normal vector of this surface at a given global position. | |
| DiscSurface & | operator= (const DiscSurface &other) |
| Assignment operator. | |
| double | pathCorrection (const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const final |
| Path correction due to incident of the track. | |
| Polyhedron | polyhedronRepresentation (const GeometryContext &gctx, unsigned int quarterSegments) const override |
| Return a Polyhedron for the surfaces. | |
| Vector3 | referencePosition (const GeometryContext &gctx, AxisDirection aDir) const final |
| A reference position for a given axis direction. | |
| double | referencePositionValue (const GeometryContext &gctx, AxisDirection aDir) const final |
| A reference position value for a given axis direction. | |
| SurfaceType | type () const override |
| Return the surface type. | |
| Public Member Functions inherited from Acts::RegularSurface | |
| Result< Vector2 > | globalToLocal (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. | |
| 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. | |
| Vector3 | localToGlobal (const GeometryContext &gctx, const Vector2 &lposition, const Vector3 &direction) const final |
| Local to global transformation. | |
| 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. | |
| 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 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 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 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 bool | insideBounds (const Vector2 &lposition, const BoundaryTolerance &boundaryTolerance=BoundaryTolerance::None()) const |
| The insideBounds method for local positions. | |
| 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. | |
| 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. | |
| 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 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. | |
| 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 |
Protected Member Functions | |
| DiscSurface (const DiscSurface &other) | |
| Copy Constructor. | |
| DiscSurface (const GeometryContext &gctx, const DiscSurface &other, const Transform3 &shift) | |
| Copy constructor - with shift. | |
| DiscSurface (const Transform3 &transform, double minhalfx, double maxhalfx, double minR, double maxR, double avephi=0., double stereo=0.) | |
| Constructor for Discs from Transform3, \( r_{min}, r_{max}, hx_{min},
hx_{max} \) This is n this case you have DiscTrapezoidBounds. | |
| DiscSurface (const Transform3 &transform, double rmin, double rmax, double hphisec=std::numbers::pi) | |
| Constructor for Discs from Transform3, \( r_{min}, r_{max} \). | |
| DiscSurface (const Transform3 &transform, std::shared_ptr< const DiscBounds > dbounds=nullptr) | |
| Constructor for Discs from Transform3 and shared DiscBounds. | |
| DiscSurface (std::shared_ptr< const DiscBounds > dbounds, const SurfacePlacementBase &placement) | |
| Constructor from SurfacePlacementBase : Element proxy. | |
| 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 | |
| std::shared_ptr< const DiscBounds > | m_bounds |
| bounds (shared) | |
| Protected Attributes inherited from Acts::Surface | |
| 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. | |
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. | |
Class for a disc surface (or a segment thereof).
The DiscSurface is defined by the local polar coordinates \( (r,phi) \).
The surface transform positions the disc such that the origin is at \( r=0 \), independent of the provided DiscBounds. The normal vector of the disc (i.e., the local \(z\)-axis) is given by \( \vec e_{z} = \vec e_{r} \times\vec e_{phi} \).
The disc surface The only surface type for which the covariance matrix is NOT given in the reference frame. A conversion from polar to cartesian coordinates needs to happen to transfer the local coordinates onto the cartesian reference frame coordinates.
|
explicitprotected |
Constructor for Discs from Transform3, \( r_{min}, r_{max} \).
| transform | is transform that places the disc in the global 3D space |
| rmin | The inner radius of the disc surface |
| rmax | The outer radius of the disc surface |
| hphisec | The opening angle of the disc surface and is optional the default is a full disc |
|
explicitprotected |
Constructor for Discs from Transform3, \( r_{min}, r_{max}, hx_{min}, hx_{max} \) This is n this case you have DiscTrapezoidBounds.
| transform | is transform that places the disc in the global 3D space |
| minhalfx | The half length in x at minimal r |
| maxhalfx | The half length in x at maximal r |
| minR | The outer radius of the disc surface |
| maxR | The inner radius of the disc surface |
| avephi | The position in phi (default is 0.) |
| stereo | The optional stereo angle |
|
explicitprotected |
Constructor for Discs from Transform3 and shared DiscBounds.
| transform | The transform that positions the disc in global 3D |
| dbounds | The disc bounds describing the surface coverage |
|
explicitprotected |
Constructor from SurfacePlacementBase : Element proxy.
| dbounds | The disc bounds describing the surface coverage |
| placement | Reference to the surface placement |
|
protected |
Copy Constructor.
| other | The source surface for the copy |
|
protected |
Copy constructor - with shift.
| gctx | The current geometry context object, e.g. alignment |
| other | is the source cone surface |
| shift | is the additional transform applied after copying |
| void Acts::DiscSurface::assignSurfaceBounds | ( | std::shared_ptr< const DiscBounds > | newBounds | ) |
Overwrite the existing surface bounds with new ones.
| newBounds | Pointer to the new bounds |
|
finalvirtual |
This method returns the bounds by reference.
Implements Acts::Surface.
| const std::shared_ptr< const DiscBounds > & Acts::DiscSurface::boundsPtr | ( | ) | const |
This method returns the shared_ptr to the DiscBounds.
|
finalvirtual |
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 from Acts::Surface.
|
finalvirtual |
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 from Acts::Surface.
|
finalvirtual |
Convert a global position to a local one this is the most generic interface, which is implemented by all surfaces.
position is required to be on-surface, which is indicated by the Result return value. | gctx | The current geometry context object, e.g. alignment |
| position | is the global position to be converted |
| direction | is the direction of the local position (ignored for RegularSurface) |
| tolerance | is the tolerance for the on-surface check |
Implements Acts::Surface.
|
finalvirtual |
Global to local transformation.
| 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) |
| tolerance | optional tolerance within which a point is considered valid on surface |
Implements Acts::RegularSurface.
| Vector2 Acts::DiscSurface::globalToLocalCartesian | ( | const GeometryContext & | gctx, |
| const Vector3 & | position, | ||
| double | tol = 0. ) const |
Special method for DiscSurface : global<->local from cartesian coordinates.
| gctx | The current geometry context object, e.g. alignment |
| position | is a global cartesian 3D position |
| tol | The absolute tolerance parameter |
|
finalvirtual |
Straight line intersection schema.
| gctx | The current geometry context object, e.g. alignment |
| position | The global position as a starting point |
| direction | The global direction at the starting point |
| boundaryTolerance | The boundary check prescription |
| tolerance | the tolerance used for the intersection |
Mathematical motivation:
the equation of the plane is given by:
\( \vec n \cdot \vec x = \vec n \cdot \vec p,\)
where \( \vec n = (n_{x}, n_{y}, n_{z})\) denotes the normal vector of the plane, \( \vec p = (p_{x}, p_{y}, p_{z})\) one specific point on the plane and \( \vec x = (x,y,z) \) all possible points on the plane.
Given a line with:
\( \vec l(u) = \vec l_{1} + u \cdot \vec v \),
the solution for \( u \) can be written: \( u = \frac{\vec n (\vec p - \vec l_{1})}{\vec n \vec v}\)
If the denominator is 0 then the line lies:
MultiIntersection3D object Implements Acts::Surface.
|
finalvirtual |
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 |
Implements Acts::Surface.
| Vector3 Acts::DiscSurface::localCartesianToGlobal | ( | const GeometryContext & | gctx, |
| const Vector2 & | lposition ) const |
Special method for DiscSurface : local<->global transformation when provided cartesian coordinates.
| gctx | The current geometry context object, e.g. alignment |
| lposition | is local 2D position in cartesian coordinates |
Special method for Disc surface : local<->local transformations polar <-> cartesian.
| lcart | is local 2D position in cartesian coordinates |
Special method for DiscSurface : local<->local transformations polar <-> cartesian.
| lpolar | is a local position in polar coordinates |
Special method for DiscSurface : local<->local transformations polar <-> cartesian.
| locpol | is a local position in polar coordinates |
|
finalvirtual |
Local to global transformation For planar surfaces the momentum direction is ignored in the local to global transformation.
| gctx | The current geometry context object, e.g. alignment |
| lposition | local 2D position in specialized surface frame |
Implements Acts::RegularSurface.
|
finalvirtual |
Local to global transformation.
This is the most generic interface, which is implemented by all surfaces.
| gctx | The current geometry context object, e.g. alignment |
| lposition | local 2D position in specialized surface frame |
| direction | global 3D momentum direction (ignored for RegularSurface) |
Implements Acts::Surface.
| std::pair< std::shared_ptr< DiscSurface >, bool > Acts::DiscSurface::mergedWith | ( | const DiscSurface & | other, |
| AxisDirection | direction, | ||
| bool | externalRotation, | ||
| const Logger & | logger = getDummyLogger() ) const |
Merge two disc surfaces into a single one.
| other | The other disc surface to merge with |
| direction | The binning direction: either AxisR or AxisPhi |
| externalRotation | If true, any phi rotation is done in the transform |
| logger | The logger to use |
other, and true if not.
|
overridevirtual |
Return properly formatted class name for screen output.
Implements Acts::Surface.
| Vector3 Acts::DiscSurface::normal | ( | const GeometryContext & | gctx | ) | const |
Get the normal vector, independent of the location.
| gctx | The current geometry context object, e.g. alignment |
|
finalvirtual |
Normal vector return.
| gctx | The current geometry context object, e.g. alignment |
| lposition | The local position is ignored |
Implements Acts::RegularSurface.
|
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
| gctx | The current geometry context object, e.g. alignment |
| pos | is the global position where the normal vector is constructed |
| direction | is the direction of the normal vector (ignored for RegularSurface) |
Implements Acts::Surface.
|
finalvirtual |
Get the normal vector of this surface at a given global position.
position is required to be on-surface. | gctx | The current geometry context object, e.g. alignment |
| position | is the global positiono (for DiscSurface this is ignored) |
Implements Acts::RegularSurface.
| DiscSurface & Acts::DiscSurface::operator= | ( | const DiscSurface & | other | ) |
Assignment operator.
| other | The source sourface for the assignment |
|
finalvirtual |
Path correction due to incident of the track.
| gctx | The current geometry context object, e.g. alignment |
| position | The global position as a starting point |
| direction | The global momentum direction at the starting point |
Implements Acts::Surface.
|
overridevirtual |
Return a Polyhedron for the surfaces.
| gctx | The current geometry context object, e.g. alignment |
| quarterSegments | Number of segments used to describe the quarter of a full circle |
Implements Acts::Surface.
|
finalvirtual |
A reference position for a given axis direction.
| gctx | The current geometry context object, e.g. alignment |
| aDir | The axis direction for the reference position request |
Implements Acts::GeometryObject.
|
finalvirtual |
A reference position value for a given axis direction.
| gctx | The current geometry context object, e.g. alignment |
| aDir | the value generated for the reference position |
Reimplemented from Acts::GeometryObject.
|
overridevirtual |
|
protected |
bounds (shared)