27 std::unique_ptr<Trk::OverlapDescriptor> olap,
30 ,
Layer(laymatprop, thickness, std::move(olap), laytyp)
31 , m_approachDescriptor(nullptr)
40 std::unique_ptr<Trk::OverlapDescriptor> olap,
43 ,
Layer(laymatprop, thickness, std::move(olap), laytyp)
44 , m_approachDescriptor(nullptr)
51 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
53 std::unique_ptr<Trk::OverlapDescriptor> olap,
57 ,
Layer(std::move(surfaceArray), thickness, std::move(olap), laytyp)
58 , m_approachDescriptor(ades)
71 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
74 std::unique_ptr<Trk::OverlapDescriptor> olap,
78 ,
Layer(std::move(surfaceArray), laymatprop, thickness, std::move(olap), laytyp)
79 , m_approachDescriptor(ades)
92 std::unique_ptr<Trk::OverlapDescriptor> olap,
int laytyp)
94 Layer(laymatprop, thickness, std::move(olap), laytyp),
95 m_approachDescriptor(nullptr) {
100 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
102 std::unique_ptr<Trk::OverlapDescriptor> olap,
105 Layer(std::move(surfaceArray), thickness, std::move(olap), laytyp),
106 m_approachDescriptor(ades) {
118 Layer(std::move(surfaceArray), laymatprop, thickness, std::move(olap), laytyp),
119 m_approachDescriptor(ades) {
138 m_approachDescriptor(nullptr) {
147 if (m_surfaceArray) buildApproachDescriptor();
171 if (pastStep.perp() > parm.
position().perp())
181 if (pastStep.perp() > parm.
position().perp())
188 std::make_unique<Transforms>(shift * (m_transforms->transform));
190 if (m_approachDescriptor && m_approachDescriptor->rebuild()) {
192 buildApproachDescriptor();
204 double r = surfaceRepresentation().bounds().r();
215 if (layerMaterialBU && layerMaterialBU->
dimensions() > 1) {
216 size_t binsRPhi = layerMaterialBU->
max(0) + 1;
217 size_t binsZ = layerMaterialBU->
max(1) + 1;
229 if (m_approachDescriptor && m_approachDescriptor->rebuild()) {
231 buildApproachDescriptor();
240 if (m_approachDescriptor) {
243 m_approachDescriptor->approachSurfaces(
pos,
dir);
244 if (surfacesOnApproach) {
246 std::vector<Trk::Intersection> sfIntersections;
248 double aPathLength = 10e10;
250 for (
const auto& sfIter : (*surfacesOnApproach)) {
253 sfIter->straightLineIntersection(
pos,
dir,
true, bcheck);
260 if (aSurface)
return (*aSurface);
263 return surfaceRepresentation();
271 const Trk::ICompatibilityEstimator*)
const {
273 if (m_approachDescriptor && resolveSubSurfaces) {
275 return approachSurface(
pos,
double(pDir) *
mom.unit(), bcheck);
277 return surfaceRepresentation();
284 auto aSurfaces = std::make_unique<Trk::ApproachSurfaces>();
289 asTransform, m_bounds->r() - 0.5 * thickness(), m_bounds->halflengthZ()));
291 asTransform, m_bounds->r() + 0.5 * thickness(), m_bounds->halflengthZ()));
294 m_bounds->r() - 0.5 * thickness(), m_bounds->halflengthZ()));
296 m_bounds->r() + 0.5 * thickness(), m_bounds->halflengthZ()));
299 for (
auto& sIter : (*aSurfaces)) {
300 sIter->associateLayer(*
this);
303 m_approachDescriptor =
304 std::make_unique<Trk::ApproachDescriptor>(std::move(aSurfaces));
311 resizeLayer(vBounds, envelope);
321 if (m_approachDescriptor && m_approachDescriptor->rebuild())
322 buildApproachDescriptor();