X[i, j * m2 + k] = legendre.legval2d(f_lines_1_rf[i, 0], f_lines_1_rf[i, 1], c) wav_sol_1 = np.linalg.lstsq(X, f_lines_1_rf[:, 0] * f_lines_1_rf[:, 3], rcond=-1) wav_sol2d_1 = wav_sol_1[0].reshape(m1, m2) fitwv1 = np.array([ legendre.legval2d(f_lines_1_rf[i, 0], f_lines_1_rf[i, 1], wav_sol2d_1) / f_lines_1_rf[i, 0] for i in range(len(f_lines_1_rf)) ]) res1 = fitwv1 - f_lines_1_rf[:, 3] rms1 = rmsd(fitwv1, f_lines_1_rf[:, 3]) if rms1 < 3.0e-3: print(rms1, len(f_lines_1_rf)) break else: mask1 = abs(res1) > 3.0 * rms1 f_lines_1_rf = f_lines_1_rf[~mask1] f_lines_1_mask = np.array( [i in f_lines_1_rf[:, 3] for i in f_lines_1[:, 3]]) f_lines_2 = deepcopy(f_lines_1) f_lines_2_mask = deepcopy(f_lines_1_mask) f_lines_3 = deepcopy(f_lines_1) f_lines_3_mask = deepcopy(f_lines_1_mask) # obtain the parameters of the selected lines by super-Gaussian fit
]], axis=0) # 0order, 1n, 2wav, 3flag, 4-8popt except: z1 = np.append(z1, [[ order + order_init, line_order[i, 0], line_order[i, 1], 0.0, *np.zeros(shape=(5), dtype=float) ]], axis=0) mask1 = (z1[:, 3] == 1) x1 = z1[mask1, 1] y1 = z1[mask1, 5] popt1 = np.polyfit(x1, y1, 10) res1 = y1 - np.poly1d(popt1)(x1) rms1 = rmsd(y1, np.poly1d(popt1)(x1)) mask2 = abs(res1) > 3.0 * rms1 x2 = x1[~mask2] y2 = y1[~mask2] popt_nx = np.polyfit(x2, y2, 10) line_order = np.vstack( (line_order.T, np.poly1d(popt_nx)(line_order[:, 0]))).T # 0n, 1wav, 2line_center_(ThAr_solution), 3line_center_(Gaussian_solution) # plt.figure() # plt.plot(x1, y1 - np.poly1d(popt_nx)(x1), 'rs') # plt.plot(x2, y2 - np.poly1d(popt_nx)(x2), 'ks') # plt.show() for i in range(len(chunk) - 1):