mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2025-06-08 13:40:39 +02:00
merged developer
This commit is contained in:
commit
b97f1e24f9
@ -5,6 +5,8 @@
|
|||||||
#include "aare/GainMap.hpp"
|
#include "aare/GainMap.hpp"
|
||||||
#include "aare/NDArray.hpp"
|
#include "aare/NDArray.hpp"
|
||||||
#include "aare/defs.hpp"
|
#include "aare/defs.hpp"
|
||||||
|
#include "aare/logger.hpp"
|
||||||
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
@ -369,11 +371,15 @@ ClusterFile<ClusterType, Enable>::read_frame_without_cut() {
|
|||||||
"Could not read number of clusters");
|
"Could not read number of clusters");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG(logDEBUG1) << "Reading " << n_clusters
|
||||||
|
<< " clusters from frame " << frame_number;
|
||||||
|
|
||||||
ClusterVector<ClusterType> clusters(n_clusters);
|
ClusterVector<ClusterType> clusters(n_clusters);
|
||||||
clusters.set_frame_number(frame_number);
|
clusters.set_frame_number(frame_number);
|
||||||
|
|
||||||
clusters.resize(n_clusters);
|
clusters.resize(n_clusters);
|
||||||
|
|
||||||
|
LOG(logDEBUG1) << "clusters.item_size(): " << clusters.item_size();
|
||||||
|
|
||||||
if (fread(clusters.data(), clusters.item_size(), n_clusters, fp) !=
|
if (fread(clusters.data(), clusters.item_size(), n_clusters, fp) !=
|
||||||
static_cast<size_t>(n_clusters)) {
|
static_cast<size_t>(n_clusters)) {
|
||||||
throw std::runtime_error(LOCATION + "Could not read clusters");
|
throw std::runtime_error(LOCATION + "Could not read clusters");
|
||||||
|
@ -21,7 +21,7 @@ class ClusterFileSink {
|
|||||||
|
|
||||||
void process() {
|
void process() {
|
||||||
m_stopped = false;
|
m_stopped = false;
|
||||||
fmt::print("ClusterFileSink started\n");
|
LOG(logDEBUG) << "ClusterFileSink started";
|
||||||
while (!m_stop_requested || !m_source->isEmpty()) {
|
while (!m_stop_requested || !m_source->isEmpty()) {
|
||||||
if (ClusterVector<ClusterType> *clusters = m_source->frontPtr();
|
if (ClusterVector<ClusterType> *clusters = m_source->frontPtr();
|
||||||
clusters != nullptr) {
|
clusters != nullptr) {
|
||||||
@ -41,13 +41,16 @@ class ClusterFileSink {
|
|||||||
std::this_thread::sleep_for(m_default_wait);
|
std::this_thread::sleep_for(m_default_wait);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt::print("ClusterFileSink stopped\n");
|
LOG(logDEBUG) << "ClusterFileSink stopped";
|
||||||
m_stopped = true;
|
m_stopped = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ClusterFileSink(ClusterFinderMT<ClusterType, uint16_t, double> *source,
|
ClusterFileSink(ClusterFinderMT<ClusterType, uint16_t, double> *source,
|
||||||
const std::filesystem::path &fname) {
|
const std::filesystem::path &fname) {
|
||||||
|
LOG(logDEBUG) << "ClusterFileSink: "
|
||||||
|
<< "source: " << source->sink()
|
||||||
|
<< ", file: " << fname.string();
|
||||||
m_source = source->sink();
|
m_source = source->sink();
|
||||||
m_thread = std::thread(&ClusterFileSink::process, this);
|
m_thread = std::thread(&ClusterFileSink::process, this);
|
||||||
m_file.open(fname, std::ios::binary);
|
m_file.open(fname, std::ios::binary);
|
||||||
|
@ -38,7 +38,12 @@ class ClusterFinder {
|
|||||||
: m_image_size(image_size), m_nSigma(nSigma),
|
: m_image_size(image_size), m_nSigma(nSigma),
|
||||||
c2(sqrt((ClusterSizeY + 1) / 2 * (ClusterSizeX + 1) / 2)),
|
c2(sqrt((ClusterSizeY + 1) / 2 * (ClusterSizeX + 1) / 2)),
|
||||||
c3(sqrt(ClusterSizeX * ClusterSizeY)),
|
c3(sqrt(ClusterSizeX * ClusterSizeY)),
|
||||||
m_pedestal(image_size[0], image_size[1]), m_clusters(capacity) {};
|
m_pedestal(image_size[0], image_size[1]), m_clusters(capacity) {
|
||||||
|
LOG(logDEBUG ) << "ClusterFinder: "
|
||||||
|
<< "image_size: " << image_size[0] << "x" << image_size[1]
|
||||||
|
<< ", nSigma: " << nSigma
|
||||||
|
<< ", capacity: " << capacity;
|
||||||
|
}
|
||||||
|
|
||||||
void push_pedestal_frame(NDView<FRAME_TYPE, 2> frame) {
|
void push_pedestal_frame(NDView<FRAME_TYPE, 2> frame) {
|
||||||
m_pedestal.push(frame);
|
m_pedestal.push(frame);
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "aare/ClusterFinder.hpp"
|
#include "aare/ClusterFinder.hpp"
|
||||||
#include "aare/NDArray.hpp"
|
#include "aare/NDArray.hpp"
|
||||||
|
#include "aare/logger.hpp"
|
||||||
#include "aare/ProducerConsumerQueue.hpp"
|
#include "aare/ProducerConsumerQueue.hpp"
|
||||||
|
|
||||||
namespace aare {
|
namespace aare {
|
||||||
@ -123,6 +124,12 @@ class ClusterFinderMT {
|
|||||||
size_t capacity = 2000, size_t n_threads = 3)
|
size_t capacity = 2000, size_t n_threads = 3)
|
||||||
: m_n_threads(n_threads) {
|
: m_n_threads(n_threads) {
|
||||||
|
|
||||||
|
LOG(logDEBUG1) << "ClusterFinderMT: "
|
||||||
|
<< "image_size: " << image_size[0] << "x" << image_size[1]
|
||||||
|
<< ", nSigma: " << nSigma
|
||||||
|
<< ", capacity: " << capacity
|
||||||
|
<< ", n_threads: " << n_threads;
|
||||||
|
|
||||||
for (size_t i = 0; i < n_threads; i++) {
|
for (size_t i = 0; i < n_threads; i++) {
|
||||||
m_cluster_finders.push_back(
|
m_cluster_finders.push_back(
|
||||||
std::make_unique<
|
std::make_unique<
|
||||||
|
@ -37,7 +37,7 @@ enum TLogLevel {
|
|||||||
logINFOCYAN,
|
logINFOCYAN,
|
||||||
logINFOMAGENTA,
|
logINFOMAGENTA,
|
||||||
logINFO,
|
logINFO,
|
||||||
logDEBUG,
|
logDEBUG, // constructors, destructors etc. should still give too much output
|
||||||
logDEBUG1,
|
logDEBUG1,
|
||||||
logDEBUG2,
|
logDEBUG2,
|
||||||
logDEBUG3,
|
logDEBUG3,
|
||||||
|
@ -1,22 +1,47 @@
|
|||||||
|
|
||||||
from ._aare import ClusterFinder_Cluster3x3i, ClusterFinder_Cluster2x2i, ClusterFinderMT_Cluster3x3i, ClusterFinderMT_Cluster2x2i, ClusterCollector_Cluster3x3i, ClusterCollector_Cluster2x2i
|
# from ._aare import ClusterFinder_Cluster3x3i, ClusterFinder_Cluster2x2i, ClusterFinderMT_Cluster3x3i, ClusterFinderMT_Cluster2x2i, ClusterCollector_Cluster3x3i, ClusterCollector_Cluster2x2i
|
||||||
|
|
||||||
|
|
||||||
from ._aare import ClusterFileSink_Cluster3x3i, ClusterFileSink_Cluster2x2i
|
# from ._aare import ClusterFileSink_Cluster3x3i, ClusterFileSink_Cluster2x2i
|
||||||
|
|
||||||
|
from . import _aare
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
_supported_cluster_sizes = [(2,2), (3,3), (5,5), (7,7), (9,9),]
|
||||||
|
|
||||||
|
# def _get_class()
|
||||||
|
|
||||||
|
def _type_to_char(dtype):
|
||||||
|
if dtype == np.int32:
|
||||||
|
return 'i'
|
||||||
|
elif dtype == np.float32:
|
||||||
|
return 'f'
|
||||||
|
elif dtype == np.float64:
|
||||||
|
return 'd'
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unsupported dtype: {dtype}. Only np.int32, np.float32, and np.float64 are supported.")
|
||||||
|
|
||||||
|
def _get_class(name, cluster_size, dtype):
|
||||||
|
"""
|
||||||
|
Helper function to get the class based on the name, cluster size, and dtype.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
class_name = f"{name}_Cluster{cluster_size[0]}x{cluster_size[1]}{_type_to_char(dtype)}"
|
||||||
|
cls = getattr(_aare, class_name)
|
||||||
|
except AttributeError:
|
||||||
|
raise ValueError(f"Unsupported combination of type and cluster size: {dtype}/{cluster_size} when requesting {class_name}")
|
||||||
|
return cls
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def ClusterFinder(image_size, cluster_size, n_sigma=5, dtype = np.int32, capacity = 1024):
|
def ClusterFinder(image_size, cluster_size, n_sigma=5, dtype = np.int32, capacity = 1024):
|
||||||
"""
|
"""
|
||||||
Factory function to create a ClusterFinder object. Provides a cleaner syntax for
|
Factory function to create a ClusterFinder object. Provides a cleaner syntax for
|
||||||
the templated ClusterFinder in C++.
|
the templated ClusterFinder in C++.
|
||||||
"""
|
"""
|
||||||
if dtype == np.int32 and cluster_size == (3,3):
|
cls = _get_class("ClusterFinder", cluster_size, dtype)
|
||||||
return ClusterFinder_Cluster3x3i(image_size, n_sigma = n_sigma, capacity=capacity)
|
return cls(image_size, n_sigma=n_sigma, capacity=capacity)
|
||||||
elif dtype == np.int32 and cluster_size == (2,2):
|
|
||||||
return ClusterFinder_Cluster2x2i(image_size, n_sigma = n_sigma, capacity=capacity)
|
|
||||||
else:
|
|
||||||
#TODO! add the other formats
|
|
||||||
raise ValueError(f"Unsupported dtype: {dtype}. Only np.int32 is supported.")
|
|
||||||
|
|
||||||
|
|
||||||
def ClusterFinderMT(image_size, cluster_size = (3,3), dtype=np.int32, n_sigma=5, capacity = 1024, n_threads = 3):
|
def ClusterFinderMT(image_size, cluster_size = (3,3), dtype=np.int32, n_sigma=5, capacity = 1024, n_threads = 3):
|
||||||
@ -25,15 +50,9 @@ def ClusterFinderMT(image_size, cluster_size = (3,3), dtype=np.int32, n_sigma=5,
|
|||||||
the templated ClusterFinderMT in C++.
|
the templated ClusterFinderMT in C++.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if dtype == np.int32 and cluster_size == (3,3):
|
cls = _get_class("ClusterFinderMT", cluster_size, dtype)
|
||||||
return ClusterFinderMT_Cluster3x3i(image_size, n_sigma = n_sigma,
|
return cls(image_size, n_sigma=n_sigma, capacity=capacity, n_threads=n_threads)
|
||||||
capacity = capacity, n_threads = n_threads)
|
|
||||||
elif dtype == np.int32 and cluster_size == (2,2):
|
|
||||||
return ClusterFinderMT_Cluster2x2i(image_size, n_sigma = n_sigma,
|
|
||||||
capacity = capacity, n_threads = n_threads)
|
|
||||||
else:
|
|
||||||
#TODO! add the other formats
|
|
||||||
raise ValueError(f"Unsupported dtype: {dtype}. Only np.int32 is supported.")
|
|
||||||
|
|
||||||
|
|
||||||
def ClusterCollector(clusterfindermt, cluster_size = (3,3), dtype=np.int32):
|
def ClusterCollector(clusterfindermt, cluster_size = (3,3), dtype=np.int32):
|
||||||
@ -42,14 +61,8 @@ def ClusterCollector(clusterfindermt, cluster_size = (3,3), dtype=np.int32):
|
|||||||
the templated ClusterCollector in C++.
|
the templated ClusterCollector in C++.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if dtype == np.int32 and cluster_size == (3,3):
|
cls = _get_class("ClusterCollector", cluster_size, dtype)
|
||||||
return ClusterCollector_Cluster3x3i(clusterfindermt)
|
return cls(clusterfindermt)
|
||||||
elif dtype == np.int32 and cluster_size == (2,2):
|
|
||||||
return ClusterCollector_Cluster2x2i(clusterfindermt)
|
|
||||||
|
|
||||||
else:
|
|
||||||
#TODO! add the other formats
|
|
||||||
raise ValueError(f"Unsupported dtype: {dtype}. Only np.int32 is supported.")
|
|
||||||
|
|
||||||
def ClusterFileSink(clusterfindermt, cluster_file, dtype=np.int32):
|
def ClusterFileSink(clusterfindermt, cluster_file, dtype=np.int32):
|
||||||
"""
|
"""
|
||||||
@ -57,11 +70,15 @@ def ClusterFileSink(clusterfindermt, cluster_file, dtype=np.int32):
|
|||||||
the templated ClusterCollector in C++.
|
the templated ClusterCollector in C++.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if dtype == np.int32 and clusterfindermt.cluster_size == (3,3):
|
cls = _get_class("ClusterFileSink", clusterfindermt.cluster_size, dtype)
|
||||||
return ClusterFileSink_Cluster3x3i(clusterfindermt, cluster_file)
|
return cls(clusterfindermt, cluster_file)
|
||||||
elif dtype == np.int32 and clusterfindermt.cluster_size == (2,2):
|
|
||||||
return ClusterFileSink_Cluster2x2i(clusterfindermt, cluster_file)
|
|
||||||
|
|
||||||
else:
|
|
||||||
#TODO! add the other formats
|
def ClusterFile(fname, cluster_size=(3,3), dtype=np.int32):
|
||||||
raise ValueError(f"Unsupported dtype: {dtype}. Only np.int32 is supported.")
|
"""
|
||||||
|
Factory function to create a ClusterFile object. Provides a cleaner syntax for
|
||||||
|
the templated ClusterFile in C++.
|
||||||
|
"""
|
||||||
|
|
||||||
|
cls = _get_class("ClusterFile", cluster_size, dtype)
|
||||||
|
return cls(fname)
|
||||||
|
@ -5,13 +5,12 @@ from . import _aare
|
|||||||
from ._aare import File, RawMasterFile, RawSubFile, JungfrauDataFile
|
from ._aare import File, RawMasterFile, RawSubFile, JungfrauDataFile
|
||||||
from ._aare import Pedestal_d, Pedestal_f, ClusterFinder_Cluster3x3i, VarClusterFinder
|
from ._aare import Pedestal_d, Pedestal_f, ClusterFinder_Cluster3x3i, VarClusterFinder
|
||||||
from ._aare import DetectorType
|
from ._aare import DetectorType
|
||||||
from ._aare import ClusterFile_Cluster3x3i as ClusterFile
|
|
||||||
from ._aare import hitmap
|
from ._aare import hitmap
|
||||||
from ._aare import ROI
|
from ._aare import ROI
|
||||||
|
|
||||||
# from ._aare import ClusterFinderMT, ClusterCollector, ClusterFileSink, ClusterVector_i
|
# from ._aare import ClusterFinderMT, ClusterCollector, ClusterFileSink, ClusterVector_i
|
||||||
|
|
||||||
from .ClusterFinder import ClusterFinder, ClusterCollector, ClusterFinderMT, ClusterFileSink
|
from .ClusterFinder import ClusterFinder, ClusterCollector, ClusterFinderMT, ClusterFileSink, ClusterFile
|
||||||
from .ClusterVector import ClusterVector
|
from .ClusterVector import ClusterVector
|
||||||
|
|
||||||
|
|
||||||
|
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
|
@ -102,3 +102,5 @@ 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"
|
||||||
@ -24,6 +28,25 @@
|
|||||||
|
|
||||||
namespace py = pybind11;
|
namespace py = pybind11;
|
||||||
|
|
||||||
|
/* MACRO that defines Cluster bindings for a specific size and type
|
||||||
|
|
||||||
|
T - Storage type of the cluster data (int, float, double)
|
||||||
|
N - Number of rows in the cluster
|
||||||
|
M - Number of columns in the cluster
|
||||||
|
U - Type of the pixel data (e.g., uint16_t)
|
||||||
|
TYPE_CODE - A character representing the type code (e.g., 'i' for int, 'd' for double, 'f' for float)
|
||||||
|
|
||||||
|
*/
|
||||||
|
#define DEFINE_CLUSTER_BINDINGS(T, N, M, U, TYPE_CODE) \
|
||||||
|
define_ClusterFile<T, N, M, U>(m, "Cluster" #N "x" #M #TYPE_CODE); \
|
||||||
|
define_ClusterVector<T, N, M, U>(m, "Cluster" #N "x" #M #TYPE_CODE); \
|
||||||
|
define_ClusterFinder<T, N, M, U>(m, "Cluster" #N "x" #M #TYPE_CODE); \
|
||||||
|
define_ClusterFinderMT<T, N, M, U>(m, "Cluster" #N "x" #M #TYPE_CODE); \
|
||||||
|
define_ClusterFileSink<T, N, M, U>(m, "Cluster" #N "x" #M #TYPE_CODE); \
|
||||||
|
define_ClusterCollector<T, N, M, U>(m, "Cluster" #N "x" #M #TYPE_CODE); \
|
||||||
|
define_Cluster<T, N, M, U>(m, #N "x" #M #TYPE_CODE); \
|
||||||
|
register_calculate_eta<T, N, M, U>(m);
|
||||||
|
|
||||||
PYBIND11_MODULE(_aare, m) {
|
PYBIND11_MODULE(_aare, m) {
|
||||||
define_file_io_bindings(m);
|
define_file_io_bindings(m);
|
||||||
define_raw_file_io_bindings(m);
|
define_raw_file_io_bindings(m);
|
||||||
@ -38,59 +61,23 @@ 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_CLUSTER_BINDINGS(int, 3, 3, uint16_t, i);
|
||||||
define_cluster_file_io_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
DEFINE_CLUSTER_BINDINGS(double, 3, 3, uint16_t, d);
|
||||||
define_cluster_file_io_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
DEFINE_CLUSTER_BINDINGS(float, 3, 3, uint16_t, f);
|
||||||
define_cluster_file_io_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
|
||||||
define_cluster_file_io_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
|
||||||
define_cluster_file_io_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
|
||||||
|
|
||||||
define_ClusterVector<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
DEFINE_CLUSTER_BINDINGS(int, 2, 2, uint16_t, i);
|
||||||
define_ClusterVector<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
DEFINE_CLUSTER_BINDINGS(double, 2, 2, uint16_t, d);
|
||||||
define_ClusterVector<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
DEFINE_CLUSTER_BINDINGS(float, 2, 2, uint16_t, f);
|
||||||
define_ClusterVector<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
|
||||||
define_ClusterVector<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
|
||||||
define_ClusterVector<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
|
||||||
|
|
||||||
define_cluster_finder_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
DEFINE_CLUSTER_BINDINGS(int, 5, 5, uint16_t, i);
|
||||||
define_cluster_finder_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
DEFINE_CLUSTER_BINDINGS(double, 5, 5, uint16_t, d);
|
||||||
define_cluster_finder_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
DEFINE_CLUSTER_BINDINGS(float, 5, 5, uint16_t, f);
|
||||||
define_cluster_finder_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
|
||||||
define_cluster_finder_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
|
||||||
define_cluster_finder_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
|
||||||
|
|
||||||
define_cluster_finder_mt_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
DEFINE_CLUSTER_BINDINGS(int, 7, 7, uint16_t, i);
|
||||||
define_cluster_finder_mt_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
DEFINE_CLUSTER_BINDINGS(double, 7, 7, uint16_t, d);
|
||||||
define_cluster_finder_mt_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
DEFINE_CLUSTER_BINDINGS(float, 7, 7, uint16_t, f);
|
||||||
define_cluster_finder_mt_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
|
||||||
define_cluster_finder_mt_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
|
||||||
define_cluster_finder_mt_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
|
||||||
|
|
||||||
define_cluster_file_sink_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
DEFINE_CLUSTER_BINDINGS(int, 9, 9, uint16_t, i);
|
||||||
define_cluster_file_sink_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3d");
|
DEFINE_CLUSTER_BINDINGS(double, 9, 9, uint16_t, d);
|
||||||
define_cluster_file_sink_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3f");
|
DEFINE_CLUSTER_BINDINGS(float, 9, 9, uint16_t, f);
|
||||||
define_cluster_file_sink_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
|
||||||
define_cluster_file_sink_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2d");
|
|
||||||
define_cluster_file_sink_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2f");
|
|
||||||
|
|
||||||
define_cluster_collector_bindings<int, 3, 3, uint16_t>(m, "Cluster3x3i");
|
|
||||||
define_cluster_collector_bindings<double, 3, 3, uint16_t>(m, "Cluster3x3f");
|
|
||||||
define_cluster_collector_bindings<float, 3, 3, uint16_t>(m, "Cluster3x3d");
|
|
||||||
define_cluster_collector_bindings<int, 2, 2, uint16_t>(m, "Cluster2x2i");
|
|
||||||
define_cluster_collector_bindings<double, 2, 2, uint16_t>(m, "Cluster2x2f");
|
|
||||||
define_cluster_collector_bindings<float, 2, 2, uint16_t>(m, "Cluster2x2d");
|
|
||||||
|
|
||||||
define_cluster<int, 3, 3, uint16_t>(m, "3x3i");
|
|
||||||
define_cluster<float, 3, 3, uint16_t>(m, "3x3f");
|
|
||||||
define_cluster<double, 3, 3, uint16_t>(m, "3x3d");
|
|
||||||
define_cluster<int, 2, 2, uint16_t>(m, "2x2i");
|
|
||||||
define_cluster<float, 2, 2, uint16_t>(m, "2x2f");
|
|
||||||
define_cluster<double, 2, 2, uint16_t>(m, "2x2d");
|
|
||||||
|
|
||||||
register_calculate_eta<int, 3, 3, uint16_t>(m);
|
|
||||||
register_calculate_eta<float, 3, 3, uint16_t>(m);
|
|
||||||
register_calculate_eta<double, 3, 3, uint16_t>(m);
|
|
||||||
register_calculate_eta<int, 2, 2, uint16_t>(m);
|
|
||||||
register_calculate_eta<float, 2, 2, uint16_t>(m);
|
|
||||||
register_calculate_eta<double, 2, 2, uint16_t>(m);
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user