Juggler
Juggling algorithms and event processing using gaudi framework
SimMultiTrajectory.hpp
Go to the documentation of this file.
1 // This file is part of the Acts project.
2 //
3 // Copyright (C) 2019 CERN for the benefit of the Acts project
4 //
5 // This Source Code Form is subject to the terms of the Mozilla Public
6 // License, v. 2.0. If a copy of the MPL was not distributed with this
7 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9 #pragma once
10 
11 //#include "ACTFW/Validation/ProtoTrackClassification.hpp"
12 #include "Acts/EventData/MultiTrajectory.hpp"
13 #include "Acts/EventData/TrackParameters.hpp"
14 
16 #include <unordered_map>
17 #include <utility>
18 
19 namespace Jug {
20 
21  /// Associate a particle to its hit count within a proto track.
23  uint64_t particleId;
24  std::size_t hitCount;
25  };
26 
27 using IndexedParams = std::unordered_map<size_t, Acts::BoundTrackParameters>;
28 
29 /// @brief Struct for truth track fitting/finding result with
30 /// Acts::KalmanFitter/Acts::CombinatorialKalmanFilter
31 ///
32 /// It contains a MultiTrajectory with a vector of entry indices for individual
33 /// trajectories, and a map of fitted parameters indexed by the entry index.
34 /// In case of track fitting, there is at most one trajectory in the
35 /// MultiTrajectory; In case of track finding, there could be multiple
36 /// trajectories in the MultiTrajectory.
37 ///
38 /// @note The MultiTrajectory is thought to be empty if there is no entry index
40  public:
41  /// @brief Default constructor
42  ///
43  SimMultiTrajectory() = default;
44 
45  /// @brief Constructor from multiTrajectory and fitted track parameters
46  ///
47  /// @param multiTraj The multiTrajectory
48  /// @param tTips The entry indices for trajectories in multiTrajectory
49  /// @param parameters The fitted track parameters indexed by trajectory entry
50  /// index
51  SimMultiTrajectory(const Acts::MultiTrajectory<IndexSourceLink>& multiTraj,
52  const std::vector<size_t>& tTips,
53  const IndexedParams& parameters)
54  : m_multiTrajectory(multiTraj),
55  m_trackTips(tTips),
56  m_trackParameters(parameters) {}
57 
58  /// @brief Copy constructor
59  ///
60  /// @param rhs The source SimMultiTrajectory
62  : m_multiTrajectory(rhs.m_multiTrajectory),
63  m_trackTips(rhs.m_trackTips),
64  m_trackParameters(rhs.m_trackParameters) {}
65 
66  /// @brief Copy move constructor
67  ///
68  /// @param rhs The source SimMultiTrajectory
70  : m_multiTrajectory(std::move(rhs.m_multiTrajectory)),
71  m_trackTips(std::move(rhs.m_trackTips)),
72  m_trackParameters(std::move(rhs.m_trackParameters)) {}
73 
74  /// @brief Default destructor
75  ///
76  ~SimMultiTrajectory() = default;
77 
78  /// @brief assignment operator
79  ///
80  /// @param rhs The source SimMultiTrajectory
82  m_multiTrajectory = rhs.m_multiTrajectory;
83  m_trackTips = rhs.m_trackTips;
84  m_trackParameters = rhs.m_trackParameters;
85  return *this;
86  }
87 
88  /// @brief assignment move operator
89  ///
90  /// @param rhs The source SimMultiTrajectory
92  m_multiTrajectory = std::move(rhs.m_multiTrajectory);
93  m_trackTips = std::move(rhs.m_trackTips);
94  m_trackParameters = std::move(rhs.m_trackParameters);
95  return *this;
96  }
97 
98  /// @brief Indicator if a trajectory exists
99  ///
100  /// @param entryIndex The trajectory entry index
101  ///
102  /// @return Whether there is trajectory with provided entry index
103  bool hasTrajectory(const size_t& entryIndex) const {
104  return std::count(m_trackTips.begin(), m_trackTips.end(), entryIndex) > 0;
105  }
106 
107  /// @brief Indicator if there is fitted track parameters for one trajectory
108  ///
109  /// @param entryIndex The trajectory entry index
110  ///
111  /// @return Whether having fitted track parameters or not
112  bool hasTrackParameters(const size_t& entryIndex) const {
113  return m_trackParameters.count(entryIndex) > 0;
114  }
115 
116  /// @brief Getter for multiTrajectory
117  ///
118  /// @return The multiTrajectory with trajectory entry indices
119  ///
120  /// @note It could return an empty multiTrajectory
121  std::pair<std::vector<size_t>, Acts::MultiTrajectory<IndexSourceLink>>
122  trajectory() const {
123  return std::make_pair(m_trackTips, m_multiTrajectory);
124  }
125 
126  /// @brief Getter of fitted track parameters for one trajectory
127  ///
128  /// @param entryIndex The trajectory entry index
129  ///
130  /// @return The fitted track parameters of the trajectory
131  const Acts::BoundTrackParameters& trackParameters(const size_t& entryIndex) const {
132  auto it = m_trackParameters.find(entryIndex);
133  if (it != m_trackParameters.end()) {
134  return it->second;
135  } else {
136  throw std::runtime_error(
137  "No fitted track parameters for trajectory with entry index = " +
138  std::to_string(entryIndex));
139  }
140  }
141 
142  /// @brief Counter of associated truth particles for one trajectory
143  ///
144  /// @param entryIndex The trajectory entry index
145  ///
146  /// @return The truth particle counts in ascending order
147  std::vector<ParticleHitCount> identifyMajorityParticle(
148  const size_t& entryIndex) const;
149 
150  private:
151  // The multiTrajectory
152  Acts::MultiTrajectory<IndexSourceLink> m_multiTrajectory;
153 
154  // The entry indices of trajectories stored in multiTrajectory
155  std::vector<size_t> m_trackTips = {};
156 
157  // The fitted parameters at the provided surface for individual trajectories
158  IndexedParams m_trackParameters = {};
159 };
160 
161 } // namespace FW
Jug::SimMultiTrajectory::operator=
SimMultiTrajectory & operator=(SimMultiTrajectory &&rhs)
assignment move operator
Definition: SimMultiTrajectory.hpp:91
Jug::SimMultiTrajectory::hasTrackParameters
bool hasTrackParameters(const size_t &entryIndex) const
Indicator if there is fitted track parameters for one trajectory.
Definition: SimMultiTrajectory.hpp:112
Jug::SimMultiTrajectory::SimMultiTrajectory
SimMultiTrajectory(const SimMultiTrajectory &rhs)
Copy constructor.
Definition: SimMultiTrajectory.hpp:61
Jug::SimMultiTrajectory::trajectory
std::pair< std::vector< size_t >, Acts::MultiTrajectory< IndexSourceLink > > trajectory() const
Getter for multiTrajectory.
Definition: SimMultiTrajectory.hpp:122
Jug::ParticleHitCount
Associate a particle to its hit count within a proto track.
Definition: SimMultiTrajectory.hpp:22
Jug::SimMultiTrajectory::SimMultiTrajectory
SimMultiTrajectory()=default
Default constructor.
Jug::SimMultiTrajectory::trackParameters
const Acts::BoundTrackParameters & trackParameters(const size_t &entryIndex) const
Getter of fitted track parameters for one trajectory.
Definition: SimMultiTrajectory.hpp:131
Jug::SimMultiTrajectory::SimMultiTrajectory
SimMultiTrajectory(const Acts::MultiTrajectory< IndexSourceLink > &multiTraj, const std::vector< size_t > &tTips, const IndexedParams &parameters)
Constructor from multiTrajectory and fitted track parameters.
Definition: SimMultiTrajectory.hpp:51
Jug::SimMultiTrajectory::operator=
SimMultiTrajectory & operator=(const SimMultiTrajectory &rhs)
assignment operator
Definition: SimMultiTrajectory.hpp:81
Jug::SimMultiTrajectory
Struct for truth track fitting/finding result with Acts::KalmanFitter/Acts::CombinatorialKalmanFilter...
Definition: SimMultiTrajectory.hpp:39
Jug
Definition: DD4hepBField.h:22
Jug::IndexedParams
std::unordered_map< size_t, Acts::BoundTrackParameters > IndexedParams
Definition: SimMultiTrajectory.hpp:27
Jug::SimMultiTrajectory::~SimMultiTrajectory
~SimMultiTrajectory()=default
Default destructor.
Jug::SimMultiTrajectory::SimMultiTrajectory
SimMultiTrajectory(SimMultiTrajectory &&rhs)
Copy move constructor.
Definition: SimMultiTrajectory.hpp:69
Jug::ParticleHitCount::particleId
uint64_t particleId
Definition: SimMultiTrajectory.hpp:23
Jug::ParticleHitCount::hitCount
std::size_t hitCount
Definition: SimMultiTrajectory.hpp:24
Jug::SimMultiTrajectory::hasTrajectory
bool hasTrajectory(const size_t &entryIndex) const
Indicator if a trajectory exists.
Definition: SimMultiTrajectory.hpp:103
Jug::SimMultiTrajectory::identifyMajorityParticle
std::vector< ParticleHitCount > identifyMajorityParticle(const size_t &entryIndex) const
Counter of associated truth particles for one trajectory.