Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:10:58

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 
0040   /// Create the propagator state from the options
0041   ///
0042   /// @tparam propagator_options_t the type of the propagator options
0043   ///
0044   /// @param topts The options handed over by the propagate call
0045   /// @param steppingIn Stepper state instance to begin with
0046   /// @param navigationIn Navigator state instance to begin with
0047   PropagatorState(const propagator_options_t& topts, stepper_state_t steppingIn,
0048                   navigator_state_t navigationIn)
0049       : geoContext(topts.geoContext),
0050         options(topts),
0051         stepping{std::move(steppingIn)},
0052         navigation{std::move(navigationIn)} {}
0053 
0054   using detail::Extendable<extension_state_t...>::get;
0055   using detail::Extendable<extension_state_t...>::tuple;
0056 
0057   /// Context object for the geometry
0058   std::reference_wrapper<const GeometryContext> geoContext;
0059 
0060   /// These are the options - provided for each propagation step
0061   propagator_options_t options;
0062 
0063   /// Propagation stage
0064   PropagatorStage stage = PropagatorStage::invalid;
0065 
0066   /// The position of the propagation
0067   Vector3 position = Vector3::Zero();
0068 
0069   /// The direction of the propagation
0070   Vector3 direction = Vector3::Zero();
0071 
0072   /// Stepper state - internal state of the Stepper
0073   stepper_state_t stepping;
0074 
0075   /// Navigation state - internal state of the Navigator
0076   navigator_state_t navigation;
0077 
0078   /// Number of propagation steps that were carried out
0079   std::size_t steps = 0;
0080 
0081   /// Signed distance over which the parameters were propagated
0082   double pathLength = 0.;
0083 
0084   /// Statistics of the propagation
0085   PropagatorStatistics statistics;
0086 };
0087 
0088 }  // namespace Acts