changes from PR review

This commit is contained in:
mazzol_a 2025-04-25 11:38:51 +02:00
parent 7b5e32a824
commit f06e722dce
6 changed files with 50 additions and 56 deletions

View File

@ -40,8 +40,8 @@ template <typename ClusterType,
NDArray<double, 2> calculate_eta2(const ClusterVector<ClusterType> &clusters) { NDArray<double, 2> calculate_eta2(const ClusterVector<ClusterType> &clusters) {
NDArray<double, 2> eta2({static_cast<int64_t>(clusters.size()), 2}); NDArray<double, 2> eta2({static_cast<int64_t>(clusters.size()), 2});
for (size_t i = 0; i < clusters.size(); i++) { for (const ClusterType &cluster : clusters) {
auto e = calculate_eta2(clusters.at(i)); auto e = calculate_eta2(cluster);
eta2(i, 0) = e.x; eta2(i, 0) = e.x;
eta2(i, 1) = e.y; eta2(i, 1) = e.y;
} }
@ -122,7 +122,7 @@ calculate_eta2(const Cluster<T, ClusterSizeX, ClusterSizeY, CoordType> &cl) {
return eta; return eta;
} }
// Dont get why this is correct - photon center should be top right corner // TODO! Look up eta2 calculation - photon center should be top right corner
template <typename T> template <typename T>
Eta2<T> calculate_eta2(const Cluster<T, 2, 2, int16_t> &cl) { Eta2<T> calculate_eta2(const Cluster<T, 2, 2, int16_t> &cl) {
Eta2<T> eta{}; Eta2<T> eta{};

View File

@ -76,9 +76,9 @@ class ClusterVector<Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>> {
std::vector<T> sum() { std::vector<T> sum() {
std::vector<T> sums(m_data.size()); std::vector<T> sums(m_data.size());
for (size_t i = 0; i < m_data.size(); i++) { std::transform(m_data.begin(), m_data.end(), sums.begin(),
sums[i] = at(i).sum(); [](const T &cluster) { return cluster.sum(); });
}
return sums; return sums;
} }
@ -86,13 +86,14 @@ class ClusterVector<Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>> {
* @brief Sum the pixels in the 2x2 subcluster with the biggest pixel sum in * @brief Sum the pixels in the 2x2 subcluster with the biggest pixel sum in
* each cluster * each cluster
* @return std::vector<T> vector of sums for each cluster * @return std::vector<T> vector of sums for each cluster
*/ //TODO if underlying container is a vector use std::for_each */
std::vector<T> sum_2x2() { std::vector<T> sum_2x2() {
std::vector<T> sums_2x2(m_data.size()); std::vector<T> sums_2x2(m_data.size());
for (size_t i = 0; i < m_data.size(); i++) { std::transform(
sums_2x2[i] = at(i).max_sum_2x2().first; m_data.begin(), m_data.end(), sums_2x2.begin(),
} [](const T &cluster) { return cluster.max_sum_2x2().first; });
return sums_2x2; return sums_2x2;
} }
@ -149,9 +150,9 @@ class ClusterVector<Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>> {
* @brief Return a reference to the i-th cluster casted to type V * @brief Return a reference to the i-th cluster casted to type V
* @tparam V type of the cluster * @tparam V type of the cluster
*/ */
ClusterType &at(size_t i) { return m_data[i]; } ClusterType &operator[](size_t i) { return m_data[i]; }
const ClusterType &at(size_t i) const { return m_data[i]; } const ClusterType &operator[](size_t i) const { return m_data[i]; }
/** /**
* @brief Return the frame number of the clusters. 0 is used to indicate * @brief Return the frame number of the clusters. 0 is used to indicate

View File

@ -41,8 +41,7 @@ class GainMap {
int64_t index_cluster_center_x = ClusterSizeX / 2; int64_t index_cluster_center_x = ClusterSizeX / 2;
int64_t index_cluster_center_y = ClusterSizeY / 2; int64_t index_cluster_center_y = ClusterSizeY / 2;
for (size_t i = 0; i < clustervec.size(); i++) { for (T &cl : clustervec) {
auto &cl = clustervec.at(i);
if (cl.x > 0 && cl.y > 0 && cl.x < m_gain_map.shape(1) - 1 && if (cl.x > 0 && cl.y > 0 && cl.x < m_gain_map.shape(1) - 1 &&
cl.y < m_gain_map.shape(0) - 1) { cl.y < m_gain_map.shape(0) - 1) {

View File

@ -44,9 +44,8 @@ Interpolator::interpolate(const ClusterVector<ClusterType> &clusters) {
photons.reserve(clusters.size()); photons.reserve(clusters.size());
if (clusters.cluster_size_x() == 3 || clusters.cluster_size_y() == 3) { if (clusters.cluster_size_x() == 3 || clusters.cluster_size_y() == 3) {
for (size_t i = 0; i < clusters.size(); i++) { for (const ClusterType &cluster : clusters) {
auto cluster = clusters.at(i);
auto eta = calculate_eta2(cluster); auto eta = calculate_eta2(cluster);
Photon photon; Photon photon;
@ -94,8 +93,7 @@ Interpolator::interpolate(const ClusterVector<ClusterType> &clusters) {
} }
} else if (clusters.cluster_size_x() == 2 || } else if (clusters.cluster_size_x() == 2 ||
clusters.cluster_size_y() == 2) { clusters.cluster_size_y() == 2) {
for (size_t i = 0; i < clusters.size(); i++) { for (const ClusterType &cluster : clusters) {
auto cluster = clusters.at(i);
auto eta = calculate_eta2(cluster); auto eta = calculate_eta2(cluster);
Photon photon; Photon photon;

View File

@ -20,11 +20,10 @@ TEST_CASE("Read one frame from a cluster file", "[.files]") {
auto clusters = f.read_frame(); auto clusters = f.read_frame();
CHECK(clusters.size() == 97); CHECK(clusters.size() == 97);
CHECK(clusters.frame_number() == 135); CHECK(clusters.frame_number() == 135);
CHECK(clusters.at(0).x == 1); CHECK(clusters[0].x == 1);
CHECK(clusters.at(0).y == 200); CHECK(clusters[0].y == 200);
int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
CHECK(std::equal(std::begin(clusters.at(0).data), CHECK(std::equal(std::begin(clusters[0].data), std::end(clusters[0].data),
std::end(clusters.at(0).data),
std::begin(expected_cluster_data))); std::begin(expected_cluster_data)));
} }
@ -47,18 +46,17 @@ TEST_CASE("Read one frame using ROI", "[.files]") {
// Check that all clusters are within the ROI // Check that all clusters are within the ROI
for (size_t i = 0; i < clusters.size(); i++) { for (size_t i = 0; i < clusters.size(); i++) {
auto c = clusters.at(i); auto c = clusters[i];
REQUIRE(c.x >= roi.xmin); REQUIRE(c.x >= roi.xmin);
REQUIRE(c.x <= roi.xmax); REQUIRE(c.x <= roi.xmax);
REQUIRE(c.y >= roi.ymin); REQUIRE(c.y >= roi.ymin);
REQUIRE(c.y <= roi.ymax); REQUIRE(c.y <= roi.ymax);
} }
CHECK(clusters.at(0).x == 1); CHECK(clusters[0].x == 1);
CHECK(clusters.at(0).y == 200); CHECK(clusters[0].y == 200);
int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
CHECK(std::equal(std::begin(clusters.at(0).data), CHECK(std::equal(std::begin(clusters[0].data), std::end(clusters[0].data),
std::end(clusters.at(0).data),
std::begin(expected_cluster_data))); std::begin(expected_cluster_data)));
} }
@ -175,10 +173,10 @@ TEST_CASE("Read clusters from single frame file", "[.files]") {
REQUIRE(clusters.size() == 50); REQUIRE(clusters.size() == 50);
REQUIRE(clusters.frame_number() == 135); REQUIRE(clusters.frame_number() == 135);
int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
REQUIRE(clusters.at(0).x == 1); REQUIRE(clusters[0].x == 1);
REQUIRE(clusters.at(0).y == 200); REQUIRE(clusters[0].y == 200);
CHECK(std::equal(std::begin(clusters.at(0).data), CHECK(std::equal(std::begin(clusters[0].data),
std::end(clusters.at(0).data), std::end(clusters[0].data),
std::begin(expected_cluster_data))); std::begin(expected_cluster_data)));
} }
SECTION("Read more clusters than available") { SECTION("Read more clusters than available") {
@ -188,10 +186,10 @@ TEST_CASE("Read clusters from single frame file", "[.files]") {
REQUIRE(clusters.size() == 97); REQUIRE(clusters.size() == 97);
REQUIRE(clusters.frame_number() == 135); REQUIRE(clusters.frame_number() == 135);
int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
REQUIRE(clusters.at(0).x == 1); REQUIRE(clusters[0].x == 1);
REQUIRE(clusters.at(0).y == 200); REQUIRE(clusters[0].y == 200);
CHECK(std::equal(std::begin(clusters.at(0).data), CHECK(std::equal(std::begin(clusters[0].data),
std::end(clusters.at(0).data), std::end(clusters[0].data),
std::begin(expected_cluster_data))); std::begin(expected_cluster_data)));
} }
SECTION("Read all clusters") { SECTION("Read all clusters") {
@ -199,11 +197,11 @@ TEST_CASE("Read clusters from single frame file", "[.files]") {
auto clusters = f.read_clusters(97); auto clusters = f.read_clusters(97);
REQUIRE(clusters.size() == 97); REQUIRE(clusters.size() == 97);
REQUIRE(clusters.frame_number() == 135); REQUIRE(clusters.frame_number() == 135);
REQUIRE(clusters.at(0).x == 1); REQUIRE(clusters[0].x == 1);
REQUIRE(clusters.at(0).y == 200); REQUIRE(clusters[0].y == 200);
int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
CHECK(std::equal(std::begin(clusters.at(0).data), CHECK(std::equal(std::begin(clusters[0].data),
std::end(clusters.at(0).data), std::end(clusters[0].data),
std::begin(expected_cluster_data))); std::begin(expected_cluster_data)));
} }
} }
@ -225,11 +223,10 @@ TEST_CASE("Read clusters from single frame file with ROI", "[.files]") {
CHECK(clusters.size() == 10); CHECK(clusters.size() == 10);
CHECK(clusters.frame_number() == 135); CHECK(clusters.frame_number() == 135);
CHECK(clusters.at(0).x == 1); CHECK(clusters[0].x == 1);
CHECK(clusters.at(0).y == 200); CHECK(clusters[0].y == 200);
int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int32_t expected_cluster_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
CHECK(std::equal(std::begin(clusters.at(0).data), CHECK(std::equal(std::begin(clusters[0].data), std::end(clusters[0].data),
std::end(clusters.at(0).data),
std::begin(expected_cluster_data))); std::begin(expected_cluster_data)));
} }
@ -314,19 +311,19 @@ TEST_CASE("Write cluster with potential padding", "[.files][.ClusterFile]") {
CHECK(read_cluster_vector.size() == 2); CHECK(read_cluster_vector.size() == 2);
CHECK(read_cluster_vector.frame_number() == 0); CHECK(read_cluster_vector.frame_number() == 0);
CHECK(read_cluster_vector.at(0).x == clustervec.at(0).x); CHECK(read_cluster_vector[0].x == clustervec[0].x);
CHECK(read_cluster_vector.at(0).y == clustervec.at(0).y); CHECK(read_cluster_vector[0].y == clustervec[0].y);
CHECK(std::equal( CHECK(std::equal(
clustervec.at(0).data.begin(), clustervec.at(0).data.end(), clustervec[0].data.begin(), clustervec[0].data.end(),
read_cluster_vector.at(0).data.begin(), [](double a, double b) { read_cluster_vector[0].data.begin(), [](double a, double b) {
return std::abs(a - b) < std::numeric_limits<double>::epsilon(); return std::abs(a - b) < std::numeric_limits<double>::epsilon();
})); }));
CHECK(read_cluster_vector.at(1).x == clustervec.at(1).x); CHECK(read_cluster_vector[1].x == clustervec[1].x);
CHECK(read_cluster_vector.at(1).y == clustervec.at(1).y); CHECK(read_cluster_vector[1].y == clustervec[1].y);
CHECK(std::equal( CHECK(std::equal(
clustervec.at(1).data.begin(), clustervec.at(1).data.end(), clustervec[1].data.begin(), clustervec[1].data.end(),
read_cluster_vector.at(1).data.begin(), [](double a, double b) { read_cluster_vector[1].data.begin(), [](double a, double b) {
return std::abs(a - b) < std::numeric_limits<double>::epsilon(); return std::abs(a - b) < std::numeric_limits<double>::epsilon();
})); }));
} }
@ -346,10 +343,9 @@ TEST_CASE("Read frame and modify cluster data", "[.files][.ClusterFile]") {
Cluster<int32_t, 3, 3>{0, 0, {0, 1, 2, 3, 4, 5, 6, 7, 8}}); Cluster<int32_t, 3, 3>{0, 0, {0, 1, 2, 3, 4, 5, 6, 7, 8}});
CHECK(clusters.size() == 98); CHECK(clusters.size() == 98);
CHECK(clusters.at(0).x == 1); CHECK(clusters[0].x == 1);
CHECK(clusters.at(0).y == 200); CHECK(clusters[0].y == 200);
CHECK(std::equal(std::begin(clusters.at(0).data), CHECK(std::equal(std::begin(clusters[0].data), std::end(clusters[0].data),
std::end(clusters.at(0).data),
std::begin(expected_cluster_data))); std::begin(expected_cluster_data)));
} }

View File

@ -60,7 +60,7 @@ TEST_CASE("ClusterVector 2x2 int32_t capacity 4, push back then read",
REQUIRE(cv.size() == 1); REQUIRE(cv.size() == 1);
REQUIRE(cv.capacity() == 4); REQUIRE(cv.capacity() == 4);
auto c2 = cv.at(0); auto c2 = cv[0];
// Check that the data is the same // Check that the data is the same
REQUIRE(c1.x == c2.x); REQUIRE(c1.x == c2.x);