File indexing completed on 2026-04-24 08:04:13
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Definitions/TrackParametrization.hpp"
0013 #include "Acts/Geometry/GeometryContext.hpp"
0014
0015 #include <optional>
0016
0017 namespace Acts {
0018
0019 class Surface;
0020
0021 namespace Concepts {
0022 template <typename Parameters>
0023 concept BasicTrackParameters = requires {
0024 typename Parameters::ParametersVector;
0025 typename Parameters::CovarianceMatrix;
0026
0027 requires requires(const Parameters &p) {
0028 { p.time() } -> std::floating_point;
0029 { p.direction() } -> std::same_as<Vector3>;
0030 { p.absoluteMomentum() } -> std::floating_point;
0031 { p.charge() } -> std::floating_point;
0032 };
0033 };
0034 }
0035
0036
0037
0038 template <typename Parameters>
0039 concept FreeTrackParametersConcept =
0040 Concepts::BasicTrackParameters<Parameters> &&
0041 requires(const Parameters &p) {
0042 { p.parameters() } -> std::convertible_to<FreeVector>;
0043 { p.covariance() } -> std::convertible_to<std::optional<FreeMatrix>>;
0044 { p.fourPosition() } -> std::same_as<Vector4>;
0045 { p.position() } -> std::same_as<Vector3>;
0046 };
0047
0048
0049
0050 template <typename Parameters>
0051 concept BoundTrackParametersConcept =
0052 Concepts::BasicTrackParameters<Parameters> &&
0053 requires(const Parameters &p) {
0054 { p.parameters() } -> std::convertible_to<BoundVector>;
0055 { p.covariance() } -> std::convertible_to<std::optional<BoundMatrix>>;
0056 { p.referenceSurface() } -> std::same_as<const Surface &>;
0057
0058 requires requires(GeometryContext &c) {
0059 { p.position(c) } -> std::same_as<Vector3>;
0060 { p.fourPosition(c) } -> std::same_as<Vector4>;
0061 { p.position(c) } -> std::same_as<Vector3>;
0062 };
0063 };
0064
0065 }