Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-09-27 07:03:01

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2022 Whitney Armstrong, Wouter Deconinck, Sylvester Joosten
0003 
0004 #include <Acts/Definitions/Direction.hpp>
0005 #include <Acts/Definitions/TrackParametrization.hpp>
0006 #include <Acts/EventData/ParticleHypothesis.hpp>
0007 #include <Acts/EventData/TrackContainer.hpp>
0008 #include <Acts/EventData/TrackStatePropMask.hpp>
0009 #include <Acts/EventData/VectorMultiTrajectory.hpp>
0010 #include <Acts/EventData/VectorTrackContainer.hpp>
0011 #include <Acts/Geometry/Layer.hpp>
0012 #include <Acts/Geometry/TrackingGeometry.hpp>
0013 #include <Acts/Geometry/TrackingVolume.hpp>
0014 #include <Acts/MagneticField/MagneticFieldProvider.hpp>
0015 #include <Acts/Propagator/EigenStepper.hpp>
0016 #include <Acts/Propagator/Navigator.hpp>
0017 #include <Acts/Propagator/Propagator.hpp>
0018 #include <Acts/TrackFinding/CombinatorialKalmanFilter.hpp>
0019 #include <Acts/TrackFitting/GainMatrixSmoother.hpp>
0020 #include <Acts/TrackFitting/GainMatrixUpdater.hpp>
0021 #include <Acts/Utilities/Logger.hpp>
0022 #include <ActsExamples/EventData/IndexSourceLink.hpp>
0023 #include <boost/container/vector.hpp>
0024 #include <Eigen/Core>
0025 #include <Eigen/Geometry>
0026 #include <memory>
0027 #include <utility>
0028 
0029 #include "ActsExamples/EventData/Track.hpp"
0030 #include "CKFTracking.h"
0031 
0032 namespace eicrecon{
0033 
0034   using Updater  = Acts::GainMatrixUpdater;
0035   using Smoother = Acts::GainMatrixSmoother;
0036 
0037   using Stepper    = Acts::EigenStepper<>;
0038   using Navigator  = Acts::Navigator;
0039   using Propagator = Acts::Propagator<Stepper, Navigator>;
0040 
0041   using CKF =
0042       Acts::CombinatorialKalmanFilter<Propagator, Acts::VectorMultiTrajectory>;
0043 
0044   using TrackContainer =
0045       Acts::TrackContainer<Acts::VectorTrackContainer,
0046                            Acts::VectorMultiTrajectory, std::shared_ptr>;
0047 
0048   /** Finder implementation .
0049    *
0050    * \ingroup track
0051    */
0052   struct CKFTrackingFunctionImpl
0053       : public eicrecon::CKFTracking::CKFTrackingFunction {
0054     CKF trackFinder;
0055 
0056     CKFTrackingFunctionImpl(CKF&& f) : trackFinder(std::move(f)) {}
0057 
0058     eicrecon::CKFTracking::TrackFinderResult operator()(
0059         const ActsExamples::TrackParameters& initialParameters,
0060         const eicrecon::CKFTracking::TrackFinderOptions& options,
0061         TrackContainer& tracks) const override {
0062       return trackFinder.findTracks(initialParameters, options, tracks);
0063     };
0064   };
0065 
0066 } // namespace
0067 
0068 namespace eicrecon {
0069 
0070   std::shared_ptr<CKFTracking::CKFTrackingFunction>
0071   CKFTracking::makeCKFTrackingFunction(
0072       std::shared_ptr<const Acts::TrackingGeometry>      trackingGeometry,
0073       std::shared_ptr<const Acts::MagneticFieldProvider> magneticField,
0074       const Acts::Logger& logger)
0075   {
0076     Stepper   stepper(std::move(magneticField));
0077     Navigator::Config cfg{trackingGeometry};
0078     cfg.resolvePassive   = false;
0079     cfg.resolveMaterial  = true;
0080     cfg.resolveSensitive = true;
0081     Navigator navigator(cfg);
0082 
0083     Propagator propagator(std::move(stepper), std::move(navigator));
0084     CKF        trackFinder(std::move(propagator), logger.cloneWithSuffix("CKF"));
0085 
0086     // build the track finder functions. owns the track finder object.
0087     return std::make_shared<CKFTrackingFunctionImpl>(std::move(trackFinder));
0088   }
0089 
0090 } // namespace eicrecon::Reco