20 std::unique_ptr<Trk::OverlapDescriptor> olap,
int laytyp)
21 : m_surfaceArray(nullptr),
22 m_layerMaterialProperties(laymatprop.
clone()),
23 m_layerThickness(thickness),
24 m_overlapDescriptor(std::move(olap)),
25 m_previousLayer(nullptr),
27 m_binUtility(nullptr),
28 m_enclosingTrackingVolume(nullptr),
29 m_enclosingDetachedTrackingVolume(nullptr),
35 std::unique_ptr<Trk::OverlapDescriptor> olap,
int laytyp)
36 : m_surfaceArray(std::move(surfaceArray)),
37 m_layerMaterialProperties(nullptr),
38 m_layerThickness(thickness),
39 m_overlapDescriptor(std::move(olap)),
40 m_previousLayer(nullptr),
42 m_binUtility(nullptr),
43 m_enclosingTrackingVolume(nullptr),
44 m_enclosingDetachedTrackingVolume(nullptr),
52 std::unique_ptr<Trk::OverlapDescriptor> olap,
int laytyp)
53 : m_surfaceArray(std::move(surfaceArray)),
54 m_layerMaterialProperties(laymatprop.
clone()),
55 m_layerThickness(thickness),
56 m_overlapDescriptor(std::move(olap)),
57 m_previousLayer(nullptr),
59 m_binUtility(nullptr),
60 m_enclosingTrackingVolume(nullptr),
61 m_enclosingDetachedTrackingVolume(nullptr),
67 : m_surfaceArray(lay.m_surfaceArray ? lay.m_surfaceArray->
clone()
69 m_layerMaterialProperties(lay.m_layerMaterialProperties
70 ? lay.m_layerMaterialProperties->
clone()
72 m_layerThickness(lay.m_layerThickness),
74 lay.m_overlapDescriptor ? lay.m_overlapDescriptor->
clone() : nullptr),
75 m_previousLayer(nullptr),
77 m_binUtility(nullptr),
78 m_enclosingTrackingVolume(nullptr),
79 m_enclosingDetachedTrackingVolume(nullptr),
81 m_layerType(lay.m_layerType),
88 m_overlapDescriptor.reset(
108 if (m_surfaceArray)
return m_surfaceArray->object(gp);
113 if (m_surfaceArray)
return m_surfaceArray->object(lp);
120 if (m_surfaceArray) {
122 std::span<Trk::Surface const * const> surfaces = std::as_const(*m_surfaceArray).arrayObjects();
124 unsigned int rfSurfaces = surfaces.size();
125 if (
idx &&
idx < rfSurfaces)
return surfaces[
idx];
127 for (
unsigned int rsf = 0; rsf < rfSurfaces; ++rsf) {
128 referenceSurface = surfaces[rsf];
129 if (referenceSurface)
break;
132 return referenceSurface;
137 return (surfaceRepresentation())
138 .isOnSurface(gp, bchk, 0.5 * m_layerThickness);
142 if (!skipNavLayer)
return m_previousLayer;
143 const Trk::Layer* prevMatLayer = m_previousLayer;
152 if (!skipNavLayer)
return m_nextLayer;
157 nextMatLayer = nextMatLayer->
nextLayer();
164 if (!m_binUtility)
return nullptr;
165 return (m_binUtility->orderDirection(gp,
mom) ==
Trk::next) ? m_nextLayer
171 if (m_layerMaterialProperties){
172 return m_layerMaterialProperties->fullMaterial(parm.
position());
179 m_layerMaterialProperties.reset(prop.
clone());
181 (*(m_layerMaterialProperties)) *=
scale;
190 if (surfaceRepresentation().owner() ==
Trk::noOwn) {
195 if (m_surfaceArray) {
196 std::span<Trk::Surface * const> surfaces = m_surfaceArray->arrayObjects();
198 if (sIter && (*sIter).owner() ==
Trk::noOwn) {
212 const Trk::ICompatibilityEstimator*)
const {
213 return surfaceRepresentation();
217 std::vector<Trk::SurfaceIntersection>& cSurfaces,
221 const Trk::ICompatibilityEstimator* ice)
const {
222 return getCompatibleSurfaces(cSurfaces,
pars,
pdir, bcheck,
223 materialSurfacesOnly, startSurface, endSurface,
228 std::vector<Trk::SurfaceIntersection>& cSurfaces,
232 const Trk::ICompatibilityEstimator* ice)
const {
233 return getCompatibleSurfaces(cSurfaces,
pars,
pdir, bcheck,
234 materialSurfacesOnly, startSurface, endSurface,
239 return resolveSensitive && m_surfaceArray;