File indexing completed on 2024-09-28 07:02:21
0001
0002
0003
0004 #include "Acts/MagneticField/MagneticFieldProvider.hpp"
0005 #include "Acts/Geometry/GeometryIdentifier.hpp"
0006 #include "Acts/Geometry/TrackingGeometry.hpp"
0007 #include "Acts/Propagator/EigenStepper.hpp"
0008 #include "Acts/Propagator/Navigator.hpp"
0009 #include "Acts/Propagator/Propagator.hpp"
0010 #include "Acts/Surfaces/Surface.hpp"
0011 #include "Acts/TrackFitting/GainMatrixSmoother.hpp"
0012 #include "Acts/TrackFitting/GainMatrixUpdater.hpp"
0013 #include "Acts/Utilities/Helpers.hpp"
0014 #include "Acts/Definitions/Common.hpp"
0015 #include "Acts/Geometry/TrackingGeometry.hpp"
0016 #include "TrackFittingAlgorithm.h"
0017
0018 namespace {
0019
0020 using Updater = Acts::GainMatrixUpdater;
0021 using Smoother = Acts::GainMatrixSmoother;
0022 using Stepper = Acts::EigenStepper<>;
0023 using Propagator = Acts::Propagator<Stepper, Acts::Navigator>;
0024 using Fitter = Acts::KalmanFitter<Propagator, Acts::VectorMultiTrajectory>;
0025 using DirectPropagator = Acts::Propagator<Stepper, Acts::DirectNavigator>;
0026 using DirectFitter = Acts::KalmanFitter<DirectPropagator, Acts::VectorMultiTrajectory>;
0027
0028
0029
0030
0031
0032 template <typename track_fitter_t>
0033 struct TrackFitterFunctionImpl {
0034 track_fitter_t trackFitter;
0035
0036 TrackFitterFunctionImpl(track_fitter_t&& f) : trackFitter(std::move(f)) {}
0037
0038 Jug::Reco::TrackFittingAlgorithm::FitterResult
0039 operator()(const std::vector<Jug::IndexSourceLink>& sourceLinks,
0040 const Jug::TrackParameters& initialParameters,
0041 const Jug::Reco::TrackFittingAlgorithm::TrackFitterOptions& options) const
0042 {
0043 return trackFitter.fit(sourceLinks.begin(), sourceLinks.end(), initialParameters, options);
0044 }
0045
0046 };
0047
0048 }
0049
0050 namespace Jug::Reco {
0051
0052 using Updater = Acts::GainMatrixUpdater;
0053 using Smoother = Acts::GainMatrixSmoother;
0054 using Stepper = Acts::EigenStepper<>;
0055 using Propagator = Acts::Propagator<Stepper, Acts::Navigator>;
0056 using Fitter = Acts::KalmanFitter<Propagator, Acts::VectorMultiTrajectory>;
0057 using DirectPropagator = Acts::Propagator<Stepper, Acts::DirectNavigator>;
0058 using DirectFitter = Acts::KalmanFitter<DirectPropagator, Acts::VectorMultiTrajectory>;
0059
0060 TrackFittingAlgorithm::FitterFunction TrackFittingAlgorithm::makeTrackFittingFunction(
0061 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0062 std::shared_ptr<const Acts::MagneticFieldProvider> magneticField)
0063
0064 {
0065 Stepper stepper(std::move(magneticField));
0066 Acts::Navigator::Config cfg{trackingGeometry};
0067 cfg.resolvePassive = false;
0068 cfg.resolveMaterial = true;
0069 cfg.resolveSensitive = true;
0070 Acts::Navigator navigator(cfg);
0071 Propagator propagator(std::move(stepper), std::move(navigator));
0072 Fitter trackFitter(std::move(propagator));
0073
0074
0075 return TrackFitterFunctionImpl(std::move(trackFitter));
0076 }
0077
0078 }