File indexing completed on 2026-05-12 08:02:55
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/GeometryContext.hpp"
0013 #include "Acts/Surfaces/InfiniteBounds.hpp" //to get s_noBounds
0014 #include "Acts/Surfaces/PlanarBounds.hpp"
0015 #include "Acts/Surfaces/RegularSurface.hpp"
0016 #include "Acts/Surfaces/Surface.hpp"
0017 #include "Acts/Surfaces/SurfaceConcept.hpp"
0018 #include "Acts/Utilities/Intersection.hpp"
0019
0020 namespace ActsTests {
0021
0022 class SurfaceStub : public Acts::RegularSurface {
0023 public:
0024 explicit SurfaceStub(
0025 const Acts::Transform3& htrans = Acts::Transform3::Identity())
0026 : Acts::GeometryObject(), Acts::RegularSurface(htrans) {}
0027 SurfaceStub(const Acts::GeometryContext& gctx, const SurfaceStub& sf,
0028 const Acts::Transform3& transf)
0029 : Acts::GeometryObject(), Acts::RegularSurface(gctx, sf, transf) {}
0030 explicit SurfaceStub(const Acts::SurfacePlacementBase& detelement)
0031 : Acts::GeometryObject(), Acts::RegularSurface(detelement) {}
0032
0033 ~SurfaceStub() override = default;
0034
0035
0036 Acts::Surface::SurfaceType type() const final { return Acts::Surface::Other; }
0037
0038
0039 Acts::Vector3 normal(const Acts::GeometryContext& ,
0040 const Acts::Vector3& ) const final {
0041 return Acts::Vector3::Zero();
0042 }
0043
0044 Acts::Vector3 normal(const Acts::GeometryContext& ,
0045 const Acts::Vector2& ) const final {
0046 return Acts::Vector3::Zero();
0047 }
0048
0049 using Acts::RegularSurface::normal;
0050
0051
0052 const Acts::SurfaceBounds& bounds() const final {
0053 return Acts::s_noBounds;
0054 }
0055
0056
0057 Acts::Vector3 localToGlobal(const Acts::GeometryContext& ,
0058 const Acts::Vector2&
0059 ) const final {
0060 return Acts::Vector3::Zero();
0061 }
0062
0063 using Acts::RegularSurface::localToGlobal;
0064
0065
0066 Acts::Result<Acts::Vector2> globalToLocal(
0067 const Acts::GeometryContext& , const Acts::Vector3& ,
0068 double ) const final {
0069 return Acts::Result<Acts::Vector2>::success(Acts::Vector2{20., 20.});
0070 }
0071
0072 using Acts::RegularSurface::globalToLocal;
0073
0074
0075 double pathCorrection(const Acts::GeometryContext& ,
0076 const Acts::Vector3& ,
0077 const Acts::Vector3& ) const final {
0078 return 0.0;
0079 }
0080
0081
0082 Acts::Vector3 referencePosition(const Acts::GeometryContext& ,
0083 Acts::AxisDirection ) const final {
0084 return Acts::Vector3::Zero();
0085 }
0086
0087
0088 Acts::MultiIntersection3D intersect(
0089 const Acts::GeometryContext& , const Acts::Vector3& ,
0090 const Acts::Vector3& ,
0091 const Acts::BoundaryTolerance& ,
0092 const double ) const final {
0093 Acts::Intersection3D stubIntersection(Acts::Vector3(20., 0., 0.), 20.,
0094 Acts::IntersectionStatus::reachable);
0095 return Acts::MultiIntersection3D(stubIntersection,
0096 Acts::Intersection3D::Invalid());
0097 }
0098
0099
0100 std::string name() const final { return std::string("SurfaceStub"); }
0101
0102
0103 bool constructedOk() const { return true; }
0104
0105
0106 Acts::Polyhedron polyhedronRepresentation(
0107 const Acts::GeometryContext& ,
0108 unsigned int ) const final {
0109 std::vector<Acts::Vector3> vertices;
0110 std::vector<std::vector<std::size_t>> faces;
0111 std::vector<std::vector<std::size_t>> triangularMesh;
0112
0113 return Acts::Polyhedron(vertices, faces, triangularMesh);
0114 }
0115
0116
0117 Acts::Matrix<2, 3> localCartesianToBoundLocalDerivative(
0118 const Acts::GeometryContext& ,
0119 const Acts::Vector3& ) const final {
0120 return Acts::Matrix<2, 3>::Identity();
0121 };
0122
0123 private:
0124
0125 std::shared_ptr<const Acts::PlanarBounds> m_bounds;
0126 };
0127
0128 static_assert(Acts::RegularSurfaceConcept<SurfaceStub>,
0129 "SurfaceStub does not fulfill RegularSurfaceConcept");
0130
0131 }