File indexing completed on 2025-10-16 08:02:07
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 virtual Portal* portal(Face face) = 0;
0036
0037
0038
0039
0040
0041 virtual std::shared_ptr<Portal> portalPtr(Face face) = 0;
0042
0043
0044
0045
0046 virtual void setPortal(std::shared_ptr<Portal> portal, Face face) = 0;
0047
0048
0049 void fill(TrackingVolume& volume) override;
0050
0051
0052
0053 virtual const Transform3& transform() const = 0;
0054 };
0055
0056
0057
0058
0059
0060 std::ostream& operator<<(std::ostream& os, CuboidPortalShell::Face face);
0061
0062
0063
0064 class SingleCuboidPortalShell : public CuboidPortalShell {
0065 public:
0066
0067
0068 explicit SingleCuboidPortalShell(TrackingVolume& volume);
0069
0070
0071 std::size_t size() const final;
0072
0073
0074 Portal* portal(Face face) final;
0075
0076
0077 std::shared_ptr<Portal> portalPtr(Face face) final;
0078
0079
0080 void setPortal(std::shared_ptr<Portal> portal, Face face) final;
0081
0082
0083 void applyToVolume() override;
0084
0085
0086 bool isValid() const override;
0087
0088
0089 std::string label() const override;
0090
0091 const Transform3& transform() const override {
0092 return m_volume->transform();
0093 };
0094
0095 private:
0096 std::array<std::shared_ptr<Portal>, 6> m_portals{};
0097
0098 TrackingVolume* m_volume;
0099 };
0100
0101
0102
0103 class CuboidStackPortalShell final : public CuboidPortalShell {
0104 public:
0105
0106
0107
0108
0109
0110
0111 CuboidStackPortalShell(const GeometryContext& gctx,
0112 std::vector<CuboidPortalShell*> shells,
0113 AxisDirection direction,
0114 const Logger& logger = getDummyLogger());
0115
0116
0117 std::size_t size() const override;
0118
0119
0120 Portal* portal(Face face) override;
0121
0122
0123 std::shared_ptr<Portal> portalPtr(Face face) override;
0124
0125
0126 void setPortal(std::shared_ptr<Portal> portal, Face face) override;
0127
0128 void applyToVolume() override {
0129
0130 }
0131
0132
0133 bool isValid() const override;
0134
0135
0136 std::string label() const override;
0137
0138
0139
0140 const Transform3& transform() const override;
0141
0142 private:
0143
0144 AxisDirection m_direction;
0145
0146
0147 CuboidVolumeBounds::Face m_frontFace = Face::NegativeXFace;
0148
0149 CuboidVolumeBounds::Face m_backFace = Face::PositiveXFace;
0150
0151 std::array<CuboidVolumeBounds::Face, 4> m_sideFaces{
0152 Face::NegativeZFace, Face::PositiveZFace, Face::NegativeYFace,
0153 Face::PositiveYFace};
0154
0155 std::vector<CuboidPortalShell*> m_shells;
0156 };
0157
0158 }