File TrapezoidVolumeBounds.hpp

namespace Acts

Note

This file is foreseen for the Geometry module to replace Extent

class TrapezoidVolumeBounds : public Acts::VolumeBounds
#include <Acts/Geometry/TrapezoidVolumeBounds.hpp>

Bounds for a trapezoidal shaped Volume, the orientedSurface(…) method creates a vector of 6 surfaces:

BoundarySurfaceFace [index]:

  • negativeFaceXY [0] : Trazpezoidal Acts::PlaneSurface, parallel to \( xy \) plane at negative \(z\)

  • positiveFaceXY [1] : Trazpezoidal Acts::PlaneSurface, parallel to \( xy \) plane at positive \(z\)

  • trapezoidFaceAlpha [2] : Rectangular Acts::PlaneSurface, attached to [0] and [1] at negative \(x\) (associated to alpha)

  • trapezoidFaceBeta [3] : Rectangular Acts::PlaneSurface, attached to [0] and [1] at positive \( x\) (associated to beta)

  • negativeFaceZX [4] : Rectangular Acts::PlaneSurface, parallel to \( zx \) plane at negative \(y\)

  • positiveFaceZX [5] : Rectangular Acts::PlaneSurface, parallel to \( zx \) plane at positive \(y\)

Public Types

enum BoundValues

for acces / streaming

Values:

enumerator eHalfLengthXnegY

halflength in x at negative y

enumerator eHalfLengthXposY

halflength in x at positive y

enumerator eHalfLengthY

halflength in y

enumerator eHalfLengthZ

halflength in z

enumerator eAlpha

opening angle alpha (in point A)

enumerator eBeta

opening angle beta (in point B)

enumerator eSize

length of the bounds vector

Public Functions

TrapezoidVolumeBounds() = delete
TrapezoidVolumeBounds(double minhalex, double maxhalex, double haley, double halez) noexcept(false)

Constructor - the trapezoid boundaries (symmetric trapezoid)

Parameters
  • minhalex – is the half length in x at minimal y

  • maxhalex – is the half length in x at maximal y

  • haley – is the half length in y

  • halez – is the half length in z

TrapezoidVolumeBounds(double minhalex, double haley, double halez, double alpha, double beta) noexcept(false)

Constructor - the trapezoid boundaries (arbitrary trapezoid)

Parameters
  • minhalex – is the half length in x at minimal y

  • haley – is the half length in y

  • halez – is the half length in z

  • alpha – is the openeing angle at -x,-y

  • beta – is the openeing angle at +x,-y

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

Constructor - from a fixed size array.

Parameters

values – The bound values

TrapezoidVolumeBounds(const TrapezoidVolumeBounds &trabo) = default
~TrapezoidVolumeBounds() override = default
virtual Volume::BoundingBox boundingBox(const Transform3 *trf = nullptr, const Vector3 &envelope = {0, 0, 0}, const Volume *entity = nullptr) const final

Construct bounding box for this shape.

Parameters
  • trf – Optional transform

  • envelope – Optional envelope to add / subtract from min/max

  • entity – Entity to associate this bounding box with

Returns

Constructed 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 Vector3 &pos, double tol = 0.) const override

This method checks if position in the 3D volume frame is inside the cylinder.

Parameters
  • pos – is the global position to be checked

  • tol – is the tolerance applied

Returns

boolean indicator if position is inside

TrapezoidVolumeBounds &operator=(const TrapezoidVolumeBounds &trabo) = default
virtual OrientedSurfaces orientedSurfaces(const Transform3 &transform = Transform3::Identity()) const override

Oriented surfaces, i.e.

the decomposed boundary surfaces and the according navigation direction into the volume given the normal vector on the surface

It will throw an exception if the orientation prescription is not adequate

Parameters

transform – is the 3D transform to be applied to the boundary surfaces to position them in 3D space

Returns

a vector of surfaces bounding this volume

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

Output Method for std::ostream.

inline virtual VolumeBounds::BoundsType type() const final

Return the bounds type - for persistency optimization.

Returns

is a BoundsType enum

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

Return the bound values as dynamically sized vector.

Returns

this returns a copy of the internal values

Private Functions

void buildSurfaceBounds()

Helper method to create the surface bounds.

inline void checkConsistency() noexcept(false)

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

template<class stream_t>
stream_t &dumpT(stream_t &dt) const

Templated dump methos.

Template Parameters

stream_t – The type of the stream for dumping

Parameters

dt – The stream object

Private Members

std::shared_ptr<const RectangleBounds> m_faceAlphaRectangleBounds = {nullptr}

Thhe face PlaneSurface attached to alpha (negative local x)

std::shared_ptr<const RectangleBounds> m_faceBetaRectangleBounds = {nullptr}

The face PlaneSurface attached to beta (positive local x)

std::shared_ptr<const TrapezoidBounds> m_faceXYTrapezoidBounds = {nullptr}

The face PlaneSurface parallel to local xy plane.

std::shared_ptr<const RectangleBounds> m_faceZXRectangleBoundsBottom = {nullptr}

The face PlaneSurface parallel to local zx plane, negative local y.

std::shared_ptr<const RectangleBounds> m_faceZXRectangleBoundsTop = {nullptr}

The face PlaneSurface parallel to local zx plane, positive local y.

std::array<double, eSize> m_values

The internal version of the bounds can be float/double.