v1.0.0-rc.40
This commit is contained in:
54
tests/FFTIndexerTest.cpp
Normal file
54
tests/FFTIndexerTest.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
#include <catch2/catch_all.hpp>
|
||||
#include "../image_analysis/indexing/IndexerFactory.h"
|
||||
#include "../common/Logger.h"
|
||||
|
||||
TEST_CASE("FFTIndexer") {
|
||||
Logger logger("FFTIndexer");
|
||||
|
||||
UnitCell uc(39,45,78,90,90,90);
|
||||
CrystalLattice cl(uc);
|
||||
|
||||
DiffractionExperiment experiment;
|
||||
IndexingSettings settings;
|
||||
settings.Algorithm(IndexingAlgorithmEnum::FFT)
|
||||
.FFT_MaxUnitCell_A(250.0).FFT_HighResolution_A(2 * M_PI / 3.0);
|
||||
experiment.ImportIndexingSettings(settings).SetUnitCell(uc);
|
||||
|
||||
#ifndef JFJOCH_USE_CUDA
|
||||
REQUIRE(experiment.GetIndexingAlgorithm() == IndexingAlgorithmEnum::None);
|
||||
#else
|
||||
REQUIRE(experiment.GetIndexingAlgorithm() == IndexingAlgorithmEnum::FFT);
|
||||
REQUIRE(experiment.GetIndexingSettings().GetTolerance() == Catch::Approx(0.1f));
|
||||
std::unique_ptr<Indexer> indexer = CreateIndexer(experiment);
|
||||
REQUIRE(indexer);
|
||||
|
||||
std::vector<Coord> vec;
|
||||
for (int h = -2; h < 10; h++) {
|
||||
for (int k = -5; k < 10; k++) {
|
||||
for (int l = -3; l < 10; l++) {
|
||||
vec.push_back(h * cl.Astar() + k * cl.Bstar() + l * cl.Cstar());
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.Info("Spots {}", vec.size());
|
||||
|
||||
auto start = std::chrono::high_resolution_clock::now();
|
||||
auto result = indexer->Run(vec, vec.size());
|
||||
auto end = std::chrono::high_resolution_clock::now();
|
||||
|
||||
REQUIRE(result.size() == 1);
|
||||
auto uc_out = result[0].l.GetUnitCell();
|
||||
CHECK(uc_out.a == Catch::Approx(uc.a));;
|
||||
CHECK(uc_out.b == Catch::Approx(uc.b));;
|
||||
CHECK(uc_out.c == Catch::Approx(uc.c));;
|
||||
|
||||
CHECK(uc_out.alpha == Catch::Approx(uc.alpha));;
|
||||
CHECK(uc_out.beta == Catch::Approx(uc.beta));;
|
||||
CHECK(uc_out.gamma == Catch::Approx(uc.gamma));;
|
||||
|
||||
logger.Info("Time: {} ms", std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count());
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user