Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-09-28 07:02:21

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2022 Whitney Armstrong, Wouter Deconinck
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   /** Fitter implmentation .
0029    *
0030    * \ingroup tracking
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 }  // namespace
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     // build the fitter functions. owns the fitter object.
0075     return TrackFitterFunctionImpl(std::move(trackFitter));
0076   }
0077 
0078 } // namespace Jug::Reco