Files
tono/tests/node_tests/psdf.py
2026-03-29 16:42:55 -07:00

36 lines
1.2 KiB
Python

import numpy as np
from backend.data_types import DataField
def test_psdf_node():
from backend.nodes.fft_2d import FFT2D
from backend.nodes.psdf import PSDF
field = DataField(
data=np.random.default_rng(17).standard_normal((64, 64)),
xreal=2.0e-6, yreal=1.0e-6, si_unit_xy="m", si_unit_z="nm",
)
fft_node = FFT2D()
psdf_node = PSDF()
fft_psdf = fft_node.process(field, windowing="hann", level="plane")[3]
psdf, = psdf_node.process(field, windowing="hann", level="plane")
assert np.allclose(psdf.data, fft_psdf.data)
assert psdf.data.shape == field.data.shape
assert psdf.domain == "frequency"
assert psdf.si_unit_xy == "1/m"
assert psdf.si_unit_z == "nm^2 m^2"
assert np.all(psdf.data >= 0.0)
white = DataField(
data=np.random.default_rng(123).standard_normal((128, 128)),
xreal=1.0e-6, yreal=1.0e-6, si_unit_xy="m", si_unit_z="m",
)
psdf_white, = psdf_node.process(white, windowing="none", level="none")
variance = float(np.var(white.data))
dk_x = psdf_white.xreal / psdf_white.xres
dk_y = psdf_white.yreal / psdf_white.yres
integral = float(np.sum(psdf_white.data) * dk_x * dk_y)
assert 0.8 < integral / variance < 1.2