Juggler
Juggling algorithms and event processing using gaudi framework
Trajectories.hpp
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 JugTrack_Trajectories_HH
5 #define JugTrack_Trajectories_HH
6 
7 #include "Acts/EventData/MultiTrajectory.hpp"
9 #include "JugTrack/Track.hpp"
10 
11 #include <algorithm>
12 #include <unordered_map>
13 #include <vector>
14 
15 namespace Jug {
16 
17 /// Store reconstructed trajectories from track finding/fitting.
18 ///
19 /// It contains a MultiTrajectory with a vector of entry indices for
20 /// individual trajectories, and a map of fitted parameters indexed by the
21 /// entry index. In case of track fitting, there is at most one trajectory
22 /// in the MultiTrajectory; In case of track finding, there could be
23 /// multiple trajectories in the MultiTrajectory.
24 struct Trajectories final {
25  public:
26  /// (Reconstructed) trajectory with multiple states.
27  using MultiTrajectory = ::Acts::MultiTrajectory;
28  /// Fitted parameters identified by indices in the multi trajectory.
29  using IndexedParameters = std::unordered_map<size_t, TrackParameters>;
30 
31  /// Default construct an empty object. Required for container compatibility
32  /// and to signal an error.
33  Trajectories() = default;
34  /// Construct from fitted multi trajectory and parameters.
35  ///
36  /// @param multiTraj The multi trajectory
37  /// @param tTips Tip indices that identify valid trajectories
38  /// @param parameters Fitted track parameters indexed by trajectory index
39  Trajectories(const MultiTrajectory& multiTraj,
40  const std::vector<size_t>& tTips,
41  const IndexedParameters& parameters)
42  : m_multiTrajectory(multiTraj),
43  m_trackTips(tTips),
44  m_trackParameters(parameters) {}
45 
46  /// Return true if there exists no valid trajectory.
47  bool empty() const { return m_trackTips.empty(); }
48 
49  /// Access the underlying multi trajectory.
50  const MultiTrajectory& multiTrajectory() const { return m_multiTrajectory; }
51 
52  /// Access the tip indices that identify valid trajectories.
53  const std::vector<size_t>& tips() const { return m_trackTips; }
54 
55  /// Check if a trajectory exists for the given index.
56  ///
57  /// @param entryIndex The trajectory entry index
58  /// @return Whether there is trajectory with provided entry index
59  bool hasTrajectory(size_t entryIndex) const {
60  return (0 < std::count(m_trackTips.begin(), m_trackTips.end(), entryIndex));
61  }
62 
63  /// Check if fitted track parameters exists for the given index.
64  ///
65  /// @param entryIndex The trajectory entry index
66  /// @return Whether having fitted track parameters or not
67  bool hasTrackParameters(size_t entryIndex) const {
68  return (0 < m_trackParameters.count(entryIndex));
69  }
70 
71  /// Access the fitted track parameters for the given index.
72  ///
73  /// @param entryIndex The trajectory entry index
74  /// @return The fitted track parameters of the trajectory
75  const TrackParameters& trackParameters(size_t entryIndex) const {
76  auto it = m_trackParameters.find(entryIndex);
77  if (it == m_trackParameters.end()) {
78  throw std::runtime_error(
79  "No fitted track parameters for trajectory with entry index = " +
80  std::to_string(entryIndex));
81  }
82  return it->second;
83  }
84 
85  private:
86  // The multiTrajectory
87  MultiTrajectory m_multiTrajectory;
88  // The entry indices of trajectories stored in multiTrajectory
89  std::vector<size_t> m_trackTips = {};
90  // The fitted parameters at the provided surface for individual trajectories
91  IndexedParameters m_trackParameters = {};
92 };
93 
94 /// Container for multiple trajectories.
95 using TrajectoriesContainer = std::vector<Trajectories>;
96 
97 } // namespace Jug
98 #endif
Jug::Trajectories::MultiTrajectory
::Acts::MultiTrajectory MultiTrajectory
(Reconstructed) trajectory with multiple states.
Definition: Trajectories.hpp:27
Jug::Trajectories::trackParameters
const TrackParameters & trackParameters(size_t entryIndex) const
Definition: Trajectories.hpp:75
Jug::Trajectories::tips
const std::vector< size_t > & tips() const
Access the tip indices that identify valid trajectories.
Definition: Trajectories.hpp:53
Jug::TrajectoriesContainer
std::vector< Trajectories > TrajectoriesContainer
Container for multiple trajectories.
Definition: Trajectories.hpp:95
Jug::Trajectories::IndexedParameters
std::unordered_map< size_t, TrackParameters > IndexedParameters
Fitted parameters identified by indices in the multi trajectory.
Definition: Trajectories.hpp:29
Jug::Trajectories
Definition: Trajectories.hpp:24
Jug::Trajectories::hasTrackParameters
bool hasTrackParameters(size_t entryIndex) const
Definition: Trajectories.hpp:67
Jug::Trajectories::Trajectories
Trajectories()=default
Jug
Definition: DD4hepBField.h:22
Jug::Trajectories::hasTrajectory
bool hasTrajectory(size_t entryIndex) const
Definition: Trajectories.hpp:59
Jug::Trajectories::Trajectories
Trajectories(const MultiTrajectory &multiTraj, const std::vector< size_t > &tTips, const IndexedParameters &parameters)
Definition: Trajectories.hpp:39
Track.hpp
Jug::Trajectories::multiTrajectory
const MultiTrajectory & multiTrajectory() const
Access the underlying multi trajectory.
Definition: Trajectories.hpp:50
Jug::TrackParameters
::Acts::BoundTrackParameters TrackParameters
(Reconstructed) track parameters e.g. close to the vertex.
Definition: Track.hpp:25
Jug::Trajectories::empty
bool empty() const
Return true if there exists no valid trajectory.
Definition: Trajectories.hpp:47