File DiscTrapezoidBounds.hpp

namespace Acts


This file is foreseen for the Geometry module to replace Extent

class DiscTrapezoidBounds : public Acts::DiscBounds
#include <Acts/Surfaces/DiscTrapezoidBounds.hpp>

Class to describe the bounds for a planar DiscSurface.

By providing an argument for hphisec, the bounds can be restricted to a phi-range around the center position.

Public Types

enum BoundValues


enumerator eHalfLengthXminR
enumerator eHalfLengthXmaxR
enumerator eMinR
enumerator eMaxR
enumerator eAveragePhi
enumerator eStereo
enumerator eSize

Public Functions

DiscTrapezoidBounds() = delete
inline DiscTrapezoidBounds(const std::array<double, eSize> &values) noexcept(false)

Constructor - from fixed size array.


values – The parameter values

DiscTrapezoidBounds(double halfXminR, double halfXmaxR, double minR, double maxR, double avgPhi = M_PI_2, double stereo = 0.) noexcept(false)

Constructor for a symmetric Trapezoid giving min X length, max X length, Rmin and R max.

  • halfXminR – half length in X at min radius

  • halfXmaxR – half length in X at maximum radius

  • minR – inner radius

  • maxR – outer radius

  • avgPhi – average phi value

  • stereo – optional stero angle applied

~DiscTrapezoidBounds() override = default
inline virtual double binningValuePhi() const final

Return a reference phi for binning.

inline virtual double binningValueR() const final

Return a reference radius for binning.

inline virtual bool coversFullAzimuth() const final

Returns true for full phi coverage - obviously false here.

inline double get(BoundValues bValue) const

Access to the bound values.


bValue – the class nested enum for the array access

inline double halfLengthY() const

This method returns the half length in Y (this is Rmax -Rmin)

inline double halfPhiSector() const

This method returns the halfPhiSector which is covered by the disc.

virtual bool inside(const Vector2 &lposition, const BoundaryCheck &bcheck = true) const final

This method checks if the radius given in the LocalPosition is inside [rMin,rMax] if only tol0 is given and additional in the phi sector is tol1 is given.

  • lposition – is the local position to be checked (in polar coordinates)

  • bcheck – is the boundary check directive

inline virtual bool insideRadialBounds(double R, double tolerance = 0.) const final

Checks if this is inside the radial coverage given the a tolerance.

inline double rCenter() const

This method returns the center radius.

inline virtual double rMax() const final

This method returns outer radius.

inline virtual double rMin() const final

This method returns inner radius.

inline double stereo() const

This method returns the stereo angle.

virtual std::ostream &toStream(std::ostream &sl) const final

Output Method for std::ostream.

virtual SurfaceBounds::BoundsType type() const final

Return the bounds type - for persistency optimization.


is a BoundsType enum

inline virtual std::vector<double> values() const final

Return the bound values as dynamically sized vector.


this returns a copy of the internal values

virtual std::vector<Vector2> vertices(unsigned int lseg) const final

This method returns the xy coordinates of the four corners of the bounds in module coorindates (in xy)


that the number of segments are ignored for this surface


lseg – the number of segments used to approximate and eventually curved line


vector for vertices in 2D

Private Functions

inline void checkConsistency() noexcept(false)

Check the input values for consistency, will throw a logic_exception if consistency is not given.

ActsMatrix<2, 2> jacobianToLocalCartesian(const Vector2 &lposition) const

Jacobian into its Cartesian representation.


lposition – The local position in polar coordinates

Vector2 toLocalCartesian(const Vector2 &lposition) const

Private helper method to convert a local position into its Cartesian representation.


lposition – The local position in polar coordinates

Private Members

std::array<double, eSize> m_values
double m_ymax = 0

Dreived maximum y value.