File indexing completed on 2026-05-16 07:35:12
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/CuboidVolumeBounds.hpp"
0013 #include "Acts/Geometry/PortalShell.hpp"
0014 #include "Acts/Geometry/TrackingVolume.hpp"
0015 #include "Acts/Utilities/AxisDefinitions.hpp"
0016 #include "Acts/Utilities/Logger.hpp"
0017
0018 #include <array>
0019 #include <memory>
0020 #include <vector>
0021
0022 namespace Acts {
0023
0024
0025
0026
0027 class CuboidPortalShell : public PortalShellBase {
0028 public:
0029
0030 using Face = CuboidVolumeBounds::Face;
0031
0032
0033
0034
0035
0036 virtual std::shared_ptr<Portal> portal(Face face) = 0;
0037
0038
0039
0040
0041 virtual void setPortal(std::shared_ptr<Portal> portal, Face face) = 0;
0042
0043
0044 void fill(TrackingVolume& volume) override;
0045
0046
0047
0048
0049 virtual const Transform3& localToGlobalTransform(
0050 const GeometryContext& gctx) const = 0;
0051 };
0052
0053
0054
0055
0056
0057 std::ostream& operator<<(std::ostream& os, CuboidPortalShell::Face face);
0058
0059
0060
0061 class SingleCuboidPortalShell : public CuboidPortalShell {
0062 public:
0063
0064
0065
0066 explicit SingleCuboidPortalShell(const GeometryContext& gctx,
0067 TrackingVolume& volume);
0068
0069
0070 std::size_t size() const final;
0071
0072
0073 std::shared_ptr<Portal> portal(Face face) final;
0074
0075
0076 void setPortal(std::shared_ptr<Portal> portal, Face face) final;
0077
0078
0079 void applyToVolume() override;
0080
0081
0082 bool isValid() const override;
0083
0084
0085 std::string label() const override;
0086
0087 const Transform3& localToGlobalTransform(
0088 const GeometryContext& gctx) const override {
0089 return m_volume->localToGlobalTransform(gctx);
0090 };
0091
0092 private:
0093 std::array<std::shared_ptr<Portal>, 6> m_portals{};
0094
0095 TrackingVolume* m_volume;
0096 };
0097
0098
0099
0100 class CuboidStackPortalShell final : public CuboidPortalShell {
0101 public:
0102
0103
0104
0105
0106
0107
0108 CuboidStackPortalShell(const GeometryContext& gctx,
0109 std::vector<CuboidPortalShell*> shells,
0110 AxisDirection direction,
0111 const Logger& logger = getDummyLogger());
0112
0113
0114 std::size_t size() const override;
0115
0116
0117 std::shared_ptr<Portal> portal(Face face) override;
0118
0119
0120 void setPortal(std::shared_ptr<Portal> portal, Face face) override;
0121
0122 void applyToVolume() override {
0123
0124 }
0125
0126
0127 bool isValid() const override;
0128
0129
0130 std::string label() const override;
0131
0132
0133
0134
0135 const Transform3& localToGlobalTransform(
0136 const GeometryContext& gctx) const override;
0137
0138 private:
0139
0140 AxisDirection m_direction;
0141
0142
0143 CuboidVolumeBounds::Face m_frontFace = Face::NegativeXFace;
0144
0145 CuboidVolumeBounds::Face m_backFace = Face::PositiveXFace;
0146
0147 std::array<CuboidVolumeBounds::Face, 4> m_sideFaces{
0148 Face::NegativeZFace, Face::PositiveZFace, Face::NegativeYFace,
0149 Face::PositiveYFace};
0150
0151 std::vector<CuboidPortalShell*> m_shells;
0152 };
0153
0154 }