Source code for tshirt.pipeline.instrument_specific.hst_inst_funcs

from __future__ import print_function, division
import numpy as np
from scipy.interpolate import interp1d

[docs] def hstwfc3_wavecal(dispIndices,xc0=75.0,yc0=75.0,DirIm_x_appeture=522,DirIm_y_appeture=522,SpecIm_x_appeture=410, SpecIm_y_appeture=522,subarray=128): """ Wavelength calibration to turn the dispersion pixels into wavelengths Parameters ------------- dispIndices: numpy array Dispersion Middle X-axis values xc0: float Initial X coordinate of direct image centroid yc0: float Initial Y coordinate of direct image centroid DirIm_x_appeture: float Chip Reference X-Pixel dependent upon direct image centroid apeture DirIm_y_appeture: float Chip Reference Y-Pixel dependent upon direct image centroid apeture SpecIm_x_appeture: float Chip Reference X-Pixel dependent upon spectral image centroid apeture SpecIm_y_appeture: float Chip Reference Y-Pixel dependent upon spectral image centroid apeture subarray: Length of detector array Notes -------- Note that direct image and spectral image should be taken with the same aperture. If not, please adjust the centroid measurement according to table in: https://www.stsci.edu/hst/instrumentation/focus-and-pointing/fov-geometry """ #accounting for the offset from the direct image centroid x_offset = (DirIm_x_appeture - SpecIm_x_appeture) y_offset = (DirIm_y_appeture - SpecIm_y_appeture) xc = xc0 - (x_offset) yc = yc0 - (y_offset) coord0 = (1014 - subarray) // 2 xc = xc + coord0 yc = yc + coord0 DLDP0 = [8949.40742544, 0.08044032819916265] DLDP1 = [44.97227893276267, 0.0004927891511929662, 0.0035782416625653765, -9.175233345083485e-7, 2.2355060371418054e-7, -9.258690000316504e-7] # calculate field dependent dispersion coefficient p0 = DLDP0[0] + DLDP0[1] * xc p1 = DLDP1[0] + DLDP1[1] * xc + DLDP1[2] * yc + \ DLDP1[3] * xc**2 + DLDP1[4] * xc * yc + DLDP1[5] * yc**2 dx = np.arange(1014) - xc wavelength = (p0 + dx * p1)/10000 #in microns if subarray < 1014: i0 = (1014 - subarray) // 2 wavelength = wavelength[i0: i0 + subarray] f = interp1d(np.arange(subarray),wavelength) wavelengths = f(dispIndices) return wavelengths