Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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]
Ejemplo n.º 6
0
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]
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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"))
Ejemplo n.º 9
0
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"))