File indexing completed on 2025-01-18 09:10:55
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Definitions/Units.hpp"
0013 #include "Acts/Surfaces/BoundaryTolerance.hpp"
0014 #include "Acts/Utilities/Intersection.hpp"
0015
0016 #include <any>
0017 #include <cstddef>
0018 #include <vector>
0019
0020 namespace Acts {
0021
0022 class Surface;
0023
0024 namespace Experimental {
0025
0026 class Portal;
0027 class Detector;
0028 class DetectorVolume;
0029
0030
0031
0032
0033
0034 struct NavigationState {
0035
0036
0037
0038 struct SurfaceCandidate {
0039
0040 ObjectIntersection<Surface> objectIntersection;
0041
0042 const Surface* surface = nullptr;
0043
0044 const Portal* portal = nullptr;
0045
0046
0047 BoundaryTolerance boundaryTolerance = BoundaryTolerance::None();
0048 };
0049
0050
0051
0052 using SurfaceCandidates = std::vector<SurfaceCandidate>;
0053
0054
0055 Vector3 position = Vector3(0., 0., 0.);
0056
0057
0058 Vector3 direction = Vector3(0., 0., 0.);
0059
0060
0061 const Detector* currentDetector = nullptr;
0062
0063
0064 const DetectorVolume* currentVolume = nullptr;
0065
0066
0067 const Surface* currentSurface = nullptr;
0068
0069
0070 const Portal* currentPortal = nullptr;
0071
0072
0073 SurfaceCandidates surfaceCandidates = {};
0074 std::size_t surfaceCandidateIndex = 0;
0075
0076
0077 BoundaryTolerance surfaceBoundaryTolerance = BoundaryTolerance::None();
0078
0079
0080 double overstepTolerance = -100 * UnitConstants::um;
0081
0082
0083 std::any auxiliary;
0084
0085 const SurfaceCandidate& surfaceCandidate() const {
0086 return surfaceCandidates.at(surfaceCandidateIndex);
0087 }
0088 };
0089
0090 }
0091 }