File TrapezoidBounds.hpp

namespace Acts

Note

This file is foreseen for the Geometry module to replace Extent

class TrapezoidBounds : public Acts::PlanarBounds
#include <Acts/Surfaces/TrapezoidBounds.hpp>

Bounds for a trapezoidal, planar Surface.

_build/doxygen-xml/TrapezoidBounds.gif

Public Types

enum BoundValues

Values:

enumerator eHalfLengthXnegY
enumerator eHalfLengthXposY
enumerator eHalfLengthY
enumerator eSize

Public Functions

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

Constructor for symmetric Trapezoid.

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

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

Constructor for symmetric Trapezoid - from fixed size array.

Parameters

values – the values to be stream in

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

Bounding box parameters.

Returns

rectangle bounds for a bounding box

inline double get(BoundValues bValue) const

Access to the bound values.

Parameters

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:

(0)

\( y \) or \( x \)

bounds are 0 || 0

(1) the local position is outside

\( y \)

bounds

(2) the local position is inside

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

bounds

(3) the local position is inside

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

bounds

(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} \)

    ,

    where

    \( \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}) \)

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

  • bcheck – boundary check directive

Returns

boolean indicator for the success of this operation

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

Output Method for std::ostream.

Parameters

sl – is the ostream to be dumped into

virtual BoundsType type() const final

Return the bounds type - for persistency optimization.

Returns

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.

Returns

of the stored values for this SurfaceBounds object

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

Return the vertices.

Note

the number of segements is ignored in this representation

Parameters

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

Returns

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.

Private Members

RectangleBounds m_boundingBox
std::array<double, eSize> m_values