File DiscSurface.hpp

namespace Acts

Note

This file is foreseen for the Geometry module to replace Extent

class DiscSurface : public Acts::Surface
#include <Acts/Surfaces/DiscSurface.hpp>

Class for a DiscSurface in the, it inherits from Surface.

The DiscSurface has a polar local coordinate system, with (r,phi) describing the coordinates.

The surface transform positions the disc such, that the origin is at r=0, independent of the provided DiscBounds. The z-axis The normal vector of the Disc, being perpendicular to the radial direction.

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.

_build/doxygen-xml/DiscSurface.png

Subclassed by Acts::DiscLayer

Public Functions

DiscSurface() = delete
~DiscSurface() override = default
virtual Vector3 binningPosition(const GeometryContext &gctx, BinningValue bValue) const final

The binning position The position calcualted for a certain binning type.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • bValue – The binning type to be used

Returns

position that can beused for this binning

virtual double binningPositionValue(const GeometryContext &gctx, BinningValue bValue) const final

Implement the binningValue.

Note

This calls the parent method except for binR

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • bValue – is the dobule in which you want to bin

Returns

float to be used for the binning schema

virtual const SurfaceBounds &bounds() const final

This method returns the bounds by reference.

virtual BoundToFreeMatrix boundToFreeJacobian(const GeometryContext &gctx, const BoundVector &boundParams) const final

Calculate the jacobian from local to global which the surface knows best, hence the calculation is done here.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • boundParams – is the bound parameters vector

Returns

Jacobian from local to global

virtual FreeToBoundMatrix freeToBoundJacobian(const GeometryContext &gctx, const FreeVector &parameters) const final

Calculate the jacobian from global to local which the surface knows best, hence the calculation is done here.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • parameters – is the free parameters

Returns

Jacobian from global to local

virtual Result<Vector2> globalToLocal(const GeometryContext &gctx, const Vector3 &position, const Vector3 &momentum, double tolerance = s_onSurfaceTolerance) const final

Global to local transformation.

Note

the momentum is ignored for Disc surfaces in this calculateion

Parameters
  • 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)

  • momentum – global 3D momentum representation (optionally ignored)

  • tolerance – optional tolerance within which a point is considered valid on surface

Returns

a Result<Vector2> which can be !ok() if the operation fails

Vector2 globalToLocalCartesian(const GeometryContext &gctx, const Vector3 &position, double tol = 0.) const

Special method for DiscSurface : global<->local from cartesian coordinates.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • position – is a global cartesian 3D position

  • tol – The absoltue tolerance parameter

Returns

value is a local polar

virtual SurfaceIntersection intersect(const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, const BoundaryCheck &bcheck = false) const final

Straight line intersection schema.

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:
  • either in the plane

  • perpendicular to the normal of the plane

Note

expected to be normalized (no checking)

Parameters
  • 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

  • bcheck – The boundary check prescription

Returns

The SurfaceIntersection object

virtual ActsMatrix<2, 3> localCartesianToBoundLocalDerivative(const GeometryContext &gctx, const Vector3 &position) const final

Calculate the derivative of bound track parameters local position w.r.t.

position in local 3D Cartesian coordinates

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • position – The position of the paramters in global

Returns

Derivative of bound local position w.r.t. position in local 3D cartesian coordinates

Vector3 localCartesianToGlobal(const GeometryContext &gctx, const Vector2 &lposition) const

Special method for DiscSurface : local<->global transformation when provided cartesian coordinates.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • lposition – is local 2D position in cartesian coordinates

Returns

value is a global cartesian 3D position

Vector2 localCartesianToPolar(const Vector2 &lcart) const

Special method for Disc surface : local<->local transformations polar <-> cartesian.

Parameters

lcart – is local 2D position in cartesian coordinates

Returns

value is a local position in polar coordinates

Vector2 localPolarToCartesian(const Vector2 &lpolar) const

Special method for DiscSurface : local<->local transformations polar <-> cartesian.

Parameters

lpolar – is a local position in polar coordinates

Returns

values is local 2D position in cartesian coordinates

Vector2 localPolarToLocalCartesian(const Vector2 &locpol) const

Special method for DiscSurface : local<->local transformations polar <-> cartesian.

Parameters

locpol – is a local position in polar coordinates

Returns

values is local 2D position in cartesian coordinates

virtual Vector3 localToGlobal(const GeometryContext &gctx, const Vector2 &lposition, const Vector3 &momentum) const final

Local to global transformation For planar surfaces the momentum is ignroed in the local to global transformation.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • lposition – local 2D position in specialized surface frame

  • momentum – global 3D momentum representation (optionally ignored)

Returns

global position by value

virtual std::string name() const override

Return properly formatted class name for screen output.

virtual Vector3 normal(const GeometryContext &gctx, const Vector2 &lposition) const final

Normal vector return.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • lposition – The local position is ignored

Returns

a Vector3 by value

DiscSurface &operator=(const DiscSurface &other)

Assignement operator.

Parameters

other – The source sourface for the assignment

virtual double pathCorrection(const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction) const final

Path correction due to incident of the track.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • position – The global position as a starting point

  • direction – The global momentum at the starting point

Returns

The correction factor due to incident

virtual Polyhedron polyhedronRepresentation(const GeometryContext &gctx, size_t lseg) const override

Return a Polyhedron for the surfaces.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • lseg – Number of segments along curved lines, it represents the full 2*M_PI coverange, if lseg is set to 1 only the extrema are given

Returns

A list of vertices and a face/facett description of it

virtual SurfaceType type() const override

Return the surface type.

Protected Functions

DiscSurface(const Transform3 &transform, double rmin, double rmax, double hphisec = M_PI)

Constructor for Discs from Transform3, \( r_{min}, r_{max} \).

Parameters
  • 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

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.

Parameters
  • 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

DiscSurface(const Transform3 &transform, std::shared_ptr<const DiscBounds> dbounds = nullptr)

Constructor for Discs from Transform3 and shared DiscBounds.

Parameters
  • transform – The transform that positions the disc in global 3D

  • dbounds – The disc bounds describing the surface coverage

DiscSurface(const std::shared_ptr<const DiscBounds> &dbounds, const DetectorElementBase &detelement)

Constructor from DetectorElementBase : Element proxy.

Parameters
  • dbounds – The disc bounds describing the surface coverage

  • detelement – The detector element represented by this surface

DiscSurface(const DiscSurface &other)

Copy Constructor.

Parameters

other – The source surface for the copy

DiscSurface(const GeometryContext &gctx, const DiscSurface &other, const Transform3 &shift)

Copy constructor - with shift.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • other – is the source cone surface

  • shift – is the additional transfrom applied after copying

Protected Attributes

std::shared_ptr<const DiscBounds> m_bounds

bounds (shared)