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)(*/*)``.