File indexing completed on 2026-05-27 07:23:30
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Geometry/TrackingVolume.hpp"
0012 #include "Acts/Surfaces/Surface.hpp"
0013
0014 #include <concepts>
0015
0016 namespace Acts {
0017
0018 class IVolumeMaterial;
0019
0020
0021 template <typename Navigator, typename Options = typename Navigator::Options,
0022 typename State = typename Navigator::State>
0023 concept NavigatorConcept = requires {
0024 typename Navigator::Config;
0025 typename Navigator::Options;
0026 typename Navigator::State;
0027
0028 requires requires(const Navigator& n, const Options& o, State& s,
0029 const Surface& sf, const Vector3& position,
0030 const Vector3& direction, Direction propagationDirection) {
0031 { n.makeState(o) } -> std::same_as<State>;
0032 { n.currentSurface(s) } -> std::same_as<const Surface*>;
0033 { n.currentVolume(s) } -> std::same_as<const TrackingVolume*>;
0034 { n.currentVolumeMaterial(s) } -> std::same_as<const IVolumeMaterial*>;
0035 { n.startSurface(s) } -> std::same_as<const Surface*>;
0036 { n.targetSurface(s) } -> std::same_as<const Surface*>;
0037 { n.endOfWorldReached(s) } -> std::same_as<bool>;
0038 { n.navigationBreak(s) } -> std::same_as<bool>;
0039 {
0040 n.initialize(s, position, direction, propagationDirection)
0041 } -> std::same_as<Result<void>>;
0042 { n.nextTarget(s, position, direction) } -> std::same_as<NavigationTarget>;
0043 { n.checkTargetValid(s, position, direction) } -> std::same_as<bool>;
0044 {
0045 n.handleSurfaceReached(s, position, direction, sf)
0046 } -> std::same_as<void>;
0047 };
0048 };
0049
0050 }