File indexing completed on 2026-07-11 07:38:50
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"
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
0023 class SurfaceStub : public Acts::RegularSurface {
0024 public:
0025 explicit SurfaceStub(
0026 const Acts::Transform3& htrans = Acts::Transform3::Identity())
0027 : Acts::GeometryObject(), Acts::RegularSurface(htrans) {}
0028 SurfaceStub(const Acts::GeometryContext& gctx, const SurfaceStub& sf,
0029 const Acts::Transform3& transf)
0030 : Acts::GeometryObject(), Acts::RegularSurface(gctx, sf, transf) {}
0031 explicit SurfaceStub(const Acts::SurfacePlacementBase& detelement)
0032 : Acts::GeometryObject(), Acts::RegularSurface(detelement) {}
0033
0034
0035 Acts::Surface::SurfaceType type() const final { return Acts::Surface::Other; }
0036
0037
0038 Acts::Vector3 normal(const Acts::GeometryContext& ,
0039 const Acts::Vector3& ) const final {
0040 return Acts::Vector3::Zero();
0041 }
0042
0043 Acts::Vector3 normal(const Acts::GeometryContext& ,
0044 const Acts::Vector2& ) const final {
0045 return Acts::Vector3::Zero();
0046 }
0047
0048 using Acts::RegularSurface::normal;
0049
0050
0051 const Acts::SurfaceBounds& bounds() const final {
0052 return Acts::s_noBounds;
0053 }
0054
0055
0056 Acts::Vector3 localToGlobal(const Acts::GeometryContext& ,
0057 const Acts::Vector2&
0058 ) const final {
0059 return Acts::Vector3::Zero();
0060 }
0061
0062 using Acts::RegularSurface::localToGlobal;
0063
0064
0065 Acts::Result<Acts::Vector2> globalToLocal(
0066 const Acts::GeometryContext& , const Acts::Vector3& ,
0067 double ) const final {
0068 return Acts::Result<Acts::Vector2>::success(Acts::Vector2{20., 20.});
0069 }
0070
0071 using Acts::RegularSurface::globalToLocal;
0072
0073
0074 double pathCorrection(const Acts::GeometryContext& ,
0075 const Acts::Vector3& ,
0076 const Acts::Vector3& ) const final {
0077 return 0.0;
0078 }
0079
0080
0081 Acts::Vector3 referencePosition(const Acts::GeometryContext& ,
0082 Acts::AxisDirection ) const final {
0083 return Acts::Vector3::Zero();
0084 }
0085
0086
0087 Acts::MultiIntersection3D intersect(
0088 const Acts::GeometryContext& , const Acts::Vector3& ,
0089 const Acts::Vector3& ,
0090 const Acts::BoundaryTolerance& ,
0091 const double ) const final {
0092 Acts::Intersection3D stubIntersection(Acts::Vector3(20., 0., 0.), 20.,
0093 Acts::IntersectionStatus::reachable);
0094 return Acts::MultiIntersection3D(stubIntersection,
0095 Acts::Intersection3D::Invalid());
0096 }
0097
0098
0099 std::string name() const final { return std::string("SurfaceStub"); }
0100
0101
0102 bool constructedOk() const { return true; }
0103
0104
0105 Acts::Polyhedron polyhedronRepresentation(
0106 const Acts::GeometryContext& ,
0107 unsigned int ) const final {
0108 std::vector<Acts::Vector3> vertices;
0109 std::vector<std::vector<std::size_t>> faces;
0110 std::vector<std::vector<std::size_t>> triangularMesh;
0111
0112 return Acts::Polyhedron(vertices, faces, triangularMesh);
0113 }
0114
0115
0116 Acts::Matrix<2, 3> localCartesianToBoundLocalDerivative(
0117 const Acts::GeometryContext& ,
0118 const Acts::Vector3& ) const final {
0119 return Acts::Matrix<2, 3>::Identity();
0120 }
0121
0122 protected:
0123 std::array<Acts::AxisDirection, 2> localAxes() const override {
0124 return {Acts::AxisDirection::AxisX, Acts::AxisDirection::AxisY};
0125 }
0126
0127 private:
0128
0129 std::shared_ptr<const Acts::PlanarBounds> m_bounds;
0130 };
0131
0132 static_assert(Acts::RegularSurfaceConcept<SurfaceStub>,
0133 "SurfaceStub does not fulfill RegularSurfaceConcept");
0134
0135 }