File indexing completed on 2025-07-09 07:49:37
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Geometry/Volume.hpp"
0012 #include "Acts/Geometry/VolumeResizeStrategy.hpp"
0013 #include "Acts/Utilities/AxisDefinitions.hpp"
0014
0015 #include <span>
0016 #include <vector>
0017
0018 namespace Acts {
0019
0020
0021
0022
0023 class VolumeStack : public Volume {
0024 public:
0025
0026
0027 const std::vector<std::shared_ptr<Volume>>& gaps() const;
0028
0029
0030
0031
0032 bool isGapVolume(const Volume& volume) const;
0033
0034 private:
0035
0036
0037
0038
0039 static Volume& initialVolume(std::span<Volume*> volumes);
0040
0041 protected:
0042 struct ResizeStrategies {
0043 VolumeResizeStrategy first;
0044 VolumeResizeStrategy second;
0045
0046 friend std::ostream& operator<<(std::ostream& os,
0047 const ResizeStrategies& rs) {
0048 if (rs.first == rs.second) {
0049 os << "<-" << rs.first << "->";
0050 } else {
0051 os << "<-" << rs.first << "|" << rs.second << "->";
0052 }
0053 return os;
0054 }
0055 };
0056
0057
0058
0059
0060 VolumeStack(
0061 std::vector<Volume*>& volumes, AxisDirection direction,
0062 std::pair<VolumeResizeStrategy, VolumeResizeStrategy> resizeStrategies);
0063
0064
0065
0066
0067 std::shared_ptr<Volume> addGapVolume(
0068 const Transform3& transform, const std::shared_ptr<VolumeBounds>& bounds);
0069
0070 AxisDirection m_direction{};
0071
0072 ResizeStrategies m_resizeStrategies;
0073
0074 std::vector<std::shared_ptr<Volume>> m_gaps{};
0075 std::vector<Volume*>& m_volumes;
0076 };
0077 }