File VolumeBounds.hpp

namespace Acts


This file is foreseen for the Geometry module to replace Extent


using OrientedSurface = std::pair<std::shared_ptr<Surface>, Direction>
using OrientedSurfaces = std::vector<OrientedSurface>


std::ostream &operator<<(std::ostream &sl, const VolumeBounds &vb)

Overload of << operator for std::ostream for debug output.

inline bool operator==(const VolumeBounds &lhs, const VolumeBounds &rhs)


static const Transform3 s_planeXY = Transform3::Identity()
static const Transform3 s_planeYZ = AngleAxis3(0.5 * M_PI, Vector3::UnitY()) * AngleAxis3(0.5 * M_PI, Vector3::UnitZ()) * Transform3::Identity()
static const Transform3 s_planeZX = AngleAxis3(-0.5 * M_PI, Vector3::UnitX()) * AngleAxis3(-0.5 * M_PI, Vector3::UnitZ()) * Transform3::Identity()
class VolumeBounds
#include <Acts/Geometry/VolumeBounds.hpp>

Pure Absract Base Class for Volume bounds.

Acts::VolumeBounds are a set of up to six confining Surfaces that are stored in a std::vector. Each type of Acts::VolumeBounds has to implement a orientedSurfaces() and a inside() method.

The Volume, retrieving a set of Surfaces from the VolumeBounds, can turn the Surfaces into BoundarySurfaces.

Subclassed by Acts::ConeVolumeBounds, Acts::CuboidVolumeBounds, Acts::CutoutCylinderVolumeBounds, Acts::CylinderVolumeBounds, Acts::GenericCuboidVolumeBounds, Acts::TrapezoidVolumeBounds

Public Types

enum BoundsType

This is nested to the VolumeBounds, as also SurfaceBounds will have Bounds Type.


enumerator eCone
enumerator eCuboid
enumerator eCutoutCylinder
enumerator eCylinder
enumerator eGenericCuboid
enumerator eTrapezoid
enumerator eOther

Public Functions

VolumeBounds() = default
virtual ~VolumeBounds() = default
inline virtual double binningBorder(BinningValue bValue) const

Binning borders in double.


bValue – is the binning schema used


float offset to be used for the binning

inline virtual Vector3 binningOffset(BinningValue bValue) const

Binning offset - overloaded for some R-binning types.


bValue – is the binning schema used


vector 3D to be used for the binning

virtual Volume::BoundingBox boundingBox(const Transform3 *trf = nullptr, const Vector3 &envelope = {0, 0, 0}, const Volume *entity = nullptr) const = 0

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

virtual bool inside(const Vector3 &gpos, double tol = 0.) const = 0

Checking if position given in volume frame is inside.

  • gpos – is the global position to be checked

  • tol – is the tolerance applied for the inside check


boolean indicating if the position is inside

virtual OrientedSurfaces orientedSurfaces(const Transform3 &transform = Transform3::Identity()) const = 0

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

virtual std::ostream &toStream(std::ostream &sl) const = 0

Output Method for std::ostream, to be overloaded by child classes.


sl – is the output stream to be dumped into

virtual BoundsType type() const = 0

Return the bounds type - for persistency optimization.


is a BoundsType enum

virtual std::vector<double> values() const = 0

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