// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCH_INDEXER_H #define JFJOCH_INDEXER_H #include #include "../../common/CrystalLattice.h" #include "../../common/DiffractionExperiment.h" #include "../../common/JFJochMessages.h" #include "../../common/SpotToSave.h" struct IndexerResult { std::vector lattice; float indexing_time_s; bool executed = false; // If indexing was not performed (due to indexer being not-available) mark it, so indexing result is marked accordingly }; class Indexer { protected: int64_t viable_cell_min_spots = 9; float indexing_tolerance = 0.1; float dist_tolerance_vs_reference = 0.05; bool index_ice_rings = true; DiffractionGeometry geom; std::optional reference_unit_cell; virtual void SetupUnitCell(const std::optional& cell) = 0; virtual std::vector RunInternal(const std::vector &coord, size_t nspots) = 0; public: virtual ~Indexer() = default; void Setup(const DiffractionExperiment& experiment); IndexerResult Run(const std::vector &coord); }; #endif //JFJOCH_INDEXER_H