mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2025-06-06 12:50:40 +02:00
split up and renamed python bindings for cluster related functions and classes
This commit is contained in:
parent
9ecf4f4b44
commit
0422407071
64
python/src/bind_Cluster.hpp
Normal file
64
python/src/bind_Cluster.hpp
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#include "aare/Cluster.hpp"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <fmt/format.h>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
#include <pybind11/numpy.h>
|
||||||
|
#include <pybind11/stl.h>
|
||||||
|
#include <pybind11/stl_bind.h>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
using pd_type = double;
|
||||||
|
|
||||||
|
using namespace aare;
|
||||||
|
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
|
|
||||||
|
template <typename Type, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
||||||
|
typename CoordType>
|
||||||
|
void define_Cluster(py::module &m, const std::string &typestr) {
|
||||||
|
auto class_name = fmt::format("Cluster{}", typestr);
|
||||||
|
|
||||||
|
py::class_<Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType>>(
|
||||||
|
m, class_name.c_str(), py::buffer_protocol())
|
||||||
|
|
||||||
|
.def(py::init([](uint8_t x, uint8_t y, py::array_t<Type> data) {
|
||||||
|
py::buffer_info buf_info = data.request();
|
||||||
|
Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType> cluster;
|
||||||
|
cluster.x = x;
|
||||||
|
cluster.y = y;
|
||||||
|
auto r = data.template unchecked<1>(); // no bounds checks
|
||||||
|
for (py::ssize_t i = 0; i < data.size(); ++i) {
|
||||||
|
cluster.data[i] = r(i);
|
||||||
|
}
|
||||||
|
return cluster;
|
||||||
|
}));
|
||||||
|
|
||||||
|
/*
|
||||||
|
//TODO! Review if to keep or not
|
||||||
|
.def_property(
|
||||||
|
"data",
|
||||||
|
[](ClusterType &c) -> py::array {
|
||||||
|
return py::array(py::buffer_info(
|
||||||
|
c.data, sizeof(Type),
|
||||||
|
py::format_descriptor<Type>::format(), // Type
|
||||||
|
// format
|
||||||
|
1, // Number of dimensions
|
||||||
|
{static_cast<ssize_t>(ClusterSizeX *
|
||||||
|
ClusterSizeY)}, // Shape (flattened)
|
||||||
|
{sizeof(Type)} // Stride (step size between elements)
|
||||||
|
));
|
||||||
|
},
|
||||||
|
[](ClusterType &c, py::array_t<Type> arr) {
|
||||||
|
py::buffer_info buf_info = arr.request();
|
||||||
|
Type *ptr = static_cast<Type *>(buf_info.ptr);
|
||||||
|
std::copy(ptr, ptr + ClusterSizeX * ClusterSizeY,
|
||||||
|
c.data); // TODO dont iterate over centers!!!
|
||||||
|
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma GCC diagnostic pop
|
46
python/src/bind_ClusterCollector.hpp
Normal file
46
python/src/bind_ClusterCollector.hpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include "aare/ClusterCollector.hpp"
|
||||||
|
#include "aare/ClusterFileSink.hpp"
|
||||||
|
#include "aare/ClusterFinder.hpp"
|
||||||
|
#include "aare/ClusterFinderMT.hpp"
|
||||||
|
#include "aare/ClusterVector.hpp"
|
||||||
|
#include "aare/NDView.hpp"
|
||||||
|
#include "aare/Pedestal.hpp"
|
||||||
|
#include "np_helper.hpp"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
#include <pybind11/stl.h>
|
||||||
|
#include <pybind11/stl_bind.h>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
using pd_type = double;
|
||||||
|
|
||||||
|
using namespace aare;
|
||||||
|
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
||||||
|
typename CoordType = uint16_t>
|
||||||
|
void define_ClusterCollector(py::module &m,
|
||||||
|
const std::string &typestr) {
|
||||||
|
auto class_name = fmt::format("ClusterCollector_{}", typestr);
|
||||||
|
|
||||||
|
using ClusterType = Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>;
|
||||||
|
|
||||||
|
py::class_<ClusterCollector<ClusterType>>(m, class_name.c_str())
|
||||||
|
.def(py::init<ClusterFinderMT<ClusterType, uint16_t, double> *>())
|
||||||
|
.def("stop", &ClusterCollector<ClusterType>::stop)
|
||||||
|
.def(
|
||||||
|
"steal_clusters",
|
||||||
|
[](ClusterCollector<ClusterType> &self) {
|
||||||
|
auto v = new std::vector<ClusterVector<ClusterType>>(
|
||||||
|
self.steal_clusters());
|
||||||
|
return v; // TODO change!!!
|
||||||
|
},
|
||||||
|
py::return_value_policy::take_ownership);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma GCC diagnostic pop
|
@ -21,7 +21,7 @@ using namespace ::aare;
|
|||||||
|
|
||||||
template <typename Type, uint8_t CoordSizeX, uint8_t CoordSizeY,
|
template <typename Type, uint8_t CoordSizeX, uint8_t CoordSizeY,
|
||||||
typename CoordType = uint16_t>
|
typename CoordType = uint16_t>
|
||||||
void define_cluster_file_io_bindings(py::module &m,
|
void define_ClusterFile(py::module &m,
|
||||||
const std::string &typestr) {
|
const std::string &typestr) {
|
||||||
|
|
||||||
using ClusterType = Cluster<Type, CoordSizeX, CoordSizeY, CoordType>;
|
using ClusterType = Cluster<Type, CoordSizeX, CoordSizeY, CoordType>;
|
44
python/src/bind_ClusterFileSink.hpp
Normal file
44
python/src/bind_ClusterFileSink.hpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#include "aare/ClusterCollector.hpp"
|
||||||
|
#include "aare/ClusterFileSink.hpp"
|
||||||
|
#include "aare/ClusterFinder.hpp"
|
||||||
|
#include "aare/ClusterFinderMT.hpp"
|
||||||
|
#include "aare/ClusterVector.hpp"
|
||||||
|
#include "aare/NDView.hpp"
|
||||||
|
#include "aare/Pedestal.hpp"
|
||||||
|
#include "np_helper.hpp"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
#include <pybind11/stl.h>
|
||||||
|
#include <pybind11/stl_bind.h>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
using pd_type = double;
|
||||||
|
|
||||||
|
using namespace aare;
|
||||||
|
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
||||||
|
typename CoordType = uint16_t>
|
||||||
|
void define_ClusterFileSink(py::module &m,
|
||||||
|
const std::string &typestr) {
|
||||||
|
auto class_name = fmt::format("ClusterFileSink_{}", typestr);
|
||||||
|
|
||||||
|
using ClusterType = Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>;
|
||||||
|
|
||||||
|
py::class_<ClusterFileSink<ClusterType>>(m, class_name.c_str())
|
||||||
|
.def(py::init<ClusterFinderMT<ClusterType, uint16_t, double> *,
|
||||||
|
const std::filesystem::path &>())
|
||||||
|
.def("stop", &ClusterFileSink<ClusterType>::stop);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma GCC diagnostic pop
|
77
python/src/bind_ClusterFinder.hpp
Normal file
77
python/src/bind_ClusterFinder.hpp
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#include "aare/ClusterCollector.hpp"
|
||||||
|
#include "aare/ClusterFileSink.hpp"
|
||||||
|
#include "aare/ClusterFinder.hpp"
|
||||||
|
#include "aare/ClusterFinderMT.hpp"
|
||||||
|
#include "aare/ClusterVector.hpp"
|
||||||
|
#include "aare/NDView.hpp"
|
||||||
|
#include "aare/Pedestal.hpp"
|
||||||
|
#include "np_helper.hpp"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
#include <pybind11/stl.h>
|
||||||
|
#include <pybind11/stl_bind.h>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
using pd_type = double;
|
||||||
|
|
||||||
|
using namespace aare;
|
||||||
|
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
|
|
||||||
|
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
||||||
|
typename CoordType = uint16_t>
|
||||||
|
void define_ClusterFinder(py::module &m, const std::string &typestr) {
|
||||||
|
auto class_name = fmt::format("ClusterFinder_{}", typestr);
|
||||||
|
|
||||||
|
using ClusterType = Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>;
|
||||||
|
|
||||||
|
py::class_<ClusterFinder<ClusterType, uint16_t, pd_type>>(
|
||||||
|
m, class_name.c_str())
|
||||||
|
.def(py::init<Shape<2>, pd_type, size_t>(), py::arg("image_size"),
|
||||||
|
py::arg("n_sigma") = 5.0, py::arg("capacity") = 1'000'000)
|
||||||
|
.def("push_pedestal_frame",
|
||||||
|
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self,
|
||||||
|
py::array_t<uint16_t> frame) {
|
||||||
|
auto view = make_view_2d(frame);
|
||||||
|
self.push_pedestal_frame(view);
|
||||||
|
})
|
||||||
|
.def("clear_pedestal",
|
||||||
|
&ClusterFinder<ClusterType, uint16_t, pd_type>::clear_pedestal)
|
||||||
|
.def_property_readonly(
|
||||||
|
"pedestal",
|
||||||
|
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self) {
|
||||||
|
auto pd = new NDArray<pd_type, 2>{};
|
||||||
|
*pd = self.pedestal();
|
||||||
|
return return_image_data(pd);
|
||||||
|
})
|
||||||
|
.def_property_readonly(
|
||||||
|
"noise",
|
||||||
|
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self) {
|
||||||
|
auto arr = new NDArray<pd_type, 2>{};
|
||||||
|
*arr = self.noise();
|
||||||
|
return return_image_data(arr);
|
||||||
|
})
|
||||||
|
.def(
|
||||||
|
"steal_clusters",
|
||||||
|
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self,
|
||||||
|
bool realloc_same_capacity) {
|
||||||
|
ClusterVector<ClusterType> clusters =
|
||||||
|
self.steal_clusters(realloc_same_capacity);
|
||||||
|
return clusters;
|
||||||
|
},
|
||||||
|
py::arg("realloc_same_capacity") = false)
|
||||||
|
.def(
|
||||||
|
"find_clusters",
|
||||||
|
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self,
|
||||||
|
py::array_t<uint16_t> frame, uint64_t frame_number) {
|
||||||
|
auto view = make_view_2d(frame);
|
||||||
|
self.find_clusters(view, frame_number);
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
py::arg(), py::arg("frame_number") = 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma GCC diagnostic pop
|
81
python/src/bind_ClusterFinderMT.hpp
Normal file
81
python/src/bind_ClusterFinderMT.hpp
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
#include "aare/ClusterCollector.hpp"
|
||||||
|
#include "aare/ClusterFileSink.hpp"
|
||||||
|
#include "aare/ClusterFinder.hpp"
|
||||||
|
#include "aare/ClusterFinderMT.hpp"
|
||||||
|
#include "aare/ClusterVector.hpp"
|
||||||
|
#include "aare/NDView.hpp"
|
||||||
|
#include "aare/Pedestal.hpp"
|
||||||
|
#include "np_helper.hpp"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
#include <pybind11/stl.h>
|
||||||
|
#include <pybind11/stl_bind.h>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
using pd_type = double;
|
||||||
|
|
||||||
|
using namespace aare;
|
||||||
|
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
|
|
||||||
|
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
||||||
|
typename CoordType = uint16_t>
|
||||||
|
void define_ClusterFinderMT(py::module &m,
|
||||||
|
const std::string &typestr) {
|
||||||
|
auto class_name = fmt::format("ClusterFinderMT_{}", typestr);
|
||||||
|
|
||||||
|
using ClusterType = Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>;
|
||||||
|
|
||||||
|
py::class_<ClusterFinderMT<ClusterType, uint16_t, pd_type>>(
|
||||||
|
m, class_name.c_str())
|
||||||
|
.def(py::init<Shape<2>, pd_type, size_t, size_t>(),
|
||||||
|
py::arg("image_size"), py::arg("n_sigma") = 5.0,
|
||||||
|
py::arg("capacity") = 2048, py::arg("n_threads") = 3)
|
||||||
|
.def("push_pedestal_frame",
|
||||||
|
[](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self,
|
||||||
|
py::array_t<uint16_t> frame) {
|
||||||
|
auto view = make_view_2d(frame);
|
||||||
|
self.push_pedestal_frame(view);
|
||||||
|
})
|
||||||
|
.def(
|
||||||
|
"find_clusters",
|
||||||
|
[](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self,
|
||||||
|
py::array_t<uint16_t> frame, uint64_t frame_number) {
|
||||||
|
auto view = make_view_2d(frame);
|
||||||
|
self.find_clusters(view, frame_number);
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
py::arg(), py::arg("frame_number") = 0)
|
||||||
|
.def_property_readonly("cluster_size", [](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self){
|
||||||
|
return py::make_tuple(ClusterSizeX, ClusterSizeY);
|
||||||
|
})
|
||||||
|
.def("clear_pedestal",
|
||||||
|
&ClusterFinderMT<ClusterType, uint16_t, pd_type>::clear_pedestal)
|
||||||
|
.def("sync", &ClusterFinderMT<ClusterType, uint16_t, pd_type>::sync)
|
||||||
|
.def("stop", &ClusterFinderMT<ClusterType, uint16_t, pd_type>::stop)
|
||||||
|
.def("start", &ClusterFinderMT<ClusterType, uint16_t, pd_type>::start)
|
||||||
|
.def(
|
||||||
|
"pedestal",
|
||||||
|
[](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self,
|
||||||
|
size_t thread_index) {
|
||||||
|
auto pd = new NDArray<pd_type, 2>{};
|
||||||
|
*pd = self.pedestal(thread_index);
|
||||||
|
return return_image_data(pd);
|
||||||
|
},
|
||||||
|
py::arg("thread_index") = 0)
|
||||||
|
.def(
|
||||||
|
"noise",
|
||||||
|
[](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self,
|
||||||
|
size_t thread_index) {
|
||||||
|
auto arr = new NDArray<pd_type, 2>{};
|
||||||
|
*arr = self.noise(thread_index);
|
||||||
|
return return_image_data(arr);
|
||||||
|
},
|
||||||
|
py::arg("thread_index") = 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma GCC diagnostic pop
|
@ -101,4 +101,6 @@ void define_ClusterVector(py::module &m, const std::string &typestr) {
|
|||||||
|
|
||||||
return hitmap;
|
return hitmap;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma GCC diagnostic pop
|
@ -1,211 +0,0 @@
|
|||||||
#include "aare/ClusterCollector.hpp"
|
|
||||||
#include "aare/ClusterFileSink.hpp"
|
|
||||||
#include "aare/ClusterFinder.hpp"
|
|
||||||
#include "aare/ClusterFinderMT.hpp"
|
|
||||||
#include "aare/ClusterVector.hpp"
|
|
||||||
#include "aare/NDView.hpp"
|
|
||||||
#include "aare/Pedestal.hpp"
|
|
||||||
#include "np_helper.hpp"
|
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
#include <filesystem>
|
|
||||||
#include <pybind11/pybind11.h>
|
|
||||||
#include <pybind11/stl.h>
|
|
||||||
#include <pybind11/stl_bind.h>
|
|
||||||
|
|
||||||
namespace py = pybind11;
|
|
||||||
using pd_type = double;
|
|
||||||
|
|
||||||
using namespace aare;
|
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
|
||||||
|
|
||||||
template <typename Type, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
|
||||||
typename CoordType>
|
|
||||||
void define_cluster(py::module &m, const std::string &typestr) {
|
|
||||||
auto class_name = fmt::format("Cluster{}", typestr);
|
|
||||||
|
|
||||||
py::class_<Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType>>(
|
|
||||||
m, class_name.c_str(), py::buffer_protocol())
|
|
||||||
|
|
||||||
.def(py::init([](uint8_t x, uint8_t y, py::array_t<Type> data) {
|
|
||||||
py::buffer_info buf_info = data.request();
|
|
||||||
Cluster<Type, ClusterSizeX, ClusterSizeY, CoordType> cluster;
|
|
||||||
cluster.x = x;
|
|
||||||
cluster.y = y;
|
|
||||||
auto r = data.template unchecked<1>(); // no bounds checks
|
|
||||||
for (py::ssize_t i = 0; i < data.size(); ++i) {
|
|
||||||
cluster.data[i] = r(i);
|
|
||||||
}
|
|
||||||
return cluster;
|
|
||||||
}));
|
|
||||||
|
|
||||||
/*
|
|
||||||
.def_property(
|
|
||||||
"data",
|
|
||||||
[](ClusterType &c) -> py::array {
|
|
||||||
return py::array(py::buffer_info(
|
|
||||||
c.data, sizeof(Type),
|
|
||||||
py::format_descriptor<Type>::format(), // Type
|
|
||||||
// format
|
|
||||||
1, // Number of dimensions
|
|
||||||
{static_cast<ssize_t>(ClusterSizeX *
|
|
||||||
ClusterSizeY)}, // Shape (flattened)
|
|
||||||
{sizeof(Type)} // Stride (step size between elements)
|
|
||||||
));
|
|
||||||
},
|
|
||||||
[](ClusterType &c, py::array_t<Type> arr) {
|
|
||||||
py::buffer_info buf_info = arr.request();
|
|
||||||
Type *ptr = static_cast<Type *>(buf_info.ptr);
|
|
||||||
std::copy(ptr, ptr + ClusterSizeX * ClusterSizeY,
|
|
||||||
c.data); // TODO dont iterate over centers!!!
|
|
||||||
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
|
||||||
typename CoordType = uint16_t>
|
|
||||||
void define_cluster_finder_mt_bindings(py::module &m,
|
|
||||||
const std::string &typestr) {
|
|
||||||
auto class_name = fmt::format("ClusterFinderMT_{}", typestr);
|
|
||||||
|
|
||||||
using ClusterType = Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>;
|
|
||||||
|
|
||||||
py::class_<ClusterFinderMT<ClusterType, uint16_t, pd_type>>(
|
|
||||||
m, class_name.c_str())
|
|
||||||
.def(py::init<Shape<2>, pd_type, size_t, size_t>(),
|
|
||||||
py::arg("image_size"), py::arg("n_sigma") = 5.0,
|
|
||||||
py::arg("capacity") = 2048, py::arg("n_threads") = 3)
|
|
||||||
.def("push_pedestal_frame",
|
|
||||||
[](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self,
|
|
||||||
py::array_t<uint16_t> frame) {
|
|
||||||
auto view = make_view_2d(frame);
|
|
||||||
self.push_pedestal_frame(view);
|
|
||||||
})
|
|
||||||
.def(
|
|
||||||
"find_clusters",
|
|
||||||
[](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self,
|
|
||||||
py::array_t<uint16_t> frame, uint64_t frame_number) {
|
|
||||||
auto view = make_view_2d(frame);
|
|
||||||
self.find_clusters(view, frame_number);
|
|
||||||
return;
|
|
||||||
},
|
|
||||||
py::arg(), py::arg("frame_number") = 0)
|
|
||||||
.def_property_readonly("cluster_size", [](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self){
|
|
||||||
return py::make_tuple(ClusterSizeX, ClusterSizeY);
|
|
||||||
})
|
|
||||||
.def("clear_pedestal",
|
|
||||||
&ClusterFinderMT<ClusterType, uint16_t, pd_type>::clear_pedestal)
|
|
||||||
.def("sync", &ClusterFinderMT<ClusterType, uint16_t, pd_type>::sync)
|
|
||||||
.def("stop", &ClusterFinderMT<ClusterType, uint16_t, pd_type>::stop)
|
|
||||||
.def("start", &ClusterFinderMT<ClusterType, uint16_t, pd_type>::start)
|
|
||||||
.def(
|
|
||||||
"pedestal",
|
|
||||||
[](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self,
|
|
||||||
size_t thread_index) {
|
|
||||||
auto pd = new NDArray<pd_type, 2>{};
|
|
||||||
*pd = self.pedestal(thread_index);
|
|
||||||
return return_image_data(pd);
|
|
||||||
},
|
|
||||||
py::arg("thread_index") = 0)
|
|
||||||
.def(
|
|
||||||
"noise",
|
|
||||||
[](ClusterFinderMT<ClusterType, uint16_t, pd_type> &self,
|
|
||||||
size_t thread_index) {
|
|
||||||
auto arr = new NDArray<pd_type, 2>{};
|
|
||||||
*arr = self.noise(thread_index);
|
|
||||||
return return_image_data(arr);
|
|
||||||
},
|
|
||||||
py::arg("thread_index") = 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
|
||||||
typename CoordType = uint16_t>
|
|
||||||
void define_cluster_collector_bindings(py::module &m,
|
|
||||||
const std::string &typestr) {
|
|
||||||
auto class_name = fmt::format("ClusterCollector_{}", typestr);
|
|
||||||
|
|
||||||
using ClusterType = Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>;
|
|
||||||
|
|
||||||
py::class_<ClusterCollector<ClusterType>>(m, class_name.c_str())
|
|
||||||
.def(py::init<ClusterFinderMT<ClusterType, uint16_t, double> *>())
|
|
||||||
.def("stop", &ClusterCollector<ClusterType>::stop)
|
|
||||||
.def(
|
|
||||||
"steal_clusters",
|
|
||||||
[](ClusterCollector<ClusterType> &self) {
|
|
||||||
auto v = new std::vector<ClusterVector<ClusterType>>(
|
|
||||||
self.steal_clusters());
|
|
||||||
return v; // TODO change!!!
|
|
||||||
},
|
|
||||||
py::return_value_policy::take_ownership);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
|
||||||
typename CoordType = uint16_t>
|
|
||||||
void define_cluster_file_sink_bindings(py::module &m,
|
|
||||||
const std::string &typestr) {
|
|
||||||
auto class_name = fmt::format("ClusterFileSink_{}", typestr);
|
|
||||||
|
|
||||||
using ClusterType = Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>;
|
|
||||||
|
|
||||||
py::class_<ClusterFileSink<ClusterType>>(m, class_name.c_str())
|
|
||||||
.def(py::init<ClusterFinderMT<ClusterType, uint16_t, double> *,
|
|
||||||
const std::filesystem::path &>())
|
|
||||||
.def("stop", &ClusterFileSink<ClusterType>::stop);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
|
||||||
typename CoordType = uint16_t>
|
|
||||||
void define_cluster_finder_bindings(py::module &m, const std::string &typestr) {
|
|
||||||
auto class_name = fmt::format("ClusterFinder_{}", typestr);
|
|
||||||
|
|
||||||
using ClusterType = Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>;
|
|
||||||
|
|
||||||
py::class_<ClusterFinder<ClusterType, uint16_t, pd_type>>(
|
|
||||||
m, class_name.c_str())
|
|
||||||
.def(py::init<Shape<2>, pd_type, size_t>(), py::arg("image_size"),
|
|
||||||
py::arg("n_sigma") = 5.0, py::arg("capacity") = 1'000'000)
|
|
||||||
.def("push_pedestal_frame",
|
|
||||||
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self,
|
|
||||||
py::array_t<uint16_t> frame) {
|
|
||||||
auto view = make_view_2d(frame);
|
|
||||||
self.push_pedestal_frame(view);
|
|
||||||
})
|
|
||||||
.def("clear_pedestal",
|
|
||||||
&ClusterFinder<ClusterType, uint16_t, pd_type>::clear_pedestal)
|
|
||||||
.def_property_readonly(
|
|
||||||
"pedestal",
|
|
||||||
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self) {
|
|
||||||
auto pd = new NDArray<pd_type, 2>{};
|
|
||||||
*pd = self.pedestal();
|
|
||||||
return return_image_data(pd);
|
|
||||||
})
|
|
||||||
.def_property_readonly(
|
|
||||||
"noise",
|
|
||||||
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self) {
|
|
||||||
auto arr = new NDArray<pd_type, 2>{};
|
|
||||||
*arr = self.noise();
|
|
||||||
return return_image_data(arr);
|
|
||||||
})
|
|
||||||
.def(
|
|
||||||
"steal_clusters",
|
|
||||||
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self,
|
|
||||||
bool realloc_same_capacity) {
|
|
||||||
ClusterVector<ClusterType> clusters =
|
|
||||||
self.steal_clusters(realloc_same_capacity);
|
|
||||||
return clusters;
|
|
||||||
},
|
|
||||||
py::arg("realloc_same_capacity") = false)
|
|
||||||
.def(
|
|
||||||
"find_clusters",
|
|
||||||
[](ClusterFinder<ClusterType, uint16_t, pd_type> &self,
|
|
||||||
py::array_t<uint16_t> frame, uint64_t frame_number) {
|
|
||||||
auto view = make_view_2d(frame);
|
|
||||||
self.find_clusters(view, frame_number);
|
|
||||||
return;
|
|
||||||
},
|
|
||||||
py::arg(), py::arg("frame_number") = 0);
|
|
||||||
}
|
|
||||||
#pragma GCC diagnostic pop
|
|
@ -1,11 +1,15 @@
|
|||||||
// Files with bindings to the different classes
|
// Files with bindings to the different classes
|
||||||
|
|
||||||
//New style file naming
|
//New style file naming
|
||||||
|
#include "bind_Cluster.hpp"
|
||||||
|
#include "bind_ClusterCollector.hpp"
|
||||||
|
#include "bind_ClusterFinder.hpp"
|
||||||
|
#include "bind_ClusterFinderMT.hpp"
|
||||||
|
#include "bind_ClusterFile.hpp"
|
||||||
|
#include "bind_ClusterFileSink.hpp"
|
||||||
#include "bind_ClusterVector.hpp"
|
#include "bind_ClusterVector.hpp"
|
||||||
|
|
||||||
//TODO! migrate the other names
|
//TODO! migrate the other names
|
||||||
#include "cluster.hpp"
|
|
||||||
#include "cluster_file.hpp"
|
|
||||||
#include "ctb_raw_file.hpp"
|
#include "ctb_raw_file.hpp"
|
||||||
#include "file.hpp"
|
#include "file.hpp"
|
||||||
#include "fit.hpp"
|
#include "fit.hpp"
|
||||||
@ -38,12 +42,12 @@ PYBIND11_MODULE(_aare, m) {
|
|||||||
define_interpolation_bindings(m);
|
define_interpolation_bindings(m);
|
||||||
define_jungfrau_data_file_io_bindings(m);
|
define_jungfrau_data_file_io_bindings(m);
|
||||||
|
|
||||||
define_cluster_file_io_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
define_ClusterFile<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
||||||
define_cluster_file_io_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
define_ClusterFile<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
||||||
define_cluster_file_io_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
define_ClusterFile<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
||||||
define_cluster_file_io_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
define_ClusterFile<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
||||||
define_cluster_file_io_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
define_ClusterFile<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
||||||
define_cluster_file_io_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
define_ClusterFile<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
||||||
|
|
||||||
define_ClusterVector<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
define_ClusterVector<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
||||||
define_ClusterVector<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
define_ClusterVector<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
||||||
@ -52,40 +56,40 @@ PYBIND11_MODULE(_aare, m) {
|
|||||||
define_ClusterVector<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
define_ClusterVector<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
||||||
define_ClusterVector<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
define_ClusterVector<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
||||||
|
|
||||||
define_cluster_finder_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
define_ClusterFinder<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
||||||
define_cluster_finder_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
define_ClusterFinder<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
||||||
define_cluster_finder_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
define_ClusterFinder<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
||||||
define_cluster_finder_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
define_ClusterFinder<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
||||||
define_cluster_finder_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
define_ClusterFinder<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
||||||
define_cluster_finder_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
define_ClusterFinder<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
||||||
|
|
||||||
define_cluster_finder_mt_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
define_ClusterFinderMT<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
||||||
define_cluster_finder_mt_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
define_ClusterFinderMT<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
||||||
define_cluster_finder_mt_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
define_ClusterFinderMT<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
||||||
define_cluster_finder_mt_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
define_ClusterFinderMT<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
||||||
define_cluster_finder_mt_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
define_ClusterFinderMT<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
||||||
define_cluster_finder_mt_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
define_ClusterFinderMT<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
||||||
|
|
||||||
define_cluster_file_sink_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
define_ClusterFileSink<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
||||||
define_cluster_file_sink_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
define_ClusterFileSink<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
||||||
define_cluster_file_sink_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
define_ClusterFileSink<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
||||||
define_cluster_file_sink_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
define_ClusterFileSink<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
||||||
define_cluster_file_sink_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
define_ClusterFileSink<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
||||||
define_cluster_file_sink_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
define_ClusterFileSink<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
||||||
|
|
||||||
define_cluster_collector_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
define_ClusterCollector<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
||||||
define_cluster_collector_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3f");
|
define_ClusterCollector<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
||||||
define_cluster_collector_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3d");
|
define_ClusterCollector<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
||||||
define_cluster_collector_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
define_ClusterCollector<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
||||||
define_cluster_collector_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2f");
|
define_ClusterCollector<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
||||||
define_cluster_collector_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2d");
|
define_ClusterCollector<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
||||||
|
|
||||||
define_cluster<int, 3, 3, uint16_t>(m, "3x3i");
|
define_Cluster<int, 3, 3, uint16_t>(m, "3x3i");
|
||||||
define_cluster<float, 3, 3, uint16_t>(m, "3x3f");
|
define_Cluster<float, 3, 3, uint16_t>(m, "3x3f");
|
||||||
define_cluster<double, 3, 3, uint16_t>(m, "3x3d");
|
define_Cluster<double, 3, 3, uint16_t>(m, "3x3d");
|
||||||
define_cluster<int, 2, 2, uint16_t>(m, "2x2i");
|
define_Cluster<int, 2, 2, uint16_t>(m, "2x2i");
|
||||||
define_cluster<float, 2, 2, uint16_t>(m, "2x2f");
|
define_Cluster<float, 2, 2, uint16_t>(m, "2x2f");
|
||||||
define_cluster<double, 2, 2, uint16_t>(m, "2x2d");
|
define_Cluster<double, 2, 2, uint16_t>(m, "2x2d");
|
||||||
|
|
||||||
register_calculate_eta<int, 3, 3, uint16_t>(m);
|
register_calculate_eta<int, 3, 3, uint16_t>(m);
|
||||||
register_calculate_eta<float, 3, 3, uint16_t>(m);
|
register_calculate_eta<float, 3, 3, uint16_t>(m);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user