8 #ifndef LAR_KD_TREE_LINKER_TOOLS_TEMPLATED_H 9 #define LAR_KD_TREE_LINKER_TOOLS_TEMPLATED_H 1 11 #include "Api/PandoraContentApi.h" 13 #include "Objects/CaloHit.h" 14 #include "Objects/CartesianVector.h" 16 #include "Pandora/PandoraInternal.h" 21 namespace pandora {
class Algorithm; }
32 template<
unsigned DIM>
46 template<
typename... Ts>
62 template<
typename DATA,
unsigned DIM>
77 template<
typename... Ts>
81 std::array<float, DIM>
dims;
89 template <
typename DATA,
unsigned DIM>
135 static const pandora::CartesianVector &position(
const T *
const t);
148 std::pair<float,float>
minmax(
const float a,
const float b);
204 KDTreeCube
build_3d_kd_search_region(
const pandora::CaloHit *
const point,
const float x_span,
const float y_span,
const float z_span);
216 KDTreeCube
build_3d_kd_search_region(
const pandora::CartesianVector &pos,
const float x_span,
const float y_span,
const float z_span);
221 template<
unsigned DIM>
228 template<
unsigned DIM>
229 template<
typename... Ts>
232 static_assert(
sizeof...(dimargs) == 2 * DIM,
"Constructor requires 2*DIM args");
233 std::vector<float> dims = {dimargs...};
235 for (
unsigned i = 0; i < DIM; ++i)
237 dimmin[i] = dims[2 * i];
238 dimmax[i] = dims[2 * i + 1];
245 template<
typename DATA,
unsigned DIM>
253 template<
typename DATA,
unsigned DIM>
254 template<
typename... Ts>
264 template <
typename DATA,
unsigned DIM>
273 template <
typename DATA,
unsigned DIM>
282 template <
typename DATA,
unsigned DIM>
293 return t->GetPosition();
299 return t->GetPositionVector();
313 std::array<float, 2> minpos{ {0.f, 0.f} }, maxpos{ {0.f, 0.f} };
317 for (
const T *
const point : points)
320 nodes.emplace_back(point, pos.GetX(), pos.GetZ());
324 minpos[0] = pos.GetX(); minpos[1] = pos.GetZ();
325 maxpos[0] = pos.GetX(); maxpos[1] = pos.GetZ();
329 minpos[0] =
std::min(pos.GetX(), minpos[0]);
330 minpos[1] =
std::min(pos.GetZ(), minpos[1]);
331 maxpos[0] =
std::max(pos.GetX(), maxpos[0]);
332 maxpos[1] =
std::max(pos.GetZ(), maxpos[1]);
338 return KDTreeBox(minpos[0], maxpos[0], minpos[1], maxpos[1]);
346 std::array<float, 3> minpos{ {0.f, 0.f, 0.f} }, maxpos{ {0.f, 0.f, 0.f} };
350 for (
const T *
const point : points)
353 nodes.emplace_back(point, pos.GetX(), pos.GetY(), pos.GetZ());
357 minpos[0] = pos.GetX(); minpos[1] = pos.GetY(); minpos[2] = pos.GetZ();
358 maxpos[0] = pos.GetX(); maxpos[1] = pos.GetY(); maxpos[2] = pos.GetZ();
362 minpos[0] =
std::min(pos.GetX(), minpos[0]);
363 minpos[1] =
std::min(pos.GetY(), minpos[1]);
364 minpos[2] =
std::min(pos.GetZ(), minpos[2]);
365 maxpos[0] =
std::max(pos.GetX(), maxpos[0]);
366 maxpos[1] =
std::max(pos.GetY(), maxpos[1]);
367 maxpos[2] =
std::max(pos.GetZ(), maxpos[2]);
373 return KDTreeCube(minpos[0], maxpos[0], minpos[1], maxpos[1], minpos[2], maxpos[2]);
378 #endif // LAR_KD_TREE_LINKER_TOOLS_TEMPLATED_H
KDTreeCube fill_and_bound_3d_kd_tree(const MANAGED_CONTAINER< const T * > &points, std::vector< KDTreeNodeInfoT< const T *, 3 > > &nodes)
fill_and_bound_3d_kd_tree
constexpr auto const & right(const_AssnsIter< L, R, D, Dir > const &a, const_AssnsIter< L, R, D, Dir > const &b)
std::pair< float, float > minmax(const float a, const float b)
minmax
static const pandora::CartesianVector & position(const T *const t)
position
void setAttributs(const KDTreeBoxT< DIM > ®ionBox, const KDTreeNodeInfoT< DATA, DIM > &infoToStore)
setAttributs
Box structure used to define 2D field. It's used in KDTree building step to divide the detector space...
KDTreeBoxT< DIM > region
Region bounding box.
KDTreeNodeInfoT< DATA, DIM > info
Data.
std::array< float, DIM > dims
KDTreeNodeT< DATA, DIM > * right
Right son.
KDTreeCube build_3d_kd_search_region(const pandora::CaloHit *const point, const float x_span, const float y_span, const float z_span)
build_3d_kd_search_region
Data stored in each KDTree node. The dim1/dim2 fields are usually the duplication of some PFRecHit va...
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
KDTreeNodeT< DATA, DIM > * left
Left son.
KDTreeBoxT< 3 > KDTreeCube
KDTreeNodeInfoT()
Default constructor.
constexpr auto const & left(const_AssnsIter< L, R, D, Dir > const &a, const_AssnsIter< L, R, D, Dir > const &b)
std::array< float, DIM > dimmin
KDTreeNodeT()
Default constructor.
KDTreeBox fill_and_bound_2d_kd_tree(const MANAGED_CONTAINER< const T * > &points, std::vector< KDTreeNodeInfoT< const T *, 2 > > &nodes)
fill_and_bound_2d_kd_tree
std::array< float, DIM > dimmax
KDTreeBox build_2d_kd_search_region(const pandora::CaloHit *const point, const float x_span, const float z_span)
build_2d_kd_search_region
KDTreeBoxT< 2 > KDTreeBox