refactor: extract common code from aaredaq
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
import pytest
|
||||
from aarecommon.math.diffraction_geometry import DiffractionGeometry
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_dg():
|
||||
return DiffractionGeometry(
|
||||
energy_keV=12.4,
|
||||
dtz_mm=100.0,
|
||||
pixel_size_mm=0.172,
|
||||
beam_center_pxl=(1000.0, 1000.0),
|
||||
detector_size_pxl=(2000, 2000),
|
||||
detector_description="Eiger 16M",
|
||||
detector_serial_number="E-123",
|
||||
poni_rot1_rad=0.0,
|
||||
poni_rot2_rad=0.0,
|
||||
)
|
||||
|
||||
|
||||
def test_detector_max_radius_pxl(sample_dg):
|
||||
# center (1000, 1000), size (2000, 2000)
|
||||
# x0 = 2000-1000 = 1000
|
||||
# x1 = 1000
|
||||
# y0 = 2000-1000 = 1000
|
||||
# y1 = 1000
|
||||
# max = 1000
|
||||
assert sample_dg.detector_max_radius_pxl == 1000.0
|
||||
|
||||
|
||||
def test_detector_radius_mm(sample_dg):
|
||||
# 1000 * 0.172 = 172.0
|
||||
assert sample_dg.detector_radius_mm == 172.0
|
||||
|
||||
|
||||
def test_wavelength_angstrom(sample_dg):
|
||||
# 12.398 / 12.4 = 0.9998387...
|
||||
assert sample_dg.wavelength_angstrom == pytest.approx(0.9998387)
|
||||
|
||||
|
||||
def test_resolution_angstrom(sample_dg):
|
||||
# dtz = 100
|
||||
# radius = 172
|
||||
# theta = atan(172/100) * 0.5 = atan(1.72) * 0.5 = 1.044 * 0.5 = 0.522 rad
|
||||
# res = 0.9998 / (2 * sin(0.522)) = 0.9998 / (2 * 0.498) = 1.003
|
||||
res = sample_dg.resolution_angstrom(100.0)
|
||||
assert res > 0
|
||||
assert res == pytest.approx(1.002469, abs=1e-5)
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
sample_dg.resolution_angstrom(0)
|
||||
|
||||
|
||||
def test_max_resolution_angstrom(sample_dg):
|
||||
assert sample_dg.max_resolution_angstrom == sample_dg.resolution_angstrom(
|
||||
sample_dg.dtz_mm
|
||||
)
|
||||
|
||||
|
||||
def test_calc_dtz_mm(sample_dg):
|
||||
res = sample_dg.resolution_angstrom(100.0)
|
||||
dtz = sample_dg.calc_dtz_mm(res)
|
||||
assert dtz == pytest.approx(100.0)
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
sample_dg.calc_dtz_mm(-1)
|
||||
|
||||
# test x >= 1.0 case: wavelength / (2*res) >= 1.0 -> res <= wavelength / 2
|
||||
assert sample_dg.calc_dtz_mm(0.0001) == 0.0
|
||||
Reference in New Issue
Block a user