Back to home page

EIC code displayed by LXR

 
 

    


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 :::