Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:11:04

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   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   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   /// Assignment operator
0059   ///
0060   /// @param other is the source surface to be assigned
0061   PerigeeSurface& operator=(const PerigeeSurface& other);
0062 
0063   /// Return the surface type
0064   SurfaceType type() const final;
0065 
0066   /// Return properly formatted class name for screen output */
0067   std::string name() const final;
0068 
0069   /// Return a Polyhedron for the surfaces
0070   ///
0071   /// @param gctx The current geometry context object, e.g. alignment
0072   /// @param ingoreSegments is an ignored parameter
0073   ///
0074   /// @return A list of vertices and a face/facett description of it
0075   Polyhedron polyhedronRepresentation(const GeometryContext& gctx,
0076                                       unsigned int ingoreSegments) const final;
0077 
0078  protected:
0079   /// Output Method for std::ostream
0080   ///
0081   /// @param gctx The current geometry context object, e.g. alignment
0082   /// @param sl is the ostream to be dumped into
0083   ///
0084   /// @return ostreamn object which was streamed into
0085   std::ostream& toStreamImpl(const GeometryContext& gctx,
0086                              std::ostream& sl) const final;
0087 };
0088 
0089 static_assert(SurfaceConcept<PerigeeSurface>,
0090               "PerigeeSurface does not fulfill SurfaceConcept");
0091 
0092 }  // namespace Acts