Class TrackingVolume

Inheritance Relationships

Base Type

Class Documentation

class Acts::TrackingVolume : public Acts::Volume

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
  • material: Material description of this volume

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.

Return

plain pointer to layer object

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

  • position: is the associated global position

const TrackingVolumeBoundaries &boundarySurfaces() const

Method to return the BoundarySurfaces.

unsigned int colorCode() const

Get the color code.

std::vector<BoundaryIntersection> 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.

Return

is the templated boundary intersection

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

  • sorter: Sorter of the boundary surfaces

std::vector<LayerIntersection> 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

Return

vector of compatible intersections with layers

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

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.

Return

Vector of surface candidates

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

const LayerArray *confinedLayers() const

Return the confined static layer array - if it exists.

Return

the BinnedArray of static layers if exists

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

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

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

bool hasBoundingVolumeHierarchy() const

Return whether this TrackingVolume has a BoundingVolumeHierarchy associated.

Return

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.

Return

plain pointer to associated with the position

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

const TrackingVolume *motherVolume() const

Return the MotherVolume - if it exists.

TrackingVolume &operator=(const TrackingVolume&) = delete
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

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

void visitSurfaces(const std::function<void(const Acts::Surface*)> &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

Parameters
  • visitor: The callable. Will be called for each sensitive surface that is found

const IVolumeMaterial *volumeMaterial() const

Return the material of the volume.

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

Return the material of the volume as shared pointer.

const std::string &volumeName() const

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

Public Static Functions

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

Return

shared pointer to a new TrackingVolume

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

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.

Return

shared pointer to a new TrackingVolume

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)

  • matprop: is are materials of the tracking volume

  • volumeName: is a string identifier

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

Return

shared pointer to a new TrackingVolume

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

  • volumeBounds: is the description of the volume boundaries

  • matprop: is are materials of the tracking volume

  • containedLayers: is the confined layer array (optional)

  • containedVolumes: is the confined volume array (optional)

  • volumeName: is a string identifier

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