Class Acts::Experimental::LayerStructureBuilder

class LayerStructureBuilder : public Acts::Experimental::IInternalStructureBuilder

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

struct Config

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

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

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