Back to home page

EIC code displayed by LXR

 
 

    


Warning, /acts/docs/plugins/tgeo.rst is written in an unsupported language. File is not indexed.

0001 TGeo plugin
0002 ===========
0003 
0004 General
0005 -------
0006 
0007 The ``TGeo`` plugin connects a geometry described with the ``ROOT::Geom`` module with Acts. This is done by parsing the ROOT geometry and selecting ``TGeoNode`` objects that represent chosen geometrical objects.
0008 ACTS detector elements are represented by surfaces with dedicated shapes, hence a conversion of the volume based ``TGeoNode`` description into ``Acts::Surface`` objects needs to take place.
0009 
0010 An example use of the ``TGeo`` plugin can be found in the ``TGeoDetector`` example.
0011 
0012 Parsing the ROOT Geometry
0013 -------------------------
0014 
0015 Once a geometry is imported in ROOT, it can be accessed via the ``gGeoManager``. The ``Acts::TGeoLayerBuilder``, which implements an ``Acts::ILayerBuilder``, relies on the fact that this ``gGeoManager`` is accessible, if it points to ``nullptr``, obviously no conversion is done.
0016 The ``Acts::TGeoLayerBuilder`` can be configured to search within given parsing ranges for ``TGeoNode`` objects to be converted into ``Acts::Surface`` objects. A vector of search strings can be used for situations where multiple sensor types are used or additional objects are bound to be described.
0017 A dedicated ``Acts::TGeoParser`` struct is then used to select the nodes from the ROOT geometry.
0018 
0019 Conversion of TGeoShapes to Acts::Surfaces
0020 ------------------------------------------
0021 
0022 An automatic translation of ``TGeoShape`` objects into corresponding ``Acts::Surface`` objects with appropriate bound descriptions is done by the ``Acts::TGeoSurfaceConverter`` class.
0023 There is some limited freedom in re-defining the orientation of the coordinate system between ROOT and ACTS which can be used to adapt local coordinate definitions on the converted objects.
0024 This is indicated by the ``const std::string& axes`` argument of the converter.
0025 
0026 The nomenclature/convention is the following:
0027  * the resulting local cartesian coordinate system must by right-handed: this is guaranteed by the fact that the third local axis is constructed as a cross product of the first two local axis
0028  * defining the new local axes with respect to the ``TGeo`` definition is done by naming the new axes in order, e.g. an unchanged coordinate system has the tag ``XYZ``, or ``XY*``, as the third axis is defined by the first two ones
0029  * flipping the direction of a axis is done by lower capital, e.g. ``yZ*`` redefines the negative y-axis of the ``TGeoMatrix`` as the (obviously) positive x-axis of the ``Acts::Transform3`` and redefines the positive z-axis of the ``TGeoMatrix`` as corresponding y-axis of the ``Acts::Transform3``
0030 
0031 In case a translation request is malformed, a ``std::exception`` is thrown, indicating the problem.
0032 
0033 Examples of supported ``TGeoShape`` transformations to ``Acts::Surface`` objects can be found in the ``Tests/UnitTests/Plugins/TGeo`` unit test suite, a summary of the output can be seen below.
0034 
0035 Additionally, an option exists to split surfaces after the transformation
0036 has taken place by adding a splitter implementation to the ``Acts::TGeoLayerBuilder``, like the ``Acts::TGeoCylinderDiscSplitter``. This can be useful to describe e.g. a cylindrical detector with tangential planar surfaces.
0037 
0038 .. figure:: figures/tgeo/TGeoBBox_PlaneSurface.png
0039   :width: 800
0040 
0041   Conversion of a ``TGeoBBox`` shape into a ``Acts::PlaneSurface`` with ``Acts::RectangleBounds``. All axes iterations are allowed for this conversion.
0042 
0043 .. figure:: figures/tgeo/TGeoTrd1_PlaneSurface.png
0044   :width: 800
0045 
0046   Conversion of a ``TGeoTrd1`` shape into a ``Acts::PlaneSurface`` with ``Acts::TrapezoidBounds``. The axes definitions need to be ``(x/X)(z/Z)(*/*)``.
0047 
0048 .. figure:: figures/tgeo/TGeoTrd2_PlaneSurface_xz.png
0049   :width: 800
0050 
0051   Conversion of a ``TGeoTrd2`` shape into a ``Acts::PlaneSurface`` with ``Acts::TrapezoidBounds``. The axes definitions shown are ``(x/X)(z/Z)(*/*)``, the second coordinate has to be the z-axis.
0052 
0053 .. figure:: figures/tgeo/TGeoTrd2_PlaneSurface_yz.png
0054   :width: 800
0055 
0056   Conversion of a ``TGeoTrd2`` shape into a ``Acts::PlaneSurface`` with ``Acts::TrapezoidBounds``. The axes definitions shown are ``(y/Y)(z/Z)(*/*)``, the second coordinate has to be the z-axis.
0057 
0058 .. figure:: figures/tgeo/TGeoTube_CylinderSurface.png
0059   :width: 800
0060 
0061   Conversion of a ``TGeoTube`` shape into a ``Acts::CylinderSurface`` with ``Acts::CylinderBounds``. The axes definitions has to be ``(x/X)(y/Y)(*/*)``.
0062 
0063 .. figure:: figures/tgeo/TGeoTube_DiscSurface.png
0064   :width: 800
0065 
0066   Conversion of a ``TGeoTube`` shape into a ``Acts::DiscSurface`` with ``Acts::DiscBounds``.The axes definitions has to be ``(x/X)(y/Y)(*/*)``.