File indexing completed on 2026-04-02 08:04:41
0001
0002
0003
0004 #pragma once
0005
0006 #include <Acts/EventData/VectorMultiTrajectory.hpp>
0007 #include <Acts/EventData/VectorTrackContainer.hpp>
0008 #include <Acts/Geometry/TrackingGeometry.hpp>
0009 #include <Acts/MagneticField/MagneticFieldProvider.hpp>
0010 #include <Acts/TrackFinding/CombinatorialKalmanFilter.hpp>
0011 #include <Acts/TrackFinding/MeasurementSelector.hpp>
0012 #include <Acts/Utilities/Logger.hpp>
0013 #include <Acts/Utilities/Result.hpp>
0014 #include <ActsExamples/EventData/Track.hpp>
0015 #include <algorithms/algorithm.h>
0016 #include <edm4eic/Measurement2DCollection.h>
0017 #include <edm4eic/TrackSeedCollection.h>
0018 #include <memory>
0019 #include <string>
0020 #include <string_view>
0021 #include <vector>
0022
0023 #include "CKFTrackingConfig.h"
0024 #include "algorithms/interfaces/ActsSvc.h"
0025 #include "algorithms/interfaces/WithPodConfig.h"
0026 #include "algorithms/tracking/ActsGeometryProvider.h"
0027
0028 namespace eicrecon {
0029
0030 using CKFTrackingAlgorithm = algorithms::Algorithm<
0031 algorithms::Input<edm4eic::TrackSeedCollection, edm4eic::Measurement2DCollection>,
0032 algorithms::Output<Acts::ConstVectorMultiTrajectory*, Acts::ConstVectorTrackContainer*>>;
0033
0034
0035
0036
0037
0038
0039 class CKFTracking : public CKFTrackingAlgorithm, public WithPodConfig<eicrecon::CKFTrackingConfig> {
0040 public:
0041
0042
0043 using TrackFinderOptions = Acts::CombinatorialKalmanFilterOptions<ActsExamples::TrackContainer>;
0044 using TrackFinderResult = Acts::Result<std::vector<ActsExamples::TrackContainer::TrackProxy>>;
0045
0046
0047
0048
0049 class CKFTrackingFunction {
0050 public:
0051 virtual ~CKFTrackingFunction() = default;
0052
0053 virtual TrackFinderResult operator()(const ActsExamples::TrackParameters&,
0054 const TrackFinderOptions&,
0055 ActsExamples::TrackContainer&) const = 0;
0056 };
0057
0058
0059
0060
0061 static std::shared_ptr<CKFTrackingFunction>
0062 makeCKFTrackingFunction(std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0063 std::shared_ptr<const Acts::MagneticFieldProvider> magneticField,
0064 const Acts::Logger& logger);
0065
0066 CKFTracking(std::string_view name)
0067 : CKFTrackingAlgorithm{name,
0068 {"inputTrackParameters", "inputMeasurements"},
0069 {"outputActsTrackStates", "outputActsTracks"},
0070 "Combinatorial Kalman Filter track finding"} {}
0071
0072 void init() final;
0073 void process(const Input&, const Output&) const final;
0074
0075 private:
0076 std::shared_ptr<const Acts::Logger> m_acts_logger{nullptr};
0077 std::shared_ptr<CKFTrackingFunction> m_trackFinderFunc;
0078 std::shared_ptr<const ActsGeometryProvider> m_geoSvc{
0079 algorithms::ActsSvc::instance().acts_geometry_provider()};
0080 std::shared_ptr<const Acts::MagneticFieldProvider> m_BField{m_geoSvc->getFieldProvider()};
0081
0082 Acts::MeasurementSelector::Config m_sourcelinkSelectorCfg;
0083
0084
0085 const Acts::Logger& acts_logger() const { return *m_acts_logger; }
0086 };
0087
0088 }