def _peak_gauss_method( i, npix, u, v, filt, index_mask, pixelsize, innerpix, innerpix_center, fw_splodge=0.7, hole_diam=0.8, ): mf = np.zeros([npix, npix]) n_holes = index_mask.n_holes l_B = np.sqrt(u**2 + v**2) minbl = np.min(l_B) * filt[0] if n_holes >= 15: sampledisk_r = minbl / 2 / filt[0] * pixelsize * npix * 0.9 else: sampledisk_r = minbl / 2.0 / filt[0] * pixelsize * npix * fw_splodge xspot = float(np.round(v[i] * pixelsize * npix + npix / 2.0)) yspot = float(np.round(u[i] * pixelsize * npix + npix / 2.0)) mf = plot_circle(mf, xspot, yspot, sampledisk_r, display=False) mf = np.roll(mf, npix // 2, axis=0) mf = np.roll(mf, npix // 2, axis=1) X = [np.arange(npix), np.arange(npix), 1] splodge_fwhm = hole_diam / filt[0] * pixelsize * npix / 1.9 param = { "A": 1, "x0": -npix // 2 + yspot, "y0": -npix // 2 + xspot, "fwhm_x": splodge_fwhm, "fwhm_y": splodge_fwhm, "theta": 0, } gauss = gauss_2d_asym(X, param) gauss = np.roll(gauss, npix // 2, axis=0) gauss = np.roll(gauss, npix // 2, axis=1) mfg = gauss / np.sum(gauss) mf_gain_flat = mfg.ravel() mf_gain_centered = norm_max(np.fft.fftshift(mfg).ravel()) mf_flat = norm_max(mf.ravel()) mf_centered = norm_max(np.fft.fftshift(mf).ravel()) mf_flat[innerpix] = 0.0 mf_gain_flat[innerpix] = 0.0 mf_centered[innerpix_center] = 0.0 mf_gain_centered[innerpix_center] = 0.0 mf = { "flat": mf_flat, "centered": mf_centered, "gain_f": mf_gain_flat, "gain_c": mf_gain_centered, } return dict2class(mf)
def _peak_gauss_method(i, npix, u, v, filt, index_mask, pixelsize, innerpix, innerpix_center, fw_splodge=0.7, hole_diam=0.8): mf = np.zeros([npix, npix]) n_holes = index_mask.n_holes l_B = np.sqrt(u**2 + v**2) minbl = np.min(l_B) * filt[0] if n_holes >= 15: sampledisk_r = minbl / 2 / filt[0] * pixelsize * npix * 0.9 else: sampledisk_r = minbl / 2. / \ filt[0] * pixelsize * npix * fw_splodge xspot = float(np.round((v[i] * pixelsize * npix + npix / 2.))) yspot = float(np.round((u[i] * pixelsize * npix + npix / 2.))) mf = plot_circle(mf, xspot, yspot, sampledisk_r, display=False) mf = np.roll(mf, npix // 2, axis=0) mf = np.roll(mf, npix // 2, axis=1) X = [np.arange(npix), np.arange(npix), 1] splodge_fwhm = hole_diam / filt[0] * pixelsize * npix / 1.9 param = { 'A': 1, 'x0': -npix // 2 + yspot, 'y0': -npix // 2 + xspot, 'fwhm_x': splodge_fwhm, 'fwhm_y': splodge_fwhm, 'theta': 0 } gauss = gauss_2d_asym(X, param) gauss = np.roll(gauss, npix // 2, axis=0) gauss = np.roll(gauss, npix // 2, axis=1) mfg = gauss / np.sum(gauss) mf_gain_flat = mfg.ravel() mf_gain_centered = norm_max(np.fft.fftshift(mfg).ravel()) mf_flat = norm_max(mf.ravel()) mf_centered = norm_max(np.fft.fftshift(mf).ravel()) mf_flat[innerpix] = 0. mf_gain_flat[innerpix] = 0. mf_centered[innerpix_center] = 0. mf_gain_centered[innerpix_center] = 0. mf = { 'flat': mf_flat, 'centered': mf_centered, 'gain_f': mf_gain_flat, 'gain_c': mf_gain_centered } return dict2class(mf)
def _peak_fft_method(i, npix, xy_coords, wl, index_mask, pixelsize, innerpix, innerpix_center): mf = np.zeros([npix, npix]) n_holes = index_mask.n_holes bl2h_ix = index_mask.bl2h_ix npix = mf.shape[0] sum_xy = np.sum(xy_coords, axis=0)/n_holes shift_fact = np.ones([n_holes, 2]) shift_fact[:, 0] = sum_xy[0] shift_fact[:, 1] = sum_xy[1] xy_coords2 = xy_coords.copy() xy_coords2 -= shift_fact for j in range(len(wl)): xyh = xy_coords2[bl2h_ix[1, i], :]/wl[j]*pixelsize * \ npix + npix//2 delta = xyh-np.floor(xyh) ap1 = np.zeros([npix, npix]) x1 = int(xyh[1]) y1 = int(xyh[0]) ap1[x1, y1] = (1.-delta[0]) * (1.-delta[1]) ap1[x1, y1+1] = delta[0]*(1.-delta[1]) ap1[x1+1, y1] = (1.-delta[0])*delta[1] ap1[x1+1, y1+1] = delta[0]*delta[1] xyh = xy_coords2[bl2h_ix[0, i], :]/wl[j]*pixelsize * \ npix + npix//2 delta = xyh-np.floor(xyh) ap2 = np.zeros([npix, npix]) x2 = int(xyh[1]) y2 = int(xyh[0]) ap2[x2, y2] = (1.-delta[0])*(1.-delta[1]) ap2[x2, y2+1] = delta[0]*(1.-delta[1]) ap2[x2+1, y2] = (1.-delta[0])*delta[1] ap2[x2+1, y2+1] = delta[0]*delta[1] n_elts = npix**2 tmf = (np.fft.fft2(ap1)/n_elts * np.conj(np.fft.fft2(ap2)/n_elts)) tmf = np.fft.fft2(tmf) mf = mf+np.real(tmf) mf_flat = norm_max(mf.ravel()) mf_centered = norm_max(np.fft.fftshift(mf).ravel()) mf_centered[innerpix_center] = 0.0 mf_flat[innerpix] = 0.0 dic_mf = {'flat': mf_flat, 'centered': mf_centered} return dic_mf
def _peak_one_method(i, npix, u, v, pixelsize, innerpix, innerpix_center): mf = np.zeros([npix, npix]) uv = np.array([v[i], u[i]]) * pixelsize * npix uv = (uv + npix) % npix uv_int = np.array(np.round(uv), dtype=int) mf[uv_int[0], uv_int[1]] = 1 mf = np.roll(mf, [0, 0]) mf_flat = norm_max(mf.ravel()) mf_centered = norm_max(np.fft.fftshift(mf).ravel()) mf_flat[innerpix] = 0.0 mf_centered[innerpix_center] = 0.0 dic_mf = {"flat": mf_flat, "centered": mf_centered} return dic_mf
def _peak_square_method(i, npix, u, v, pixelsize, innerpix, innerpix_center): mf = np.zeros([npix, npix]) uv = np.array([v[i], u[i]]) * pixelsize * npix uv = (uv + npix) % npix uv_int = np.array(np.floor(uv), dtype=int) uv_frac = uv - uv_int mf[uv_int[0], uv_int[1]] = (1 - uv_frac[0]) * (1 - uv_frac[1]) mf[uv_int[0], (uv_int[1] + 1) % npix] = (1 - uv_frac[0]) * uv_frac[1] mf[(uv_int[0] + 1) % npix, uv_int[1]] = uv_frac[0] * (1 - uv_frac[1]) mf[(uv_int[0] + 1) % npix, (uv_int[1] + 1) % npix] = uv_frac[0] * uv_frac[1] mf = np.roll(mf, [0, 0]) mf_flat = norm_max(mf.ravel()) mf_centered = norm_max(np.fft.fftshift(mf).ravel()) mf_flat[innerpix] = 0.0 mf_centered[innerpix_center] = 0.0 dic_mf = {"flat": mf_flat, "centered": mf_centered} return dic_mf