36 lines
1.2 KiB
Python
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
|