mirror of
https://github.com/yosata/fourierOptics.git
synced 2026-10-29 20:51:10 +00:00
Added descriptions to all scripts, checked functioning
This commit is contained in:
1 parent
9ce4b7045f
commit
7cbaec6ff9
48 files changed
+262
-255
No files matched your search
@@ -1,23 +0,0 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
# sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/Fourier Optics')
|
||||
from fourierOptics import *
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Initiate MICADO paraxial model
|
||||
mcd = ParaxialMICADO()
|
||||
# mcd.plot_ray_trace()
|
||||
|
||||
print(mcd.platescale)
|
||||
# Initiate WFE object
|
||||
wfe = WavefrontError(mcd.n, mcd.m)
|
||||
|
||||
# Generate PSD surfaces
|
||||
psd = wfe.generate_height_map(200e-6, 2, 1)
|
||||
|
||||
# Add it to ADC-P1
|
||||
mcd.ELT_ADC.p1.add_wavefront_error(psd)
|
||||
|
||||
# Generate the PSF and plot it
|
||||
E, x, y = mcd.propagate(l=1.35e-3,surface=-1, zoom=True, show=True) # image_output=[-.4,.4,-.4,.4]
|
||||
@@ -1,8 +1,16 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
Description:
|
||||
This script generates a point spread function of the MICADO optical model.
|
||||
During the setup a wavefront error of 200 nm RMS is added to the first
|
||||
prisms of the MICADO atmospheric dispersion corrector.
|
||||
'''
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Initiate MICADO paraxial model
|
||||
mcd = ParaxialMICADO()
|
||||
|
||||
@@ -1,9 +1,21 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
'''
|
||||
Description:
|
||||
This script generates a point spread function of the MICADO optical model.
|
||||
Here we apply a Bahtinov mask to the pupil and simulate a broadband PSF,
|
||||
done through the summation of multiple (here: 15) wavelength slices.
|
||||
When there is atmospheric dispersion, the diffraction speckles created by the
|
||||
Bahtinov mask will start to point to a location outside the zeroth order
|
||||
PSF core.
|
||||
Here, atmospheric dispersion is modelled as a wavelength dependent phase
|
||||
tilt.
|
||||
'''
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Initiate MICADO paraxial model
|
||||
mcd = ParaxialMICADO()
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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
|
||||
|
||||
|
||||
'''
|
||||
Description:
|
||||
This script generates nine points in a small field to illustrate the
|
||||
most basic form of off-axis propagation.
|
||||
For larger off-axis distances the hx and hy values should directly
|
||||
be supplied to the propagate function.
|
||||
'''
|
||||
|
||||
|
||||
def field_angle(hx, hy):
|
||||
fx = hx * 0.0075
|
||||
@@ -14,14 +23,6 @@ if __name__ == '__main__':
|
||||
# Initializing MICADO paraxial model
|
||||
mcd = ParaxialMICADO()
|
||||
wfe = WavefrontError(mcd.n, mcd.m)
|
||||
|
||||
# Uncomment to load in WFE (coma)
|
||||
# Problem here is that the field of view is too small to see
|
||||
# a radial effect...
|
||||
# xin, yin = load_variable('../adc_data_coordinates.pkl')
|
||||
# adcObj = ADC_surfaces(xin,yin)
|
||||
# zern = wfe.zernike_cartesian([0,0,0,0,0,0,0,100e-5], adcObj.xz, adcObj.yz, rescale=False)
|
||||
# mcd.ELT_ADC.p1.add_wavefront_error(zern)
|
||||
|
||||
# Setup
|
||||
l = 1.49e-3
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
import matplotlib.pyplot as plt
|
||||
from pdb import set_trace
|
||||
|
||||
'''
|
||||
Description:
|
||||
This script generates the amplitude and phase information of all surfaces
|
||||
in the MICADO paraxial model in a nicely presented form.
|
||||
'''
|
||||
|
||||
if __name__ == '__main__':
|
||||
plt.rc('font', family='serif')
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
# sys.path.insert(0, '/Users/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 *
|
||||
import matplotlib.pyplot as plt
|
||||
from pdb import set_trace
|
||||
|
||||
'''
|
||||
Description:
|
||||
This script generates the amplitude and phase information of all surfaces
|
||||
in the MICADO paraxial model in a nicely presented form.
|
||||
'''
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
plt.rc('font', family='serif')
|
||||
@@ -13,13 +19,9 @@ if __name__ == '__main__':
|
||||
# Initiate MICADO paraxial model
|
||||
mcd = ParaxialMICADO(n=3001, m=3001, dpix=50)
|
||||
|
||||
# Generate the PSF and plot it
|
||||
# E, x, y = mcd.propagate(l=1.35e-3,surface=-1, zoom=True, show=True, save='all')
|
||||
|
||||
confList = [ ( 1, [-0.4, 0.4, -0.4, 0.4], '02_fourier_ELT-IFP.pdf'),
|
||||
( 2, [-50, 50, -50, 50], '03_fourier_ELT-COL.pdf'),
|
||||
( 4, [-50, 50, -50, 50], '04_fourier_ELT-MCD-ADC-P2.pdf'),
|
||||
# (-1, [-1.2, 1.2, -1.2, 1.2], '05_fourier_ELT-MCD-DET.pdf')]
|
||||
(-1, [-1.2/2.669, 1.2/2.669, -1.2/2.669, 1.2/2.669], '05_fourier_ELT-MCD-DET.pdf')]
|
||||
|
||||
|
||||
@@ -50,4 +52,4 @@ if __name__ == '__main__':
|
||||
_fig.colorbar(_im2, ax=_ax2, label='Phase')
|
||||
plt.tight_layout()
|
||||
# plt.savefig('01_fourier_ELT-M1.pdf', bbox_inches='tight', transparent=True)
|
||||
plt.close()#show()
|
||||
plt.show()
|
||||
Binary file not shown.
@@ -1,18 +1,20 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import pickle
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
'''
|
||||
@ Author: Joost van den Born
|
||||
@ Description: Testing a small phase tilt to create a PSF off-axis
|
||||
Note on 2022-08-02: Doesn't seem to do much? Not sure about this script...
|
||||
'''
|
||||
|
||||
def saveVariable(var, filename):
|
||||
# Saving the objects:
|
||||
with open(filename, 'wb') as f: # Python 3: open(..., 'wb')
|
||||
|
||||
+24
-21
@@ -1,17 +1,19 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import pickle
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
'''
|
||||
@ Author: Joost van den Born
|
||||
@ Description: Script for analysing WFEs produced using either Zernike polynomials or
|
||||
a PSD description. It also compares the shift in centroid position as the
|
||||
complexity of the WFE increases through spatial frequency filtering.
|
||||
'''
|
||||
def saveVariable(var, filename):
|
||||
# Saving the objects:
|
||||
@@ -80,7 +82,7 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
plt.imshow(np.abs(Exyz_og), cmap='hot');plt.colorbar();plt.show()
|
||||
set_trace()
|
||||
|
||||
zernikeAnalysis = True
|
||||
PSDAnalysis = True
|
||||
|
||||
@@ -97,7 +99,8 @@ if __name__ == '__main__':
|
||||
# and more modes.
|
||||
|
||||
# Calculate the maximum mode that we want to fit the zernike modes to.
|
||||
nmax, mmax = 80, 80
|
||||
# nmax, mmax = 80, 80
|
||||
nmax, mmax = 20,20
|
||||
zernikeLimit = int((nmax*(nmax+2)+mmax)/2)
|
||||
|
||||
# Fit the zernike coefficients for all modes up to zernikeLimit
|
||||
@@ -147,15 +150,15 @@ if __name__ == '__main__':
|
||||
eef_zern_list.append(eef_zern.tolist())
|
||||
zernImageResponse.append(Exyz_zern)
|
||||
|
||||
saveVariable(x0zern, './data/x0zern.pck')
|
||||
saveVariable(y0zern, './data/y0zern.pck')
|
||||
saveVariable(x0zern_var, './data/x0zern_var.pck')
|
||||
saveVariable(y0zern_var, './data/y0zern_var.pck')
|
||||
saveVariable(zernCouplingList, './data/zernCouplingList.pck')
|
||||
saveVariable(eef_zern_list, './data/eef_zern_list.pck')
|
||||
saveVariable(zernImageResponse, './data/zernImageResponse.pck')
|
||||
saveVariable(psd1d_list_zern, './data/psd1d_list_zern.pck')
|
||||
saveVariable(zernikeCoefficients, './data/zernikeCoefficients.pcks')
|
||||
# saveVariable(x0zern, './data/x0zern.pck')
|
||||
# saveVariable(y0zern, './data/y0zern.pck')
|
||||
# saveVariable(x0zern_var, './data/x0zern_var.pck')
|
||||
# saveVariable(y0zern_var, './data/y0zern_var.pck')
|
||||
# saveVariable(zernCouplingList, './data/zernCouplingList.pck')
|
||||
# saveVariable(eef_zern_list, './data/eef_zern_list.pck')
|
||||
# saveVariable(zernImageResponse, './data/zernImageResponse.pck')
|
||||
# saveVariable(psd1d_list_zern, './data/psd1d_list_zern.pck')
|
||||
# saveVariable(zernikeCoefficients, './data/zernikeCoefficients.pcks')
|
||||
|
||||
if PSDAnalysis:
|
||||
# For each spatial frequency, perform the analysis
|
||||
@@ -208,14 +211,14 @@ if __name__ == '__main__':
|
||||
eef_psd_list.append(eef_psd)
|
||||
psdImageResponse.append(Exyz_psd)
|
||||
|
||||
saveVariable(x0psd, './data/x0psd.pck')
|
||||
saveVariable(y0psd, './data/y0psd.pck')
|
||||
saveVariable(x0psd_var, './data/x0psd_var.pck')
|
||||
saveVariable(y0psd_var, './data/y0psd_var.pck')
|
||||
saveVariable(psdCouplingList, './data/psdCouplingList.pck')
|
||||
saveVariable(eef_psd_list, './data/eef_psd_list.pck')
|
||||
saveVariable(psdImageResponse, './data/psdImageResponse.pck')
|
||||
saveVariable(psd1d_list_psd, './data/psd1d_list_psd.pck')
|
||||
# saveVariable(x0psd, './data/x0psd.pck')
|
||||
# saveVariable(y0psd, './data/y0psd.pck')
|
||||
# saveVariable(x0psd_var, './data/x0psd_var.pck')
|
||||
# saveVariable(y0psd_var, './data/y0psd_var.pck')
|
||||
# saveVariable(psdCouplingList, './data/psdCouplingList.pck')
|
||||
# saveVariable(eef_psd_list, './data/eef_psd_list.pck')
|
||||
# saveVariable(psdImageResponse, './data/psdImageResponse.pck')
|
||||
# saveVariable(psd1d_list_psd, './data/psd1d_list_psd.pck')
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import time
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/Fourier Optics')
|
||||
from fourierOptics import *
|
||||
from scipy import interpolate
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
|
||||
'''
|
||||
This file simulates the paraxial optical model of the ELT-MICADO system
|
||||
@@ -16,6 +15,9 @@ from scipy import interpolate
|
||||
Surface form errors are added to the prisms to investigate the effect of
|
||||
WFEs on the PSF centroid.
|
||||
|
||||
NOTE: This file is outdated and not the most up to date model.
|
||||
In particular, the plate scale will be wrong!
|
||||
|
||||
Author: Joost van den Born
|
||||
Contact: born@astron.nl
|
||||
'''
|
||||
|
||||
@@ -1,14 +1,22 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import time
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/Fourier Optics')
|
||||
from fourierOptics import *
|
||||
from scipy import interpolate
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
|
||||
'''
|
||||
Description:
|
||||
This early script simulates a dispersed PSF. By rotating the
|
||||
ADC prisms we can inspect the change in the dispersion.
|
||||
The theoretical best position of the ADC did not result in
|
||||
an undispersed PSF, for some reason.
|
||||
'''
|
||||
|
||||
|
||||
def perform_padding(A, xs, ys):
|
||||
assert A.shape[0] <= xs and A.shape[1] <= ys, 'New size is smaller than array size.'
|
||||
@@ -101,10 +109,11 @@ if __name__ == '__main__':
|
||||
|
||||
ELT_ADC = ADCObject()
|
||||
|
||||
# optAngle = ELT_ADC.find_optimum_angle(17.9, lList[0], lList[-1])
|
||||
# print(optAngle)
|
||||
optAngle = ELT_ADC.find_optimum_angle(17.9, lList[0], lList[-1])
|
||||
print(optAngle)
|
||||
print('ADC angle now set to {:.4f}'.format(ELT_ADC.theta))
|
||||
# ELT_ADC.set_orientation(180)
|
||||
ELT_ADC.set_orientation(-optAngle+90)
|
||||
|
||||
ELT_CAM = ParaxialLens(CA=89.2, f=4278.32701, name='MCD-CAM')
|
||||
|
||||
@@ -147,8 +156,8 @@ if __name__ == '__main__':
|
||||
wf *= ELT_MIRROR.phase_delay(x,y,l, paraxial=True)
|
||||
Exyz, x, y = fou.fresnel_propagation(wf, xin, yin, dz=ELT_MIRROR.f, oversample=None,
|
||||
show=False, save=False)#, outputCoordinates=coordinatesList[0], apply_interpolation=False)
|
||||
save_variable('./data/ELT_FP_{}.pkl'.format(l*1000), [Exyz, x, y])
|
||||
set_trace()
|
||||
# save_variable('./data/ELT_FP_{}.pkl'.format(l*1000), [Exyz, x, y])
|
||||
|
||||
# From ELT-FP to MCD-COL
|
||||
print('Propagating from ELT-IFP to MCD-COL', end='\r')
|
||||
Exyz2, x2, y2 = fou.fresnel_propagation(Exyz, x, y, dz=ELT_COL.f, oversample=None,
|
||||
@@ -245,9 +254,6 @@ if __name__ == '__main__':
|
||||
# plt.savefig(save, bbox_inches='tight', transparent=True)
|
||||
plt.show()
|
||||
|
||||
set_trace()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
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
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import numpy as np
|
||||
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 *
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import numpy as np
|
||||
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
|
||||
@@ -17,14 +15,6 @@ from pdb import set_trace
|
||||
'''
|
||||
|
||||
def plot_distortions(xe, ye, xf, yf):
|
||||
# Coordinates without WFEs
|
||||
# xe = load_variable('../data/GD_IFP_zoom93_obscured_PSF_xcentroid_expected_zern_psd.pkl')
|
||||
# ye = load_variable('../data/GD_IFP_zoom93_obscured_PSF_ycentroid_expected_zern_psd.pkl')
|
||||
|
||||
# # Coordinates with WFEs
|
||||
# xf = load_variable('../data/GD_IFP_zoom93_obscured_PSF_xcentroid_found_with_wfe_airy_zern_psd.pkl')
|
||||
# yf = load_variable('../data/GD_IFP_zoom93_obscured_PSF_ycentroid_found_with_wfe_airy_zern_psd.pkl')
|
||||
|
||||
mcd = ParaxialMICADO(n=3001, m=3001, dpix=50, l=1.49e-3)
|
||||
|
||||
n = xe.shape[0]
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import numpy as np
|
||||
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
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
# sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import pandas as pd
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
from pdb import set_trace
|
||||
|
||||
'''
|
||||
Date: 2022-06-20
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.patches as patches
|
||||
@@ -8,7 +7,6 @@ import pandas as pd
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
from pdb import set_trace
|
||||
from matplotlib.colors import Normalize, LogNorm
|
||||
|
||||
'''
|
||||
|
||||
@@ -8,7 +8,6 @@ import pandas as pd
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
from pdb import set_trace
|
||||
from matplotlib.colors import Normalize, LogNorm
|
||||
|
||||
'''
|
||||
|
||||
@@ -4,7 +4,14 @@ from numpy.polynomial import polynomial
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
from pdb import set_trace
|
||||
|
||||
'''
|
||||
Description: This script loads the already generated WFEs and performs a
|
||||
linear fit on them. This is then used to find the average tilt
|
||||
over the beam footprint.
|
||||
Used for the discussion section of Ch. 3 in my PhD Dissertation.
|
||||
'''
|
||||
|
||||
|
||||
def polyfit2d(x, y, z, deg):
|
||||
x = np.asarray(x)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
# sys.path.insert(0, '/Users/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
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import numpy as np
|
||||
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 *
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
# sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import os
|
||||
import sys
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.cm as cm
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import time
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
|
||||
'''
|
||||
Description:
|
||||
This script looks how the PSF behaves for an annular lens.
|
||||
Specifically at 30 microns. After plotting the PSF at the
|
||||
focal length, a cross section of the intensity profile
|
||||
at different distances from the lens is shown.
|
||||
'''
|
||||
|
||||
if __name__ == '__main__':
|
||||
plt.rc('font', family='serif')
|
||||
plt.rc('axes', labelsize='large')
|
||||
@@ -27,30 +36,27 @@ if __name__ == '__main__':
|
||||
|
||||
# Initiate the profiles class and pick a profile (tophat, obscured tophat or spider)
|
||||
prof = Profiles()
|
||||
A = prof.obscured_top_hat(2.5, 2.3, n, m, dpix=dpix, oversample=1)
|
||||
A = prof.obscured_top_hat(2.5, 2.3, n, m, dpix=dpix)
|
||||
plt.imshow(A); plt.show()
|
||||
|
||||
|
||||
# Create an input grid
|
||||
x, y = np.meshgrid(np.linspace(-n/2*dpix, n/2*dpix, n), np.linspace(-m/2*dpix, m/2*dpix, m))
|
||||
|
||||
|
||||
|
||||
# Create a lens with a focal length ~100 mm, with a clear aperture radius of 4 mm and thickness of 1 mm.
|
||||
L1 = LensObject('N-BK7', 50, 1e99, 1, 4, name='L1')
|
||||
L1 = SphericalLens('N-BK7', R1=50, R2=1e99, thickness=1, CA=8, name='L1')
|
||||
print('Focal length of lens {} is {:.1f} mm.'.format(L1.name, L1.f))
|
||||
|
||||
# Calculate the phase delay introduced by the lens
|
||||
t_l = L1.phase_delay(x,y,l, paraxial=True)
|
||||
U_in = A * t_l
|
||||
|
||||
|
||||
# Performing the propagation using Fresnel approximation to the focal plane.
|
||||
oC = [x.min(), x.max(), y.min(), y.max()]
|
||||
savename = False
|
||||
Exyz_og,_,_ = fou.fresnel_propagation(U_in, x, y, dz=L1.f, show=True, save=savename, outputCoordinates=oC)
|
||||
|
||||
|
||||
|
||||
# Plotting the Modulation Transfer Function of this lens system
|
||||
E1, fx1, fy1 = fou.modulation_transfer_function(np.abs(Exyz_og)**2, x,y,dpix)
|
||||
plt.figure()
|
||||
plt.plot(fx1[1000:], E1[1000, 1000:],'b-')
|
||||
|
||||
@@ -1,13 +1,22 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
Description:
|
||||
This script was a first attempt at simulating the concept
|
||||
described in Pathak et al., 2016. We apply a waffle pattern
|
||||
to the incoming wavefront to create artificial speckles next
|
||||
to the PSF core. If atmospheric dispersion is present for
|
||||
a broadband observation, then these speckles will point to a
|
||||
common intersection point outside of the PSF core.
|
||||
'''
|
||||
|
||||
plt.rc('font', family='serif')
|
||||
plt.rc('axes', labelsize='large')
|
||||
|
||||
|
||||
@@ -1,97 +1,18 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
import scipy.special as spc
|
||||
from pdb import set_trace
|
||||
|
||||
|
||||
'''
|
||||
def find_pixel_scale(x):
|
||||
""" Calculate the pixel size from the x, y plane """
|
||||
_dpix = np.mean(np.diff(x.real))
|
||||
if _dpix < 1e-99:
|
||||
_dpix = np.mean(np.diff((x.T).real))
|
||||
return _dpix
|
||||
|
||||
def seeing(wvl, r0):
|
||||
"""
|
||||
Seeing value in arcsec at wavelength wvl
|
||||
wvl in millimeter
|
||||
r0 in meter
|
||||
"""
|
||||
wvl *= 1e-3 # convert wvl from mm to meter
|
||||
return 3600*180/np.pi*0.976*wvl/r0
|
||||
|
||||
def fried_r0(wvl, seeing):
|
||||
"""
|
||||
Returns Fried's parameter value in meters
|
||||
wvl in millimeter
|
||||
"""
|
||||
wvl *= 1e-3 # convert wvl from mm to meter
|
||||
return 0.976*wvl/seeing*206264.8
|
||||
|
||||
def airmass(z):
|
||||
"""
|
||||
Converts zenith angle in degrees to airmass
|
||||
"""
|
||||
return 1/np.cos(np.deg2rad(z))
|
||||
|
||||
def spectrum(k, r0, L0=25):
|
||||
"""SPECTRUM Phase power spectrum density computes the phase power
|
||||
spectrum density from the spatial frequency f and an
|
||||
atmosphere object
|
||||
|
||||
Normal value for L0 = 25.
|
||||
"""
|
||||
cte = (24*spc.gamma(6/5)/5)**(5/6)*(spc.gamma(11/6)**2./(2*np.pi**(11/3)))
|
||||
return r0**(-5/3)*cte*(k**2 + 1/L0**2)**(-11/6)
|
||||
|
||||
def add_seeing(wvl, sng, field_tuple):
|
||||
"""
|
||||
Computes the seeing limited PSF for a supplied amplitude
|
||||
distribution.
|
||||
|
||||
Parameters:
|
||||
wvl - wavelength in mm
|
||||
sng - seeing in arcseconds
|
||||
field_tuple - tuple containing (amplitude array, x array, y array)
|
||||
|
||||
Returns:
|
||||
psf_seeing
|
||||
|
||||
"""
|
||||
r01 = fried_r0(wvl, seeing=sng) * 1e3
|
||||
A_psf, x_psf, y_psf = field_tuple
|
||||
n,m = np.shape(x_psf)
|
||||
fx = x_psf / (3200*wvl)
|
||||
fy = y_psf / (3200*wvl)
|
||||
dk = find_pixel_scale(fx)
|
||||
|
||||
# von-Karman spectrum of the atmosphere for the given frequencies in k-space
|
||||
psd = spectrum(np.hypot(fx.real, fy.real), r0=r01, L0=25*1e3)
|
||||
psd[int(n/2),int(m/2)] = 0
|
||||
|
||||
# Compute the atmospheric OTF
|
||||
# According to Roddier 1981, the atmospheric OTF can be derived from the phase structure function
|
||||
# assuming that the phase is stationary accross the pupil and behaves as a Gaussian variable
|
||||
Bphi = np.fft.fft2(np.fft.ifftshift(psd))*dk**2
|
||||
Dphi = np.fft.ifftshift((2 * (Bphi[0,0] - Bphi))) # ifftshift in Bphi en Dphi!
|
||||
otf_atm = np.exp(-0.5*Dphi)
|
||||
|
||||
# Compute the OTF of the supplied PSF
|
||||
# We can derive the OTF from the inverse Fourier transform of the PSF
|
||||
psf = np.abs(A_psf)**2
|
||||
otf_psf = np.fft.fftshift(np.fft.ifft2(np.fft.fftshift(psf)))
|
||||
otf_psf = otf_psf/otf_psf.max()
|
||||
|
||||
# Compute the seeing-limited PSF
|
||||
# Multiplication of OTF and then Fourier transform
|
||||
otf = otf_psf * otf_atm
|
||||
psf_seeing = np.fft.fftshift(np.fft.ifft2(np.fft.ifftshift(otf)))
|
||||
return psf_seeing
|
||||
Description:
|
||||
This script simulates the dispersed PSF of the small (40 cm)
|
||||
Gratama telescope at the University of Groningen under 1.5
|
||||
arcsecond seeing.
|
||||
'''
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
l = 0.5e-3 # mm
|
||||
D_GT = 400 # mm
|
||||
|
||||
@@ -5,8 +5,16 @@ import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import time
|
||||
from fourierOptics import *
|
||||
|
||||
'''
|
||||
Description:
|
||||
An attempt at creating a classic lyot coronograph.
|
||||
Not sure that it worked entirely as advertised... But
|
||||
it does produce a reasonable result.
|
||||
A bright star is blocked, while a faint companion, orbiting
|
||||
on an elliptical orbit, is imaged as it goes through its
|
||||
orbital phase.
|
||||
'''
|
||||
|
||||
def keplerIII_period_to_semimajor_axis(orbital_period):
|
||||
#########################################################
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import time
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/Fourier Optics')
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/atmosphere')
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
from atmosphericModel import *
|
||||
from AstroAtmosphere import *
|
||||
from scipy import interpolate
|
||||
|
||||
'''
|
||||
Script used to animate a changing PSF under changing amounts of
|
||||
(atmospheric) dispersion.
|
||||
'''
|
||||
|
||||
|
||||
def perform_padding(A, xs, ys):
|
||||
assert A.shape[0] <= xs and A.shape[1] <= ys, 'New size is smaller than array size.'
|
||||
x_margin = int((xs - A.shape[0])/2)
|
||||
@@ -281,8 +285,6 @@ if __name__ == '__main__':
|
||||
plt.savefig(save, bbox_inches='tight', transparent=True)
|
||||
plt.close()#show()
|
||||
|
||||
set_trace()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,9 +6,17 @@ from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import time
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
2022-08-02: I don't understand the relation between the name of this script
|
||||
and what happens within. It does seem to simulate a broadband PSF. And there's
|
||||
also a phaseTilt function defined. Probably, I was testing out small phase tilts
|
||||
to shift the PSF off-axis.
|
||||
'''
|
||||
|
||||
|
||||
def phaseTilt(x,y,tx,ty):
|
||||
phaseTilt = x * np.tan(np.deg2rad(tx)) + y * np.tan(np.deg2rad(ty))
|
||||
return phaseTilt
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib import cm, colors
|
||||
from cmath import sqrt as csqrt
|
||||
@@ -16,9 +15,17 @@ import time
|
||||
from math import ceil
|
||||
import sys
|
||||
from mpl_toolkits import mplot3d
|
||||
sys.path.insert(0, '../')
|
||||
# sys.path.insert(0, '../')
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
import fourierOptics as fouOpt
|
||||
|
||||
'''
|
||||
Description: Old script when I was trying to make propagation to off-axis parabolic mirrors
|
||||
work in 3D. This was based on papers by Matsushima (around 2004, I believe).
|
||||
The script is currently broken.
|
||||
If you get this to work, please do let me know!
|
||||
Contact: born@astron.nl
|
||||
'''
|
||||
|
||||
|
||||
class FourierOptics:
|
||||
|
||||
@@ -16,9 +16,19 @@ import time
|
||||
from math import ceil
|
||||
import sys
|
||||
from mpl_toolkits import mplot3d
|
||||
sys.path.insert(0, '../../')
|
||||
# sys.path.insert(0, '../../')
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
import fourierOptics as fouOpt
|
||||
|
||||
'''
|
||||
Description: Old script when I was trying to make propagation to off-axis parabolic mirrors
|
||||
work in 3D. This was based on papers by Matsushima (around 2004, I believe).
|
||||
The script is currently broken.
|
||||
If you get this to work, please do let me know!
|
||||
Contact: born@astron.nl
|
||||
'''
|
||||
|
||||
|
||||
|
||||
|
||||
class FourierOptics:
|
||||
@@ -384,8 +394,8 @@ if __name__ == '__main__':
|
||||
U_in = A
|
||||
|
||||
# sys.exit()
|
||||
Exyz,x4l,y4l = fouOpt_norm.plane_wave_propagation(A, dz=4*l, dpix=dpix, oversample=None, show=True)
|
||||
fou.coordinate_rotation(45,20)
|
||||
# Exyz,x4l,y4l = fouOpt_norm.plane_wave_propagation(A, dz=4*l, dpix=dpix, oversample=None, show=True)
|
||||
# fou.coordinate_rotation(45,20)
|
||||
# _E_res_abs = np.abs(A_at_z4l)/np.max(np.abs(A_at_z4l)) - np.abs(Exyz)/np.max(np.abs(Exyz))
|
||||
# _E_res_ang = np.angle(A_at_z4l)/np.max(np.angle(A_at_z4l)) - np.angle(Exyz)/np.max(np.angle(Exyz))
|
||||
|
||||
@@ -409,7 +419,7 @@ if __name__ == '__main__':
|
||||
# # plt.show()/
|
||||
# plt.close()
|
||||
|
||||
Erot2,x,y = fou.plane_wave_propagation_rotation(Exyz, dpix=dpix, Rx=45, Ry=20, oversample=None, show=True)#, save='p2p_gauss_Rx45_Ry45.png')
|
||||
Erot2,x,y = fou.plane_wave_propagation_rotation(A, dpix=dpix, Rx=45, Ry=20, oversample=None, show=True)#, save='p2p_gauss_Rx45_Ry45.png')
|
||||
|
||||
'''
|
||||
# Compare phase to gaussian analysis.
|
||||
|
||||
@@ -16,10 +16,27 @@ import time
|
||||
from math import ceil
|
||||
import sys
|
||||
from mpl_toolkits import mplot3d
|
||||
sys.path.insert(0, '../../') # where fourieroptics.py is located, so that it can be imported
|
||||
# sys.path.insert(0, '../../') # where fourieroptics.py is located, so that it can be imported
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
import fourierOptics as fouOpt
|
||||
|
||||
|
||||
'''
|
||||
Description: Old script when I was trying to make propagation to off-axis parabolic mirrors
|
||||
work in 3D. This was based on papers by Matsushima (around 2004, I believe).
|
||||
This was about as far as I got with this. Here I also plot a 3D wireframe to
|
||||
inspect the physical geometry that I'm trying to simulate.
|
||||
|
||||
The end goal of having this propagation code on rotated surfaces work:
|
||||
- Model the full 3D optical model of MICADO, including off-axis parabolas!
|
||||
Likely, the off-axis parabola's would be modelled as flat mirrors, but
|
||||
again with a phase transformation to provide the wavefront curvature.
|
||||
|
||||
If you get this to work, please do let me know!
|
||||
Contact: born@astron.nl
|
||||
'''
|
||||
|
||||
|
||||
|
||||
class FourierOptics:
|
||||
def __init__(self, l):
|
||||
|
||||
@@ -5,13 +5,16 @@ import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
Description: Script where I was working on filter the different spatial frequency
|
||||
content from a WFE defined by a PSD - and inspecting how that worked.
|
||||
2022-08-02: Currently broken script.
|
||||
Contact: born@astron.nl
|
||||
'''
|
||||
|
||||
'''
|
||||
@ Author: Joost van den Born
|
||||
'''
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
@@ -72,7 +75,6 @@ if __name__ == '__main__':
|
||||
flist = [3, 6, 10, 15, 21, 28, 36, 45]
|
||||
|
||||
print(flist)
|
||||
set_trace()
|
||||
|
||||
for fmax in flist:
|
||||
|
||||
@@ -90,12 +92,10 @@ if __name__ == '__main__':
|
||||
# PSDSurface.set_bandpass_filter(flist[i], fmax)
|
||||
wfe.set_bandpass_filter(flist[i], fmax)
|
||||
|
||||
set_trace()
|
||||
newRMS = np.sqrt(np.mean(np.asarray(wfe.filteredData)**2))*1e6
|
||||
wfe.scale_rms(wfe.rms*1e6/newRMS, filteredDataFlag=False)
|
||||
scal = wfe.scaledData
|
||||
|
||||
set_trace()
|
||||
# Adding the wavefront error
|
||||
M1.add_wavefront_error(scal)
|
||||
t_l = M1.phase_delay(x,y,l)
|
||||
|
||||
@@ -5,13 +5,18 @@ import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
'''
|
||||
@ Author: Joost van den Born
|
||||
@ Description: In this script I was applying a frequency filter on the WFEs and inspecting how
|
||||
the different spatial frequency contents impact the PSF shift. This would form
|
||||
the basis for one of the SPIE 2020 scripts.
|
||||
@ Author: Joost van den Born
|
||||
'''
|
||||
|
||||
|
||||
def scale_zernike(c, rms):
|
||||
# Scaling the coefficients to some total value
|
||||
rms_coeffic = np.sqrt(np.sum( np.asarray(c)**2))
|
||||
|
||||
@@ -5,13 +5,15 @@ import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
'''
|
||||
@ Author: Joost van den Born
|
||||
@ Desc.: Importing a grid sag file and scaling it appropriately
|
||||
|
||||
2022-08-02: Old script. Currently broken.
|
||||
'''
|
||||
|
||||
class surface:
|
||||
@@ -80,7 +82,7 @@ if __name__ == '__main__':
|
||||
oC = [x.min(), x.max(), y.min(), y.max()]
|
||||
|
||||
# Add PSD wavefront error to the lens
|
||||
wfe = WavefrontError()
|
||||
wfe = WavefrontError(n,m)
|
||||
h_data = wfe.generate_height_map(1e-2, 2, 1, n, m)
|
||||
|
||||
PSDSurface = surface(h_data)
|
||||
@@ -151,7 +153,7 @@ if __name__ == '__main__':
|
||||
r_moffat = np.sqrt(x0_moffat**2+y0_moffat**2)
|
||||
r_err_moffat = np.sqrt( (x0_moffat**2*x0_moffat_err**2+y0_moffat**2*y0_moffat_err**2) / (x0_moffat**2+y0_moffat**2))
|
||||
|
||||
set_trace()
|
||||
# set_trace()
|
||||
|
||||
fig = plt.figure()
|
||||
ax1 = fig.add_subplot(121)
|
||||
|
||||
@@ -5,13 +5,14 @@ import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
|
||||
'''
|
||||
@ Author: Joost van den Born
|
||||
@ Desc.: Importing a grid sag file and scaling it appropriately
|
||||
2022-08-02: Old script. Currently broken.
|
||||
'''
|
||||
|
||||
class surface:
|
||||
|
||||
@@ -6,8 +6,16 @@ from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import time
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/Fourier Optics')
|
||||
from fourierOptics_new import *
|
||||
# sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Analyses/Python/Analytical/Fourier Optics')
|
||||
# from fourierOptics_new import *
|
||||
sys.path.insert(0, '/Users/joost/Dropbox/Werk/PhD/Documents/Published/FourierOptics GitHub release/')
|
||||
from fourierOptics import *
|
||||
|
||||
'''
|
||||
2022-08-02:
|
||||
Description: Old script where I build a simple lens system and added WFEs to the lens surface.
|
||||
'''
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
plt.rc('font', family='serif')
|
||||
@@ -41,7 +49,7 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
# Create a lens with a focal length ~100 mm, with a clear aperture radius of 4 mm and thickness of 1 mm.
|
||||
L1 = LensObject('N-BK7', 1, 4, name='L1')
|
||||
L1 = LensObject(glass='N-BK7', thickness=1, CA=4, name='L1')
|
||||
L1.set_first_surface('EVEN ASPHERE', R=11.65, k=-1.10, a=[0.0, 3.69067205091E-5, -1.285461192617E-8, -1.400167659754E-10,
|
||||
-2.51311664812E-13, 5.01789877647E-16, 5.855871513042E-18, -1.127794407419E-20])
|
||||
L1.set_second_surface('SPHERICAL', R=1e99)
|
||||
@@ -76,7 +84,7 @@ if __name__ == '__main__':
|
||||
zern2 = np.pad(zern, ((750,751),(750,751)), 'constant', constant_values=(0))
|
||||
zern = zern2 * prof.top_hat(4, n,m, dpix)
|
||||
|
||||
L1 = LensObject('N-BK7', 1, 4, name='L1')
|
||||
L1 = LensObject(glass='N-BK7', thickness=1, CA=4, name='L1')
|
||||
L1.set_first_surface('EVEN ASPHERE', R=11.65, k=-1.10, a=[0.0, 3.69067205091E-5, -1.285461192617E-8, -1.400167659754E-10,
|
||||
-2.51311664812E-13, 5.01789877647E-16, 5.855871513042E-18, -1.127794407419E-20])
|
||||
L1.set_second_surface('SPHERICAL', R=1e99)
|
||||
@@ -107,14 +115,14 @@ if __name__ == '__main__':
|
||||
plt.xlim(-10,10)
|
||||
plt.ylim(-10,10)
|
||||
plt.colorbar()
|
||||
plt.savefig('./figures/PSF_with_psd_error.png', bbox_inches='tight', transparent=True)
|
||||
# plt.savefig('./figures/PSF_with_psd_error.png', bbox_inches='tight', transparent=True)
|
||||
plt.close()
|
||||
|
||||
# Wavefront error
|
||||
plt.figure()
|
||||
plt.imshow(h_data, cmap='jet')
|
||||
plt.colorbar()
|
||||
plt.savefig('./figures/psd_error.png', bbox_inches='tight', transparent=True)
|
||||
# plt.savefig('./figures/psd_error.png', bbox_inches='tight', transparent=True)
|
||||
plt.close()
|
||||
|
||||
# Original PSF
|
||||
@@ -123,7 +131,7 @@ if __name__ == '__main__':
|
||||
plt.xlim(-10,10)
|
||||
plt.ylim(-10,10)
|
||||
plt.colorbar()
|
||||
plt.savefig('./figures/PSF_no_psd_error.png', bbox_inches='tight', transparent=True)
|
||||
# plt.savefig('./figures/PSF_no_psd_error.png', bbox_inches='tight', transparent=True)
|
||||
plt.close()
|
||||
|
||||
# Zernike PSF (some coma and also astigmatism)
|
||||
@@ -132,7 +140,7 @@ if __name__ == '__main__':
|
||||
plt.xlim(-10,10)
|
||||
plt.ylim(-10,10)
|
||||
plt.colorbar()
|
||||
plt.savefig('./figures/PSF_with_zernike_error.png', bbox_inches='tight', transparent=True)
|
||||
# plt.savefig('./figures/PSF_with_zernike_error.png', bbox_inches='tight', transparent=True)
|
||||
plt.close()
|
||||
|
||||
# Wavefront error, zernike
|
||||
@@ -141,7 +149,7 @@ if __name__ == '__main__':
|
||||
plt.xlim(500,1500)
|
||||
plt.ylim(500,1500)
|
||||
plt.colorbar()
|
||||
plt.savefig('./figures/zernike_error.png', bbox_inches='tight', transparent=True)
|
||||
# plt.savefig('./figures/zernike_error.png', bbox_inches='tight', transparent=True)
|
||||
plt.close()
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
#!/usr/bin/env Python3
|
||||
import numpy as np
|
||||
from pdb import set_trace
|
||||
import json
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import FormatStrFormatter
|
||||
from matplotlib.colors import LogNorm
|
||||
import sys
|
||||
sys.path.insert(0, '/Users/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 *
|
||||
|
||||
'''
|
||||
Description: Script that compares the Maréchal criterion to the Strehl of the PSF experiencing
|
||||
a WFE with some RMS in the pupil. This script would form the basis for one of the
|
||||
SPIE 2020 results.
|
||||
'''
|
||||
|
||||
def saveVariableToTXT(variable, filename):
|
||||
variableFile = open(filename, 'w')
|
||||
|
||||
@@ -110,7 +115,6 @@ if __name__ == '__main__':
|
||||
Exyz_zern,xp,yp = fou.fresnel_propagation(U_in, x, y, dz=M1.f, show=False, outputCoordinates=oC)
|
||||
Strehl_zern = np.abs(psf.get_coupling(Exyz_og, Exyz_zern))**2
|
||||
|
||||
set_trace()
|
||||
StrehlList_zern.append(Strehl_zern)
|
||||
|
||||
####################################
|
||||
|
||||
Reference in new issue
Block a user