Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-19 09:23:35

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 
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/GeometryContext.hpp"
0013 #include "Acts/Surfaces/LineBounds.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 <memory>
0021 #include <string>
0022 
0023 namespace Acts {
0024 
0025 class DetectorElementBase;
0026 struct Polyhedron;
0027 class LineBounds;
0028 
0029 ///  @class StrawSurface
0030 ///
0031 ///  Class for a StrawSurface in the TrackingGeometry
0032 ///  to describe dirft tube and straw like detectors.
0033 ///
0034 /// @image html LineSurface.png
0035 ///
0036 class StrawSurface : public LineSurface {
0037   friend class Surface;
0038 
0039  protected:
0040   /// Constructor from Transform3 and bounds
0041   ///
0042   /// @param transform the transform that positions the straw in the global
0043   /// frame
0044   /// @param radius is the straw radius
0045   /// @param halez is the half length in z
0046   StrawSurface(const Transform3& transform, double radius, double halez);
0047 
0048   /// Constructor from Transform3 and a shared bounds object
0049   ///
0050   /// @param transform the transform that positions the straw in the global
0051   /// frame
0052   /// @param lbounds are the bounds describing the straw dimensions, can be
0053   /// optionally nullptr
0054   StrawSurface(const Transform3& transform,
0055                std::shared_ptr<const LineBounds> lbounds = nullptr);
0056 
0057   /// Constructor from DetectorElementBase : Element proxy
0058   ///
0059   /// @param lbounds are the bounds describing the straw dimensions, they must
0060   /// not be nullptr
0061   /// @param detelement for which this surface is (at least) one representation
0062   StrawSurface(const std::shared_ptr<const LineBounds>& lbounds,
0063                const DetectorElementBase& detelement);
0064 
0065   /// Copy constructor
0066   ///
0067   /// @param other is the source surface for copying
0068   StrawSurface(const StrawSurface& other);
0069 
0070   /// Copy constructor - with shift
0071   ///
0072   /// @param gctx The current geometry context object, e.g. alignment
0073   /// @param other is the source cone surface
0074   /// @param shift is the additional transform applied after copying
0075   StrawSurface(const GeometryContext& gctx, const StrawSurface& other,
0076                const Transform3& shift);
0077 
0078  public:
0079   ~StrawSurface() override = default;
0080   StrawSurface() = delete;
0081 
0082   /// Assignment operator
0083   ///
0084   /// @param other is the source surface for copying
0085   StrawSurface& operator=(const StrawSurface& other);
0086 
0087   /// Return the surface type
0088   SurfaceType type() const final;
0089 
0090   /// Return properly formatted class name for screen output */
0091   std::string name() const final;
0092 
0093   /// Return a Polyhedron for the surfaces
0094   ///
0095   /// @param gctx The current geometry context object, e.g. alignment
0096   /// @param lseg Number of segments along curved lines, it represents
0097   /// the full 2*M_PI coverange, if lseg is set to 1 only the extrema
0098   /// are given @note if lseg is set to 1 then only the straw is created
0099   ///
0100   /// @return A list of vertices and a face/facett description of it
0101   Polyhedron polyhedronRepresentation(const GeometryContext& gctx,
0102                                       std::size_t lseg) const final;
0103 };
0104 
0105 inline Surface::SurfaceType StrawSurface::type() const {
0106   return Surface::Straw;
0107 }
0108 
0109 inline std::string Acts::StrawSurface::name() const {
0110   return "Acts::StrawSurface";
0111 }
0112 
0113 ACTS_STATIC_CHECK_CONCEPT(SurfaceConcept, StrawSurface);
0114 
0115 }  // namespace Acts