// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #pragma once #include #include #include #include #include #include #include "../common/CrystalLattice.h" constexpr float REFINE_CANDIDATE_SPOT_COUNT_RATIO_THRESHOLD = 0.9f; constexpr float REFINE_CANDIDATE_VOLUME_RATIO_THRESHOLD = 1.05f; constexpr float REFINE_CANDIDATE_OVERLAP_RATIO_THRESHOLD = 0.2f; constexpr float REFINE_MIN_VOLUME_EPSILON = 1e-12f; constexpr float REFINE_MIN_REFERENCE_LENGTH_EPSILON = 1e-6f; struct RefineParameters { int64_t viable_cell_min_spots; float dist_tolerance_vs_reference; std::optional reference_unit_cell; float min_length_A; float max_length_A; float min_angle_deg; float max_angle_deg; float indexing_tolerance; }; std::vector Refine(const std::vector &in_spots, size_t nspots, Eigen::MatrixX3 &oCell, Eigen::VectorX &scores, RefineParameters &p);