COMPASS  5.0.0
End-to-end AO simulation tool using GPU acceleration
psf_error.py
1 import numpy as np
2 import matplotlib.pyplot as plt
3 from guardians import groot, gamora, drax
4 import h5py
5 from tqdm import tqdm
6 
7 filename = "/home/fferreira/Data/roket_8m_nssp40_dir135_speed10.h5"
8 spup = drax.get_pup(filename)
9 
10 Cee = groot.compute_Cn_cpu(filename)
11 Cee += groot.compute_Calias(filename)
12 speed = np.array([15, 16, 17, 18, 19, 21, 22, 23, 24, 25]) - 10
13 
14 Cab = groot.compute_Cerr(filename)
15 otftel, otf2, psfm, gpu = gamora.psf_rec_Vii(filename, fitting=False,
16  cov=(Cee + Cab).astype(np.float32))
17 otf_fit, psf_fit = groot.compute_OTF_fitting(filename, otftel)
18 psfm = np.fft.fftshift(np.real(np.fft.ifft2(otf_fit * otf2 * otftel)))
19 psfm *= (psfm.shape[0] * psfm.shape[0] / float(np.where(spup)[0].shape[0]))
20 
21 psfe = gamora.psf_rec_Vii(filename)
22 psf_compass = drax.get_tar_image(filename)
23 SR = []
24 EE5 = []
25 EE10 = []
26 EE20 = []
27 
28 for s in tqdm(speed):
29  Cab = groot.compute_Cerr(filename, speed=np.array([s], dtype=np.float32))
30  otftel, otf2, psfi, gpu = gamora.psf_rec_Vii(filename, fitting=False,
31  cov=(Cee + Cab).astype(np.float32))
32  otf_fit, psf_fit = groot.compute_OTF_fitting(filename, otftel)
33  psfi = np.fft.fftshift(np.real(np.fft.ifft2(otf_fit * otf2 * otftel)))
34  psfi *= (psfm.shape[0] * psfm.shape[0] / float(np.where(spup)[0].shape[0]))
35  SR.append(psfi.max())
36  EE5.append(drax.ensquared_energy(filename, psfi, 5))
37  EE10.append(drax.ensquared_energy(filename, psfi, 10))
38  EE20.append(drax.ensquared_energy(filename, psfi, 20))
39 
40 plt.figure()
41 plt.plot(speed, psf_compass.max() - SR)
42 plt.figure()
43 plt.plot(speed, drax.ensquared_energy(filename, psf_compass, 5) - EE5)
44 plt.plot(speed, drax.ensquared_energy(filename, psf_compass, 10) - EE10)
45 plt.plot(speed, drax.ensquared_energy(filename, psf_compass, 20) - EE20)