Juggler
Juggling algorithms and event processing using gaudi framework
TrackFittingAlgorithm.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-or-later
2 // Copyright (C) 2022 Whitney Armstrong
3 
4 #ifndef JUGGLER_JUGRECO_TrackFittingAlgorithm_HH
5 #define JUGGLER_JUGRECO_TrackFittingAlgorithm_HH 1
6 
7 #include <functional>
8 #include <stdexcept>
9 #include <vector>
10 #include <random>
11 #include <stdexcept>
12 
13 #include "GaudiAlg/GaudiAlgorithm.h"
14 #include "GaudiKernel/ToolHandle.h"
15 #include "Gaudi/Property.h"
16 
17 #include "JugBase/DataHandle.h"
18 #include "JugBase/IGeoSvc.h"
22 #include "JugTrack/Track.hpp"
23 #include "JugTrack/Measurement.hpp"
25 #include "JugTrack/ProtoTrack.hpp"
26 
27 #include "eicd/TrackerHitCollection.h"
28 
29 #include "Acts/Definitions/Common.hpp"
30 #include "Acts/Geometry/TrackingGeometry.hpp"
31 #include "Acts/MagneticField/MagneticFieldProvider.hpp"
32 #include "Acts/TrackFitting/KalmanFitter.hpp"
33 #include "Acts/TrackFitting/GainMatrixSmoother.hpp"
34 #include "Acts/TrackFitting/GainMatrixUpdater.hpp"
35 #include "Acts/Geometry/TrackingGeometry.hpp"
36 #include "Acts/Definitions/Common.hpp"
37 
38 
39 namespace Jug::Reco {
40 
41  /** Fitting algorithm implmentation .
42  *
43  * \ingroup tracking
44  */
45  class TrackFittingAlgorithm : public GaudiAlgorithm {
46  public:
47  /// Track fitter function that takes input measurements, initial trackstate
48  /// and fitter options and returns some track-fitter-specific result.
50  Acts::KalmanFitterOptions;
51 
52  //using TrackFinderResult = Acts::Result<Acts::CombinatorialKalmanFilterResult<SourceLink>>;
53  using FitterResult = Acts::Result<Acts::KalmanFitterResult>;
54 
55  /// Fit function that takes input measurements, initial trackstate and fitter
56  using FitterFunction = std::function<FitterResult(
57  const std::vector<IndexSourceLink>&, const TrackParameters&, const TrackFitterOptions&)>;
58 
59  public:
60  DataHandle<IndexSourceLinkContainer> m_inputSourceLinks{"inputSourceLinks", Gaudi::DataHandle::Reader, this};
61  DataHandle<TrackParametersContainer> m_initialTrackParameters{"initialTrackParameters", Gaudi::DataHandle::Reader, this};
62  DataHandle<MeasurementContainer> m_inputMeasurements{"inputMeasurements", Gaudi::DataHandle::Reader, this};
63  DataHandle<ProtoTrackContainer> m_inputProtoTracks{"inputProtoTracks", Gaudi::DataHandle::Reader, this};
64  DataHandle<TrajectoriesContainer> m_foundTracks{"foundTracks", Gaudi::DataHandle::Reader, this};
65  DataHandle<TrajectoriesContainer> m_outputTrajectories{"outputTrajectories", Gaudi::DataHandle::Writer, this};
66 
68  SmartIF<IGeoSvc> m_geoSvc;
69  std::shared_ptr<const Jug::BField::DD4hepBField> m_BField = nullptr;
70  Acts::GeometryContext m_geoctx;
71  Acts::CalibrationContext m_calibctx;
72  Acts::MagneticFieldContext m_fieldctx;
73 
74  //Acts::CKFSourceLinkSelector::Config m_sourcelinkSelectorCfg;
75 
76  TrackFittingAlgorithm(const std::string& name, ISvcLocator* svcLoc);
77 
78  /** Create the track finder function implementation.
79  * The magnetic field is intentionally given by-value since the variant
80  * contains shared_ptr anyways.
81  */
82  static FitterFunction
83  makeTrackFittingFunction(std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
84  std::shared_ptr<const Acts::MagneticFieldProvider> magneticField);
85  // BFieldVariant magneticField);
86 
87  StatusCode initialize() override;
88 
89  StatusCode execute() override;
90  private:
91  /// Helper function to call correct FitterFunction
92  FitterResult fitTrack(
93  const std::vector<IndexSourceLink>& sourceLinks,
94  const TrackParameters& initialParameters,
95  const TrackFitterOptions& options
96  ) const;
97  //, const std::vector<const Acts::Surface*>& surfSequence) const;
98  };
99 
101  TrackFittingAlgorithm::fitTrack(const std::vector<IndexSourceLink>& sourceLinks,
102  const TrackParameters& initialParameters,
103  const TrackFitterOptions& options) const
104  {
105  // const std::vector<const Acts::Surface*>& surfSequence) const
106  // if (m_cfg.directNavigation) {
107  // return m_cfg.dFit(sourceLinks, initialParameters, options, surfSequence);
108  //}
109  return m_trackFittingFunc(sourceLinks, initialParameters, options);
110  }
111 
112 } // namespace Jug::Reco
113 
114 #endif
Jug::Reco::TrackFittingAlgorithm::m_foundTracks
DataHandle< TrajectoriesContainer > m_foundTracks
Definition: TrackFittingAlgorithm.h:64
IGeoSvc.h
Jug::Reco::TrackFittingAlgorithm::makeTrackFittingFunction
static FitterFunction makeTrackFittingFunction(std::shared_ptr< const Acts::TrackingGeometry > trackingGeometry, std::shared_ptr< const Acts::MagneticFieldProvider > magneticField)
Definition: TrackFittingFunction.cpp:61
Jug::Reco::TrackFittingAlgorithm::m_geoctx
Acts::GeometryContext m_geoctx
Definition: TrackFittingAlgorithm.h:70
Jug::Reco
Definition: ClusterTypes.h:5
Jug::Reco::TrackFittingAlgorithm::FitterResult
Acts::Result< Acts::KalmanFitterResult > FitterResult
Definition: TrackFittingAlgorithm.h:53
Jug::Reco::TrackFittingAlgorithm::execute
StatusCode execute() override
Definition: TrackFittingAlgorithm.cpp:84
Jug::Reco::TrackFittingAlgorithm::m_initialTrackParameters
DataHandle< TrackParametersContainer > m_initialTrackParameters
Definition: TrackFittingAlgorithm.h:61
DD4hepBField.h
Jug::Reco::TrackFittingAlgorithm::m_fieldctx
Acts::MagneticFieldContext m_fieldctx
Definition: TrackFittingAlgorithm.h:72
Jug::Reco::TrackFittingAlgorithm
Definition: TrackFittingAlgorithm.h:45
Jug::Reco::TrackFittingAlgorithm::m_BField
std::shared_ptr< const Jug::BField::DD4hepBField > m_BField
Definition: TrackFittingAlgorithm.h:69
Jug::Reco::TrackFittingAlgorithm::m_inputProtoTracks
DataHandle< ProtoTrackContainer > m_inputProtoTracks
Definition: TrackFittingAlgorithm.h:63
Jug::Reco::TrackFittingAlgorithm::initialize
StatusCode initialize() override
Definition: TrackFittingAlgorithm.cpp:62
Measurement.hpp
Jug::Reco::TrackFittingAlgorithm::m_inputSourceLinks
DataHandle< IndexSourceLinkContainer > m_inputSourceLinks
Definition: TrackFittingAlgorithm.h:60
Jug::Reco::TrackFittingAlgorithm::TrackFittingAlgorithm
TrackFittingAlgorithm(const std::string &name, ISvcLocator *svcLoc)
Definition: TrackFittingAlgorithm.cpp:51
Jug::Reco::TrackFittingAlgorithm::m_calibctx
Acts::CalibrationContext m_calibctx
Definition: TrackFittingAlgorithm.h:71
Jug::Reco::TrackFittingAlgorithm::m_outputTrajectories
DataHandle< TrajectoriesContainer > m_outputTrajectories
Definition: TrackFittingAlgorithm.h:65
Jug::Reco::TrackFittingAlgorithm::m_geoSvc
SmartIF< IGeoSvc > m_geoSvc
Definition: TrackFittingAlgorithm.h:68
Track.hpp
DataHandle.h
Jug::TrackParameters
::Acts::BoundTrackParameters TrackParameters
(Reconstructed) track parameters e.g. close to the vertex.
Definition: Track.hpp:25
Trajectories.hpp
Jug::Reco::TrackFittingAlgorithm::m_trackFittingFunc
FitterFunction m_trackFittingFunc
Definition: TrackFittingAlgorithm.h:67
GeometryContainers.hpp
Jug::Reco::TrackFittingAlgorithm::TrackFitterOptions
Acts::KalmanFitterOptions TrackFitterOptions
Definition: TrackFittingAlgorithm.h:50
Jug::Reco::TrackFittingAlgorithm::m_inputMeasurements
DataHandle< MeasurementContainer > m_inputMeasurements
Definition: TrackFittingAlgorithm.h:62
ProtoTrack.hpp
Jug::Reco::TrackFittingAlgorithm::FitterFunction
std::function< FitterResult(const std::vector< IndexSourceLink > &, const TrackParameters &, const TrackFitterOptions &)> FitterFunction
Fit function that takes input measurements, initial trackstate and fitter.
Definition: TrackFittingAlgorithm.h:57
DataHandle< IndexSourceLinkContainer >