mirror of
https://github.com/yosata/fourierOptics.git
synced 2026-10-30 05:01:04 +00:00
87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import sys
|
|
# sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/Fourier Optics')
|
|
# sys.path.insert(0, '/home/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/Fourier Optics')
|
|
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
|
from fourierOptics import *
|
|
from pdb import set_trace
|
|
|
|
'''
|
|
@Author: Joost van den Born
|
|
@Date: 14 July, 2022
|
|
@Description: I use this script to create a large array (1001x1001 and 3001x3001)
|
|
that can be used for the phase screen in the WFE production.
|
|
Because it takes very long to generate these at this high resolution,
|
|
we will need to save them to a pickle file.
|
|
|
|
What is saved:
|
|
The array of coefficients
|
|
The array of the full phase field
|
|
|
|
To Do:
|
|
- Normalize/Scale the amplitude in an appropriate manner.
|
|
'''
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# plt.rc('text', usetex=True)
|
|
# plt.rc('font', family='serif')
|
|
import time
|
|
# Setup of simulation
|
|
l = 1.49e-3
|
|
# mcd = ParaxialMICADO(n=1001, m=1001, dpix=160)
|
|
mcd = ParaxialMICADO(n=3001, m=3001, dpix=50)
|
|
# mcd.plot_ray_trace()
|
|
wfe = WavefrontError(mcd.n, mcd.m)
|
|
|
|
|
|
# -------------------------------------------------------
|
|
####### GENERATING THE PHASE WITH A FOURIER SERIES ######
|
|
# -------------------------------------------------------
|
|
# Get x3 and y3 (the coordinates to apply the ADC WFE to):
|
|
# The focal plane area is about 200x200 mm, so we apply the wavefront error to an area
|
|
# of 200x200 mm.
|
|
xfp, yfp = np.meshgrid(np.linspace(-150, 150, mcd.n), np.linspace(-150, 150, mcd.m))
|
|
# np.random.seed(2183)
|
|
# coeff = np.random.uniform(-1,1,(int(mcd.n/3),int(mcd.m/3)))
|
|
np.random.seed(2183)
|
|
coeff = np.random.uniform(-1,1,(101,101))
|
|
|
|
if False:
|
|
print('Going in...')
|
|
s1 = time.time()
|
|
fs_array = fourier_series(xfp, yfp, coeff, Px=300, Py=300, xs=150, ys=150)
|
|
s2 = time.time()
|
|
print('Finished!')
|
|
print('That took me {:.4f} s!'.format(s2-s1) )
|
|
save_variable('wfe_fp_phase_array_coefficients_{}_{}.pkl'.format(mcd.n, mcd.m), coeff)
|
|
save_variable('wfe_fp_phase_array_{}_{}.pkl'.format(mcd.n, mcd.m), fs_array)
|
|
|
|
# -------------------------------------------------------
|
|
# -------------------------------------------------------
|
|
# -------------------------------------------------------
|
|
|
|
if True:
|
|
# coeff = load_variable('wfe_fp_phase_array_coefficients_{}_{}.pkl'.format(mcd.n, mcd.m))
|
|
fs_array = load_variable('wfe_fp_phase_array_{}_{}.pkl'.format(mcd.n, mcd.m))
|
|
|
|
wfe.phase = fs_array
|
|
surf = wfe.generate_height_map(50e-6, 2, 1)
|
|
rms = np.sqrt(np.mean(surf**2))
|
|
print('RMS: {}'.format(rms))
|
|
|
|
|
|
plt.figure()
|
|
plt.imshow(fs_array, cmap='jet', extent=[xfp.min(), xfp.max(), yfp.min(), yfp.max()], origin='lower')
|
|
plt.colorbar()
|
|
plt.show()
|
|
|
|
|
|
plt.figure()
|
|
plt.imshow(surf, cmap='jet', extent=[xfp.min(), xfp.max(), yfp.min(), yfp.max()], origin='lower')
|
|
plt.colorbar()
|
|
plt.show()
|
|
|
|
|