Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:09:23

0001 // This file is part of the Acts project.
0002 //
0003 // Copyright (C) 2016-2020 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 http://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 #include "Acts/Definitions/Algebra.hpp"
0011 #include "Acts/Geometry/GeometryContext.hpp"
0012 #include "Acts/Geometry/Polyhedron.hpp"
0013 #include "Acts/Surfaces/InfiniteBounds.hpp"
0014 #include "Acts/Surfaces/LineSurface.hpp"
0015 #include "Acts/Surfaces/Surface.hpp"
0016 #include "Acts/Surfaces/SurfaceConcept.hpp"
0017 #include "Acts/Utilities/Concepts.hpp"
0018 
0019 #include <cstddef>
0020 #include <iosfwd>
0021 #include <string>
0022 
0023 namespace Acts {
0024 
0025 /// @class PerigeeSurface
0026 ///
0027 /// Class describing the Line to which the Perigee refers to.
0028 /// The Surface axis is fixed to be the z-axis of the Tracking frame.
0029 /// It inherits from StraingLineSurface.
0030 ///
0031 /// @image html LineSurface.png
0032 class PerigeeSurface : public LineSurface {
0033   friend class Surface;
0034 
0035  protected:
0036   /// Constructor from GlobalPosition
0037   ///
0038   /// @param gp position where the perigee is centered
0039   PerigeeSurface(const Vector3& gp);
0040 
0041   /// Constructor with a Transform - needed for tilt
0042   ///
0043   /// @param transform is the transform for position and tilting
0044   PerigeeSurface(const Transform3& transform);
0045 
0046   /// Copy constructor
0047   ///
0048   /// @param other is the source surface to be copied
0049   PerigeeSurface(const PerigeeSurface& other);
0050 
0051   /// Copy constructor - with shift
0052   ///
0053   /// @param gctx The current geometry context object, e.g. alignment
0054   /// @param other is the source cone surface
0055   /// @param shift is the additional transform applied after copying
0056   PerigeeSurface(const GeometryContext& gctx, const PerigeeSurface& other,
0057                  const Transform3& shift);
0058 
0059  public:
0060   /// Destructor - defaulted
0061   ~PerigeeSurface() override = default;
0062 
0063   /// Default Constructor - deleted
0064   PerigeeSurface() = delete;
0065 
0066   /// Assignment operator
0067   ///
0068   /// @param other is the source surface to be assigned
0069   PerigeeSurface& operator=(const PerigeeSurface& other);
0070 
0071   /// Return the surface type
0072   SurfaceType type() const final;
0073 
0074   /// Return properly formatted class name for screen output */
0075   std::string name() const final;
0076 
0077   /// Output Method for std::ostream
0078   ///
0079   /// @param gctx The current geometry context object, e.g. alignment
0080   /// @param sl is the ostream to be dumped into
0081   ///
0082   /// @return ostreamn object which was streamed into
0083   std::ostream& toStream(const GeometryContext& gctx,
0084                          std::ostream& sl) const final;
0085 
0086   /// Return a Polyhedron for the surfaces
0087   ///
0088   /// @param gctx The current geometry context object, e.g. alignment
0089   /// @param lseg is ignored for a perigee @note ignored
0090   ///
0091   /// @return A list of vertices and a face/facett description of it
0092   Polyhedron polyhedronRepresentation(const GeometryContext& gctx,
0093                                       std::size_t lseg) const final;
0094 };
0095 
0096 ACTS_STATIC_CHECK_CONCEPT(SurfaceConcept, PerigeeSurface);
0097 
0098 }  // namespace Acts