diff --git a/CMakeLists.txt b/CMakeLists.txt index db0ed3980922d8882b3f93fec80b6b35ceebb8e8..166041948f561b6ef28099782ac49d626a3351b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,10 +30,9 @@ option(ACTS_BUILD_EXAMPLES "Build examples" OFF) option(ACTS_BUILD_UNITTESTS "Build unit tests" OFF) option(ACTS_BUILD_INTEGRATIONTESTS "Build integration tests" OFF) option(ACTS_BUILD_DOC "Build documentation" OFF) - # all other compile-time parameters must be defined here for clear visibility # and to avoid forgotten options somewhere deep in the hierarchy -set(ACTS_PARAMETER_DEFINITIONS_PLUGIN "Acts/Utilities/detail/DefaultParameterDefinitions.hpp" CACHE FILEPATH "Default track parameter definition") +set(ACTS_PARAMETER_DEFINITIONS_HEADER "" CACHE FILEPATH "Use a different (track) parameter definitions header") # handle inter-plugin dependencies # DD4hepPlugin depends on TGeoPlugin diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt index d022d9373388ebb947b9eaeb24bd31220ba20e42..63acfd031d3ae40b4b650671f6a93509268407ee 100644 --- a/Core/CMakeLists.txt +++ b/Core/CMakeLists.txt @@ -8,9 +8,6 @@ add_library( target_compile_features( ActsCore PUBLIC cxx_std_17) -target_compile_definitions( - ActsCore - PUBLIC -DACTS_PARAMETER_DEFINITIONS_PLUGIN="${ACTS_PARAMETER_DEFINITIONS_PLUGIN}") target_include_directories( ActsCore SYSTEM PUBLIC ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} @@ -23,6 +20,12 @@ target_link_libraries( ActsCore PUBLIC Boost::boost) +if(ACTS_PARAMETER_DEFINITIONS_HEADER) + target_compile_definitions( + ActsCore + PUBLIC -DACTS_PARAMETER_DEFINITIONS_HEADER="${ACTS_PARAMETER_DEFINITIONS_HEADER}") +endif() + install( TARGETS ActsCore EXPORT ActsCoreTargets diff --git a/Core/include/Acts/Utilities/ParameterDefinitions.hpp b/Core/include/Acts/Utilities/ParameterDefinitions.hpp index 3a0ac2f2bffabde32aac8e70cd5787b4b18a7e41..66feee557c5d8e8b1030f44337f92a87e69a0a00 100644 --- a/Core/include/Acts/Utilities/ParameterDefinitions.hpp +++ b/Core/include/Acts/Utilities/ParameterDefinitions.hpp @@ -1,6 +1,6 @@ // This file is part of the Acts project. // -// Copyright (C) 2016-2018 CERN for the benefit of the Acts project +// Copyright (C) 2016-2020 CERN for the benefit of the Acts project // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -8,12 +8,128 @@ #pragma once +#include <cmath> #include <type_traits> #include "Acts/Utilities/Definitions.hpp" +#include "Acts/Utilities/ParameterTypes.hpp" -#ifdef ACTS_PARAMETER_DEFINITIONS_PLUGIN -#include ACTS_PARAMETER_DEFINITIONS_PLUGIN +// The user can override the (track) parameter ordering and underlying scalar +// type. If the variable is defined, it must point to a header file that +// contains the same enum and type definitions for bound and free track +// parameters as well as space points as given below. +#ifdef ACTS_PARAMETER_DEFINITIONS_HEADER +#include ACTS_PARAMETER_DEFINITIONS_HEADER +#else +namespace Acts { + +/// Components of a bound track parameters vector. +/// +/// To be used to access components by named indices instead of just numbers. +/// This must be a regular `enum` and not a scoped `enum class` to allow +/// implicit conversion to an integer. The enum value are thus visible directly +/// in `namespace Acts` and are prefixed to avoid naming collisions. +enum BoundParametersIndices : unsigned int { + // Local position on the reference surface. + // This is intentionally named different from the position components in + // the other data vectors, to clarify that this is defined on a surface + // while the others are defined in free space. + eBoundLoc0 = 0, + eBoundLoc1 = 1, + // Direction angles + eBoundPhi = 2, + eBoundTheta = 3, + // Global inverse-momentum-like parameter, i.e. q/p or 1/p + // The naming is inconsistent for the case of neutral track parameters where + // the value is interpreted as 1/p not as q/p. This is intentional to avoid + // having multiple aliases for the same element and for lack of an acceptable + // common name. + eBoundQOverP = 4, + eBoundTime = 5, + // Last uninitialized value contains the total number of components + eBoundParametersSize, + // The following aliases without prefix exist for historical reasons + // Generic spatial coordinates on the local surface + eLOC_0 = eBoundLoc0, + eLOC_1 = eBoundLoc1, + // Spatial coordinates on a disk in polar coordinates + eLOC_R = eLOC_0, + eLOC_PHI = eLOC_1, + // Spatial coordinates on a disk in Cartesian coordinates + eLOC_X = eLOC_0, + eLOC_Y = eLOC_1, + // Spatial coordinates on a cylinder + eLOC_RPHI = eLOC_0, + eLOC_Z = eLOC_1, + // Closest approach coordinates on a virtual perigee surface + eLOC_D0 = eLOC_0, + eLOC_Z0 = eLOC_1, + // Direction angles + ePHI = eBoundPhi, + eTHETA = eBoundTheta, + eQOP = eBoundQOverP, + eT = eBoundTime, +}; + +/// Components of a free track parameters vector. +/// +/// To be used to access components by named indices instead of just numbers. +/// This must be a regular `enum` and not a scoped `enum class` to allow +/// implicit conversion to an integer. The enum value are thus visible directly +/// in `namespace Acts` and are prefixed to avoid naming collisions. +enum FreeParametersIndices : unsigned int { + // Spatial position + // The spatial position components must be stored as one continous block. + eFreePos0 = 0u, + eFreePos1 = eFreePos0 + 1u, + eFreePos2 = eFreePos0 + 2u, + // Time + eFreeTime = 3u, + // (Unit) direction + // The direction components must be stored as one continous block. + eFreeDir0 = 4u, + eFreeDir1 = eFreeDir0 + 1u, + eFreeDir2 = eFreeDir0 + 2u, + // Global inverse-momentum-like parameter, i.e. q/p or 1/p + // See BoundParametersIndices for further information + eFreeQOverP = 7u, + // Last uninitialized value contains the total number of components + eFreeParametersSize, +}; + +/// Components of a space point vector. +/// +/// To be used to access components by named indices instead of just numbers. +/// This must be a regular `enum` and not a scoped `enum class` to allow +/// implicit conversion to an integer. The enum value are thus visible directly +/// in `namespace Acts` and are prefixed to avoid naming collisions. +/// +/// Within the same context either the position-like or the momentum-like +/// indices must be used exclusively. +enum SpacePointIndices : unsigned int { + // For position four-vectors + // The spatial position components must be stored as one continous block. + eSpacePos0 = 0u, + eSpacePos1 = eSpacePos0 + 1u, + eSpacePos2 = eSpacePos0 + 2u, + eSpaceTime = 3u, + // Last uninitialized value contains the total number of components + eSpacePointSize, + // Aliases for momentum four-vectors to allow clearer code + eSpaceMom0 = eSpacePos0, + eSpaceMom1 = eSpacePos1, + eSpaceMom2 = eSpacePos2, + eSpaceEnergy = eSpaceTime, +}; + +/// Underlying fundamental scalar type for bound track parameters. +using BoundParametersScalar = double; +/// Underlying fundamental scalar type for free track parameters. +using FreeParametersScalar = double; +/// Underlying fundamental scalar type for space points. +using SpacePointScalar = double; + +} // namespace Acts #endif namespace Acts { diff --git a/Core/include/Acts/Utilities/detail/DefaultParameterDefinitions.hpp b/Core/include/Acts/Utilities/detail/DefaultParameterDefinitions.hpp deleted file mode 100644 index 6882d1e6c73a4b726b6d8c227ea0342285a13512..0000000000000000000000000000000000000000 --- a/Core/include/Acts/Utilities/detail/DefaultParameterDefinitions.hpp +++ /dev/null @@ -1,125 +0,0 @@ -// This file is part of the Acts project. -// -// Copyright (C) 2016-2019 CERN for the benefit of the Acts project -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#pragma once - -#include <cmath> - -#include "Acts/Utilities/ParameterTypes.hpp" - -namespace Acts { - -/// Components of a bound track parameters vector. -/// -/// To be used to access components by named indices instead of just numbers. -/// This must be a regular `enum` and not a scoped `enum class` to allow -/// implicit conversion to an integer. The enum value are thus visible directly -/// in `namespace Acts` and are prefixed to avoid naming collisions. -enum BoundParametersIndices : unsigned int { - // Local position on the reference surface. - // This is intentionally named different from the position components in - // the other data vectors, to clarify that this is defined on a surface - // while the others are defined in free space. - eBoundLoc0 = 0, - eBoundLoc1 = 1, - // Direction angles - eBoundPhi = 2, - eBoundTheta = 3, - // Global inverse-momentum-like parameter, i.e. q/p or 1/p - // The naming is inconsistent for the case of neutral track parameters where - // the value is interpreted as 1/p not as q/p. This is intentional to avoid - // having multiple aliases for the same element and for lack of an acceptable - // common name. - eBoundQOverP = 4, - eBoundTime = 5, - // Last uninitialized value contains the total number of components - eBoundParametersSize, - // The following aliases without prefix exist for historical reasons - // Generic spatial coordinates on the local surface - eLOC_0 = eBoundLoc0, - eLOC_1 = eBoundLoc1, - // Spatial coordinates on a disk in polar coordinates - eLOC_R = eLOC_0, - eLOC_PHI = eLOC_1, - // Spatial coordinates on a disk in Cartesian coordinates - eLOC_X = eLOC_0, - eLOC_Y = eLOC_1, - // Spatial coordinates on a cylinder - eLOC_RPHI = eLOC_0, - eLOC_Z = eLOC_1, - // Closest approach coordinates on a virtual perigee surface - eLOC_D0 = eLOC_0, - eLOC_Z0 = eLOC_1, - // Direction angles - ePHI = eBoundPhi, - eTHETA = eBoundTheta, - eQOP = eBoundQOverP, - eT = eBoundTime, -}; - -/// Underlying fundamental scalar type for bound track parameters. -using BoundParametersScalar = double; - -/// Components of a free track parameters vector. -/// -/// To be used to access components by named indices instead of just numbers. -/// This must be a regular `enum` and not a scoped `enum class` to allow -/// implicit conversion to an integer. The enum value are thus visible directly -/// in `namespace Acts` and are prefixed to avoid naming collisions. -enum FreeParametersIndices : unsigned int { - // Spatial position - // The spatial position components must be stored as one continous block. - eFreePos0 = 0u, - eFreePos1 = eFreePos0 + 1u, - eFreePos2 = eFreePos0 + 2u, - // Time - eFreeTime = 3u, - // (Unit) direction - // The direction components must be stored as one continous block. - eFreeDir0 = 4u, - eFreeDir1 = eFreeDir0 + 1u, - eFreeDir2 = eFreeDir0 + 2u, - // Global inverse-momentum-like parameter, i.e. q/p or 1/p - // See BoundParametersIndices for further information - eFreeQOverP = 7u, - // Last uninitialized value contains the total number of components - eFreeParametersSize, -}; - -/// Underlying fundamental scalar type for free track parameters. -using FreeParametersScalar = double; - -/// Components of a space point vector. -/// -/// To be used to access components by named indices instead of just numbers. -/// This must be a regular `enum` and not a scoped `enum class` to allow -/// implicit conversion to an integer. The enum value are thus visible directly -/// in `namespace Acts` and are prefixed to avoid naming collisions. -/// -/// Within the same context either the position-like or the momentum-like -/// indices must be used exclusively. -enum SpacePointIndices : unsigned int { - // For position four-vectors - // The spatial position components must be stored as one continous block. - eSpacePos0 = 0u, - eSpacePos1 = eSpacePos0 + 1u, - eSpacePos2 = eSpacePos0 + 2u, - eSpaceTime = 3u, - // Last uninitialized value contains the total number of components - eSpacePointSize, - // Aliases for momentum four-vectors to allow clearer code - eSpaceMom0 = eSpacePos0, - eSpaceMom1 = eSpacePos1, - eSpaceMom2 = eSpacePos2, - eSpaceEnergy = eSpaceTime, -}; - -/// Underlying fundamental scalar type for space points. -using SpacePointScalar = double; - -} // namespace Acts