File indexing completed on 2025-07-15 09:16:17
0001
0002
0003
0004 #include "Acts/EventData/TrackContainer.hpp"
0005 #include "Acts/EventData/VectorMultiTrajectory.hpp"
0006 #include "Acts/EventData/VectorTrackContainer.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/TrackFitting/GainMatrixSmoother.hpp"
0012 #include "Acts/TrackFitting/GainMatrixUpdater.hpp"
0013
0014 #if 0
0015 #include "Acts/Propagator/EigenStepper.hpp"
0016 #include "Acts/Propagator/Navigator.hpp"
0017 #include "Acts/Propagator/Propagator.hpp"
0018 #include "Acts/TrackFitting/GainMatrixSmoother.hpp"
0019 #include "Acts/TrackFitting/GainMatrixUpdater.hpp"
0020 #endif
0021
0022 #include "CKFTracking.h"
0023
0024 #include "JugTrack/DD4hepBField.h"
0025
0026
0027 #include <random>
0028 #include <stdexcept>
0029
0030 namespace {
0031 using Updater = Acts::GainMatrixUpdater;
0032 using Smoother = Acts::GainMatrixSmoother;
0033
0034 using Stepper = Acts::EigenStepper<>;
0035 using Navigator = Acts::Navigator;
0036 using Propagator = Acts::Propagator<Stepper, Navigator>;
0037 #if Acts_VERSION_MAJOR >= 36
0038 using CKF =
0039 Acts::CombinatorialKalmanFilter<Propagator, ActsExamples::TrackContainer>;
0040 #else
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 #endif
0048
0049
0050
0051
0052
0053 struct CKFTrackingFunctionImpl
0054 : public Jug::Reco::CKFTracking::CKFTrackingFunction {
0055 CKF trackFinder;
0056
0057 CKFTrackingFunctionImpl(CKF&& f) : trackFinder(std::move(f)) {}
0058
0059 Jug::Reco::CKFTracking::TrackFinderResult
0060 operator()(const ActsExamples::TrackParameters& initialParameters,
0061 const Jug::Reco::CKFTracking::TrackFinderOptions& options,
0062 #if Acts_VERSION_MAJOR >= 36
0063 ActsExamples::TrackContainer& tracks) const override {
0064 #else
0065 TrackContainer& tracks) const override {
0066 #endif
0067 return trackFinder.findTracks(initialParameters, options, tracks);
0068 };
0069 };
0070
0071 }
0072
0073 namespace Jug::Reco {
0074
0075 std::shared_ptr<CKFTracking::CKFTrackingFunction>
0076 CKFTracking::makeCKFTrackingFunction(
0077 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0078 std::shared_ptr<const Acts::MagneticFieldProvider> magneticField)
0079 {
0080 Stepper stepper(std::move(magneticField));
0081 Navigator::Config cfg{trackingGeometry};
0082 cfg.resolvePassive = false;
0083 cfg.resolveMaterial = true;
0084 cfg.resolveSensitive = true;
0085 Navigator navigator(cfg);
0086
0087 Propagator propagator(std::move(stepper), std::move(navigator));
0088 CKF trackFinder(std::move(propagator));
0089
0090
0091 return std::make_shared<CKFTrackingFunctionImpl>(std::move(trackFinder));
0092 }
0093
0094 }