mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2025-04-20 05:40:03 +02:00
generalize is_selected
This commit is contained in:
parent
85a6b5b95e
commit
de9fc16e89
@ -100,4 +100,20 @@ struct is_cluster<Cluster<T, X, Y, CoordType>> : std::true_type {}; // Cluster
|
|||||||
|
|
||||||
template <typename T> constexpr bool is_cluster_v = is_cluster<T>::value;
|
template <typename T> constexpr bool is_cluster_v = is_cluster<T>::value;
|
||||||
|
|
||||||
|
template <typename ClusterType,
|
||||||
|
typename = std::enable_if_t<is_cluster_v<ClusterType>>>
|
||||||
|
struct extract_template_arguments; // Forward declaration
|
||||||
|
|
||||||
|
// helper struct to extract template argument
|
||||||
|
template <typename T, uint8_t ClusterSizeX, uint8_t ClusterSizeY,
|
||||||
|
typename CoordType>
|
||||||
|
struct extract_template_arguments<
|
||||||
|
Cluster<T, ClusterSizeX, ClusterSizeY, CoordType>> {
|
||||||
|
|
||||||
|
using type = T;
|
||||||
|
static constexpr int cluster_size_x = ClusterSizeX;
|
||||||
|
static constexpr int cluster_size_y = ClusterSizeY;
|
||||||
|
using coordtype = CoordType;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace aare
|
} // namespace aare
|
||||||
|
@ -429,16 +429,24 @@ bool ClusterFile<ClusterType, Enable>::is_selected(ClusterType &cl) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO types are wrong generalize
|
|
||||||
|
auto cluster_size_x = extract_template_arguments<
|
||||||
|
std::remove_reference_t<decltype(cl)>>::cluster_size_x;
|
||||||
|
auto cluster_size_y = extract_template_arguments<
|
||||||
|
std::remove_reference_t<decltype(cl)>>::cluster_size_y;
|
||||||
|
|
||||||
|
size_t cluster_center_index =
|
||||||
|
(cluster_size_x / 2) + (cluster_size_y / 2) * cluster_size_x;
|
||||||
|
|
||||||
if (m_noise_map) {
|
if (m_noise_map) {
|
||||||
int32_t sum_1x1 = cl.data[4]; // central pixel
|
auto sum_1x1 = cl.data[cluster_center_index]; // central pixel
|
||||||
int32_t sum_2x2 =
|
auto sum_2x2 = cl.max_sum_2x2().first; // highest sum of 2x2 subclusters
|
||||||
cl.max_sum_2x2().first; // highest sum of 2x2 subclusters
|
auto total_sum = cl.sum(); // sum of all pixels
|
||||||
int32_t sum_3x3 = cl.sum(); // sum of all pixels
|
|
||||||
|
|
||||||
auto noise =
|
auto noise =
|
||||||
(*m_noise_map)(cl.y, cl.x); // TODO! check if this is correct
|
(*m_noise_map)(cl.y, cl.x); // TODO! check if this is correct
|
||||||
if (sum_1x1 <= noise || sum_2x2 <= 2 * noise || sum_3x3 <= 3 * noise) {
|
if (sum_1x1 <= noise || sum_2x2 <= 2 * noise ||
|
||||||
|
total_sum <= 3 * noise) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,8 +187,8 @@ TEST_CASE("Concatenate two cluster vectors where we need to allocate",
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct ClusterTestData {
|
struct ClusterTestData {
|
||||||
int8_t ClusterSizeX;
|
uint8_t ClusterSizeX;
|
||||||
int8_t ClusterSizeY;
|
uint8_t ClusterSizeY;
|
||||||
std::vector<int64_t> index_map_x;
|
std::vector<int64_t> index_map_x;
|
||||||
std::vector<int64_t> index_map_y;
|
std::vector<int64_t> index_map_y;
|
||||||
};
|
};
|
||||||
@ -213,8 +213,8 @@ TEST_CASE("Gain Map Calculation Index Map", "[.ClusterVector][.gain_map]") {
|
|||||||
{-2, -2, -2, -2, -2, -1, -1, -1, -1, -1, 0, 0, 0,
|
{-2, -2, -2, -2, -2, -1, -1, -1, -1, -1, 0, 0, 0,
|
||||||
0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2}});
|
0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2}});
|
||||||
|
|
||||||
int8_t ClusterSizeX = clustertestdata.ClusterSizeX;
|
uint8_t ClusterSizeX = clustertestdata.ClusterSizeX;
|
||||||
int8_t ClusterSizeY = clustertestdata.ClusterSizeY;
|
uint8_t ClusterSizeY = clustertestdata.ClusterSizeY;
|
||||||
|
|
||||||
std::vector<int64_t> index_map_x(ClusterSizeX * ClusterSizeY);
|
std::vector<int64_t> index_map_x(ClusterSizeX * ClusterSizeY);
|
||||||
std::vector<int64_t> index_map_y(ClusterSizeX * ClusterSizeY);
|
std::vector<int64_t> index_map_y(ClusterSizeX * ClusterSizeY);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user