Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:27:41

0001 // This file is part of the Acts project.
0002 //
0003 // Copyright (C) 2021 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 http://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/Geometry/GeometryContext.hpp"
0012 #include "Acts/Navigation/NavigationState.hpp"
0013 #include "Acts/Utilities/Delegate.hpp"
0014 
0015 namespace Acts {
0016 
0017 class Surface;
0018 
0019 namespace Experimental {
0020 
0021 /// Base class for navigation delegates that handle internal
0022 /// volume navigation updates
0023 class IInternalNavigation {
0024  public:
0025   virtual ~IInternalNavigation() = default;
0026 };
0027 
0028 /// Declare an updator for the local navigation, i.e. the
0029 /// navigation inside a detector volume. This can be called
0030 /// either directly after a volume switch or in order to update
0031 /// within a volume after some progression
0032 ///
0033 /// This delegate dispatches the local navigation action
0034 /// to a dedicated struct or function that is optimised for
0035 /// the given environment.
0036 ///
0037 /// @param gctx is the current geometry context
0038 /// @param nState [in,out] is the navigation state to be updated
0039 ///
0040 /// @note it relies on the detector volume to be set to the state
0041 /// Memory  managed navigation state updator
0042 using InternalNavigationDelegate =
0043     OwningDelegate<void(const GeometryContext& gctx, NavigationState& nState),
0044                    IInternalNavigation>;
0045 
0046 /// Base class for external navigation delegates that handle external
0047 /// volume navigation updates
0048 class IExternalNavigation {
0049  public:
0050   virtual ~IExternalNavigation() = default;
0051 };
0052 
0053 /// Declare a Detctor Volume finding or switching delegate
0054 ///
0055 /// @param gctx is the current geometry context
0056 /// @param nState [in, out] is the navigation state to be updated
0057 ///
0058 /// @return the new DetectorVolume into which one changes at this switch
0059 using ExternalNavigationDelegate =
0060     OwningDelegate<void(const GeometryContext& gctx, NavigationState& nState),
0061                    IExternalNavigation>;
0062 
0063 }  // namespace Experimental
0064 }  // namespace Acts