Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-23 08:20:13

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #include "Acts/Propagator/MultiStepperLoop.hpp"
0010 #include "Acts/Propagator/Navigator.hpp"
0011 #include "Acts/Propagator/Propagator.hpp"
0012 #include "Acts/Propagator/SympyStepper.hpp"
0013 #include "Acts/TrackFinding/CombinatorialKalmanFilter.hpp"
0014 #include "Acts/Utilities/Logger.hpp"
0015 #include "ActsExamples/EventData/Track.hpp"
0016 #include "ActsExamples/TrackFinding/TrackFindingAlgorithm.hpp"
0017 
0018 #include <memory>
0019 #include <utility>
0020 
0021 namespace ActsExamples {
0022 
0023 namespace {
0024 
0025 using Stepper = Acts::SympyStepper;
0026 using Navigator = Acts::Navigator;
0027 using Propagator = Acts::Propagator<Stepper, Navigator>;
0028 using CKF = Acts::CombinatorialKalmanFilter<Propagator, TrackContainer>;
0029 
0030 using BremStepper = Acts::MultiStepperLoop<Stepper>;
0031 using BremPropagator = Acts::Propagator<BremStepper, Navigator>;
0032 using BremCKF = Acts::CombinatorialKalmanFilter<BremPropagator, TrackContainer>;
0033 
0034 template <typename CKFType>
0035 struct TrackFinderFunctionImpl
0036     : public TrackFindingAlgorithm::TrackFinderFunction {
0037   CKFType trackFinder;
0038 
0039   explicit TrackFinderFunctionImpl(CKFType&& f) : trackFinder(std::move(f)) {}
0040 
0041   TrackFindingAlgorithm::TrackFinderResult operator()(
0042       const TrackParameters& initialParameters,
0043       const TrackFindingAlgorithm::TrackFinderOptions& options,
0044       TrackContainer& tracks, TrackProxy rootBranch) const override {
0045     return trackFinder.findTracks(initialParameters, options, tracks,
0046                                   rootBranch);
0047   }
0048 };
0049 
0050 }  // namespace
0051 
0052 std::shared_ptr<TrackFindingAlgorithm::TrackFinderFunction>
0053 TrackFindingAlgorithm::makeTrackFinderFunction(
0054     std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0055     std::shared_ptr<const Acts::MagneticFieldProvider> magneticField,
0056     const Acts::Logger& logger) {
0057   Stepper stepper(std::move(magneticField));
0058   Navigator::Config cfg{std::move(trackingGeometry)};
0059   cfg.resolvePassive = false;
0060   cfg.resolveMaterial = true;
0061   cfg.resolveSensitive = true;
0062   Navigator navigator(cfg, logger.cloneWithSuffix("Navigator"));
0063   Propagator propagator(std::move(stepper), std::move(navigator),
0064                         logger.cloneWithSuffix("Propagator"));
0065   CKF trackFinder(std::move(propagator), logger.cloneWithSuffix("Finder"));
0066 
0067   // build the track finder functions. owns the track finder object.
0068   return std::make_shared<TrackFinderFunctionImpl<CKF>>(std::move(trackFinder));
0069 }
0070 
0071 std::shared_ptr<TrackFindingAlgorithm::TrackFinderFunction>
0072 TrackFindingAlgorithm::makeBremTrackFinderFunction(
0073     std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0074     std::shared_ptr<const Acts::MagneticFieldProvider> magneticField,
0075     const Acts::Logger& logger) {
0076   BremStepper stepper(std::move(magneticField));
0077   Navigator::Config cfg{std::move(trackingGeometry)};
0078   cfg.resolvePassive = false;
0079   cfg.resolveMaterial = true;
0080   cfg.resolveSensitive = true;
0081   Navigator navigator(cfg, logger.cloneWithSuffix("Navigator"));
0082   BremPropagator propagator(std::move(stepper), std::move(navigator),
0083                             logger.cloneWithSuffix("BremPropagator"));
0084   BremCKF trackFinder(std::move(propagator),
0085                       logger.cloneWithSuffix("BremFinder"));
0086 
0087   // build the track finder functions. owns the track finder object.
0088   return std::make_shared<TrackFinderFunctionImpl<BremCKF>>(
0089       std::move(trackFinder));
0090 }
0091 
0092 }  // namespace ActsExamples