v1.0.0-rc.40
This commit is contained in:
@@ -3,12 +3,10 @@
|
||||
|
||||
#include <catch2/catch_all.hpp>
|
||||
#include "../writer/HDF5Objects.h"
|
||||
#include "../image_analysis/IndexerWrapper.h"
|
||||
|
||||
#define make_unit_cell(a1,a2,a3,a4,a5,a6) UnitCell{.a = a1, .b = a2, .c = a3, .alpha = a4, .beta = a5, .gamma = a6}
|
||||
#include "../image_analysis/indexing/IndexerFactory.h"
|
||||
|
||||
TEST_CASE("CrystalLattice") {
|
||||
CrystalLattice l(make_unit_cell(50,60,80, 90, 90, 90));
|
||||
CrystalLattice l(50,60,80, 90, 90, 90);
|
||||
REQUIRE(l.Vec0().Length() == Catch::Approx(50));
|
||||
REQUIRE(l.Vec1().Length() == Catch::Approx(60));
|
||||
REQUIRE(l.Vec2().Length() == Catch::Approx(80));
|
||||
@@ -24,7 +22,7 @@ TEST_CASE("CrystalLattice") {
|
||||
REQUIRE(uc0.beta == Catch::Approx(90));
|
||||
REQUIRE(uc0.gamma == Catch::Approx(90));
|
||||
|
||||
l = CrystalLattice(make_unit_cell(30, 40, 70, 90, 95, 90));
|
||||
l = CrystalLattice(30, 40, 70, 90, 95, 90);
|
||||
REQUIRE(l.Vec0().Length() == Catch::Approx(30));
|
||||
REQUIRE(l.Vec1().Length() == Catch::Approx(40));
|
||||
REQUIRE(l.Vec2().Length() == Catch::Approx(70));
|
||||
@@ -40,7 +38,7 @@ TEST_CASE("CrystalLattice") {
|
||||
REQUIRE(uc1.beta == Catch::Approx(95));
|
||||
REQUIRE(uc1.gamma == Catch::Approx(90));
|
||||
|
||||
l = CrystalLattice(make_unit_cell(45, 45, 70, 90, 90, 120));
|
||||
l = CrystalLattice(45, 45, 70, 90, 90, 120);
|
||||
REQUIRE(l.Vec0().Length() == Catch::Approx(45));
|
||||
REQUIRE(l.Vec1().Length() == Catch::Approx(45));
|
||||
REQUIRE(l.Vec2().Length() == Catch::Approx(70));
|
||||
@@ -57,6 +55,42 @@ TEST_CASE("CrystalLattice") {
|
||||
REQUIRE(uc2.gamma == Catch::Approx(120));
|
||||
}
|
||||
|
||||
TEST_CASE("CrystalLattice_Sort") {
|
||||
CrystalLattice l(80,60,50, 120, 90, 90);
|
||||
REQUIRE(l.Vec0().Length() == Catch::Approx(50));
|
||||
REQUIRE(l.Vec1().Length() == Catch::Approx(60));
|
||||
REQUIRE(l.Vec2().Length() == Catch::Approx(80));
|
||||
REQUIRE(angle_deg(l.Vec0(), l.Vec2()) == Catch::Approx(90));
|
||||
REQUIRE(angle_deg(l.Vec0(), l.Vec1()) == Catch::Approx(120));
|
||||
REQUIRE(angle_deg(l.Vec1(), l.Vec2()) == Catch::Approx(90));
|
||||
}
|
||||
|
||||
TEST_CASE("CrystalLattice_Handedness") {
|
||||
CrystalLattice l(Coord(1,0,0), Coord(0,1,0), Coord(0,0,-1));
|
||||
REQUIRE(l.Vec0().x == Catch::Approx(1));
|
||||
REQUIRE(l.Vec1().y == Catch::Approx(1));
|
||||
REQUIRE(l.Vec2().z == Catch::Approx(1));
|
||||
}
|
||||
|
||||
TEST_CASE("CrystalLattice_Volume") {
|
||||
CrystalLattice l(50, 60, 80, 90, 90, 90);
|
||||
REQUIRE(l.CalcVolume() == 50 * 60 * 80);
|
||||
|
||||
CrystalLattice l2(50,60,80, 90, 120, 90);
|
||||
float sin120 = std::sqrt(3) / 2;
|
||||
REQUIRE(l2.CalcVolume() == Catch::Approx(50 * 60 * 80 * sin120));
|
||||
}
|
||||
|
||||
TEST_CASE("CrystalLattice_Recip") {
|
||||
CrystalLattice l(50,60,80, 90, 90, 90);
|
||||
REQUIRE(l.Astar().Length() == Catch::Approx(1/50.0));
|
||||
REQUIRE(l.Astar().x == Catch::Approx(1/50.0));
|
||||
REQUIRE(l.Bstar().Length() == Catch::Approx(1/60.0));
|
||||
REQUIRE(l.Bstar().y == Catch::Approx(1/60.0));
|
||||
REQUIRE(l.Cstar().Length() == Catch::Approx(1/80.0));
|
||||
REQUIRE(l.Cstar().z == Catch::Approx(1/80.0));
|
||||
}
|
||||
|
||||
inline double round_err(double x) {
|
||||
return std::abs(x - std::round(x));
|
||||
}
|
||||
@@ -73,9 +107,17 @@ TEST_CASE("FastFeedbackIndexer","[Indexing]") {
|
||||
hkl.emplace_back(i,j,k);
|
||||
|
||||
std::vector<UnitCell> cells;
|
||||
cells.emplace_back(make_unit_cell(30,40,50,90,90,90));
|
||||
cells.emplace_back(make_unit_cell(80,80,90,90,90,120));
|
||||
cells.emplace_back(make_unit_cell(40,45,80,90,82.5,90));
|
||||
cells.emplace_back(30,40,50,90,90,90);
|
||||
cells.emplace_back(80,80,90,90,90,120);
|
||||
cells.emplace_back(40,45,80,90,82.5,90);
|
||||
|
||||
DiffractionExperiment experiment;
|
||||
experiment.SetUnitCell(cells[0]);
|
||||
experiment.IndexingAlgorithm(IndexingAlgorithmEnum::FFBIDX);
|
||||
|
||||
REQUIRE(experiment.GetIndexingAlgorithm() == IndexingAlgorithmEnum::FFBIDX);
|
||||
|
||||
std::unique_ptr<Indexer> indexer = CreateIndexer(experiment);
|
||||
|
||||
for (auto &c: cells) {
|
||||
CrystalLattice l(c);
|
||||
@@ -86,26 +128,19 @@ TEST_CASE("FastFeedbackIndexer","[Indexing]") {
|
||||
l.Vec2().x, l.Vec2().y, l.Vec2().z;
|
||||
auto m1 = m.transpose().inverse();
|
||||
|
||||
CrystalLattice recip_l;
|
||||
recip_l.Vec0().x = m1(0,0);
|
||||
recip_l.Vec0().y = m1(0,1);
|
||||
recip_l.Vec0().z = m1(0,2);
|
||||
recip_l.Vec1().x = m1(1,0);
|
||||
recip_l.Vec1().y = m1(1,1);
|
||||
recip_l.Vec1().z = m1(1,2);
|
||||
recip_l.Vec2().x = m1(2,0);
|
||||
recip_l.Vec2().y = m1(2,1);
|
||||
recip_l.Vec2().z = m1(2,2);
|
||||
CrystalLattice recip_l(Coord(m1(0,0), m1(0,1), m1(0,2)),
|
||||
Coord(m1(1,0), m1(1,1), m1(1,2)),
|
||||
Coord(m1(2,0), m1(2,1), m1(2,2)));
|
||||
|
||||
std::vector<Coord> recip;
|
||||
recip.reserve(hkl.size());
|
||||
for (const auto &i: hkl)
|
||||
recip.emplace_back(i.x * recip_l.Vec0() + i.y * recip_l.Vec1() + i.z * recip_l.Vec2());
|
||||
|
||||
IndexerWrapper wrapper;
|
||||
experiment.SetUnitCell(c);
|
||||
|
||||
wrapper.Setup(c);
|
||||
auto ret = wrapper.Run(recip, 0.05f, recip.size());
|
||||
indexer->Setup(experiment);
|
||||
auto ret = indexer->Run(recip, recip.size());
|
||||
REQUIRE(!ret.empty());
|
||||
|
||||
//auto uc = ret[0].GetUnitCell();
|
||||
|
||||
Reference in New Issue
Block a user