** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=lxr_eic at /usr/local/share/lxr/lxr-2.3.7/lib/LXR/Common.pm line 1161, <GEN9> line 1.
Last-Modified: Mon, 19 Jan 2025 08:18:04 GMT
Content-Type: text/html; charset=utf-8
/master/include/Acts/Propagator/StepperConcept.hpp
Warning, file /include/Acts/Propagator/StepperConcept.hpp was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp "
0012 #include "Acts/EventData/TrackParameters.hpp "
0013 #include "Acts/EventData/detail/CorrectedTransformationFreeToBound.hpp "
0014 #include "Acts/Propagator/ConstrainedStep.hpp "
0015 #include "Acts/Surfaces/BoundaryCheck.hpp "
0016 #include "Acts/Surfaces/Surface.hpp "
0017 #include "Acts/Utilities/Intersection.hpp "
0018 #include "Acts/Utilities/Logger.hpp "
0019 #include "Acts/Utilities/TypeTraits.hpp "
0020
0021 namespace Acts {
0022 class Surface ;
0023
0024 namespace Concepts ::Stepper {
0025
0026 template <typename T >
0027 using state_t = typename T ::State ;
0028
0029 template <typename T >
0030 using jacobian_t = typename T ::Jacobian ;
0031 template <typename T >
0032 using covariance_t = typename T ::Covariance ;
0033 template <typename T >
0034 using bound_state_t = typename T ::BoundState ;
0035 template <typename T >
0036 using curvilinear_state_t = typename T ::CurvilinearState ;
0037
0038 METHOD_TRAIT (reset_state_t, resetState );
0039 METHOD_TRAIT (get_field_t, getField );
0040 METHOD_TRAIT (position_t , position );
0041 METHOD_TRAIT (direction_t, direction );
0042 METHOD_TRAIT (qop_t, qOverP );
0043 METHOD_TRAIT (absolute_momentum_t, absoluteMomentum );
0044 METHOD_TRAIT (momentum_t , momentum );
0045 METHOD_TRAIT (charge_t, charge );
0046 METHOD_TRAIT (time_t, time );
0047 METHOD_TRAIT (bound_state_method_t, boundState );
0048 METHOD_TRAIT (curvilinear_state_method_t, curvilinearState );
0049 METHOD_TRAIT (update_t, update );
0050 METHOD_TRAIT (covariance_transport_bound_t, transportCovarianceToBound );
0051 METHOD_TRAIT (covariance_transport_curvilinear_t,
0052 transportCovarianceToCurvilinear );
0053 METHOD_TRAIT (step_t, step );
0054 METHOD_TRAIT (update_surface_status_t, updateSurfaceStatus );
0055 METHOD_TRAIT (update_step_size_t, updateStepSize );
0056 METHOD_TRAIT (get_step_size_t, getStepSize );
0057 METHOD_TRAIT (release_step_size_t, releaseStepSize );
0058 METHOD_TRAIT (output_step_size_t, outputStepSize );
0059
0060 template <typename T >
0061 using cov_transport_t = decltype(std ::declval <T >().covTransport );
0062 template <typename T >
0063 using cov_t = decltype(std ::declval <T >().cov );
0064 template <typename T >
0065 using path_accumulated_t = decltype(std ::declval <T >().pathAccumulated );
0066 template <typename T >
0067 using step_size_t = decltype(std ::declval <T >().stepSize );
0068
0069
0070 template <typename S >
0071 constexpr bool StepperStateConcept
0072 = require <has_member <S , cov_transport_t , bool >,
0073 has_member <S , cov_t , BoundSquareMatrix >,
0074 has_member <S , path_accumulated_t , double >
0075
0076 >;
0077
0078
0079
0080 template <typename S >
0081 constexpr bool MultiStepperStateConcept = require <
0082 has_member <S , cov_transport_t , bool >,
0083 has_member <S , path_accumulated_t , double >
0084 >;
0085
0086
0087
0088 template <typename S , typename state = typename S ::State >
0089 struct CommonStepperConcept {
0090 constexpr static bool state_exists = exists <state_t , S >;
0091 static_assert (state_exists , "State type not found" );
0092 constexpr static bool jacobian_exists = exists <jacobian_t , S >;
0093 static_assert (jacobian_exists , "Jacobian type not found" );
0094 constexpr static bool covariance_exists = exists <covariance_t , S >;
0095 static_assert (covariance_exists , "Covariance type not found" );
0096 constexpr static bool bound_state_exists = exists <bound_state_t , S >;
0097 static_assert (bound_state_exists , "BoundState type not found" );
0098 constexpr static bool curvilinear_state_exists = exists <curvilinear_state_t , S >;
0099 static_assert (curvilinear_state_exists , "CurvilinearState type not found" );
0100 constexpr static bool reset_state_exists = has_method <const S , void , reset_state_t, state &, const BoundVector &, const BoundSquareMatrix &, const Surface &, const double >;
0101 static_assert (reset_state_exists , "resetState method not found" );
0102 constexpr static bool position_exists = has_method <const S , Vector3 , position_t , const state &>;
0103 static_assert (position_exists , "position method not found" );
0104 constexpr static bool direction_exists = has_method <const S , Vector3 , direction_t, const state &>;
0105 static_assert (direction_exists , "direction method not found" );
0106 constexpr static bool qop_exists = has_method <const S , double , qop_t, const state &>;
0107 static_assert (qop_exists , "qOverP method not found" );
0108 constexpr static bool absolute_momentum_exists = has_method <const S , double , absolute_momentum_t, const state &>;
0109 static_assert (absolute_momentum_exists , "absoluteMomentum method not found" );
0110 constexpr static bool momentum_exists = has_method <const S , Vector3 , momentum_t , const state &>;
0111 static_assert (momentum_exists , "momentum method not found" );
0112 constexpr static bool charge_exists = has_method <const S , double , charge_t, const state &>;
0113 static_assert (charge_exists , "charge method not found" );
0114 constexpr static bool time_exists = has_method <const S , double , time_t, const state &>;
0115 static_assert (time_exists , "time method not found" );
0116 constexpr static bool bound_state_method_exists = has_method <const S , Result <typename S ::BoundState >, bound_state_method_t, state &, const Surface &, bool , const FreeToBoundCorrection &>;
0117 static_assert (bound_state_method_exists , "boundState method not found" );
0118 constexpr static bool curvilinear_state_method_exists = has_method <const S , typename S ::CurvilinearState , curvilinear_state_method_t, state &, bool >;
0119 static_assert (curvilinear_state_method_exists , "curvilinearState method not found" );
0120 constexpr static bool covariance_transport_exists = require <has_method <const S , void , covariance_transport_curvilinear_t, state &>,
0121 has_method <const S , void , covariance_transport_bound_t, state &, const Surface &, const FreeToBoundCorrection &>>;
0122 static_assert (covariance_transport_exists , "covarianceTransport method not found" );
0123 constexpr static bool update_surface_exists = has_method <const S , Intersection3D ::Status , update_surface_status_t, state &, const Surface &, std ::uint8_t , Direction , const BoundaryCheck &, ActsScalar , const Logger &>;
0124 static_assert (update_surface_exists , "updateSurfaceStatus method not found" );
0125 constexpr static bool update_step_size_exists = has_method <const S , void , update_step_size_t, state &, double , ConstrainedStep ::Type , bool >;
0126 static_assert (update_step_size_exists , "updateStepSize method not found" );
0127 constexpr static bool get_step_size_exists = has_method <const S , double , get_step_size_t, const state &, ConstrainedStep ::Type >;
0128 static_assert (get_step_size_exists , "getStepSize method not found" );
0129 constexpr static bool release_step_size_exists = has_method <const S , void , release_step_size_t, state &, ConstrainedStep ::Type >;
0130 static_assert (release_step_size_exists , "releaseStepSize method not found" );
0131 constexpr static bool output_step_size_exists = has_method <const S , std ::string , output_step_size_t, const state &>;
0132 static_assert (output_step_size_exists , "outputStepSize method not found" );
0133
0134 constexpr static bool value = require <state_exists ,
0135 jacobian_exists ,
0136 covariance_exists ,
0137 bound_state_exists ,
0138 curvilinear_state_exists ,
0139 position_exists ,
0140 direction_exists ,
0141 qop_exists ,
0142 absolute_momentum_exists ,
0143 momentum_exists ,
0144 charge_exists ,
0145 time_exists ,
0146 bound_state_method_exists ,
0147 curvilinear_state_method_exists ,
0148 covariance_transport_exists ,
0149 update_surface_exists ,
0150 update_step_size_exists ,
0151 release_step_size_exists ,
0152 output_step_size_exists >;
0153
0154 };
0155
0156
0157
0158
0159 template <typename S , typename state = typename S ::State >
0160 struct SingleStepperConcept {
0161 constexpr static bool common_stepper_concept_fullfilled = CommonStepperConcept <S , state >::value ;
0162 static_assert (common_stepper_concept_fullfilled , "Stepper does not fulfill common stepper concept" );
0163 constexpr static bool update_method_exists = require <has_method <const S , void , update_t, state &, const FreeVector &, const BoundVector &, const BoundSquareMatrix &, const Surface &>, has_method <const S , void , update_t, state &, const Vector3 &, const Vector3 &, double , double >>;
0164
0165 constexpr static bool get_field_exists = has_method <const S , Result <Vector3 >, get_field_t, state &, const Vector3 &>;
0166
0167
0168 constexpr static bool value = require <common_stepper_concept_fullfilled ,
0169 update_method_exists ,
0170 get_field_exists >;
0171 };
0172
0173
0174
0175 template <typename S , typename state = typename S ::State >
0176 struct MultiStepperConcept {
0177 constexpr static bool common_stepper_concept_fullfilled = CommonStepperConcept <S , state >::value ;
0178 static_assert (common_stepper_concept_fullfilled , "Common stepper concept not fulfilled" );
0179
0180
0181 template <typename T > using component_proxy_t = typename T ::ComponentProxy ;
0182 constexpr static bool component_proxy_exists = exists <component_proxy_t , S >;
0183
0184
0185
0186 template <typename T > using const_component_proxy_t = typename T ::ConstComponentProxy ;
0187 constexpr static bool const_component_proxy_exists = exists <const_component_proxy_t , S >;
0188
0189
0190 METHOD_TRAIT (number_components_t, numberComponents );
0191 constexpr static bool number_components_exists = has_method <const S , std ::size_t , number_components_t, const state &>;
0192
0193
0194
0195
0196 METHOD_TRAIT (clear_components_t, clearComponents );
0197 constexpr static bool clear_components_exists = has_method <const S , void , clear_components_t, state &>;
0198
0199
0200 METHOD_TRAIT (remove_missed_components_t, removeMissedComponents );
0201 constexpr static bool remove_missed_components_exists = has_method <const S , void , remove_missed_components_t, state &>;
0202
0203
0204 constexpr static bool value = require <common_stepper_concept_fullfilled ,
0205 component_proxy_exists ,
0206 const_component_proxy_exists ,
0207 number_components_exists ,
0208 clear_components_exists ,
0209 remove_missed_components_exists >;
0210 };
0211
0212
0213 }
0214
0215 template <typename stepper , typename state = typename stepper ::State >
0216 constexpr bool StepperConcept =
0217 Acts ::Concepts ::Stepper ::SingleStepperConcept <stepper , state >::value ||
0218 Acts ::Concepts ::Stepper ::MultiStepperConcept <stepper , state >::value ;
0219 template <typename stepper >
0220 constexpr bool StepperStateConcept =
0221 Acts ::Concepts ::Stepper ::StepperStateConcept <stepper > ||
0222 Acts ::Concepts ::Stepper ::MultiStepperStateConcept <stepper >;
0223 }