File TrackingVolume.hpp

namespace Acts

Note

This file is foreseen for the Geometry module to replace Extent

Typedefs

using BoundaryIntersection = ObjectIntersection<BoundarySurface, Surface>

Intersection with a BoundarySurface.

using BoundarySurface = BoundarySurfaceT<TrackingVolume>

BoundarySurface of a volume.

using LayerIntersection = ObjectIntersection<Layer, Surface>
using TrackingVolumeBoundaries = std::vector<TrackingVolumeBoundaryPtr>
using TrackingVolumeBoundaryPtr = std::shared_ptr<const BoundarySurfaceT<TrackingVolume>>
template<typename object_t>
struct NavigationOptions
#include <Acts/Geometry/Layer.hpp>
class TrackingVolume : public Acts::Volume
#include <Acts/Geometry/TrackingVolume.hpp>

Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure.

A TrackingVolume at navigation level can provide the (layer) material information / internal navigation with in 5 different ways:

--- a) Static confinement of Layers
--- b) detached sub volumes
--- b) unordered (arbitrarily oriented) layers
--- d) unordered sub volumes
--- e) unordered layers AND unordered subvolumes

The TrackingVolume can also be a simple container of other TrackingVolumes

In addition it is capable of holding a subarray of Layers and TrackingVolumes.

Public Functions

TrackingVolume() = delete
TrackingVolume(const TrackingVolume&) = delete
~TrackingVolume() override
void assignBoundaryMaterial(std::shared_ptr<const ISurfaceMaterial> surfaceMaterial, BoundarySurfaceFace bsFace)

Set the boundary surface material description.

The material is usually derived in a complicated way and loaded from a framework given source. As various volumes could potentially share the the same material description, it is provided as a shared object

Parameters
  • surfaceMaterial – Material description of this volume

  • bsFace – Specifies which boundary surface to assign the material to

inline void assignVolumeMaterial(std::shared_ptr<const IVolumeMaterial> material)

Set the volume material description.

The material is usually derived in a complicated way and loaded from a framework given source. As various volumes could potentially share the the same material description, it is provided as a shared object

Parameters

material – Material description of this volume

const Layer *associatedLayer(const GeometryContext &gctx, const Vector3 &position) const

Return the associated Layer to the global position.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • position – is the associated global position

Returns

plain pointer to layer object

const TrackingVolumeBoundaries &boundarySurfaces() const

Method to return the BoundarySurfaces.

inline unsigned int colorCode() const

Get the color code.

boost::container::small_vector<BoundaryIntersection, 4> compatibleBoundaries(const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, const NavigationOptions<Surface> &options, LoggerWrapper logger = getDummyLogger()) const

Returns all boundary surfaces sorted by the user.

Template Parameters
  • options_t – Type of navigation options object for decomposition

  • sorter_t – Type of the boundary surface sorter

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • position – The position for searching

  • direction – The direction for searching

  • options – The templated navigation options

  • logger – A LoggerWrapper instance

Returns

is the templated boundary intersection

boost::container::small_vector<LayerIntersection, 10> compatibleLayers(const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, const NavigationOptions<Layer> &options) const

Resolves the volume into (compatible) Layers.

This is the method for the propagator/extrapolator

Template Parameters

options_t – Type of navigation options object for decomposition

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • position – Position for the search

  • direction – Direction for the search

  • options – The templated navigation options

Returns

vector of compatible intersections with layers

std::vector<SurfaceIntersection> compatibleSurfacesFromHierarchy(const GeometryContext &gctx, const Vector3 &position, const Vector3 &direction, double angle, const NavigationOptions<Surface> &options) const

Return surfaces in given direction from bounding volume hierarchy.

Template Parameters

options_t – Type of navigation options object for decomposition

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • position – The position to start from

  • direction – The direction towards which to test

  • angle – The opening angle

  • options – The templated navigation options

Returns

Vector of surface candidates

inline const LayerArray *confinedLayers() const

Return the confined static layer array - if it exists.

Returns

the BinnedArray of static layers if exists

inline std::shared_ptr<const TrackingVolumeArray> confinedVolumes() const

Return the confined volumes of this container array - if it exists.

inline const MutableTrackingVolumeVector denseVolumes() const

Return the confined dense volumes.

void glueTrackingVolume(const GeometryContext &gctx, BoundarySurfaceFace bsfMine, TrackingVolume *neighbor, BoundarySurfaceFace bsfNeighbor)

Glue another tracking volume to this one.

  • if common face is set the glued volumes are sharing the boundary, down to the last navigation volume

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • bsfMine – is the boundary face indicater where to glue

  • neighbor – is the TrackingVolume to be glued

  • bsfNeighbor – is the boudnary surface of the neighbor

void glueTrackingVolumes(const GeometryContext &gctx, BoundarySurfaceFace bsfMine, const std::shared_ptr<TrackingVolumeArray> &neighbors, BoundarySurfaceFace bsfNeighbor)

Glue another tracking volume to this one.

  • if common face is set the glued volumes are sharing the boundary, down to the last navigation volume

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • bsfMine – is the boundary face indicater where to glue

  • neighbors – are the TrackingVolumes to be glued

  • bsfNeighbor – are the boudnary surface of the neighbors

GlueVolumesDescriptor &glueVolumesDescriptor()

Register the outside glue volumes - ordering is in the TrackingVolume Frame:

  • negativeFaceXY

  • (faces YZ, ZY, radial faces)

  • positiveFaceXY

inline bool hasBoundingVolumeHierarchy() const

Return whether this TrackingVolume has a BoundingVolumeHierarchy associated.

Returns

If it has a BVH or not.

const TrackingVolume *lowestTrackingVolume(const GeometryContext &gctx, const Vector3 &position, const double tol = 0.) const

Return the associated sub Volume, returns THIS if no subVolume exists.

Parameters
  • gctx – The current geometry context object, e.g. alignment

  • position – is the global position associated with that search

  • tol – Search position tolerance for dense volumes

Returns

plain pointer to associated with the position

inline const TrackingVolume *motherVolume() const

Return the MotherVolume - if it exists.

TrackingVolume &operator=(const TrackingVolume&) = delete
inline void registerColorCode(unsigned int icolor)

Register the color code.

Parameters

icolor – is a color number

void registerGlueVolumeDescriptor(GlueVolumesDescriptor *gvd)

Register the outside glue volumes - ordering is in the TrackingVolume Frame:

  • negativeFaceXY

  • (faces YZ, ZY, radial faces)

  • positiveFaceXY

Parameters

gvd – register a new GlueVolumeDescriptor

inline void setMotherVolume(const TrackingVolume *mvol)

Set the MotherVolume.

Parameters

mvol – is the mother volume

void updateBoundarySurface(BoundarySurfaceFace bsf, std::shared_ptr<const BoundarySurfaceT<TrackingVolume>> bs, bool checkmaterial = true)

Provide a new BoundarySurface from the glueing.

Parameters
  • bsf – is the boundary face indicater where to glue

  • bs – is the new boudnary surface

  • checkmaterial – is a flag how to deal with material, if true:

    • if the old boundary surface had a material description but the new one has not, keep the current one

    • in all other cases just assign the new boundary surface

template<typename visitor_t>
inline void visitSurfaces(visitor_t &&visitor) const

Visit all sensitive surfaces.

If a context is needed for the vist, the vistitor has to provide this e.g. as a private member

Template Parameters

visitor_t – Type of the callable visitor

Parameters

visitor – The callable. Will be called for each sensitive surface that is found

inline const IVolumeMaterial *volumeMaterial() const

Return the material of the volume.

inline const std::shared_ptr<const IVolumeMaterial> &volumeMaterialSharedPtr() const

Return the material of the volume as shared pointer.

inline const std::string &volumeName() const

Returns the VolumeName - for debug reason, might be depreciated later.

Public Static Functions

static inline MutableTrackingVolumePtr create(const Transform3 &transform, VolumeBoundsPtr volumeBounds, const std::shared_ptr<const TrackingVolumeArray> &containedVolumes = nullptr, const std::string &volumeName = "undefined")

Factory constructor for a container TrackingVolume.

  • by definition a Vacuum volume

Parameters
  • transform – is the global 3D transform to position the volume in space

  • volumeBounds – is the description of the volume boundaries

  • containedVolumes – are the static volumes that fill this volume

  • volumeName – is a string identifier

Returns

shared pointer to a new TrackingVolume

static inline MutableTrackingVolumePtr create(const Transform3 &transform, VolumeBoundsPtr volbounds, std::vector<std::unique_ptr<Volume::BoundingBox>> boxStore, std::vector<std::unique_ptr<const Volume>> descendants, const Volume::BoundingBox *top, std::shared_ptr<const IVolumeMaterial> volumeMaterial, const std::string &volumeName = "undefined")

Factory constructor for Tracking Volume with a bounding volume hierarchy.

Parameters
  • transform – is the global 3D transform to position the volume in space

  • volbounds – is the description of the volume boundaries

  • boxStore – Vector owning the contained bounding boxes

  • descendants – Vector owning the child volumes

  • top – The top of the hierarchy (top node)

  • volumeMaterial – is the materials of the tracking volume

  • volumeName – is a string identifier

Returns

shared pointer to a new TrackingVolume

static inline MutableTrackingVolumePtr create(const Transform3 &transform, VolumeBoundsPtr volumeBounds, std::shared_ptr<const IVolumeMaterial> volumeMaterial, std::unique_ptr<const LayerArray> containedLayers = nullptr, std::shared_ptr<const TrackingVolumeArray> containedVolumes = nullptr, MutableTrackingVolumeVector denseVolumes = {}, const std::string &volumeName = "undefined")

Factory constructor for Tracking Volumes with content.

  • can not be a container volume

Parameters
  • transform – is the global 3D transform to position the volume in space

  • volumeBounds – is the description of the volume boundaries

  • volumeMaterial – is are materials of the tracking volume

  • containedLayers – is the confined layer array (optional)

  • containedVolumes – is the confined volume array (optional)

  • denseVolumes – is the array of dense volulmes (optional)

  • volumeName – is a string identifier

Returns

shared pointer to a new TrackingVolume

Protected Functions

TrackingVolume(const Transform3 &transform, VolumeBoundsPtr volbounds, const std::shared_ptr<const TrackingVolumeArray> &containedVolumeArray = nullptr, const std::string &volumeName = "undefined")

Constructor for a container Volume.

  • vacuum filled volume either as a for other tracking volumes

Parameters
  • transform – is the global 3D transform to position the volume in space

  • volbounds – is the description of the volume boundaries

  • containedVolumeArray – are the static volumes that fill this volume

  • volumeName – is a string identifier

TrackingVolume(const Transform3 &transform, VolumeBoundsPtr volbounds, std::vector<std::unique_ptr<Volume::BoundingBox>> boxStore, std::vector<std::unique_ptr<const Volume>> descendants, const Volume::BoundingBox *top, std::shared_ptr<const IVolumeMaterial> volumeMaterial, const std::string &volumeName = "undefined")
TrackingVolume(const Transform3 &transform, VolumeBoundsPtr volumeBounds, std::shared_ptr<const IVolumeMaterial> volumeMaterial, std::unique_ptr<const LayerArray> staticLayerArray = nullptr, std::shared_ptr<const TrackingVolumeArray> containedVolumeArray = nullptr, MutableTrackingVolumeVector denseVolumeVector = {}, const std::string &volumeName = "undefined")

Constructor for a full equipped Tracking Volume.

Parameters
  • transform – is the global 3D transform to position the volume in space

  • volumeBounds – is the description of the volume boundaries

  • volumeMaterial – is are materials of the tracking volume

  • staticLayerArray – is the confined layer array (optional)

  • containedVolumeArray – are the sub volumes if the volume is a container

  • denseVolumeVector – The contained dense volumes

  • volumeName – is a string identifier

Private Functions

void closeGeometry(const IMaterialDecorator *materialDecorator, std::unordered_map<GeometryIdentifier, const TrackingVolume*> &volumeMap, size_t &vol)

close the Geometry, i.e.

set the GeometryIdentifier and assign material

Parameters
  • materialDecorator – is a dedicated decorator for the material to be assigned (surface, volume based)

  • volumeMap – is a map to find the a volume by identifier

  • vol – is the geometry id of the volume as calculated by the TrackingGeometry

void connectDenseBoundarySurfaces(MutableTrackingVolumeVector &confinedDenseVolumes)
void createBoundarySurfaces()

Create Boundary Surface.

void interlinkLayers()

interlink the layers in this TrackingVolume

void synchronizeLayers(double envelope = 1.) const

method to synchronize the layers with potentially updated volume bounds:

  • adapts the layer dimensions to the new volumebounds + envelope

Parameters

envelope – is the clearance between volume boundary and layer

Private Members

std::vector<TrackingVolumeBoundaryPtr> m_boundarySurfaces
std::vector<std::unique_ptr<const Volume::BoundingBox>> m_boundingBoxes

Bounding Volume Hierarchy (BVH)

const Volume::BoundingBox *m_bvhTop = {nullptr}
unsigned int m_colorCode = {20}

color code for displaying

MutableTrackingVolumeVector m_confinedDenseVolumes

confined dense

std::unique_ptr<const LayerArray> m_confinedLayers = nullptr

(a) static configuration ordered by Binned arrays static layers

std::shared_ptr<const TrackingVolumeArray> m_confinedVolumes = nullptr

Array of Volumes inside the Volume when actin as container.

std::vector<std::unique_ptr<const Volume>> m_descendantVolumes
GlueVolumesDescriptor *m_glueVolumeDescriptor = {nullptr}

Volumes to glue Volumes from the outside.

const TrackingVolume *m_motherVolume = {nullptr}

Remember the mother volume.

std::string m_name

Volume name for debug reasons & screen output.

std::shared_ptr<const IVolumeMaterial> m_volumeMaterial = {nullptr}

The volume based material the TrackingVolume consists of.

Friends

friend class TrackingGeometry