File indexing completed on 2026-01-02 09:49:54
0001
0002
0003
0004 #pragma once
0005
0006 #include <Acts/EventData/VectorMultiTrajectory.hpp>
0007 #include <Acts/EventData/VectorTrackContainer.hpp>
0008 #include <Acts/Geometry/GeometryContext.hpp>
0009 #include <Acts/Geometry/TrackingGeometry.hpp>
0010 #include <Acts/MagneticField/MagneticFieldContext.hpp>
0011 #include <Acts/MagneticField/MagneticFieldProvider.hpp>
0012 #include <Acts/TrackFinding/CombinatorialKalmanFilter.hpp>
0013 #include <Acts/TrackFinding/MeasurementSelector.hpp>
0014 #include <Acts/Utilities/CalibrationContext.hpp>
0015 #include <Acts/Utilities/Logger.hpp>
0016 #include <Acts/Utilities/Result.hpp>
0017 #include <ActsExamples/EventData/Track.hpp>
0018 #include <ActsExamples/EventData/Trajectories.hpp>
0019 #include <edm4eic/Measurement2DCollection.h>
0020 #include <edm4eic/TrackParametersCollection.h>
0021 #include <spdlog/logger.h>
0022 #include <memory>
0023 #include <tuple>
0024 #include <variant>
0025 #include <vector>
0026
0027 #include "CKFTrackingConfig.h"
0028 #include "DD4hepBField.h"
0029 #include "algorithms/interfaces/WithPodConfig.h"
0030
0031 class ActsGeometryProvider;
0032
0033 namespace eicrecon {
0034
0035
0036
0037
0038
0039
0040 class CKFTracking : public WithPodConfig<eicrecon::CKFTrackingConfig> {
0041 public:
0042
0043
0044 #if Acts_VERSION_MAJOR >= 39
0045 using TrackFinderOptions = Acts::CombinatorialKalmanFilterOptions<ActsExamples::TrackContainer>;
0046 #else
0047 using TrackFinderOptions =
0048 Acts::CombinatorialKalmanFilterOptions<ActsExamples::IndexSourceLinkAccessor::Iterator,
0049 ActsExamples::TrackContainer>;
0050 #endif
0051 using TrackFinderResult = Acts::Result<std::vector<ActsExamples::TrackContainer::TrackProxy>>;
0052
0053
0054
0055
0056 class CKFTrackingFunction {
0057 public:
0058 virtual ~CKFTrackingFunction() = default;
0059
0060 virtual TrackFinderResult operator()(const ActsExamples::TrackParameters&,
0061 const TrackFinderOptions&,
0062 ActsExamples::TrackContainer&) const = 0;
0063 };
0064
0065
0066
0067
0068 static std::shared_ptr<CKFTrackingFunction>
0069 makeCKFTrackingFunction(std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0070 std::shared_ptr<const Acts::MagneticFieldProvider> magneticField,
0071 const Acts::Logger& logger);
0072
0073 CKFTracking();
0074
0075 void init(std::shared_ptr<const ActsGeometryProvider> geo_svc,
0076 std::shared_ptr<spdlog::logger> log);
0077
0078 std::tuple<std::vector<ActsExamples::Trajectories*>,
0079 std::vector<ActsExamples::ConstTrackContainer*>>
0080 process(const edm4eic::TrackParametersCollection& init_trk_params,
0081 const edm4eic::Measurement2DCollection& meas2Ds);
0082
0083 private:
0084 std::shared_ptr<spdlog::logger> m_log;
0085 std::shared_ptr<const Acts::Logger> m_acts_logger{nullptr};
0086 std::shared_ptr<CKFTrackingFunction> m_trackFinderFunc;
0087 std::shared_ptr<const ActsGeometryProvider> m_geoSvc;
0088
0089 std::shared_ptr<const eicrecon::BField::DD4hepBField> m_BField = nullptr;
0090 Acts::GeometryContext m_geoctx;
0091 Acts::CalibrationContext m_calibctx;
0092 Acts::MagneticFieldContext m_fieldctx;
0093
0094 Acts::MeasurementSelector::Config m_sourcelinkSelectorCfg;
0095
0096
0097 const Acts::Logger& logger() const { return *m_acts_logger; }
0098 };
0099
0100 }