v1.0.0-rc.41
This commit is contained in:
@@ -49,18 +49,23 @@ TEST_CASE("RecipToDetector_3", "[LinearAlgebra][Coord]") {
|
||||
REQUIRE(geom.DistFromEwaldSphere(recip) < 4e-4);
|
||||
}
|
||||
|
||||
TEST_CASE("Phi","") {
|
||||
TEST_CASE("DiffractionGeometry_Phi","") {
|
||||
DiffractionExperiment x(DetJF4M());
|
||||
x.DetectorDistance_mm(75).IncidentEnergy_keV(WVL_1A_IN_KEV);
|
||||
x.BeamX_pxl(1000).BeamY_pxl(1000);
|
||||
DiffractionGeometry geom = x.GetDiffractionGeometry();
|
||||
|
||||
REQUIRE(geom.Phi(2000, 1000) == Catch::Approx(0.0));
|
||||
REQUIRE(geom.Phi(1000, 2000) == Catch::Approx(M_PI_2));
|
||||
REQUIRE(geom.Phi(2000, 2000) == Catch::Approx(M_PI_4));
|
||||
CHECK(geom.Phi(2000, 1000) * (180.0 / M_PI) == Catch::Approx(0.0));
|
||||
CHECK(geom.Phi(2000, 0) * (180.0 / M_PI) == Catch::Approx(45.0f));
|
||||
CHECK(geom.Phi(1000, 0) * (180.0 / M_PI) == Catch::Approx(90.0f));
|
||||
CHECK(geom.Phi(0, 0) * (180.0 / M_PI) == Catch::Approx(135.0f));
|
||||
CHECK(geom.Phi(0, 1000) * (180.0 / M_PI) == Catch::Approx(180.0f));
|
||||
CHECK(geom.Phi(1000, 2000) * (180.0 / M_PI) == Catch::Approx(270.f));
|
||||
CHECK(geom.Phi(2000, 2000) * (180.0 / M_PI) == Catch::Approx(315.0f));
|
||||
|
||||
}
|
||||
|
||||
TEST_CASE("Cos2Theta","") {
|
||||
TEST_CASE("DiffractionGeometry_Cos2Theta","") {
|
||||
DiffractionExperiment x(DetJF4M());
|
||||
x.DetectorDistance_mm(75).IncidentEnergy_keV(WVL_1A_IN_KEV);
|
||||
x.BeamX_pxl(1000).BeamY_pxl(1000);
|
||||
@@ -69,10 +74,10 @@ TEST_CASE("Cos2Theta","") {
|
||||
// det distance == 1000 pixel
|
||||
// theta = 30 deg
|
||||
// tan(2 * theta) = sqrt(3)
|
||||
REQUIRE(geom.CosTwoTheta(1000, 1000 * (1.0 + sqrt(3))) == Catch::Approx(0.5f));
|
||||
REQUIRE(cosf(geom.TwoTheta(1000, 1000 * (1.0 + sqrt(3)))) == Catch::Approx(0.5f));
|
||||
}
|
||||
|
||||
TEST_CASE("PxlToRes","") {
|
||||
TEST_CASE("DiffractionGeometry_PxlToRes","") {
|
||||
DiffractionExperiment x(DetJF4M());
|
||||
x.DetectorDistance_mm(75).IncidentEnergy_keV(WVL_1A_IN_KEV);
|
||||
DiffractionGeometry geom = x.GetDiffractionGeometry();
|
||||
@@ -90,7 +95,7 @@ TEST_CASE("PxlToRes","") {
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("ResToPxl","") {
|
||||
TEST_CASE("DiffractionGeometry_ResToPxl","") {
|
||||
DiffractionExperiment x(DetJF4M());
|
||||
x.DetectorDistance_mm(75).IncidentEnergy_keV(WVL_1A_IN_KEV);
|
||||
DiffractionGeometry geom = x.GetDiffractionGeometry();
|
||||
@@ -106,7 +111,7 @@ TEST_CASE("ResToPxl","") {
|
||||
REQUIRE(geom.ResToPxl(2.0) == Catch::Approx(1000 * 0.55328333517));
|
||||
}
|
||||
|
||||
TEST_CASE("SolidAngleCorrection","") {
|
||||
TEST_CASE("DiffractionGeometry_SolidAngleCorrection","") {
|
||||
DiffractionExperiment x;
|
||||
x.IncidentEnergy_keV(WVL_1A_IN_KEV);
|
||||
x.BeamX_pxl(1000).BeamY_pxl(1000).DetectorDistance_mm(75);
|
||||
@@ -121,7 +126,7 @@ TEST_CASE("SolidAngleCorrection","") {
|
||||
REQUIRE(geom.CalcAzIntSolidAngleCorr(1000 * (1.0 + sqrt(3)), 1000) == Catch::Approx(0.5f * 0.5f * 0.5f));
|
||||
}
|
||||
|
||||
TEST_CASE("PolarizationCorrection","") {
|
||||
TEST_CASE("DiffractionGeometry_PolarizationCorrection","") {
|
||||
DiffractionExperiment x;
|
||||
x.IncidentEnergy_keV(WVL_1A_IN_KEV);
|
||||
x.BeamX_pxl(1000).BeamY_pxl(1000).DetectorDistance_mm(75);
|
||||
@@ -144,3 +149,60 @@ TEST_CASE("PolarizationCorrection","") {
|
||||
REQUIRE(geom.CalcAzIntPolarizationCorr(1000 * (1.0 + sqrt(3)), 1000, 1) == Catch::Approx(0.5f * 0.5f));
|
||||
REQUIRE(geom.CalcAzIntPolarizationCorr(1000 * (1.0 - sqrt(3)), 1000, 1) == Catch::Approx(0.5f * 0.5f));
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionGeometry_AngleFromEwaldSphere") {
|
||||
DiffractionGeometry geom;
|
||||
geom.Wavelength_A(1.0);
|
||||
|
||||
// Center of Ewald sphere == (0,0,-1)
|
||||
|
||||
// Points on Ewald sphere
|
||||
REQUIRE(geom.AngleFromEwaldSphere(Coord(1,0,-1)) == 0.0f);
|
||||
REQUIRE(geom.AngleFromEwaldSphere(Coord(1.0f/sqrtf(2.0f),1.0f/sqrtf(2.0f),-1)) == 0.0f);
|
||||
|
||||
REQUIRE(geom.AngleFromEwaldSphere(Coord(1,0,1)) == Catch::Approx(90.0f));
|
||||
REQUIRE(geom.AngleFromEwaldSphere(Coord(-sqrtf(2.0f),0,0)) == Catch::Approx(45.0f));
|
||||
REQUIRE(geom.AngleFromEwaldSphere(Coord(-sqrtf(3.0f),0,0)) == Catch::Approx(60.0f));
|
||||
|
||||
float cos_1deg = cosf(1.0f * M_PI / 180.0f);
|
||||
float sin_1deg = sinf(1.0f * M_PI / 180.0f);
|
||||
|
||||
REQUIRE(fabsf(geom.AngleFromEwaldSphere((Coord(cos_1deg - sin_1deg, 0, -(cos_1deg + sin_1deg)))) - 1.0f) < 0.0005);
|
||||
|
||||
// Cannot be rotated to fit into the Ewald sphere
|
||||
REQUIRE(isnanf(geom.AngleFromEwaldSphere(Coord(0,0,1))));
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionGeometry_DirectBeam") {
|
||||
DiffractionGeometry geom;
|
||||
geom.Wavelength_A(1.0);
|
||||
geom.BeamX_pxl(1230).BeamY_pxl(1450);
|
||||
|
||||
auto [x, y] = geom.GetDirectBeam_pxl();
|
||||
REQUIRE(x == Catch::Approx(1230.0f));
|
||||
REQUIRE(y == Catch::Approx(1450.0f));
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionGeometry_DirectBeam_RotZ") {
|
||||
DiffractionGeometry geom;
|
||||
geom.Wavelength_A(1.0);
|
||||
geom.BeamX_pxl(1230).BeamY_pxl(1450);
|
||||
geom.PoniRot3_rad(M_PI_2);
|
||||
|
||||
auto [x, y] = geom.GetDirectBeam_pxl();
|
||||
REQUIRE(x == Catch::Approx(1230.0f));
|
||||
REQUIRE(y == Catch::Approx(1450.0f));
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionGeometry_DirectBeam_RotY") {
|
||||
DiffractionGeometry geom;
|
||||
geom.Wavelength_A(1.0);
|
||||
geom.DetectorDistance_mm(100);
|
||||
geom.PixelSize_mm(1.0);
|
||||
geom.BeamX_pxl(1230).BeamY_pxl(1450);
|
||||
geom.PoniRot2_rad(M_PI_4); // 45 deg rotation
|
||||
|
||||
auto [x, y] = geom.GetDirectBeam_pxl();
|
||||
CHECK(x == Catch::Approx(1230.0f)); // no Change for X
|
||||
CHECK(y >1450.0f);
|
||||
}
|
||||
Reference in New Issue
Block a user