20 #include <boost/container/static_vector.hpp>
34 constexpr
static std::array<const char*, 3>
names = {
35 {
"missed/unreachable",
"reachable",
"onSurface"}};
37 os << names[static_cast<std::size_t>(
status)];
44 template <
unsigned int DIM>
62 constexpr
explicit operator bool()
const {
87 if ((aIntersection.
status() == Status::unreachable) &&
88 (bIntersection.
status() != Status::unreachable)) {
91 if ((aIntersection.
status() != Status::unreachable) &&
92 (bIntersection.
status() == Status::unreachable)) {
98 return std::abs(
a) < std::abs(
b);
121 template <
typename object_t,
typename representation_t =
object_t>
129 template <
typename T = representation_t,
132 const object_t*
object, std::uint8_t
index = 0)
145 const object_t*
object,
147 std::uint8_t
index = 0)
154 constexpr
explicit operator bool()
const {
210 template <
typename object_t,
typename representation_t =
object_t>
221 template <
typename T = representation_t,
224 const object_t*
object)
235 const object_t*
object,
242 std::uint8_t
index)
const {
256 for (std::size_t
i = 0;
i <
size(); ++
i) {
257 result.push_back(
operator[](
i));
263 auto splitIntersections =
split();
264 return *std::min_element(
265 splitIntersections.begin(), splitIntersections.end(),
293 template <
typename intersection_t,
typename logger_t = std::false_type>
297 const double cLimit = intersection.pathLength();
299 ACTS_VERBOSE(
" -> pLimit, oLimit, cLimit: " << pLimit <<
", " << oLimit
302 const bool coCriterion = cLimit > oLimit;
303 const bool cpCriterion = std::abs(cLimit) < std::abs(pLimit) +
tolerance;
305 const bool accept = coCriterion and cpCriterion;
310 ACTS_VERBOSE(
"Intersection is OUTSIDE limit because: ");
311 if (not coCriterion) {
313 << cLimit <<
" <= overstep limit " << oLimit);
315 if (not cpCriterion) {
317 << std::abs(cLimit) <<
" is over the path limit "
318 << (std::abs(pLimit) + tolerance)
319 <<
" (including tolerance of " << tolerance <<
")");