File ConeVolumeBounds.hpp

namespace Acts


This file is foreseen for the Geometry module to replace Extent

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

Volume bound class for describing conical volumes either with cylindrical inlay or outer boundary, it also allows for a sectoral description.

Public Types

enum BoundValues

for readability


enumerator eInnerAlpha
enumerator eInnerOffsetZ
enumerator eOuterAlpha
enumerator eOuterOffsetZ
enumerator eHalfLengthZ
enumerator eAveragePhi
enumerator eHalfPhiSector
enumerator eSize

Public Functions

ConeVolumeBounds() = delete
ConeVolumeBounds(double innerAlpha, double innerOffsetZ, double outerAlpha, double outerOffsetZ, double halflengthZ, double averagePhi, double halfPhiSector) noexcept(false)

Constructor - for general cone-cone setups.

  • innerAlpha – The opening angle of the inner cone (0 if no cone)

  • innerOffsetZ – The tip z position in of the inner cone, w.r.t center

  • outerAlpha – The opening angle of the outer cone (0 if no cone)

  • outerOffsetZ – The tip z position in of the outer cone, w.r.t center

  • halflengthZ – The minimum z value of the inner and outer cones

  • averagePhi – The phi orientation of the sector

  • halfPhiSector – The opening angle phi sector

ConeVolumeBounds(double cylinderR, double alpha, double offsetZ, double halflengthZ, double averagePhi, double halfPhiSector) noexcept(false)

Constructor - for general cylidner-cone setups.


depending on cylinderR > coneR it is constructing a cone with cylindrical cutout or a cylinder with conical cutout

  • cylinderR – The inner radius of the cylinder

  • alpha – The opening angle of the cone (0 if no cone)

  • offsetZ – The tip z position in of the cone, w.r.t center

  • halflengthZ – The minimum z value of the inner and outer cones

  • averagePhi – The phi orientation of the sector (defaulted to 0)

  • halfPhiSector – The opening angle phi sector

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

Constructor - from a fixed size array.


values – The bound values

ConeVolumeBounds(const ConeVolumeBounds &cobo) = default
~ConeVolumeBounds() 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.

  • trf – Optional transform

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

  • entity – Entity to associate this bounding box with


Constructed bounding box

inline double get(BoundValues bValue) const

Access to the bound values.


bValue – the class nested enum for the array access

inline double innerRmax() const
inline double innerRmin() const
inline double innerTanAlpha() const
virtual bool inside(const Vector3 &pos, double tol = 0.) const final

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

  • pos – is the position in volume frame to be checked

  • tol – is the absolute tolerance to be applied

ConeVolumeBounds &operator=(const ConeVolumeBounds &cobo) = default
virtual OrientedSurfaces orientedSurfaces(const Transform3 &transform = Transform3::Identity()) const final

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


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


a vector of surfaces bounding this volume

inline double outerRmax() const
inline double outerRmin() const
inline double outerTanAlpha() const
virtual std::ostream &toStream(std::ostream &sl) const final

Output Method for std::ostream.


sl – is ostream operator to be dumped into

inline virtual VolumeBounds::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

Private Functions

void buildSurfaceBounds()

Create the surface bounds.

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


dt – The stream object

Private Members

std::shared_ptr<ConeBounds> m_innerConeBounds = {nullptr}
std::shared_ptr<CylinderBounds> m_innerCylinderBounds = {nullptr}
double m_innerRmax = 0.
double m_innerRmin = 0.

Derived values.

double m_innerTanAlpha = 0.
std::shared_ptr<RadialBounds> m_negativeDiscBounds = {nullptr}
std::shared_ptr<ConeBounds> m_outerConeBounds = {nullptr}
std::shared_ptr<CylinderBounds> m_outerCylinderBounds = {nullptr}
double m_outerRmax = 0.
double m_outerRmin = 0.
double m_outerTanAlpha = 0.
std::shared_ptr<RadialBounds> m_positiveDiscBounds = {nullptr}
std::shared_ptr<PlanarBounds> m_sectorBounds = {nullptr}
std::array<double, eSize> m_values

The bound values.