Juggler
Juggling algorithms and event processing using gaudi framework
TrackFindingAlgorithm.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-or-later
2 // Copyright (C) 2022 Whitney Armstrong, Wouter Deconinck
3 
4 #ifndef JUGGLER_JUGRECO_TrackFindingAlgorithm_HH
5 #define JUGGLER_JUGRECO_TrackFindingAlgorithm_HH
6 
7 #include <functional>
8 #include <random>
9 #include <stdexcept>
10 #include <vector>
11 
12 #include "Gaudi/Property.h"
13 #include "GaudiAlg/GaudiAlgorithm.h"
14 #include "GaudiKernel/ToolHandle.h"
15 
16 #include "JugBase/DataHandle.h"
17 #include "JugBase/IGeoSvc.h"
20 #include "JugTrack/Index.hpp"
22 #include "JugTrack/Measurement.hpp"
23 #include "JugTrack/Track.hpp"
25 
26 #include "eicd/TrackerHitCollection.h"
27 
28 #include "Acts/Definitions/Common.hpp"
29 #include "Acts/Geometry/TrackingGeometry.hpp"
30 #include "Acts/TrackFinding/CombinatorialKalmanFilter.hpp"
31 #include "Acts/TrackFinding/MeasurementSelector.hpp"
32 
33 namespace Jug::Reco {
34 
35 /** Fitting algorithm implmentation .
36  *
37  * \ingroup tracking
38  */
39 class TrackFindingAlgorithm : public GaudiAlgorithm {
40 public:
41  /// Track finder function that takes input measurements, initial trackstate
42  /// and track finder options and returns some track-finder-specific result.
43  using TrackFinderOptions = Acts::CombinatorialKalmanFilterOptions<IndexSourceLinkAccessor::Iterator>;
44  using TrackFinderResult = std::vector<Acts::Result<Acts::CombinatorialKalmanFilterResult>>;
45 
46  /// Find function that takes the above parameters
47  /// @note This is separated into a virtual interface to keep compilation units
48  /// small
50  public:
51  virtual ~TrackFinderFunction() = default;
53  const TrackFinderOptions&) const = 0;
54  };
55 
56  /// Create the track finder function implementation.
57  /// The magnetic field is intentionally given by-value since the variant
58  /// contains shared_ptr anyways.
59  static std::shared_ptr<TrackFinderFunction> makeTrackFinderFunction(
60  std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
61  std::shared_ptr<const Acts::MagneticFieldProvider> magneticField);
62 
63 public:
64  DataHandle<IndexSourceLinkContainer> m_inputSourceLinks{"inputSourceLinks", Gaudi::DataHandle::Reader, this};
65  DataHandle<MeasurementContainer> m_inputMeasurements{"inputMeasurements", Gaudi::DataHandle::Reader, this};
67  Gaudi::DataHandle::Reader, this};
68  DataHandle<TrajectoriesContainer> m_outputTrajectories{"outputTrajectories", Gaudi::DataHandle::Writer, this};
69 
70  Gaudi::Property<std::vector<double>> m_etaBins{this, "etaBins", {}};
71  Gaudi::Property<std::vector<double>> m_chi2CutOff{this, "chi2CutOff", {15.}};
72  Gaudi::Property<std::vector<size_t>> m_numMeasurementsCutOff{this, "numMeasurementsCutOff", {10}};
73 
74  std::shared_ptr<TrackFinderFunction> m_trackFinderFunc;
75  SmartIF<IGeoSvc> m_geoSvc;
76 
77  std::shared_ptr<const Jug::BField::DD4hepBField> m_BField = nullptr;
78  Acts::GeometryContext m_geoctx;
79  Acts::CalibrationContext m_calibctx;
80  Acts::MagneticFieldContext m_fieldctx;
81 
82  Acts::MeasurementSelector::Config m_sourcelinkSelectorCfg;
83  Acts::Logging::Level m_actsLoggingLevel = Acts::Logging::INFO;
84 
85  TrackFindingAlgorithm(const std::string& name, ISvcLocator* svcLoc);
86 
87  StatusCode initialize() override;
88 
89  StatusCode execute() override;
90 };
91 
92 } // namespace Jug::Reco
93 
94 #endif
Jug::Reco::TrackFindingAlgorithm::makeTrackFinderFunction
static std::shared_ptr< TrackFinderFunction > makeTrackFinderFunction(std::shared_ptr< const Acts::TrackingGeometry > trackingGeometry, std::shared_ptr< const Acts::MagneticFieldProvider > magneticField)
Definition: TrackFindingAlgorithmFunction.cpp:60
Jug::Reco::TrackFindingAlgorithm::TrackFinderFunction
Definition: TrackFindingAlgorithm.h:49
IGeoSvc.h
Jug::Reco
Definition: ClusterTypes.h:5
Jug::TrackParametersContainer
std::vector< TrackParameters > TrackParametersContainer
Container of reconstructed track states for multiple tracks.
Definition: Track.hpp:27
Index.hpp
Jug::Reco::TrackFindingAlgorithm::m_numMeasurementsCutOff
Gaudi::Property< std::vector< size_t > > m_numMeasurementsCutOff
Definition: TrackFindingAlgorithm.h:72
Jug::Reco::TrackFindingAlgorithm::m_BField
std::shared_ptr< const Jug::BField::DD4hepBField > m_BField
Definition: TrackFindingAlgorithm.h:77
Jug::Reco::TrackFindingAlgorithm::m_chi2CutOff
Gaudi::Property< std::vector< double > > m_chi2CutOff
Definition: TrackFindingAlgorithm.h:71
Jug::Reco::TrackFindingAlgorithm::m_inputMeasurements
DataHandle< MeasurementContainer > m_inputMeasurements
Definition: TrackFindingAlgorithm.h:65
Jug::Reco::TrackFindingAlgorithm::execute
StatusCode execute() override
Definition: TrackFindingAlgorithm.cpp:112
Jug::Reco::TrackFindingAlgorithm::m_trackFinderFunc
std::shared_ptr< TrackFinderFunction > m_trackFinderFunc
Definition: TrackFindingAlgorithm.h:74
Jug::Reco::TrackFindingAlgorithm::initialize
StatusCode initialize() override
Definition: TrackFindingAlgorithm.cpp:74
Jug::Reco::TrackFindingAlgorithm::m_inputSourceLinks
DataHandle< IndexSourceLinkContainer > m_inputSourceLinks
Definition: TrackFindingAlgorithm.h:64
Jug::Reco::TrackFindingAlgorithm::m_actsLoggingLevel
Acts::Logging::Level m_actsLoggingLevel
Definition: TrackFindingAlgorithm.h:83
Jug::Reco::TrackFindingAlgorithm::m_sourcelinkSelectorCfg
Acts::MeasurementSelector::Config m_sourcelinkSelectorCfg
Definition: TrackFindingAlgorithm.h:82
Jug::Reco::TrackFindingAlgorithm::TrackFinderResult
std::vector< Acts::Result< Acts::CombinatorialKalmanFilterResult > > TrackFinderResult
Definition: TrackFindingAlgorithm.h:44
DD4hepBField.h
Jug::Reco::TrackFindingAlgorithm::m_outputTrajectories
DataHandle< TrajectoriesContainer > m_outputTrajectories
Definition: TrackFindingAlgorithm.h:68
Jug::Reco::TrackFindingAlgorithm::m_geoSvc
SmartIF< IGeoSvc > m_geoSvc
Definition: TrackFindingAlgorithm.h:75
Jug::Reco::TrackFindingAlgorithm::TrackFinderOptions
Acts::CombinatorialKalmanFilterOptions< IndexSourceLinkAccessor::Iterator > TrackFinderOptions
Definition: TrackFindingAlgorithm.h:43
Jug::Reco::TrackFindingAlgorithm::TrackFinderFunction::operator()
virtual TrackFinderResult operator()(const TrackParametersContainer &, const TrackFinderOptions &) const =0
Jug::Reco::TrackFindingAlgorithm::m_inputInitialTrackParameters
DataHandle< TrackParametersContainer > m_inputInitialTrackParameters
Definition: TrackFindingAlgorithm.h:66
Measurement.hpp
Jug::Reco::TrackFindingAlgorithm::m_calibctx
Acts::CalibrationContext m_calibctx
Definition: TrackFindingAlgorithm.h:79
Jug::Reco::TrackFindingAlgorithm::m_fieldctx
Acts::MagneticFieldContext m_fieldctx
Definition: TrackFindingAlgorithm.h:80
Track.hpp
Jug::Reco::TrackFindingAlgorithm
Definition: TrackFindingAlgorithm.h:39
Jug::Reco::TrackFindingAlgorithm::TrackFindingAlgorithm
TrackFindingAlgorithm(const std::string &name, ISvcLocator *svcLoc)
Definition: TrackFindingAlgorithm.cpp:65
Jug::Reco::TrackFindingAlgorithm::m_geoctx
Acts::GeometryContext m_geoctx
Definition: TrackFindingAlgorithm.h:78
Jug::Reco::TrackFindingAlgorithm::TrackFinderFunction::~TrackFinderFunction
virtual ~TrackFinderFunction()=default
DataHandle.h
Trajectories.hpp
Jug::Reco::TrackFindingAlgorithm::m_etaBins
Gaudi::Property< std::vector< double > > m_etaBins
Definition: TrackFindingAlgorithm.h:70
GeometryContainers.hpp
DataHandle< IndexSourceLinkContainer >