def fit_hitrans_pixel(s_dict, ref_pixel_dict): """ s_list : dict ref_pixel_list : dict """ igr_sol_list = {} from fit_gaussian import fit_gaussian_simple for i, ref_pixels in ref_pixel_dict.items(): s_igr = s_dict[i] xx = np.arange(len(s_igr)) sol_list = [] for ll in ref_pixels: sol = fit_gaussian_simple(xx, s_igr, ll, sigma_init=5, do_plot=False) sigma_init = max(1, sol[0][1]) sol = fit_gaussian_simple(xx, s_igr, sol[0][0]+ll-ll[0], sigma_init=sigma_init, do_plot=False) sol_list.append(sol) pixel = [sol_[0][0] for sol_ in sol_list] pixel_sigma = [sol_[0][1] for sol_ in sol_list] igr_sol_list[i] = dict(pixel=pixel, pixel_sigma=pixel_sigma) return igr_sol_list
def fit_hitrans_pixel(s_dict, ref_pixel_dict): """ s_list : dict ref_pixel_list : dict """ igr_sol_list = {} from fit_gaussian import fit_gaussian_simple for i, ref_pixels in ref_pixel_dict.items(): s_igr = s_dict[i] xx = np.arange(len(s_igr)) sol_list = [] for ll in ref_pixels: sol = fit_gaussian_simple(xx, s_igr, ll, sigma_init=5, do_plot=False) sigma_init = max(1, sol[0][1]) sol = fit_gaussian_simple(xx, s_igr, sol[0][0] + ll - ll[0], sigma_init=sigma_init, do_plot=False) sol_list.append(sol) pixel = [sol_[0][0] for sol_ in sol_list] pixel_sigma = [sol_[0][1] for sol_ in sol_list] igr_sol_list[i] = dict(pixel=pixel, pixel_sigma=pixel_sigma) return igr_sol_list
def reidentify(s, x_list, x=None, sigma_init=1.5): """ given spectrum s, try to reidentify lines as x_list as initial point. x_list is shifted by delta_x if not 0. sigma_init : a single value, or an iterator of single value. """ if x is None: x = np.arange(len(s)) try: sigma_iter = iter(sigma_init) except TypeError: sigma_iter = repeat(sigma_init) fit_results = [] for lines_pixel, sigma in izip(x_list, sigma_iter): sol_ = fit_gaussian_simple(x, s, lines_pixel, sigma_init=sigma, do_plot=False) fit_results.append(sol_) return fit_results
def reidentify(s, x_list, x=None, sigma_init=1.5): """ given spectrum s, try to reidentify lines as x_list as initial point. x_list is shifted by delta_x if not 0. """ if x is None: x = np.arange(len(s)) fit_results = [] for lines_pixel in x_list: sol_ = fit_gaussian_simple(x, s, lines_pixel, sigma_init=sigma_init, do_plot=False) fit_results.append(sol_) return fit_results
def find_peaks(s, sigma=3, ax=None): emission_feature_msk = find_feature_mask_simple(s, sigma=sigma, ax=ax) import scipy.ndimage as ni emission_feature_label, label_max = ni.label(emission_feature_msk) com_list = ni.center_of_mass(s, emission_feature_label, range(1, label_max + 1)) from fit_gaussian import fit_gaussian_simple x = np.arange(len(s)) sol_list = [] for com in com_list: sol = fit_gaussian_simple(x, s, com, sigma_init=2., do_plot=False) sol_list.append(sol) #center_list = np.array([sol[0][0] for sol in sol_list]) #width_list = np.array([sol[0][1] for sol in sol_list]) #height_list = np.array([sol[0][2] for sol in sol_list]) return [sol_[0] for sol_ in sol_list]
def find_peaks(s, sigma=3, ax=None): emission_feature_msk = find_feature_mask_simple(s, sigma=sigma, ax=ax) import scipy.ndimage as ni emission_feature_label, label_max = ni.label(emission_feature_msk) com_list = ni.center_of_mass(s, emission_feature_label, range(1, label_max+1)) from fit_gaussian import fit_gaussian_simple x = np.arange(len(s)) sol_list = [] for com in com_list: sol = fit_gaussian_simple(x, s, com, sigma_init=2., do_plot=False) sol_list.append(sol) #center_list = np.array([sol[0][0] for sol in sol_list]) #width_list = np.array([sol[0][1] for sol in sol_list]) #height_list = np.array([sol[0][2] for sol in sol_list]) return [sol_[0] for sol_ in sol_list]
def bootstrap(utdate): igrins_orders = {} igrins_orders["H"] = range(99, 122) igrins_orders["K"] = range(72, 94) hitran = Hitran() from hitran_igrins import order as hitrans_detected from hitran_igrins import ig_order as hitrans_ig_detected from fit_gaussian import fit_gaussian_simple band = "K" import json s_list = json.load(open("arc_spec_sky_%s_%s.json" % (band, utdate))) wvl_sol = json.load(open("ecfit/wvl_sol_ohlines_%s_%s.json" \ % (band, utdate))) # emasure line coordinates from hitran data hitran_wvl, hitran_s = hitran.load_cires() hitran_sol_list = [] for i in range(5): # fit hitran data sol_list = [] dwvl_list = [] for ll in hitrans_detected[i]: sol = fit_gaussian_simple(hitran_wvl, hitran_s, ll, sigma_init=7e-5, do_plot=False) dwvl = np.array(ll)-ll[0] sol = fit_gaussian_simple(hitran_wvl, hitran_s, sol[0][0]+dwvl, sigma_init=7e-5, do_plot=False) dwvl_list.append(dwvl) sol_list.append(sol) wavelength = [sol_[0][0] for sol_ in sol_list] wavelength_grouped = [list(sol_[0][0]+dwvl_) for dwvl_, sol_ \ in zip(dwvl_list, sol_list)] wavelength_sigma = [sol_[0][1] for sol_ in sol_list] hitran_sol_list.append(dict(wavelength=wavelength, wavelength_grouped=wavelength_grouped, wavelength_sigma=wavelength_sigma)) hitran_sol_dict = dict(zip(igrins_orders["K"], hitran_sol_list)) # now get the pixel corrdinates from observed data. med_filter = hitran.get_median_filtered_spec s_list_m = [med_filter(wvl_sol[i], s_list[i]) for i in range(5)] s_list_dict = dict(zip(igrins_orders[band], s_list_m)) ref_pixel_dict = dict((igrins_orders[band][i], r) for i, r \ in hitrans_ig_detected.items()) igr_sol = fit_hitrans_pixel(s_list_dict, ref_pixel_dict) # merge tow data sol_sol = {} for i in igr_sol: s0 = dict() s0.update(hitran_sol_dict[i]) s0.update(igr_sol[i]) sol_sol[i] = s0 if 1: json.dump(sol_sol, open("hitran_bootstrap_%s_%s.json" % (band, utdate), "w"))
def bootstrap(utdate): igrins_orders = {} igrins_orders["H"] = range(99, 122) igrins_orders["K"] = range(72, 94) hitran = Hitran() from hitran_igrins import order as hitrans_detected from hitran_igrins import ig_order as hitrans_ig_detected from fit_gaussian import fit_gaussian_simple band = "K" import json s_list = json.load(open("arc_spec_sky_%s_%s.json" % (band, utdate))) wvl_sol = json.load(open("ecfit/wvl_sol_ohlines_%s_%s.json" \ % (band, utdate))) # emasure line coordinates from hitran data hitran_wvl, hitran_s = hitran.load_cires() hitran_sol_list = [] for i in range(5): # fit hitran data sol_list = [] dwvl_list = [] for ll in hitrans_detected[i]: sol = fit_gaussian_simple(hitran_wvl, hitran_s, ll, sigma_init=7e-5, do_plot=False) dwvl = np.array(ll) - ll[0] sol = fit_gaussian_simple(hitran_wvl, hitran_s, sol[0][0] + dwvl, sigma_init=7e-5, do_plot=False) dwvl_list.append(dwvl) sol_list.append(sol) wavelength = [sol_[0][0] for sol_ in sol_list] wavelength_grouped = [list(sol_[0][0]+dwvl_) for dwvl_, sol_ \ in zip(dwvl_list, sol_list)] wavelength_sigma = [sol_[0][1] for sol_ in sol_list] hitran_sol_list.append( dict(wavelength=wavelength, wavelength_grouped=wavelength_grouped, wavelength_sigma=wavelength_sigma)) hitran_sol_dict = dict(zip(igrins_orders["K"], hitran_sol_list)) # now get the pixel corrdinates from observed data. med_filter = hitran.get_median_filtered_spec s_list_m = [med_filter(wvl_sol[i], s_list[i]) for i in range(5)] s_list_dict = dict(zip(igrins_orders[band], s_list_m)) ref_pixel_dict = dict((igrins_orders[band][i], r) for i, r \ in hitrans_ig_detected.items()) igr_sol = fit_hitrans_pixel(s_list_dict, ref_pixel_dict) # merge tow data sol_sol = {} for i in igr_sol: s0 = dict() s0.update(hitran_sol_dict[i]) s0.update(igr_sol[i]) sol_sol[i] = s0 if 1: json.dump(sol_sol, open("hitran_bootstrap_%s_%s.json" % (band, utdate), "w"))