Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-05 08:03:20

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/EventData/TrackStatePropMask.hpp>
0006 #include <Acts/Geometry/TrackingGeometry.hpp>
0007 #include <Acts/MagneticField/MagneticFieldProvider.hpp>
0008 #include <Acts/Propagator/EigenStepper.hpp>
0009 #include <Acts/Propagator/Navigator.hpp>
0010 #include <Acts/Propagator/Propagator.hpp>
0011 #include <Acts/TrackFinding/CombinatorialKalmanFilter.hpp>
0012 #include <Acts/Utilities/Logger.hpp>
0013 #include <Eigen/Core>
0014 #include <Eigen/Geometry>
0015 #include <algorithm>
0016 #include <any>
0017 #include <cmath>
0018 #include <memory>
0019 #include <string>
0020 #include <tuple>
0021 #include <utility>
0022 
0023 #include "ActsExamples/EventData/Track.hpp"
0024 #include "CKFTracking.h"
0025 
0026 namespace eicrecon {
0027 
0028 using Stepper    = Acts::EigenStepper<>;
0029 using Navigator  = Acts::Navigator;
0030 using Propagator = Acts::Propagator<Stepper, Navigator>;
0031 
0032 using CKF = Acts::CombinatorialKalmanFilter<Propagator, ActsExamples::TrackContainer>;
0033 
0034 /** Finder implementation .
0035    *
0036    * \ingroup track
0037    */
0038 struct CKFTrackingFunctionImpl : public eicrecon::CKFTracking::CKFTrackingFunction {
0039   CKF trackFinder;
0040 
0041   CKFTrackingFunctionImpl(CKF&& f) : trackFinder(std::move(f)) {}
0042 
0043   eicrecon::CKFTracking::TrackFinderResult
0044   operator()(const ActsExamples::TrackParameters& initialParameters,
0045              const eicrecon::CKFTracking::TrackFinderOptions& options,
0046              ActsExamples::TrackContainer& tracks) const override {
0047     return trackFinder.findTracks(initialParameters, options, tracks);
0048   };
0049 };
0050 
0051 } // namespace eicrecon
0052 
0053 namespace eicrecon {
0054 
0055 std::shared_ptr<CKFTracking::CKFTrackingFunction> CKFTracking::makeCKFTrackingFunction(
0056     std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0057     std::shared_ptr<const Acts::MagneticFieldProvider> magneticField, const Acts::Logger& logger) {
0058   Stepper stepper(std::move(magneticField));
0059   Navigator::Config cfg{.trackingGeometry = trackingGeometry};
0060   cfg.resolvePassive   = false;
0061   cfg.resolveMaterial  = true;
0062   cfg.resolveSensitive = true;
0063   Navigator navigator(cfg);
0064 
0065   Propagator propagator(std::move(stepper), std::move(navigator));
0066   CKF trackFinder(std::move(propagator), logger.cloneWithSuffix("CKF"));
0067 
0068   // build the track finder functions. owns the track finder object.
0069   return std::make_shared<CKFTrackingFunctionImpl>(std::move(trackFinder));
0070 }
0071 
0072 } // namespace eicrecon