#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 #include #include #include #include namespace py = pybind11; using pd_type = double; using namespace aare; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" template void define_ClusterFinderMT(py::module &m, const std::string &typestr) { auto class_name = fmt::format("ClusterFinderMT_{}", typestr); using ClusterType = Cluster; py::class_>( m, class_name.c_str()) .def(py::init, pd_type, size_t, size_t, uint32_t, uint32_t, uint32_t, uint32_t>(), py::arg("image_size"), py::arg("n_sigma") = 5.0, py::arg("capacity") = 2048, py::arg("n_threads") = 3, py::arg("chunk_size") = 50'000, py::arg("n_chunks") = 10, py::arg("cluster_size_x") = 3, py::arg("cluster_size_y") = 3) .def("push_pedestal_frame", [](ClusterFinderMT &self, py::array_t frame) { auto view = make_view_2d(frame); self.push_pedestal_frame(view); }) .def("push_pedestal_mean", [](ClusterFinderMT &self, py::array_t frame, uint32_t chunk_number) { auto view = make_view_2d(frame); self.push_pedestal_mean(view, chunk_number); }) .def("push_pedestal_std", [](ClusterFinderMT &self, py::array_t frame, uint32_t chunk_number) { auto view = make_view_2d(frame); self.push_pedestal_std(view, chunk_number); }) .def( "find_clusters", [](ClusterFinderMT &self, py::array_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 &self) { return py::make_tuple(ClusterSizeX, ClusterSizeY); }) .def("clear_pedestal", &ClusterFinderMT::clear_pedestal) .def("sync", &ClusterFinderMT::sync) .def("stop", &ClusterFinderMT::stop) .def("start", &ClusterFinderMT::start) .def( "pedestal", [](ClusterFinderMT &self, size_t thread_index) { auto pd = new NDArray{}; *pd = self.pedestal(thread_index); return return_image_data(pd); }, py::arg("thread_index") = 0) .def( "noise", [](ClusterFinderMT &self, size_t thread_index) { auto arr = new NDArray{}; *arr = self.noise(thread_index); return return_image_data(arr); }, py::arg("thread_index") = 0); } #pragma GCC diagnostic pop