Warning, file /EICrecon/src/algorithms/tracking/CKFTrackingFunction.cc was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004 #include <Acts/Definitions/Direction.hpp>
0005 #include <Acts/EventData/GenericBoundTrackParameters.hpp>
0006 #include <Acts/EventData/MeasurementHelpers.hpp>
0007 #include <Acts/EventData/TrackStatePropMask.hpp>
0008 #if Acts_VERSION_MAJOR < 36
0009 #include <Acts/EventData/VectorMultiTrajectory.hpp>
0010 #include <Acts/EventData/VectorTrackContainer.hpp>
0011 #endif
0012 #include <Acts/Geometry/TrackingGeometry.hpp>
0013 #include <Acts/MagneticField/MagneticFieldProvider.hpp>
0014 #include <Acts/Propagator/EigenStepper.hpp>
0015 #include <Acts/Propagator/Navigator.hpp>
0016 #include <Acts/Propagator/Propagator.hpp>
0017 #include <Acts/TrackFinding/CombinatorialKalmanFilter.hpp>
0018 #include <Acts/Utilities/Logger.hpp>
0019 #include <Eigen/Core>
0020 #include <Eigen/Geometry>
0021 #include <Eigen/LU>
0022 #include <algorithm>
0023 #include <any>
0024 #include <cmath>
0025 #include <memory>
0026 #include <string>
0027 #include <utility>
0028
0029 #include "ActsExamples/EventData/Track.hpp"
0030 #include "CKFTracking.h"
0031
0032 namespace eicrecon {
0033
0034 using Stepper = Acts::EigenStepper<>;
0035 using Navigator = Acts::Navigator;
0036 using Propagator = Acts::Propagator<Stepper, Navigator>;
0037
0038 #if Acts_VERSION_MAJOR >= 36
0039 using CKF = Acts::CombinatorialKalmanFilter<Propagator, ActsExamples::TrackContainer>;
0040 #else
0041 using CKF = Acts::CombinatorialKalmanFilter<Propagator, Acts::VectorMultiTrajectory>;
0042
0043 using TrackContainer =
0044 Acts::TrackContainer<Acts::VectorTrackContainer, Acts::VectorMultiTrajectory, std::shared_ptr>;
0045 #endif
0046
0047
0048
0049
0050
0051 struct CKFTrackingFunctionImpl : public eicrecon::CKFTracking::CKFTrackingFunction {
0052 CKF trackFinder;
0053
0054 CKFTrackingFunctionImpl(CKF&& f) : trackFinder(std::move(f)) {}
0055
0056 eicrecon::CKFTracking::TrackFinderResult
0057 operator()(const ActsExamples::TrackParameters& initialParameters,
0058 const eicrecon::CKFTracking::TrackFinderOptions& options,
0059 #if Acts_VERSION_MAJOR >= 36
0060 ActsExamples::TrackContainer& tracks) const override {
0061 #else
0062 TrackContainer& tracks) const override {
0063 #endif
0064 return trackFinder.findTracks(initialParameters, options, tracks);
0065 };
0066 };
0067
0068 }
0069
0070 namespace eicrecon {
0071
0072 std::shared_ptr<CKFTracking::CKFTrackingFunction> CKFTracking::makeCKFTrackingFunction(
0073 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0074 std::shared_ptr<const Acts::MagneticFieldProvider> magneticField, const Acts::Logger& logger) {
0075 Stepper stepper(std::move(magneticField));
0076 Navigator::Config cfg{.trackingGeometry = trackingGeometry};
0077 cfg.resolvePassive = false;
0078 cfg.resolveMaterial = true;
0079 cfg.resolveSensitive = true;
0080 Navigator navigator(cfg);
0081
0082 Propagator propagator(std::move(stepper), std::move(navigator));
0083 CKF trackFinder(std::move(propagator), logger.cloneWithSuffix("CKF"));
0084
0085
0086 return std::make_shared<CKFTrackingFunctionImpl>(std::move(trackFinder));
0087 }
0088
0089 }