#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_ClusterFinder(py::module &m, const std::string &typestr) { auto class_name = fmt::format("ClusterFinder_{}", typestr); using ClusterType = Cluster; py::class_>( m, class_name.c_str()) .def(py::init, 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 &self, py::array_t frame) { auto view = make_view_2d(frame); self.push_pedestal_frame(view); }) .def("clear_pedestal", &ClusterFinder::clear_pedestal) .def_property_readonly( "pedestal", [](ClusterFinder &self) { auto pd = new NDArray{}; *pd = self.pedestal(); return return_image_data(pd); }) .def_property_readonly( "noise", [](ClusterFinder &self) { auto arr = new NDArray{}; *arr = self.noise(); return return_image_data(arr); }) .def( "steal_clusters", [](ClusterFinder &self, bool realloc_same_capacity) { ClusterVector clusters = self.steal_clusters(realloc_same_capacity); return clusters; }, py::arg("realloc_same_capacity") = false) .def( "find_clusters", [](ClusterFinder &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); } #pragma GCC diagnostic pop