Sampled MTF

This functionality provides the means to compute the MTF at target frequencies and is significantly faster than the FFT-based approach.

[1]:
from optiland.mtf import SampledMTF
from optiland.samples.objectives import TessarLens
[2]:
lens = TessarLens()
[3]:
lens.draw()
[3]:
(<Figure size 1000x400 with 1 Axes>, <Axes: xlabel='Z [mm]', ylabel='Y [mm]'>)
../../_images/gallery_wavefront_sampled_mtf_3_1.png
[4]:
sampled_mtf = SampledMTF(lens, field=(0, 0), wavelength=0.55, num_rays=128)

frequencies = [(0, 50), (100, 0), (150, 95)]
mtf = sampled_mtf.calculate_mtf(frequencies=frequencies)

for (fx, fy), value in zip(frequencies, mtf):
    print(f"fx: {fx} cycles/mm, fy: {fy} cycles/mm, MTF: {value * 100:.1f}%")
fx: 0 cycles/mm, fy: 50 cycles/mm, MTF: 84.3%
fx: 100 cycles/mm, fy: 0 cycles/mm, MTF: 68.7%
fx: 150 cycles/mm, fy: 95 cycles/mm, MTF: 46.0%