20 std::unique_ptr<const Logger> mlogger)
21 : m_logger(std::move(mlogger)) {}
27 std::vector<DigitizationStep> cSteps;
30 auto& stepSurfaces = dmodule.
stepSurfaces(startPoint, endPoint);
33 Vector3D trackDirection((endPoint - startPoint).normalized());
36 std::vector<Acts::Intersection> stepIntersections;
37 stepIntersections.reserve(stepSurfaces.size() + 1);
40 for (
auto& sSurface : stepSurfaces) {
43 sSurface->intersectionEstimate(gctx, startPoint, trackDirection,
true);
44 if (
bool(sIntersection)) {
46 stepIntersections.push_back(sIntersection);
48 << sIntersection.
position.x() <<
", "
49 << sIntersection.
position.y() <<
", "
55 (startPoint - endPoint).
norm(),
56 Intersection::Status::reachable));
57 std::sort(stepIntersections.begin(), stepIntersections.end());
61 cSteps.reserve(stepIntersections.size());
62 for (
auto& sIntersection : stepIntersections) {
66 lastPosition = sIntersection.position;
80 Vector3D intersection3D(moduleIntersection.x(), moduleIntersection.y(), 0.);
83 std::vector<Acts::Intersection> boundaryIntersections;
85 for (
auto& bSurface : boundarySurfaces) {
90 gctx, intersection3D, trackDirection,
true);
91 if (
bool(bIntersection)) {
93 boundaryIntersections.push_back(bIntersection);
95 << bIntersection.
position.x() <<
", "
96 << bIntersection.
position.y() <<
", "
102 if (attempts == 2 && boundaryIntersections.size() == attempts) {
108 if (boundaryIntersections.size() > 2) {
110 "More than 2 Boundary Surfaces intersected, this is an edge "
111 "case, resolving ... ");
112 std::sort(boundaryIntersections.begin(), boundaryIntersections.end());
115 if (boundaryIntersections.empty()) {
116 return std::vector<Acts::DigitizationStep>();
119 return cellSteps(gctx, dmodule, boundaryIntersections[0].
position,
120 boundaryIntersections[1].position);