added documentation
All checks were successful
Build on RHEL8 / build (push) Successful in 3m10s
Build on RHEL9 / build (push) Successful in 3m12s

This commit is contained in:
2025-09-01 15:29:58 +02:00
parent 7926993bb2
commit 12114e7275
5 changed files with 73 additions and 16 deletions

View File

@@ -12,4 +12,11 @@ ClusterVector
:members: :members:
:undoc-members: :undoc-members:
:private-members: :private-members:
**Free Functions:**
.. doxygenfunction:: aare::reduce_to_3x3(const ClusterVector<Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>>&)
.. doxygenfunction:: aare::reduce_to_2x2(const ClusterVector<Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>>&)

View File

@@ -33,4 +33,17 @@ C++ functions that support the ClusterVector or to view it as a numpy array.
:members: :members:
:undoc-members: :undoc-members:
:show-inheritance: :show-inheritance:
:inherited-members: :inherited-members:
**Free Functions:**
.. autofunction:: reduce_to_3x3
:noindex:
Reduce a single Cluster to 3x3 by taking the 3x3 subcluster with highest photon energy.
.. autofunction:: reduce_to_2x2
:noindex:
Reduce a single Cluster to 2x2 by taking the 2x2 subcluster with highest photon energy.

View File

@@ -172,6 +172,12 @@ class ClusterVector<Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>> {
} }
}; };
/**
* @brief Reduce a cluster to a 2x2 cluster by selecting the 2x2 block with the
* highest sum.
* @param cv Clustervector containing clusters to reduce
* @return Clustervector with reduced clusters
*/
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY, template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
typename CoordType = uint16_t> typename CoordType = uint16_t>
ClusterVector<Cluster<T, 2, 2, CoordType>> reduce_to_2x2( ClusterVector<Cluster<T, 2, 2, CoordType>> reduce_to_2x2(
@@ -184,6 +190,12 @@ ClusterVector<Cluster<T, 2, 2, CoordType>> reduce_to_2x2(
return result; return result;
} }
/**
* @brief Reduce a cluster to a 3x3 cluster by selecting the 3x3 block with the
* highest sum.
* @param cv Clustervector containing clusters to reduce
* @return Clustervector with reduced clusters
*/
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY, template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
typename CoordType = uint16_t> typename CoordType = uint16_t>
ClusterVector<Cluster<T, 3, 3, CoordType>> reduce_to_3x3( ClusterVector<Cluster<T, 3, 3, CoordType>> reduce_to_3x3(

View File

@@ -24,7 +24,8 @@ void define_Cluster(py::module &m, const std::string &typestr) {
py::class_<Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType>>( py::class_<Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType>>(
m, class_name.c_str(), py::buffer_protocol()) m, class_name.c_str(), py::buffer_protocol())
.def(py::init([](uint8_t x, uint8_t y, py::array_t<Type> data) { .def(py::init([](uint8_t x, uint8_t y,
py::array_t<Type, py::array::forcecast> data) {
py::buffer_info buf_info = data.request(); py::buffer_info buf_info = data.request();
Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType> cluster; Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType> cluster;
cluster.x = x; cluster.x = x;
@@ -69,7 +70,9 @@ void reduce_to_3x3(py::module &m) {
[](const Cluster<T, ClusterSizeX, ClusterSizeY, CoordType> &cl) { [](const Cluster<T, ClusterSizeX, ClusterSizeY, CoordType> &cl) {
return reduce_to_3x3(cl); return reduce_to_3x3(cl);
}, },
py::return_value_policy::move); py::return_value_policy::move,
"Reduce cluster to 3x3 subcluster by taking the 3x3 subcluster with "
"the highest photon energy.");
} }
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY, template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
@@ -81,7 +84,9 @@ void reduce_to_2x2(py::module &m) {
[](const Cluster<T, ClusterSizeX, ClusterSizeY, CoordType> &cl) { [](const Cluster<T, ClusterSizeX, ClusterSizeY, CoordType> &cl) {
return reduce_to_2x2(cl); return reduce_to_2x2(cl);
}, },
py::return_value_policy::move); py::return_value_policy::move,
"Reduce cluster to 2x2 subcluster by taking the 2x2 subcluster with "
"the highest photon energy.");
} }
#pragma GCC diagnostic pop #pragma GCC diagnostic pop

View File

@@ -107,24 +107,44 @@ void define_ClusterVector(py::module &m, const std::string &typestr) {
template <typename Type, uint8_t ClusterSizeX, uint8_t ClusterSizeY, template <typename Type, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
typename CoordType = uint16_t> typename CoordType = uint16_t>
void define_2x2_reduction(py::module &m) { void define_2x2_reduction(py::module &m) {
m.def("reduce_to_2x2", m.def(
[](const ClusterVector< "reduce_to_2x2",
Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType>> &cv) { [](const ClusterVector<
return new ClusterVector<Cluster<Type, 2, 2, CoordType>>( Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType>> &cv) {
reduce_to_2x2(cv)); return new ClusterVector<Cluster<Type, 2, 2, CoordType>>(
}); reduce_to_2x2(cv));
},
R"(
Reduce cluster to 2x2 subcluster by taking the 2x2 subcluster with
the highest photon energy."
Parameters
----------
cv : ClusterVector
)",
py::arg("clustervector"));
} }
template <typename Type, uint8_t ClusterSizeX, uint8_t ClusterSizeY, template <typename Type, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
typename CoordType = uint16_t> typename CoordType = uint16_t>
void define_3x3_reduction(py::module &m) { void define_3x3_reduction(py::module &m) {
m.def("reduce_to_3x3", m.def(
[](const ClusterVector< "reduce_to_3x3",
Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType>> &cv) { [](const ClusterVector<
return new ClusterVector<Cluster<Type, 3, 3, CoordType>>( Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType>> &cv) {
reduce_to_3x3(cv)); return new ClusterVector<Cluster<Type, 3, 3, CoordType>>(
}); reduce_to_3x3(cv));
},
R"(
Reduce cluster to 3x3 subcluster by taking the 3x3 subcluster with
the highest photon energy."
Parameters
----------
cv : ClusterVector
)",
py::arg("clustervector"));
} }
#pragma GCC diagnostic pop #pragma GCC diagnostic pop