File indexing completed on 2026-07-16 08:07:46
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/EventData/SeedContainer2.hpp"
0010
0011 #include "Acts/EventData/SpacePointContainer2.hpp"
0012 #include "Acts/EventData/Types.hpp"
0013
0014 namespace Acts {
0015
0016 SeedContainer2::SeedContainer2() noexcept = default;
0017
0018 SeedContainer2::SeedContainer2(const SeedContainer2 &other) noexcept
0019 : m_size(other.m_size) {
0020 knownColumns() = other.knownColumns();
0021 }
0022
0023 SeedContainer2::SeedContainer2(SeedContainer2 &&other) noexcept
0024 : m_size(other.m_size) {
0025 knownColumns() = std::move(other).knownColumns();
0026
0027 other.m_size = 0;
0028 }
0029
0030 SeedContainer2 &SeedContainer2::operator=(
0031 const SeedContainer2 &other) noexcept {
0032 if (this == &other) {
0033 return *this;
0034 }
0035
0036 m_size = other.m_size;
0037 knownColumns() = other.knownColumns();
0038
0039 return *this;
0040 }
0041
0042 SeedContainer2 &SeedContainer2::operator=(SeedContainer2 &&other) noexcept {
0043 if (this == &other) {
0044 return *this;
0045 }
0046
0047 m_size = other.m_size;
0048 knownColumns() = std::move(other).knownColumns();
0049
0050 other.m_size = 0;
0051
0052 return *this;
0053 }
0054
0055 void SeedContainer2::reserve(std::size_t size,
0056 float averageSpacePoints) noexcept {
0057 m_spacePointOffsets.reserve(size);
0058 m_spacePointCounts.reserve(size);
0059 m_qualities.reserve(size);
0060 m_vertexZs.reserve(size);
0061 m_spacePoints.reserve(static_cast<std::size_t>(size * averageSpacePoints));
0062 }
0063
0064 void SeedContainer2::clear() noexcept {
0065 m_size = 0;
0066
0067 m_spacePointOffsets.clear();
0068 m_spacePointCounts.clear();
0069 m_qualities.clear();
0070 m_vertexZs.clear();
0071 m_spacePoints.clear();
0072 }
0073
0074 void SeedContainer2::assignSpacePointContainer(
0075 SpacePointContainer2 spacePointContainer) noexcept {
0076 auto movedContainer =
0077 std::make_shared<SpacePointContainer2>(std::move(spacePointContainer));
0078
0079 m_sharedConstSpacePointContainer = movedContainer;
0080 m_constSpacePointContainer = movedContainer.get();
0081 m_mutableSpacePointContainer = movedContainer.get();
0082 }
0083
0084 void SeedContainer2::assignSpacePointContainer(
0085 SpacePointContainer2 &spacePointContainer) noexcept {
0086 m_sharedConstSpacePointContainer = nullptr;
0087 m_mutableSpacePointContainer = &spacePointContainer;
0088 m_constSpacePointContainer = &spacePointContainer;
0089 }
0090
0091 void SeedContainer2::assignSpacePointContainer(
0092 const SpacePointContainer2 &spacePointContainer) noexcept {
0093 m_sharedConstSpacePointContainer = nullptr;
0094 m_constSpacePointContainer = &spacePointContainer;
0095 m_mutableSpacePointContainer = nullptr;
0096 }
0097
0098 void SeedContainer2::assignSpacePointContainer(
0099 const std::shared_ptr<SpacePointContainer2> &spacePointContainer) noexcept {
0100 m_sharedConstSpacePointContainer = spacePointContainer;
0101 m_constSpacePointContainer = spacePointContainer.get();
0102 m_mutableSpacePointContainer = spacePointContainer.get();
0103 }
0104
0105 void SeedContainer2::assignSpacePointContainer(
0106 const std::shared_ptr<const SpacePointContainer2>
0107 &spacePointContainer) noexcept {
0108 m_sharedConstSpacePointContainer = spacePointContainer;
0109 m_constSpacePointContainer = spacePointContainer.get();
0110 m_mutableSpacePointContainer = nullptr;
0111 }
0112
0113 bool SeedContainer2::hasSpacePointContainer() const noexcept {
0114 return m_constSpacePointContainer != nullptr;
0115 }
0116
0117 bool SeedContainer2::hasMutableSpacePointContainer() const noexcept {
0118 return m_mutableSpacePointContainer != nullptr;
0119 }
0120
0121 SpacePointContainer2 &SeedContainer2::mutableSpacePointContainer() {
0122 if (!hasMutableSpacePointContainer()) {
0123 throw std::logic_error(
0124 "No mutable SpacePointContainer2 assigned to SeedContainer2");
0125 }
0126 return *m_mutableSpacePointContainer;
0127 }
0128
0129 const SpacePointContainer2 &SeedContainer2::spacePointContainer() const {
0130 if (!hasSpacePointContainer()) {
0131 throw std::logic_error(
0132 "No SpacePointContainer2 assigned to SeedContainer2");
0133 }
0134 return *m_constSpacePointContainer;
0135 }
0136
0137 void SeedContainer2::assignSpacePointIndices(
0138 Index index, std::span<const SpacePointIndex2> spacePointIndices) {
0139 if (index >= size()) {
0140 throw std::out_of_range("Index out of range in SpacePointContainer2");
0141 }
0142 if (m_spacePointCounts[index] != 0) {
0143 throw std::logic_error("Space points already assigned to the seed");
0144 }
0145
0146 m_spacePointOffsets[index] =
0147 static_cast<SpacePointIndex2>(m_spacePoints.size());
0148 m_spacePointCounts[index] =
0149 static_cast<std::uint8_t>(spacePointIndices.size());
0150 m_spacePoints.insert(m_spacePoints.end(), spacePointIndices.begin(),
0151 spacePointIndices.end());
0152 }
0153
0154 }