34{
35
36 cSurfaces.emplace_back(Trk::Intersection(pos, 0., true), &tsf);
37
38
39 const auto*
tmp = tsf.associatedDetectorElement();
40 const InDetDD::SiDetectorElement* sElement =
42 ?
static_cast<const InDetDD::SiDetectorElement*
>(
tmp)
43 : nullptr;
44 if (sElement) {
45 size_t newCapacity = cSurfaces.size();
47
50 newCapacity += 8;
51 } else {
52 newCapacity += 1;
54 newCapacity += 2;
55 }
56 }
57 cSurfaces.reserve(newCapacity);
58
59
61 double surfacePhi = tsf.center().phi() +
M_PI;
62 double positionPhi =
pos.phi() +
M_PI;
63
64
65 const InDetDD::SiDetectorElement* nElement = nullptr;
66
70
73
77
81
83
84 unsigned int next = 1;
85 const InDetDD::SiDetectorElement* currentElement = sElement->
nextInEta();
86 while (currentElement and next<(
unsigned int)
m_etaSlices) {
88 currentElement = currentElement->
nextInEta();
89 if (currentElement) {
92 }
94 }
95
96 unsigned int prev = 1;
98 while (currentElement and prev<(
unsigned int)
m_etaSlices) {
100 currentElement = currentElement->
prevInEta();
101 if (currentElement) {
104 }
105 prev++;
106 }
107
108 unsigned int next_phi = 0;
109 const InDetDD::SiDetectorElement* currentElementNextPhi = sElement->
nextInPhi()->
nextInPhi();
110 const InDetDD::SiDetectorElement* currentElementPrevPhi = sElement->
prevInPhi()->
prevInPhi();
111
115
116 unsigned int next_eta = 0;
117 const InDetDD::SiDetectorElement* currentElement_nextPhi = currentElementNextPhi;
118 const InDetDD::SiDetectorElement* currentElement_prevPhi = currentElementPrevPhi;
119 while (currentElement_nextPhi and currentElement_prevPhi and next_eta<(
unsigned int)
m_etaSlices) {
121 currentElement_nextPhi = currentElement_nextPhi->
nextInEta();
123 currentElement_prevPhi = currentElement_prevPhi->
nextInEta();
124 next_eta++;
125 }
126
127 unsigned int prev_eta = 0;
128 currentElement_nextPhi = currentElementNextPhi;
129 currentElement_prevPhi = currentElementPrevPhi;
130 while (currentElement_nextPhi and currentElement_prevPhi and prev_eta<(
unsigned int)
m_etaSlices) {
132 currentElement_nextPhi = currentElement_nextPhi->
prevInEta();
134 currentElement_prevPhi = currentElement_prevPhi->
prevInEta();
135 prev_eta++;
136 }
137
138 currentElementNextPhi = currentElementNextPhi->
nextInPhi();
139 currentElementPrevPhi = currentElementPrevPhi->
prevInPhi();
140
141 next_phi++;
142 }
143 }
144 } else {
145
146 if (surfacePhi < positionPhi) {
149 } else {
152 }
154
155 double positionEta =
pos.eta();
156 double surfaceEta = tsf.center().eta();
157
158 if (surfaceEta < positionEta) {
159
162 } else {
163
166 }
167 }
168 }
169 }
170 return false;
171}
#define addSurface(cur, surfaces)
#define addPrevInEta(cur, surfaces)
#define addNextInPhi(cur, surfaces)
#define addPrevInPhi(cur, surfaces)
#define addNextInEta(cur, surfaces)
const SiDetectorElement * prevInPhi() const
const SiDetectorElement * nextInPhi() const
const SiDetectorElement * prevInEta() const
const SiDetectorElement * nextInEta() const