Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-11 07:49:53

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/Geometry/GeometryContext.hpp"
0013 #include "Acts/Propagator/PropagatorStatistics.hpp"
0014 #include "Acts/Utilities/detail/Extendable.hpp"
0015 
0016 #include <functional>
0017 
0018 namespace Acts {
0019 
0020 /// @brief Different stages during propagation
0021 enum class PropagatorStage {
0022   invalid,          ///< Invalid stage
0023   prePropagation,   ///< Before the propagation
0024   postPropagation,  ///< After the propagation
0025   preStep,          ///< Before a step
0026   postStep,         ///< After a step
0027 };
0028 
0029 /// @brief private Propagator state for navigation and debugging
0030 ///
0031 /// @tparam propagator_options_t Type of the Objections object
0032 ///
0033 /// This struct holds the common state information for propagating
0034 /// which is independent of the actual stepper implementation.
0035 template <typename propagator_options_t, typename stepper_state_t,
0036           typename navigator_state_t, typename... extension_state_t>
0037 struct PropagatorState : private detail::Extendable<extension_state_t...> {
0038   using options_type = propagator_options_t;
0039   using stepper_state_type = stepper_state_t;
0040   using navigator_state_type = navigator_state_t;
0041 
0042   /// Create the propagator state from the options
0043   ///
0044   /// @tparam propagator_options_t the type of the propagator options
0045   ///
0046   /// @param topts The options handed over by the propagate call
0047   /// @param steppingIn Stepper state instance to begin with
0048   /// @param navigationIn Navigator state instance to begin with
0049   PropagatorState(const propagator_options_t& topts, stepper_state_t steppingIn,
0050                   navigator_state_t navigationIn)
0051       : geoContext(topts.geoContext),
0052         options(topts),
0053         stepping{std::move(steppingIn)},
0054         navigation{std::move(navigationIn)} {}
0055 
0056   using detail::Extendable<extension_state_t...>::get;
0057   using detail::Extendable<extension_state_t...>::tuple;
0058 
0059   /// Context object for the geometry
0060   std::reference_wrapper<const GeometryContext> geoContext;
0061 
0062   /// These are the options - provided for each propagation step
0063   propagator_options_t options;
0064 
0065   /// Propagation stage
0066   PropagatorStage stage = PropagatorStage::invalid;
0067 
0068   /// The position of the propagation
0069   Vector3 position = Vector3::Zero();
0070 
0071   /// The direction of the propagation
0072   Vector3 direction = Vector3::Zero();
0073 
0074   /// Stepper state - internal state of the Stepper
0075   stepper_state_t stepping;
0076 
0077   /// Navigation state - internal state of the Navigator
0078   navigator_state_t navigation;
0079 
0080   /// Number of propagation steps that were carried out
0081   std::size_t steps = 0;
0082 
0083   /// Signed distance over which the parameters were propagated
0084   double pathLength = 0.;
0085 
0086   /// Statistics of the propagation
0087   PropagatorStatistics statistics;
0088 };
0089 
0090 }  // namespace Acts