File indexing completed on 2024-06-01 07:07:36
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011
0012 #include "Acts/EventData/MultiTrajectory.hpp"
0013 #include "Acts/EventData/TrackParameters.hpp"
0014
0015 #include "JugReco/IndexSourceLink.hpp"
0016 #include <unordered_map>
0017 #include <utility>
0018
0019 namespace Jug {
0020
0021
0022 struct ParticleHitCount {
0023 uint64_t particleId;
0024 std::size_t hitCount;
0025 };
0026
0027 using IndexedParams = std::unordered_map<size_t, Acts::BoundTrackParameters>;
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 struct SimMultiTrajectory {
0040 public:
0041
0042
0043 SimMultiTrajectory() = default;
0044
0045
0046
0047
0048
0049
0050
0051 SimMultiTrajectory(const Acts::MultiTrajectory<IndexSourceLink>& multiTraj,
0052 const std::vector<size_t>& tTips,
0053 const IndexedParams& parameters)
0054 : m_multiTrajectory(multiTraj),
0055 m_trackTips(tTips),
0056 m_trackParameters(parameters) {}
0057
0058
0059
0060
0061 SimMultiTrajectory(const SimMultiTrajectory& rhs)
0062 : m_multiTrajectory(rhs.m_multiTrajectory),
0063 m_trackTips(rhs.m_trackTips),
0064 m_trackParameters(rhs.m_trackParameters) {}
0065
0066
0067
0068
0069 SimMultiTrajectory(SimMultiTrajectory&& rhs)
0070 : m_multiTrajectory(std::move(rhs.m_multiTrajectory)),
0071 m_trackTips(std::move(rhs.m_trackTips)),
0072 m_trackParameters(std::move(rhs.m_trackParameters)) {}
0073
0074
0075
0076 ~SimMultiTrajectory() = default;
0077
0078
0079
0080
0081 SimMultiTrajectory& operator=(const SimMultiTrajectory& rhs) {
0082 m_multiTrajectory = rhs.m_multiTrajectory;
0083 m_trackTips = rhs.m_trackTips;
0084 m_trackParameters = rhs.m_trackParameters;
0085 return *this;
0086 }
0087
0088
0089
0090
0091 SimMultiTrajectory& operator=(SimMultiTrajectory&& rhs) {
0092 m_multiTrajectory = std::move(rhs.m_multiTrajectory);
0093 m_trackTips = std::move(rhs.m_trackTips);
0094 m_trackParameters = std::move(rhs.m_trackParameters);
0095 return *this;
0096 }
0097
0098
0099
0100
0101
0102
0103 bool hasTrajectory(const size_t& entryIndex) const {
0104 return std::count(m_trackTips.begin(), m_trackTips.end(), entryIndex) > 0;
0105 }
0106
0107
0108
0109
0110
0111
0112 bool hasTrackParameters(const size_t& entryIndex) const {
0113 return m_trackParameters.count(entryIndex) > 0;
0114 }
0115
0116
0117
0118
0119
0120
0121 std::pair<std::vector<size_t>, Acts::MultiTrajectory<IndexSourceLink>>
0122 trajectory() const {
0123 return std::make_pair(m_trackTips, m_multiTrajectory);
0124 }
0125
0126
0127
0128
0129
0130
0131 const Acts::BoundTrackParameters& trackParameters(const size_t& entryIndex) const {
0132 auto it = m_trackParameters.find(entryIndex);
0133 if (it != m_trackParameters.end()) {
0134 return it->second;
0135 } else {
0136 throw std::runtime_error(
0137 "No fitted track parameters for trajectory with entry index = " +
0138 std::to_string(entryIndex));
0139 }
0140 }
0141
0142
0143
0144
0145
0146
0147 std::vector<ParticleHitCount> identifyMajorityParticle(
0148 const size_t& entryIndex) const;
0149
0150 private:
0151
0152 Acts::MultiTrajectory<IndexSourceLink> m_multiTrajectory;
0153
0154
0155 std::vector<size_t> m_trackTips = {};
0156
0157
0158 IndexedParams m_trackParameters = {};
0159 };
0160
0161 }