Juggler
Juggling algorithms and event processing using gaudi framework
CKFTracking.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_CKFTracking_HH
5 #define JUGGLER_JUGRECO_CKFTracking_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 CKFTracking : 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 ~CKFTrackingFunction() = 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<CKFTrackingFunction> makeCKFTrackingFunction(
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<CKFTrackingFunction> 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  CKFTracking(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
IGeoSvc.h
Jug::Reco::CKFTracking::m_inputMeasurements
DataHandle< MeasurementContainer > m_inputMeasurements
Definition: CKFTracking.h:65
Jug::Reco
Definition: ClusterTypes.h:5
Jug::TrackParametersContainer
std::vector< TrackParameters > TrackParametersContainer
Container of reconstructed track states for multiple tracks.
Definition: Track.hpp:27
Jug::Reco::CKFTracking::m_calibctx
Acts::CalibrationContext m_calibctx
Definition: CKFTracking.h:79
Index.hpp
Jug::Reco::CKFTracking::CKFTrackingFunction
Definition: CKFTracking.h:49
Jug::Reco::CKFTracking::TrackFinderResult
std::vector< Acts::Result< Acts::CombinatorialKalmanFilterResult > > TrackFinderResult
Definition: CKFTracking.h:44
Jug::Reco::CKFTracking::m_etaBins
Gaudi::Property< std::vector< double > > m_etaBins
Definition: CKFTracking.h:70
Jug::Reco::CKFTracking::m_fieldctx
Acts::MagneticFieldContext m_fieldctx
Definition: CKFTracking.h:80
Jug::Reco::CKFTracking::m_sourcelinkSelectorCfg
Acts::MeasurementSelector::Config m_sourcelinkSelectorCfg
Definition: CKFTracking.h:82
Jug::Reco::CKFTracking::TrackFinderOptions
Acts::CombinatorialKalmanFilterOptions< IndexSourceLinkAccessor::Iterator > TrackFinderOptions
Definition: CKFTracking.h:43
Jug::Reco::CKFTracking
Definition: CKFTracking.h:39
Jug::Reco::CKFTracking::m_inputSourceLinks
DataHandle< IndexSourceLinkContainer > m_inputSourceLinks
Definition: CKFTracking.h:64
Jug::Reco::CKFTracking::m_geoctx
Acts::GeometryContext m_geoctx
Definition: CKFTracking.h:78
Jug::Reco::CKFTracking::m_numMeasurementsCutOff
Gaudi::Property< std::vector< size_t > > m_numMeasurementsCutOff
Definition: CKFTracking.h:72
Jug::Reco::CKFTracking::CKFTrackingFunction::operator()
virtual TrackFinderResult operator()(const TrackParametersContainer &, const TrackFinderOptions &) const =0
DD4hepBField.h
Jug::Reco::CKFTracking::m_inputInitialTrackParameters
DataHandle< TrackParametersContainer > m_inputInitialTrackParameters
Definition: CKFTracking.h:66
Jug::Reco::CKFTracking::m_chi2CutOff
Gaudi::Property< std::vector< double > > m_chi2CutOff
Definition: CKFTracking.h:71
Jug::Reco::CKFTracking::makeCKFTrackingFunction
static std::shared_ptr< CKFTrackingFunction > makeCKFTrackingFunction(std::shared_ptr< const Acts::TrackingGeometry > trackingGeometry, std::shared_ptr< const Acts::MagneticFieldProvider > magneticField)
Definition: CKFTrackingFunction.cpp:60
Jug::Reco::CKFTracking::execute
StatusCode execute() override
Definition: CKFTracking.cpp:111
Jug::Reco::CKFTracking::m_BField
std::shared_ptr< const Jug::BField::DD4hepBField > m_BField
Definition: CKFTracking.h:77
Measurement.hpp
Jug::Reco::CKFTracking::m_actsLoggingLevel
Acts::Logging::Level m_actsLoggingLevel
Definition: CKFTracking.h:83
Jug::Reco::CKFTracking::CKFTracking
CKFTracking(const std::string &name, ISvcLocator *svcLoc)
Definition: CKFTracking.cpp:65
Track.hpp
Jug::Reco::CKFTracking::CKFTrackingFunction::~CKFTrackingFunction
virtual ~CKFTrackingFunction()=default
DataHandle.h
Trajectories.hpp
Jug::Reco::CKFTracking::m_outputTrajectories
DataHandle< TrajectoriesContainer > m_outputTrajectories
Definition: CKFTracking.h:68
GeometryContainers.hpp
Jug::Reco::CKFTracking::initialize
StatusCode initialize() override
Definition: CKFTracking.cpp:74
Jug::Reco::CKFTracking::m_geoSvc
SmartIF< IGeoSvc > m_geoSvc
Definition: CKFTracking.h:75
DataHandle< IndexSourceLinkContainer >
Jug::Reco::CKFTracking::m_trackFinderFunc
std::shared_ptr< CKFTrackingFunction > m_trackFinderFunc
Definition: CKFTracking.h:74