Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-14 08:17:54

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Definitions/Tolerance.hpp"
0013 #include "Acts/Utilities/Delegate.hpp"
0014 
0015 #include <functional>
0016 
0017 namespace Acts {
0018 
0019 class GeometryContext;
0020 class Surface;
0021 class TrackingVolume;
0022 
0023 /// Plain navigator options carrying geometry context and surfaces.
0024 struct NavigatorPlainOptions {
0025   /// NavigatorPlainOptions with context
0026   /// @param gctx The geometry context
0027   explicit NavigatorPlainOptions(const GeometryContext& gctx)
0028       : geoContext(gctx) {}
0029 
0030   /// Context object for the geometry
0031   std::reference_wrapper<const GeometryContext> geoContext;
0032 
0033   /// Start surface for navigation
0034   const Surface* startSurface{};
0035   /// Target surface for navigation
0036   const Surface* targetSurface{};
0037 
0038   /// The surface tolerance
0039   double surfaceTolerance = s_onSurfaceTolerance;
0040 
0041   /// The near limit to resolve surfaces
0042   double nearLimit = s_onSurfaceTolerance;
0043 
0044   /// The far limit to resolve surfaces
0045   double farLimit = std::numeric_limits<double>::max();
0046 
0047   /// Delegate to decide whether free surfaces are appended to the navigation
0048   /// stream given the current volume and the track coordinates. If the
0049   /// delegate is set, it is called in each candidate resolution step
0050   /// for each surface that has not been marked as reached yet.
0051   /// @param gctx Current geometry context carrying the alignment information
0052   /// @param currentVol The current tracking volume in which the propagator resides
0053   /// @param pos Position of the track in global coordinates
0054   /// @param dir Direction vector of the track
0055   /// @param surface Free surface candidate to test
0056   using FreeSurfaceSelctor = Delegate<bool(
0057       const GeometryContext& gctx, const TrackingVolume& currentVol,
0058       const Vector3& pos, const Vector3& dir, const Surface& candidate)>;
0059 
0060   /// Delegate for selecting free surfaces during navigation
0061   FreeSurfaceSelctor freeSurfaceSelector;
0062 
0063   /// Surfaces that are not part of the tracking geometry
0064   std::vector<const Surface*> externalSurfaces;
0065 
0066   /// Append an external surface to be considered during navigation. The surface
0067   /// will be intersected without bounds check to force the propagation to
0068   /// resolve it. Note the surface must outlive the propagation and surfaces
0069   /// have to be added in the order they should be considered during navigation.
0070   /// @param surface The surface to add to the list
0071   void appendExternalSurface(const Surface& surface) {
0072     externalSurfaces.push_back(&surface);
0073   }
0074 };
0075 
0076 }  // namespace Acts