Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-11 07:53:37

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