Class Acts::TrapezoidBounds

class TrapezoidBounds : public Acts::PlanarBounds

Bounds for a trapezoidal, planar Surface.


Public Types

enum BoundValues


enumerator eHalfLengthXnegY
enumerator eHalfLengthXposY
enumerator eHalfLengthY
enumerator eSize

Public Functions

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

Constructor for symmetric Trapezoid - from fixed size array.


values – the values to be stream in

inline TrapezoidBounds(double halfXnegY, double halfXposY, double halfY) noexcept(false)

Constructor for symmetric Trapezoid.

  • halfXnegY – minimal half length X, definition at negative Y

  • halfXposY – maximal half length X, definition at positive Y

  • halfY – half length Y - defined at x=0

~TrapezoidBounds() override
virtual const RectangleBounds &boundingBox() const final

Bounding box parameters.


rectangle bounds for a bounding box

inline double get(BoundValues bValue) const

Access to the bound values.


bValue – the class nested enum for the array access

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

The orientation of the Trapezoid is according to the figure above, in words: the shorter of the two parallel sides of the trapezoid intersects with the negative \( y \) - axis of the local frame.

The cases are:


\( y \) or \( x \)

bounds are 0 || 0

(1) the local position is outside

\( y \)


(2) the local position is inside

\( y \) bounds, but outside maximum \( x \)


(3) the local position is inside

\( y \) bounds AND inside minimum \( x \)


(4) the local position is inside

\( y \) bounds AND inside maximum \( x \) bounds, so that it depends on the \( eta \) coordinate (5) the local position fails test of (4)

The inside check is done using single equations of straight lines and one has to take care if a point lies on the positive \( x \) half area(I) or the negative one(II). Denoting \( |x_{min}| \) and \( | x_{max} | \) as minHalfX respectively maxHalfX, such as \( | y_{H} | \) as halfY, the equations for the straing lines in (I) and (II) can be written as:

  • (I): \( y = \kappa_{I} x + \delta_{I} \)

  • (II): \( y = \kappa_{II} x + \delta_{II} \)



    \( \kappa_{I} = - \kappa_{II} = 2 \frac{y_{H}}{x_{max} - x_{min}} \) and \( \delta_{I} = \delta_{II} = - \frac{1}{2}\kappa_{I}(x_{max} + x_{min}) \)

  • lposition – Local position (assumed to be in right surface frame)

  • bcheck – boundary check directive


boolean indicator for the success of this operation

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

Output Method for std::ostream.


sl – is the ostream to be dumped into

virtual BoundsType type() const final

Return the bounds type - for persistency optimization.


is a BoundsType enum

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

Access method for bound values, this is a dynamically sized vector containing the parameters needed to describe these bounds.


of the stored values for this SurfaceBounds object

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

Return the vertices.


the number of segments is ignored in this representation


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


vector for vertices in 2D