Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-07-16 08:07:46

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
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 }  // namespace Acts