File LayerStructureBuilder.hpp

namespace Acts


This file is foreseen for the Geometry module to replace Extent

namespace Experimental
class LayerStructureBuilder : public Acts::Experimental::IInternalStructureBuilder
#include <Acts/Detector/LayerStructureBuilder.hpp>

This is a builder of layer structures to be contained within a DetectorVolume, it extends the IInternalStructureBuilder interface and provides the internal structure components of DetectorVolume objects to be constructed.

It uses the IndexedSurfaceGrid to bin the internal surfaces, and allows for additional support surfaces that are added to the structure and indexing mechanism. Those support structures can also be approximated by planar surfaces, in order to facilitate vectorization of surface intersection calls.

The binning can be chosen with a so called expansion, a number which indicates the configured expanded bin window in which the surfaces are going to be filled, the details to this strategy can be found in the IndexedGridFiller and IndexedSurfacesGenerator classes.

No sub volumes are added to this structure builders, hence, the DetectorVolumeFinder navigation delegate uses the “NoopFinder” breakpoint to indicate the bottom of the volume hierarchy.

Public Functions

LayerStructureBuilder(const Config &cfg, std::unique_ptr<const Logger> logger = getDefaultLogger("LayerStructureBuilder", Logging::INFO))


  • cfg – is the configuration struct

  • logger – logging instance for screen output

virtual InternalStructure construct(const GeometryContext &gctx) const final

The interface definition for internal structure creation.


gctx – the geometry context at the creation of the internal structure


a consistent set of detector volume internals

Private Functions

inline const Logger &logger() const

Private acces method to the logger.

Private Members

Config m_cfg

configuration object

std::unique_ptr<const Logger> m_logger

logging instance

struct Config
#include <Acts/Detector/LayerStructureBuilder.hpp>

Configuration struct for the LayerStructureBuilder.

It contain:

  • a source of the surfaces to be built

  • a definition of surface binning on this layer

  • a definition of supports to be built

Public Members

std::string auxilliary = ""

Extra information, mainly for screen output.

std::vector<ProtoBinning> binnings = {}

Definition of Binnings.

unsigned int nSegments = 1u

Polyhedron approximations.

std::vector<Support> supports = {}

Definition of Supports.

std::shared_ptr<ISurfacesProvider> surfacesProvider = nullptr

Connection point for a function to provide surfaces.

struct Support
#include <Acts/Detector/LayerStructureBuilder.hpp>

Support parameter defintions.

Public Members

std::vector<BinningValue> constraints = s_binningValues

Define in which values the support should be constrained.

unsigned int splits = 1u

Potential splits into planar approximations.

std::optional<Transform3> transform = std::nullopt

The (optional) layer transform.

Surface::SurfaceType type = Surface::SurfaceType::Other

The surface type to be built.

std::array<ActsScalar, 5u> values = {}

Define whether you want to build support structures.

class SurfacesHolder : public Acts::Experimental::ISurfacesProvider
#include <Acts/Detector/LayerStructureBuilder.hpp>

A holder struct for surfaces.

Public Functions

inline SurfacesHolder(std::vector<std::shared_ptr<Surface>> isurfaces)

Constructor with predefined surfaces.


isurfaces – is the vector of surfaces

inline std::vector<std::shared_ptr<Surface>> surfaces([[maybe_unused]] const GeometryContext &gctx) const final

Return the surfaces from the holder.


gctx – is the geometry context

Private Members

std::vector<std::shared_ptr<Surface>> m_surfaces = {}