# MTFs¶

prysm models often include analysis of Modulation Transfer Function (MTF) data. The MTF is formally defined as:

the normalized magnitude of the Fourier transform of the Point Spread Function

It is nothing more and nothing less. It may not be negative, complex-valued, or equal to any value other than unity at the origin.

Initializing an MTF model should feel similar to a PSF,

[1]:

import numpy as np
from prysm import MTF
x = y = 1/np.linspace(-1,1,128)
z = np.random.random((128,128))
mt = MTF(data=z, x=x, y=y)


MTFs are usually created from a PSF instance

[2]:

from prysm import Pupil, PSF
pu = Pupil(dia=10, wavelength=0.5)
ps = PSF.from_pupil(pu, efl=20)
mt = MTF.from_psf(ps)


If modeling the MTF directly from a pupil plane, the intermediate PSF plane may be skipped;

[3]:

mt = MTF.from_pupil(pu, Q=2, efl=20)  # Q, efl same as PSF.from_pupil


Much like a PSF or other Convolvable, MTFs have quick-access slices

[4]:

mt.tan, mt.sag

[4]:

((array([   0.        ,    7.87401575,   15.7480315 ,   23.62204724,
31.49606299,   39.37007874,   47.24409449,   55.11811024,
62.99212598,   70.86614173,   78.74015748,   86.61417323,
94.48818898,  102.36220472,  110.23622047,  118.11023622,
125.98425197,  133.85826772,  141.73228346,  149.60629921,
157.48031496,  165.35433071,  173.22834646,  181.1023622 ,
188.97637795,  196.8503937 ,  204.72440945,  212.5984252 ,
220.47244094,  228.34645669,  236.22047244,  244.09448819,
251.96850394,  259.84251969,  267.71653543,  275.59055118,
283.46456693,  291.33858268,  299.21259843,  307.08661417,
314.96062992,  322.83464567,  330.70866142,  338.58267717,
346.45669291,  354.33070866,  362.20472441,  370.07874016,
377.95275591,  385.82677165,  393.7007874 ,  401.57480315,
409.4488189 ,  417.32283465,  425.19685039,  433.07086614,
440.94488189,  448.81889764,  456.69291339,  464.56692913,
472.44094488,  480.31496063,  488.18897638,  496.06299213,
503.93700787,  511.81102362,  519.68503937,  527.55905512,
535.43307087,  543.30708661,  551.18110236,  559.05511811,
566.92913386,  574.80314961,  582.67716535,  590.5511811 ,
598.42519685,  606.2992126 ,  614.17322835,  622.04724409,
629.92125984,  637.79527559,  645.66929134,  653.54330709,
661.41732283,  669.29133858,  677.16535433,  685.03937008,
692.91338583,  700.78740157,  708.66141732,  716.53543307,
724.40944882,  732.28346457,  740.15748031,  748.03149606,
755.90551181,  763.77952756,  771.65354331,  779.52755906,
787.4015748 ,  795.27559055,  803.1496063 ,  811.02362205,
818.8976378 ,  826.77165354,  834.64566929,  842.51968504,
850.39370079,  858.26771654,  866.14173228,  874.01574803,
881.88976378,  889.76377953,  897.63779528,  905.51181102,
913.38582677,  921.25984252,  929.13385827,  937.00787402,
944.88188976,  952.75590551,  960.62992126,  968.50393701,
976.37795276,  984.2519685 ,  992.12598425, 1000.        ]),
array([1.00000000e+00, 9.90034799e-01, 9.80069598e-01, 9.70104397e-01,
9.60139196e-01, 9.50173996e-01, 9.40208795e-01, 9.30243594e-01,
9.20278393e-01, 9.10313192e-01, 9.00347991e-01, 8.90382790e-01,
8.80417589e-01, 8.70452388e-01, 8.60487188e-01, 8.50521987e-01,
8.40556786e-01, 8.30591585e-01, 8.20626384e-01, 8.10661183e-01,
8.00695982e-01, 7.90730781e-01, 7.80765581e-01, 7.70958557e-01,
7.61151534e-01, 7.51344511e-01, 7.41537488e-01, 7.31730465e-01,
7.21923442e-01, 7.12116419e-01, 7.02309396e-01, 6.92502373e-01,
6.82695350e-01, 6.73046504e-01, 6.63397659e-01, 6.53748814e-01,
6.44099968e-01, 6.34451123e-01, 6.24802278e-01, 6.15311610e-01,
6.05820943e-01, 5.96330275e-01, 5.86839608e-01, 5.77348940e-01,
5.67858273e-01, 5.58525783e-01, 5.49193293e-01, 5.39860804e-01,
5.30528314e-01, 5.21195824e-01, 5.11863334e-01, 5.02689022e-01,
4.93514711e-01, 4.84340399e-01, 4.75166087e-01, 4.66149953e-01,
4.57133818e-01, 4.48117684e-01, 4.39101550e-01, 4.30243594e-01,
4.21385637e-01, 4.12527681e-01, 4.03669725e-01, 3.94969946e-01,
3.86270168e-01, 3.77570389e-01, 3.68870611e-01, 3.60329010e-01,
3.51787409e-01, 3.43403986e-01, 3.35020563e-01, 3.26637140e-01,
3.18253717e-01, 3.10028472e-01, 3.01803227e-01, 2.93736159e-01,
2.85669092e-01, 2.77760202e-01, 2.69851313e-01, 2.61942423e-01,
2.54033534e-01, 2.46282822e-01, 2.38532110e-01, 2.30939576e-01,
2.23347042e-01, 2.15912686e-01, 2.08478330e-01, 2.01202151e-01,
1.93925973e-01, 1.86807972e-01, 1.79689972e-01, 1.72730149e-01,
1.65770326e-01, 1.58968681e-01, 1.52167036e-01, 1.45523568e-01,
1.38880101e-01, 1.32394812e-01, 1.25909522e-01, 1.19582411e-01,
1.13255299e-01, 1.07244543e-01, 1.01233787e-01, 9.53812085e-02,
8.95286302e-02, 8.38342297e-02, 7.81398292e-02, 7.27617842e-02,
6.73837393e-02, 6.21638722e-02, 5.69440051e-02, 5.20404935e-02,
4.71369820e-02, 4.25498260e-02, 3.79626700e-02, 3.36918697e-02,
2.94210693e-02, 2.54666245e-02, 2.15121797e-02, 1.80322683e-02,
1.45523568e-02, 1.15469788e-02, 8.54160076e-03, 6.01075609e-03,
3.47991142e-03, 1.73995571e-03, 7.81026047e-17, 3.33547739e-17])),
(array([   0.        ,    7.87401575,   15.7480315 ,   23.62204724,
31.49606299,   39.37007874,   47.24409449,   55.11811024,
62.99212598,   70.86614173,   78.74015748,   86.61417323,
94.48818898,  102.36220472,  110.23622047,  118.11023622,
125.98425197,  133.85826772,  141.73228346,  149.60629921,
157.48031496,  165.35433071,  173.22834646,  181.1023622 ,
188.97637795,  196.8503937 ,  204.72440945,  212.5984252 ,
220.47244094,  228.34645669,  236.22047244,  244.09448819,
251.96850394,  259.84251969,  267.71653543,  275.59055118,
283.46456693,  291.33858268,  299.21259843,  307.08661417,
314.96062992,  322.83464567,  330.70866142,  338.58267717,
346.45669291,  354.33070866,  362.20472441,  370.07874016,
377.95275591,  385.82677165,  393.7007874 ,  401.57480315,
409.4488189 ,  417.32283465,  425.19685039,  433.07086614,
440.94488189,  448.81889764,  456.69291339,  464.56692913,
472.44094488,  480.31496063,  488.18897638,  496.06299213,
503.93700787,  511.81102362,  519.68503937,  527.55905512,
535.43307087,  543.30708661,  551.18110236,  559.05511811,
566.92913386,  574.80314961,  582.67716535,  590.5511811 ,
598.42519685,  606.2992126 ,  614.17322835,  622.04724409,
629.92125984,  637.79527559,  645.66929134,  653.54330709,
661.41732283,  669.29133858,  677.16535433,  685.03937008,
692.91338583,  700.78740157,  708.66141732,  716.53543307,
724.40944882,  732.28346457,  740.15748031,  748.03149606,
755.90551181,  763.77952756,  771.65354331,  779.52755906,
787.4015748 ,  795.27559055,  803.1496063 ,  811.02362205,
818.8976378 ,  826.77165354,  834.64566929,  842.51968504,
850.39370079,  858.26771654,  866.14173228,  874.01574803,
881.88976378,  889.76377953,  897.63779528,  905.51181102,
913.38582677,  921.25984252,  929.13385827,  937.00787402,
944.88188976,  952.75590551,  960.62992126,  968.50393701,
976.37795276,  984.2519685 ,  992.12598425, 1000.        ]),
array([1.00000000e+00, 9.90034799e-01, 9.80069598e-01, 9.70104397e-01,
9.60139196e-01, 9.50173996e-01, 9.40208795e-01, 9.30243594e-01,
9.20278393e-01, 9.10313192e-01, 9.00347991e-01, 8.90382790e-01,
8.80417589e-01, 8.70452388e-01, 8.60487188e-01, 8.50521987e-01,
8.40556786e-01, 8.30591585e-01, 8.20626384e-01, 8.10661183e-01,
8.00695982e-01, 7.90730781e-01, 7.80765581e-01, 7.70958557e-01,
7.61151534e-01, 7.51344511e-01, 7.41537488e-01, 7.31730465e-01,
7.21923442e-01, 7.12116419e-01, 7.02309396e-01, 6.92502373e-01,
6.82695350e-01, 6.73046504e-01, 6.63397659e-01, 6.53748814e-01,
6.44099968e-01, 6.34451123e-01, 6.24802278e-01, 6.15311610e-01,
6.05820943e-01, 5.96330275e-01, 5.86839608e-01, 5.77348940e-01,
5.67858273e-01, 5.58525783e-01, 5.49193293e-01, 5.39860804e-01,
5.30528314e-01, 5.21195824e-01, 5.11863334e-01, 5.02689022e-01,
4.93514711e-01, 4.84340399e-01, 4.75166087e-01, 4.66149953e-01,
4.57133818e-01, 4.48117684e-01, 4.39101550e-01, 4.30243594e-01,
4.21385637e-01, 4.12527681e-01, 4.03669725e-01, 3.94969946e-01,
3.86270168e-01, 3.77570389e-01, 3.68870611e-01, 3.60329010e-01,
3.51787409e-01, 3.43403986e-01, 3.35020563e-01, 3.26637140e-01,
3.18253717e-01, 3.10028472e-01, 3.01803227e-01, 2.93736159e-01,
2.85669092e-01, 2.77760202e-01, 2.69851313e-01, 2.61942423e-01,
2.54033534e-01, 2.46282822e-01, 2.38532110e-01, 2.30939576e-01,
2.23347042e-01, 2.15912686e-01, 2.08478330e-01, 2.01202151e-01,
1.93925973e-01, 1.86807972e-01, 1.79689972e-01, 1.72730149e-01,
1.65770326e-01, 1.58968681e-01, 1.52167036e-01, 1.45523568e-01,
1.38880101e-01, 1.32394812e-01, 1.25909522e-01, 1.19582411e-01,
1.13255299e-01, 1.07244543e-01, 1.01233787e-01, 9.53812085e-02,
8.95286302e-02, 8.38342297e-02, 7.81398292e-02, 7.27617842e-02,
6.73837393e-02, 6.21638722e-02, 5.69440051e-02, 5.20404935e-02,
4.71369820e-02, 4.25498260e-02, 3.79626700e-02, 3.36918697e-02,
2.94210693e-02, 2.54666245e-02, 2.15121797e-02, 1.80322683e-02,
1.45523568e-02, 1.15469788e-02, 8.54160076e-03, 6.01075609e-03,
3.47991142e-03, 1.73995571e-03, 8.71798644e-17, 1.63890519e-17])))


The tangential MTF is a slice through the x=0 axis, and assumes the usual optics sign convention of an object extended in y. The sagittal MTF is a slice through the y=0 axis.

The MTF at exact frequencies may be queried through any of the following methods: exact_polar, takes arguments of freqs and azimuths. If there is a single frequency and multiple azimuths, the MTF at each azimuth and and the specified radial spatial frequency will be returned. The reverse is true for a single azimuth and multiple frequencies. exact_xy follows the same semantics, but with Cartesian coordinates instead of polar. exact_tan and exact_sag both take a single argument of freq, which may be an int, float, or ndarray.

Finally, MTFs may be plotted:

[5]:

mt.plot_tan_sag(max_freq=1000, fig=None, ax=None, labels=('Tangential', 'Sagittal'))
mt.plot2d(max_freq=1000, power=2, fig=None, ax=None)

[5]:

(<Figure size 640x480 with 2 Axes>,
<matplotlib.axes._subplots.AxesSubplot at 0x7f88ef3df908>)


all arguments have these default values. The axes of plot2d will span (-max_freq, max_freq) on both x and y.

This example should be familiar as the diffraction limited MTF of a circular aperture.

[ ]: