Warning, /acts/docs/core/geometry/layerless/layerless.md is written in an unsupported language. File is not indexed.
0001 (layerless_geometry)=
0002
0003 # Layerless geometry
0004
0005 ## Geometry module rosetta stone
0006
0007 :::{note}
0008 The combination of the original (Gen 1) geometry classes and the new *layerless* modelling (Gen 2, this page) will result in a combined Gen 3 geometry model.
0009 :::
0010
0011 :::{toctree}
0012 building
0013 :::
0014
0015 :::{note}
0016 This module is not considered production-ready yet, and is under the namespace
0017 `Acts::Experimental`.
0018 :::
0019
0020 ## Overview
0021
0022 ### Geometry objects
0023
0024 The entire geometry setup is based on the following geometry objects
0025
0026 - {class}`Acts::Surface` describing any bound surface object
0027 - {class}`Acts::Experimental::Portal` which holds a surface and adds information about attached volumes
0028 - {class}`Acts::Experimental::DetectorVolume` which is bound by portals and can contain surfaces and other volumes
0029 - {class}`Acts::Experimental::Detector` which is the top level object holding all detector relevant objects
0030
0031 ### Memory management, access and const correctness
0032
0033 All geometric objects can only be constructed as `std::shared_ptr<T>` via dedicated `Object::makeShared(...)` factories.
0034 Internally, all constituents are stored as non-const objects and can be accessed as such as long as the geometry is not locked, and the holder object is also a non-const object.
0035
0036 While objects may be stored as `std::shared_ptr<T>` internally, their access during navigation is given either to const references (if guaranteed to be existent) or const raw pointers (if optional or part of a polymorphic container).
0037
0038 ### Navigation state and delegates
0039
0040 A struct {struct}`Acts::Experimental::NavigationState` holds the current navigation information through the geometry, which comprises
0041
0042 - the current {class}`Acts::Experimental::DetectorVolume` in associated with the position within the detector, called `currentVolume`
0043 - a list of portal candidates to leave the `currentVolume`
0044 - a list of surface candidates to be tested within the `currentVolume`
0045 - a current position, direction, momentum, charge and magnetic field
0046
0047 Several navigation delegates built upon the {class}`Acts::Delegate` template class are defined and can be adapted and specialized for dedicated detector layouts.
0048 These delegates are called:
0049
0050 - `Acts::Experimental::IInternalNavigation` that is called for updating the information at initialization, within the volume or at a volume switch caused by traversing a portal
0051 - `Acts::Experimental::IExternalNavigation` which allows to find a volume by global position (and is usually only needed at initialization of the navigation) and which is attached to a {class}`Acts::Experimental::Portal` to switch volumes when traversing a portal
0052
0053 ## Detailed Description
0054
0055 ### The Portal object
0056
0057 Portals are composite objects of a {class}`Acts::Surface` object and additional volume link information which connect a portal to the at least one, but in general multiple volumes it connects. The position and the normal vector of an intersection with a portal are used to determine the next volume and hence the navigation flow through the detector.
0058
0059 When volumes are attached or glued to another, the portal object is usually shared between the volumes, and eventually portals can even be of larger extent than the actual volume they are bounding.
0060
0061 :::{figure} ../figures/DirectPortal.png
0062 :width: 600px
0063 :align: center
0064 Illustration of a shared direct portal between two volumes, the arrows indicate the direction of attachment.
0065 :::
0066
0067 :::{figure} ../figures/SharedPortal.png
0068 :width: 600px
0069 :align: center
0070 Illustration of a shared extended portal between several volumes, the arrows indicate the direction of attachment.
0071 :::
0072
0073 The implementation of a unique, binned or any other volume link can be adapted to the detector geometry by providing a suitable `Acts::Experimental::ExternalNavigationDelegate` delegate.
0074
0075 ### The Detector volume object
0076
0077 A detector volume has to contain:
0078
0079 - a list of bounding portal objects (that can be shared with other volumes)
0080 - a navigation state updator as a `Acts::Experimental::InternalNavigationDelegate` delegate, that at minimum is able to provide the portal surfaces for leaving the volume again.
0081 - a unique name string
0082
0083 :::{note}
0084 When constructing a detector volume one has to use a dedicated {class}`Acts::Experimental::DetectorVolumeFactory` that is provided with a portal generator which allows to generate the portals and set the (yet) existing links appropriately.
0085 :::
0086
0087 Additionally, it can contain:
0088
0089 - an optional collection of contained surfaces which can describe sensitive surfaces or passive surfaces (e.g. for material integration)
0090 - an optional collection of contained volumes which describe sub volumes, as e.g. chambers or cells
0091 - a volume material description
0092
0093 In case the volume contains surfaces and/or volumes, an adequate navigation state updator is to be provided that can resolve surface candidates or portal candidates into the sub volumes. E.g.~if the volume contain a layer with sensitive surfaces, a grid can be used to associate an entry/global position with the candidate surfaces further tested in the navigation.
0094
0095 :::{figure} ../figures/EndcapGrid.png
0096 :width: 600px
0097 :align: center
0098 Illustration of a planar module endcap detector with a grid holding the indices to the candidate surfaces.
0099 :::
0100
0101 :::{note}
0102 When building in `Debug` mode the containment of objects inside a `Acts::DetectorVolume` is checked with an `assert(...)` statement.
0103 :::
0104
0105 ### The Detector object
0106
0107 The detector object is the holder class of all geometry objects, it has to contain:
0108
0109 - at least one detector volume
0110 - a name string
0111 - a volume finder delegate (as `Acts::Experimental::DetectorVolumeFinder`) that allows to uniquely associate a point in space with a contained volume of the detector.
0112
0113 :::{note}
0114 When the detector is constructed, name duplicates are checked for and if found a `std::exception` is thrown. Similarly, when sensitive surfaces are provided and duplicate `Acts::GeometryIdentifier` objects are found during detector construction a `std::exception` is thrown. The latter can be avoided by using an appropriate (set of) `Acts::GeometryIdGenerator` tool(s) which will guarantee some level of uniqueness.
0115 :::
0116
0117 :::{figure} ../figures/ODD_Detector.png
0118 :width: 600px
0119 :align: center
0120 Illustration (r/z view) of the OpenDataDetector with its sub volumes, portals and contained surfaces.
0121 :::