from __future__ import print_function, division # Import the usual libraries import numpy as np import pynrc from pynrc import nrc_utils from pynrc.nrc_utils import webbpsf, poppy, offset_bar import astropy.io.fits as fits import multiprocessing as mp pynrc.setup_logging('WARN', verbose=False) from poppy import zernike from poppy.optics import MultiHexagonAperture #from poppy.utils import pad_to_size from pynrc.maths.image_manip import pad_or_cut_to_size, dist_image, binned_statistic class OPD_extract(object): """Decompose OPD to Zernike/Hexike coefficients For a given JWST OPD image and header, extract the Zernike/Hexike components for the overall pupil and each mirror segment. Makes use of functions in webbpsf. Parameters ---------- opd : ndarray OPD image map.
from webbpsf_ext.opds import OPDFile_to_HDUList from webbpsf_ext.webbpsf_ext_core import nrc_mask_trans from astropy.io import fits from copy import deepcopy from scipy.interpolate import interp1d from scipy.ndimage import zoom # Progress bar from tqdm.auto import tqdm, trange # Disable informational messages and only include warnings and higher pynrc.setup_logging(level='WARN') base_dir = '/Users/jarron/NIRCam/Data/Sim_CoronWG/' opd_dir = base_dir + 'NIRCAM_OPDS/' fig_dir = base_dir + 'output_M335R/' contrast_maps_dir = base_dir + 'contrast_maps_M335R/' # Scenario to consider [best, nominal, requirements] scenarios = ['Best Case', 'Nominal', 'Requirements'] # LOS Jitter [2.5, 3.8, 5.8] per axis # Samples from random distribution, 1 sample per time step. # hdul_jitter = fits.open(opd_dir + 'LOS_JITTER.fits') jitter_modes = [2.5, 3.8, 5.8, 0] # Target Acqs # Three values for best, nominal, and requirements: 6.2568703, 8.759604 , 12.513741 # - these are per axis