Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-15 09:16:17

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2022 Whitney Armstrong, Wouter Deconinck, Sylvester Joosten
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   /** Finder implmentation .
0050    *
0051    * \ingroup track
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 } // namespace
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     // build the track finder functions. onws the track finder object.
0091     return std::make_shared<CKFTrackingFunctionImpl>(std::move(trackFinder));
0092   }
0093 
0094 } // namespace Jug::Reco