5 #ifndef ACTSGEOMETRY_ACTSEXTRAPOLATIONTOOL_H
6 #define ACTSGEOMETRY_ACTSEXTRAPOLATIONTOOL_H
11 #include "GaudiKernel/IInterface.h"
12 #include "GaudiKernel/ServiceHandle.h"
13 #include "Gaudi/Property.h"
14 #include "GaudiKernel/EventContext.h"
21 #include "Acts/Propagator/Propagator.hpp"
29 #include "Acts/MagneticField/ConstantBField.hpp"
30 #include "Acts/MagneticField/MagneticFieldContext.hpp"
31 #include "Acts/Propagator/detail/SteppingLogger.hpp"
32 #include "Acts/Propagator/StandardAborters.hpp"
33 #include "Acts/Propagator/SurfaceCollector.hpp"
34 #include "Acts/Utilities/Result.hpp"
35 #include "Acts/Definitions/Units.hpp"
36 #include "Acts/Utilities/Helpers.hpp"
37 #include "Acts/Utilities/Logger.hpp"
38 #include "Acts/Definitions/Tolerance.hpp"
60 const std::string&
name,
74 virtual PropagationOutput
76 const Acts::BoundTrackParameters& startParameters,
77 Acts::Direction navDir = Acts::Direction::Forward(),
81 std::optional<Acts::BoundTrackParameters>
83 const Acts::BoundTrackParameters& startParameters,
84 Acts::Direction navDir = Acts::Direction::Forward(),
87 virtual PropagationOutput
89 const Acts::BoundTrackParameters& startParameters,
90 const Acts::Surface&
target,
91 Acts::Direction navDir = Acts::Direction::Forward(),
95 std::optional<Acts::BoundTrackParameters>
97 const Acts::BoundTrackParameters& startParameters,
98 const Acts::Surface&
target,
99 Acts::Direction navDir = Acts::Direction::Forward(),
104 Acts::MagneticFieldContext
110 std::unique_ptr<const ActsExtrapolationDetail::VariantPropagator>
m_varProp;
111 std::unique_ptr<const Acts::Logger>
m_logger{
nullptr};
115 PublicToolHandle<ActsTrk::ITrackingGeometryTool>
m_trackingGeometryTool{
this,
"TrackingGeometryTool",
"ActsTrackingGeometryTool"};
117 Gaudi::Property<std::string>
m_fieldMode{
this,
"FieldMode",
"ATLAS",
"Either ATLAS or Constant or StraightLine"};
118 Gaudi::Property<std::vector<double>>
m_constantFieldVector{
this,
"ConstantFieldVector", {0, 0, 0},
"Constant field value to use if FieldMode == Constant"};
120 Gaudi::Property<double>
m_ptLoopers{
this,
"PtLoopers", 300,
"PT loop protection threshold. Will be converted to Acts MeV unit"};
121 Gaudi::Property<double>
m_maxStepSize{
this,
"MaxStepSize", 10,
"Max step size in Acts m unit"};
122 Gaudi::Property<unsigned>
m_maxStep{
this,
"MaxSteps", 100000,
"Max number of steps"};
123 Gaudi::Property<unsigned>
m_maxSurfSkip{
this,
"MaxSurfaceSkip" ,100,
"Maximum number of surfaces to be tried by the navigator"};
124 Gaudi::Property<double>
m_surfTolerance{
this,
"OnSurfaceTolerance", Acts::s_onSurfaceTolerance,
125 "Tolerance to consider track parameters on surface"};
126 Gaudi::Property<unsigned>
m_pathLimit{
this,
"PathLimit", 50,
"Maximum path length to be considered during propagation in Acts m unit"};
128 Gaudi::Property<bool>
m_interactionMultiScatering{
this,
"InteractionMultiScatering",
false,
"Whether to consider multiple scattering in the interactor"};
129 Gaudi::Property<bool>
m_interactionEloss{
this,
"InteractionEloss",
false,
"Whether to consider energy loss in the interactor"};
130 Gaudi::Property<bool>
m_interactionRecord{
this,
"InteractionRecord",
false,
"Whether to record all material interactions"};
132 template<
typename OptionsType>
135 const Acts::MagneticFieldContext& mctx,
136 const Acts::BoundTrackParameters& startParameters,
137 Acts::Direction navDir,
138 double pathLimit)
const;