24 std::shared_ptr<Trk::CylinderBounds> cbounds,
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::shared_ptr<Trk::CylinderBounds> cbounds,
52 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
54 std::unique_ptr<Trk::OverlapDescriptor> olap,
58 ,
Layer(std::move(surfaceArray), thickness, std::move(olap), laytyp)
59 , m_approachDescriptor(ades)
71 std::shared_ptr<Trk::CylinderBounds> cbounds,
72 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
75 std::unique_ptr<Trk::OverlapDescriptor> olap,
79 ,
Layer(std::move(surfaceArray), laymatprop, thickness, std::move(olap), laytyp)
80 , m_approachDescriptor(ades)
91 std::shared_ptr<Trk::CylinderBounds> cbounds,
94 std::unique_ptr<Trk::OverlapDescriptor> olap,
97 Layer(laymatprop, thickness, std::move(olap), laytyp),
98 m_approachDescriptor(nullptr) {
103 std::shared_ptr<Trk::CylinderBounds> cbounds,
104 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
106 std::unique_ptr<Trk::OverlapDescriptor> olap,
109 Layer(std::move(surfaceArray), thickness, std::move(olap), laytyp),
110 m_approachDescriptor(ades) {
118 std::shared_ptr<Trk::CylinderBounds> cbounds,
119 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
122 std::unique_ptr<Trk::OverlapDescriptor> olap,
125 Layer(std::move(surfaceArray), laymatprop, thickness, std::move(olap), laytyp),
126 m_approachDescriptor(ades) {
136 m_approachDescriptor(nullptr) {
147 m_approachDescriptor(nullptr) {
158 if (m_surfaceArray) buildApproachDescriptor();
182 if (pastStep.perp() > parm.
position().perp())
192 if (pastStep.perp() > parm.
position().perp())
199 std::make_unique<Transforms>(shift * (m_transforms->transform));
201 if (m_approachDescriptor && m_approachDescriptor->rebuild()) {
203 buildApproachDescriptor();
215 double r = surfaceRepresentation().bounds().r();
220 std::shared_ptr<Trk::CylinderBounds>(rCylinderBounds);
226 if (layerMaterialBU && layerMaterialBU->
dimensions() > 1) {
227 size_t binsRPhi = layerMaterialBU->
max(0) + 1;
228 size_t binsZ = layerMaterialBU->
max(1) + 1;
240 if (m_approachDescriptor && m_approachDescriptor->rebuild()) {
242 buildApproachDescriptor();
251 if (m_approachDescriptor) {
254 m_approachDescriptor->approachSurfaces(
pos,
dir);
255 if (surfacesOnApproach) {
257 std::vector<Trk::Intersection> sfIntersections;
259 double aPathLength = 10e10;
261 for (
const auto& sfIter : (*surfacesOnApproach)) {
264 sfIter->straightLineIntersection(
pos,
dir,
true, bcheck);
271 if (aSurface)
return (*aSurface);
274 return surfaceRepresentation();
282 const Trk::ICompatibilityEstimator*)
const {
284 if (m_approachDescriptor && resolveSubSurfaces) {
286 return approachSurface(
pos,
double(pDir) *
mom.unit(), bcheck);
288 return surfaceRepresentation();
295 auto aSurfaces = std::make_unique<Trk::ApproachSurfaces>();
300 asTransform, m_bounds->r() - 0.5 * thickness(), m_bounds->halflengthZ()));
302 asTransform, m_bounds->r() + 0.5 * thickness(), m_bounds->halflengthZ()));
305 m_bounds->r() - 0.5 * thickness(), m_bounds->halflengthZ()));
307 m_bounds->r() + 0.5 * thickness(), m_bounds->halflengthZ()));
310 for (
auto& sIter : (*aSurfaces)) {
311 sIter->associateLayer(*
this);
314 m_approachDescriptor =
315 std::make_unique<Trk::ApproachDescriptor>(std::move(aSurfaces));
322 resizeLayer(vBounds, envelope);
332 if (m_approachDescriptor && m_approachDescriptor->rebuild())
333 buildApproachDescriptor();