12 #include <tracking/trackFindingCDC/utilities/Product.h>
25 namespace TrackFindingCDC {
32 template<
class ABox, std::size_t... divisions>
33 class LinearDivision {
37 static const std::size_t
s_nSubBoxes = Product<divisions...>::value;
41 static constexpr std::size_t
s_divisions[
sizeof...(divisions)] = {divisions...};
45 explicit LinearDivision(
const typename ABox::Delta& overlaps =
typename ABox::Delta())
51 std::array<ABox, s_nSubBoxes>
operator()(
const ABox& box)
57 template<std::size_t... Is>
59 std::array<ABox, s_nSubBoxes>
60 makeSubBoxes(
const ABox& box, std::index_sequence<Is...> )
62 return {{
makeSubBox(box, Is, std::make_index_sequence<
sizeof...(divisions)>())... }};
67 template<std::size_t... Is>
70 std::size_t globalISubBox,
71 std::index_sequence<Is...> )
73 std::array<std::size_t,
sizeof...(divisions)> indices;
74 for (
size_t c_Index = 0 ; c_Index <
sizeof...(divisions); ++c_Index) {
75 indices[c_Index] = globalISubBox %
s_divisions[c_Index];
78 assert(globalISubBox == 0);
79 return ABox(box.template getDivisionBoundsWithOverlap<Is>(std::get<Is>(
m_overlaps),
91 template<
class ABox, std::size_t... divisions>
92 constexpr std::size_t LinearDivision<ABox, divisions...>::s_divisions[
sizeof...(divisions)];