CMS 3D CMS Logo

Surface.h
Go to the documentation of this file.
1 #ifndef Geom_Surface_H
2 #define Geom_Surface_H
3 
5 
7 
10 
12 
14 #include <algorithm>
15 
19 namespace SurfaceOrientation {
22 } // namespace SurfaceOrientation
23 
24 //template <class T> class ReferenceCountingPointer;
25 
26 class Plane;
28 
39 public:
41 
43 
44  ~Surface() override {}
45 
46 protected:
47  Surface() {}
48  Surface(const PositionType& pos, const RotationType& rot) : Base(pos, rot) {}
49 
50  Surface(const PositionType& pos, const RotationType& rot, Bounds* bounds) : Base(pos, rot), theBounds(bounds) {}
51 
53  : Base(pos, rot), theMediumProperties(mp) {}
54 
56  : Base(pos, rot), theMediumProperties(mp), theBounds(bounds) {}
57 
58  Surface(const Surface& iSurface)
59  : ReferenceCountedInConditions(iSurface),
60  Base(iSurface),
61  theMediumProperties(iSurface.theMediumProperties),
62  theBounds(iSurface.theBounds) {}
63 
64  Surface(Surface&& iSurface)
65  : ReferenceCountedInConditions(iSurface),
66  Base(iSurface),
67  theMediumProperties(iSurface.theMediumProperties),
68  theBounds(std::move(iSurface.theBounds)) {}
69 
70 public:
75  virtual Side side(const LocalPoint& p, Scalar tolerance = 0) const = 0;
76  virtual Side side(const GlobalPoint& p, Scalar tolerance = 0) const { return side(toLocal(p), tolerance); }
77 
78  using Base::toGlobal;
79  using Base::toLocal;
80 
82  return GlobalPoint(rotation().multiplyInverse(lp.basicVector()) + position().basicVector());
83  }
84 
85  const MediumProperties& mediumProperties() const { return theMediumProperties; }
86 
87  void setMediumProperties(const MediumProperties& mp) { theMediumProperties = mp; }
88 
89  const Bounds& bounds() const { return *theBounds; }
90 
91  // here and not in plane because of PixelBarrelLayer::overlap
92  std::pair<float, float> const& phiSpan() const { return bounds().phiSpan(); }
93  std::pair<float, float> const& zSpan() const { return bounds().zSpan(); }
94  std::pair<float, float> const& rSpan() const { return bounds().rSpan(); }
95 
102  virtual ConstReferenceCountingPointer<TangentPlane> tangentPlane(const GlobalPoint&) const = 0;
105  virtual ConstReferenceCountingPointer<TangentPlane> tangentPlane(const LocalPoint&) const = 0;
106 
107 protected:
110 };
111 
112 #endif // Geom_Surface_H
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
MediumProperties theMediumProperties
Definition: Surface.h:108
Surface(const PositionType &pos, const RotationType &rot, MediumProperties mp)
Definition: Surface.h:52
Surface(Surface &&iSurface)
Definition: Surface.h:64
const double tolerance
~Surface() override
Definition: Surface.h:44
std::pair< float, float > const & zSpan() const
Definition: Surface.h:93
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Surface(const PositionType &pos, const RotationType &rot, MediumProperties mp, Bounds *bounds)
Definition: Surface.h:55
const Bounds & bounds() const
Definition: Surface.h:89
Surface(const Surface &iSurface)
Definition: Surface.h:58
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
Definition: Plane.h:16
Surface()
Definition: Surface.h:47
void setMediumProperties(const MediumProperties &mp)
Definition: Surface.h:87
std::pair< float, float > const & rSpan() const
Definition: Surface.h:94
const BasicVectorType & basicVector() const
Definition: PV2DBase.h:37
Plane(Args &&...args)
Definition: Plane.h:19
std::pair< float, float > const & phiSpan() const
Definition: Surface.h:92
Surface(const PositionType &pos, const RotationType &rot, Bounds *bounds)
Definition: Surface.h:50
static int position[264][3]
Definition: ReadPGInfo.cc:289
extstd::clone_ptr< Bounds > theBounds
Definition: Surface.h:109
virtual Side side(const GlobalPoint &p, Scalar tolerance=0) const
Definition: Surface.h:76
Definition: Bounds.h:20
const MediumProperties & mediumProperties() const
Definition: Surface.h:85
def move(src, dest)
Definition: eostools.py:511
Surface(const PositionType &pos, const RotationType &rot)
Definition: Surface.h:48