Class TrapezoidBounds

Inheritance Relationships

Base Type

Class Documentation

class Acts::TrapezoidBounds : public Acts::PlanarBounds

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

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
const RectangleBounds &boundingBox() const final

Bounding box parameters.

Return

rectangle bounds for a bounding box

double get(BoundValues bValue) const

Access to the bound values.

Parameters
  • bValue: the class nested enum for the array access

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)
Parameters
  • lpos: is the local position to be checked (Cartesian local frame)

  • bcheck: is the boundary check directive

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

Return

boolean indicator for the success of this operation

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

  • bcheck: boundary check directive

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

Output Method for std::ostream.

Parameters
  • sl: is the ostream to be dumped into

BoundsType type() const final

Return the bounds type - for persistency optimization.

Return

is a BoundsType enum

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.

Return

of the stored values for this SurfaceBounds object

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

Return the vertices.

Note

the number of segements is ignored in this representation

Return

vector for vertices in 2D

Parameters
  • lseg: the number of segments used to approximate and eventually curved line