Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-10-05 08:09:56

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/GeometryContext.hpp"
0013 #include "Acts/Geometry/Polyhedron.hpp"
0014 #include "Acts/Surfaces/LineSurface.hpp"
0015 #include "Acts/Surfaces/Surface.hpp"
0016 #include "Acts/Surfaces/SurfaceConcept.hpp"
0017 
0018 #include <iosfwd>
0019 #include <string>
0020 
0021 namespace Acts {
0022 
0023 /// @class PerigeeSurface
0024 ///
0025 /// Class describing the Line to which the Perigee refers to.
0026 /// The Surface axis is fixed to be the z-axis of the Tracking frame.
0027 /// It inherits from StraingLineSurface.
0028 ///
0029 /// @image html LineSurface.png
0030 class PerigeeSurface : public LineSurface {
0031   friend class Surface;
0032 
0033  protected:
0034   /// Constructor from GlobalPosition
0035   ///
0036   /// @param gp position where the perigee is centered
0037   explicit PerigeeSurface(const Vector3& gp);
0038 
0039   /// Constructor with a Transform - needed for tilt
0040   ///
0041   /// @param transform is the transform for position and tilting
0042   explicit PerigeeSurface(const Transform3& transform);
0043 
0044   /// Copy constructor
0045   ///
0046   /// @param other is the source surface to be copied
0047   PerigeeSurface(const PerigeeSurface& other);
0048 
0049   /// Copy constructor - with shift
0050   ///
0051   /// @param gctx The current geometry context object, e.g. alignment
0052   /// @param other is the source cone surface
0053   /// @param shift is the additional transform applied after copying
0054   PerigeeSurface(const GeometryContext& gctx, const PerigeeSurface& other,
0055                  const Transform3& shift);
0056 
0057  public:
0058   ~PerigeeSurface() override = default;
0059 
0060   /// Assignment operator
0061   ///
0062   /// @param other is the source surface to be assigned
0063   /// @return Reference to this surface for assignment chaining
0064   PerigeeSurface& operator=(const PerigeeSurface& other);
0065 
0066   /// Return the surface type
0067   /// @return Surface type identifier for perigee surfaces
0068   SurfaceType type() const final;
0069 
0070   /// Return properly formatted class name for screen output */
0071   /// @return String representation of the surface type name
0072   std::string name() const final;
0073 
0074   /// Return a Polyhedron for the surfaces
0075   ///
0076   /// @param gctx The current geometry context object, e.g. alignment
0077   /// @param ingoreSegments is an ignored parameter
0078   ///
0079   /// @return A list of vertices and a face/facett description of it
0080   Polyhedron polyhedronRepresentation(const GeometryContext& gctx,
0081                                       unsigned int ingoreSegments) const final;
0082 
0083  protected:
0084   /// Output Method for std::ostream
0085   ///
0086   /// @param gctx The current geometry context object, e.g. alignment
0087   /// @param sl is the ostream to be dumped into
0088   ///
0089   /// @return ostreamn object which was streamed into
0090   std::ostream& toStreamImpl(const GeometryContext& gctx,
0091                              std::ostream& sl) const final;
0092 };
0093 
0094 static_assert(SurfaceConcept<PerigeeSurface>,
0095               "PerigeeSurface does not fulfill SurfaceConcept");
0096 
0097 }  // namespace Acts