ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CylinderSurface.hpp
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file CylinderSurface.hpp
1 // This file is part of the Acts project.
2 //
3 // Copyright (C) 2016-2020 CERN for the benefit of the Acts project
4 //
5 // This Source Code Form is subject to the terms of the Mozilla Public
6 // License, v. 2.0. If a copy of the MPL was not distributed with this
7 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9 #pragma once
10 
11 #include <cmath>
12 
20 
21 namespace Acts {
22 
33 
34 class CylinderSurface : public Surface {
35  friend Surface;
36 
37  protected:
42  CylinderSurface(std::shared_ptr<const CylinderBounds> cbounds,
43  const DetectorElementBase& detelement);
44 
52  CylinderSurface(std::shared_ptr<const Transform3D> htrans, double radius,
53  double halfz, double halfphi = M_PI, double avphi = 0.);
54 
61  CylinderSurface(std::shared_ptr<const Transform3D> htrans,
62  const std::shared_ptr<const CylinderBounds>& cbounds);
63 
67  CylinderSurface(const CylinderSurface& other);
68 
75  const Transform3D& transf);
76 
77  public:
79  ~CylinderSurface() override = default;
80 
82  CylinderSurface() = delete;
83 
88 
96  BinningValue bValue) const final;
97 
107  const Vector3D& position,
108  const Vector3D& momentum) const final;
109 
111  SurfaceType type() const override;
112 
121  const Vector3D normal(const GeometryContext& gctx,
122  const Vector2D& lposition) const final;
123 
132  const Vector3D normal(const GeometryContext& gctx,
133  const Vector3D& position) const final;
134 
136  using Surface::normal;
137 
143  virtual const Vector3D rotSymmetryAxis(const GeometryContext& gctx) const;
144 
146  const CylinderBounds& bounds() const final;
147 
154  void localToGlobal(const GeometryContext& gctx, const Vector2D& lposition,
155  const Vector3D& momentum, Vector3D& position) const final;
156 
165  bool globalToLocal(const GeometryContext& gctx, const Vector3D& position,
166  const Vector3D& momentum, Vector2D& lposition) const final;
167 
179  const Vector3D& position,
180  const Vector3D& direction,
181  const BoundaryCheck& bcheck) const final;
182 
194  const Vector3D& position,
195  const Vector3D& direction,
196  const BoundaryCheck& bcheck) const final;
197 
205  double pathCorrection(const GeometryContext& gctx, const Vector3D& position,
206  const Vector3D& direction) const final;
207 
209  std::string name() const override;
210 
220  size_t lseg) const override;
221 
222  protected:
224 
225  private:
260  const Transform3D& transform, const Vector3D& position,
261  const Vector3D& direction) const;
262 };
263 
264 #include "Acts/Surfaces/detail/CylinderSurface.ipp"
265 
266 } // namespace Acts