ATLAS Offline Software
Loading...
Searching...
No Matches
PixelOverlapDescriptor.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6// PixelOverlapDescriptor.h, (c) ATLAS Detector software
8
9#ifndef INDETTRACKINGGEOMETRY_PIXELOVERLAPDESCRIPTOR_H
10#define INDETTRACKINGGEOMETRY_PIXELOVERLAPDESCRIPTOR_H
11
12
13// Amg
15// Trk
18// STL include
19#include <atomic>
20
21#ifndef TRKDETDESCR_SIDETADDNEXTPHIETA
22#define TRKDETDESCR_SIDETADDNEXTPHIETA
23
24#define addSurface(cur, surfaces) \
25 if (cur) \
26 surfaces.emplace_back( \
27 Trk::Intersection(Amg::Vector3D(0., 0., 0.), 0., true), \
28 &(cur->surface(cur->identify())))
29
30#define addOtherSide(cur, surfaces) \
31 if (cur && cur->otherSide()) \
32 surfaces.emplace_back( \
33 Trk::Intersection(Amg::Vector3D(0., 0., 0.), 0., true), \
34 &(cur->otherSide()->surface(cur->otherSide()->identify())))
35
36#define addNextInPhi(cur, surfaces) \
37 addSurface(cur->nextInPhi(), surfaces); \
38 addOtherSide(cur->nextInPhi(), surfaces)
39
40#define addPrevInPhi(cur, surfaces) \
41 addSurface(cur->prevInPhi(), surfaces); \
42 addOtherSide(cur->prevInPhi(), surfaces)
43
44#define addNextInEta(cur, surfaces) \
45 addSurface(cur->nextInEta(), surfaces); \
46 addOtherSide(cur->nextInEta(), surfaces)
47
48#define addPrevInEta(cur, surfaces) \
49 addSurface(cur->prevInEta(), surfaces); \
50 addOtherSide(cur->prevInEta(), surfaces)
51#endif
52
53namespace Trk {
54 class Surface;
55}
56
57namespace InDetDD {
59}
60
61class PixelID;
62
63namespace InDet {
64
77 public:
78
80 PixelOverlapDescriptor(bool addMoreSurfaces = false, int eta_slices = 3, int phi_slices = 1);
81
84
87
89 bool reachableSurfaces(std::vector<Trk::SurfaceIntersection>& cSurfaces,
90 const Trk::Surface& sf,
91 const Amg::Vector3D& pos,
92 const Amg::Vector3D& dir) const;
93
94
95 private :
96 void addPhiNeighbours(std::vector<Trk::SurfaceIntersection>& cSurfaces,
97 InDetDD::SiDetectorElement& sElement) const;
98
99 bool dumpSurfaces(std::vector<Trk::SurfaceIntersection>& surfaces) const;
100
105 mutable std::atomic<const PixelID*> m_pixIdHelper{nullptr};
106 };
107
108
110
111
112
113}
114
115#endif
Class to hold geometrical description of a silicon detector element.
Class to describe overlaps in the pixel detector, it extends the Trk::OverlapDescriptor base class.
PixelOverlapDescriptor(bool addMoreSurfaces=false, int eta_slices=3, int phi_slices=1)
Constructor (area restriction, LC check)
bool reachableSurfaces(std::vector< Trk::SurfaceIntersection > &cSurfaces, const Trk::Surface &sf, const Amg::Vector3D &pos, const Amg::Vector3D &dir) const
get the compatible surfaces
virtual ~PixelOverlapDescriptor()
Destructor.
PixelOverlapDescriptor * clone() const
Pseudo-Constructor.
bool dumpSurfaces(std::vector< Trk::SurfaceIntersection > &surfaces) const
std::atomic< const PixelID * > m_pixIdHelper
void addPhiNeighbours(std::vector< Trk::SurfaceIntersection > &cSurfaces, InDetDD::SiDetectorElement &sElement) const
This is an Identifier helper class for the Pixel subdetector.
Definition PixelID.h:67
BaseClass to be overloaded for describing overlaps and next-by elements for the sub-detector implemen...
Abstract Base Class for tracking surfaces.
Eigen::Matrix< double, 3, 1 > Vector3D
Message Stream Member.
Primary Vertex Finder.
Ensure that the ATLAS eigen extensions are properly loaded.
#define private