Ejemplo n.º 1
0
def process_band(utdate, recipe_name, band, obsids, config_name):

    helper = RecipeHelper(config_name, utdate, recipe_name)

    caldb = helper.get_caldb()

    master_obsid = obsids[0]
    basename = (band, master_obsid)

    multi_spec = caldb.load_item_from((band, master_obsid),
                                      "multi_spec_fits")

    # just to retrieve order information
    wvlsol_v0 = caldb.load_resource_for(basename, "wvlsol_v0")
    orders = wvlsol_v0["orders"]
    wvlsol = wvlsol_v0["wvl_sol"]

    #
    from collections import namedtuple
    Spec = namedtuple("Spec", ["s_map", "wvl_map"])

    keys = []
    fitted_pixels_list = []

    from igrins.libs.ref_lines_db import SkyLinesDB, HitranSkyLinesDB

    ref_lines_db = SkyLinesDB(config=config_name)
    ref_lines_db_hitrans = HitranSkyLinesDB(config=config_name)

    for hdu in multi_spec:

        slit_center = hdu.header["FSLIT_CN"]

        spec = Spec(dict(zip(orders, hdu.data)),
                    dict(zip(orders, wvlsol)))

        fitted_pixels_list.append(ref_lines_db.identify(band, spec))
        keys.append((slit_center, "OH"))

        if band == "K":
            fitted_pixels_hitran = ref_lines_db_hitrans.identify(band, spec)
            fitted_pixels_list.append(fitted_pixels_hitran)
            keys.append((slit_center, "Hitran"))

    # concatenate collected list of fitted pixels.
    fitted_pixels_master = pd.concat(fitted_pixels_list,
                                     keys=keys,
                                     names=["slit_center", "kind"],
                                     axis=0)

    if 0:
        # storing multiindex seems broken. Enforce reindexing.
        fitted_pixels_master.reset_index().to_json("test.json",
                                                   orient="split")
        fitted_pixels_master.reset_index().to_csv("test.csv")
Ejemplo n.º 2
0
def process_band(utdate, recipe_name, band, obsids, config_name):

    helper = RecipeHelper(config_name, utdate, recipe_name)

    caldb = helper.get_caldb()

    master_obsid = obsids[0]
    basename = (band, master_obsid)

    multi_spec = caldb.load_item_from((band, master_obsid), "multi_spec_fits")

    # just to retrieve order information
    wvlsol_v0 = caldb.load_resource_for(basename, "wvlsol_v0")
    orders = wvlsol_v0["orders"]
    wvlsol = wvlsol_v0["wvl_sol"]

    #
    from collections import namedtuple
    Spec = namedtuple("Spec", ["s_map", "wvl_map"])

    keys = []
    fitted_pixels_list = []

    from igrins.libs.ref_lines_db import SkyLinesDB, HitranSkyLinesDB

    ref_lines_db = SkyLinesDB(config=config_name)
    ref_lines_db_hitrans = HitranSkyLinesDB(config=config_name)

    for hdu in multi_spec:

        slit_center = hdu.header["FSLIT_CN"]

        spec = Spec(dict(zip(orders, hdu.data)), dict(zip(orders, wvlsol)))

        fitted_pixels_list.append(ref_lines_db.identify(band, spec))
        keys.append((slit_center, "OH"))

        if band == "K":
            fitted_pixels_hitran = ref_lines_db_hitrans.identify(band, spec)
            fitted_pixels_list.append(fitted_pixels_hitran)
            keys.append((slit_center, "Hitran"))

    # concatenate collected list of fitted pixels.
    fitted_pixels_master = pd.concat(fitted_pixels_list,
                                     keys=keys,
                                     names=["slit_center", "kind"],
                                     axis=0)

    if 0:
        # storing multiindex seems broken. Enforce reindexing.
        fitted_pixels_master.reset_index().to_json("test.json", orient="split")
        fitted_pixels_master.reset_index().to_csv("test.csv")
Ejemplo n.º 3
0
def process_band_make_offset_map(utdate, recipe_name, band,
                                 obsids, config_name):

    from igrins.libs.recipe_helper import RecipeHelper
    helper = RecipeHelper(config_name, utdate, recipe_name)

    caldb = helper.get_caldb()

    master_obsid = obsids[0]
    basename = (band, master_obsid)

    ordermap_fits = caldb.load_resource_for(basename,
                                            ("sky", "ordermap_fits"))

    slitposmap_fits = caldb.load_resource_for(basename,
                                              ("sky", "slitposmap_fits"))

    # slitoffset_fits = caldb.load_resource_for(basename,
    #                                           ("sky", "slitoffset_fits"))

    yy, xx = np.indices(ordermap_fits[0].data.shape)

    msk = np.isfinite(ordermap_fits[0].data) & (ordermap_fits[0].data > 0)
    pixels, orders, slit_pos = (xx[msk], ordermap_fits[0].data[msk],
                                slitposmap_fits[0].data[msk])

    # load coeffs
    # This needs to be fixed
    names = ["pixel", "order", "slit"]

    in_df = pd.read_json("coeffs.json", orient="split")
    in_df = in_df.set_index(names)

    poly, coeffs = NdPolyNamed.from_pandas(in_df)

    cc0 = slit_pos - 0.5
    values = dict(zip(names, [pixels, orders, cc0]))
    offsets = poly.multiply(values, coeffs) # * cc0

    offset_map = np.empty(ordermap_fits[0].data.shape, dtype=np.float64)
    offset_map.fill(np.nan)
    offset_map[msk] = offsets * cc0 # dd["offsets"]
    

    if 0:
        slitoffset_fits = caldb.load_resource_for(basename,
                                                  ("sky", "slitoffset_fits"))
        offset_map_orig = slitoffset_fits[0].data
Ejemplo n.º 4
0
def process_band(utdate,
                 recipe_name,
                 band,
                 groupname,
                 obsids,
                 frame_types,
                 aux_infos,
                 config_name,
                 a0v=None,
                 a0v_obsid=None,
                 basename_postfix=None,
                 outname_postfix=None):

    a0v = filter_a0v(a0v, a0v_obsid, aux_infos["GROUP2"])

    # print master_obsid, a0v_obsid

    groupname = aux_infos["GROUP1"]

    helper = RecipeHelper(config_name, utdate, recipe_name)

    generate_a0v_divided(helper,
                         band,
                         groupname,
                         obsids,
                         a0v,
                         basename_postfix=basename_postfix,
                         outname_postfix=outname_postfix)
Ejemplo n.º 5
0
def process_band(utdate,
                 recipe_name,
                 band,
                 groupname,
                 obsids,
                 config,
                 interactive=True):

    # utdate, recipe_name, band, obsids, config = "20150525", "A0V", "H", [63, 64], "recipe.config"

    from igrins.libs.recipe_helper import RecipeHelper
    helper = RecipeHelper(config, utdate, recipe_name)
    caldb = helper.get_caldb()

    master_obsid = obsids[0]
    desc = "SPEC_FITS_FLATTENED"
    blaze_corrected = True
    src_filename = caldb.query_item_path((band, groupname), desc)

    if not os.path.exists(src_filename):
        desc = "SPEC_FITS"
        blaze_corrected = False
        src_filename = caldb.query_item_path((band, groupname), desc)

    out_filename = caldb.query_item_path((band, groupname),
                                         "SPEC_FITS_WAVELENGTH")

    from igrins.libs.master_calib import get_ref_data_path
    tell_file = get_ref_data_path(helper.config,
                                  band,
                                  kind="TELL_WVLSOL_MODEL")

    if not interactive:
        tgt_basename = helper.get_basename(band, groupname)
        figout_dir = helper._igr_path.get_section_filename_base(
            "QA_PATH", "", "tell_wvsol_" + tgt_basename)
        from igrins.libs.path_info import ensure_dir
        ensure_dir(figout_dir)
    else:
        figout_dir = None

    #print src_filename, out_filename, figout_dir, tell_file
    run(src_filename,
        out_filename,
        plot_dir=figout_dir,
        tell_file=tell_file,
        blaze_corrected=blaze_corrected)
Ejemplo n.º 6
0
def process_band_make_offset_map(utdate, recipe_name, band, obsids,
                                 config_name):

    from igrins.libs.recipe_helper import RecipeHelper
    helper = RecipeHelper(config_name, utdate, recipe_name)

    caldb = helper.get_caldb()

    master_obsid = obsids[0]
    basename = (band, master_obsid)

    ordermap_fits = caldb.load_resource_for(basename, ("sky", "ordermap_fits"))

    slitposmap_fits = caldb.load_resource_for(basename,
                                              ("sky", "slitposmap_fits"))

    # slitoffset_fits = caldb.load_resource_for(basename,
    #                                           ("sky", "slitoffset_fits"))

    yy, xx = np.indices(ordermap_fits[0].data.shape)

    msk = np.isfinite(ordermap_fits[0].data) & (ordermap_fits[0].data > 0)
    pixels, orders, slit_pos = (xx[msk], ordermap_fits[0].data[msk],
                                slitposmap_fits[0].data[msk])

    # load coeffs
    # This needs to be fixed
    names = ["pixel", "order", "slit"]

    in_df = pd.read_json("coeffs.json", orient="split")
    in_df = in_df.set_index(names)

    poly, coeffs = NdPolyNamed.from_pandas(in_df)

    cc0 = slit_pos - 0.5
    values = dict(zip(names, [pixels, orders, cc0]))
    offsets = poly.multiply(values, coeffs)  # * cc0

    offset_map = np.empty(ordermap_fits[0].data.shape, dtype=np.float64)
    offset_map.fill(np.nan)
    offset_map[msk] = offsets * cc0  # dd["offsets"]

    if 0:
        slitoffset_fits = caldb.load_resource_for(basename,
                                                  ("sky", "slitoffset_fits"))
        offset_map_orig = slitoffset_fits[0].data
Ejemplo n.º 7
0
def process_band(utdate, recipe_name, band, 
                 groupname, obsids, config,
                 interactive=True):

    # utdate, recipe_name, band, obsids, config = "20150525", "A0V", "H", [63, 64], "recipe.config"

    from igrins.libs.recipe_helper import RecipeHelper
    helper = RecipeHelper(config, utdate, recipe_name)
    caldb = helper.get_caldb()

    master_obsid = obsids[0]
    desc = "SPEC_FITS_FLATTENED"
    blaze_corrected=True
    src_filename = caldb.query_item_path((band, groupname),
                                         desc)

    if not os.path.exists(src_filename):
        desc = "SPEC_FITS"
        blaze_corrected=False
        src_filename = caldb.query_item_path((band, groupname),
                                             desc)

    out_filename = caldb.query_item_path((band, groupname),
                                         "SPEC_FITS_WAVELENGTH")

    from igrins.libs.master_calib import get_ref_data_path
    tell_file = get_ref_data_path(helper.config, band,
                                  kind="TELL_WVLSOL_MODEL")

    if not interactive:
        tgt_basename = helper.get_basename(band, groupname)
        figout_dir = helper._igr_path.get_section_filename_base("QA_PATH",
                                                               "",
                                                               "tell_wvsol_"+tgt_basename)
        from igrins.libs.path_info import ensure_dir
        ensure_dir(figout_dir)
    else:
        figout_dir = None

    #print src_filename, out_filename, figout_dir, tell_file
    run(src_filename, out_filename,
        plot_dir=figout_dir, tell_file=tell_file,
        blaze_corrected=blaze_corrected)
Ejemplo n.º 8
0
def load_aperture_wvlsol(extractor, band):
    """
    for orders that wvlsols are derived.
    """

    config, utdate = extractor.pr.config, extractor.pr.utdate
    bottomup_solutions = get_bottomup_solutions(extractor, band)

    recipe_name = ""
    helper = RecipeHelper(config, utdate, recipe_name)
    caldb = helper.get_caldb()
    #def load_resource_for(self, basename, resource_type):
    basename = caldb.db_query_basename("flat_on", 
                                       (band, extractor.pr.master_obsid))

    wvlsol_v0 = caldb.load_resource_for(basename, "wvlsol_v0")
    orders = wvlsol_v0["orders"]

    ap =  Apertures(orders, bottomup_solutions)

    return ap
Ejemplo n.º 9
0
def get_calibs(band):

    config_name = os.path.join("/home/jjlee/work/igrins/plp_jjlee",
                               "recipe.config")

    from igrins.libs.recipe_helper import RecipeHelper

    utdate = "20170314"
    recipe_name = ""

    helper = RecipeHelper(config_name, utdate, recipe_name)

    caldb = helper.get_caldb()

    basename = (band, "1")

    ap = load_aperture(caldb, basename)
    ordermap = caldb.load_resource_for(basename, "ordermap")
    slitposmap = caldb.load_resource_for(basename, "slitposmap")

    return ap, ordermap, slitposmap
Ejemplo n.º 10
0
def load_aperture_wvlsol(extractor, band):
    """
    for orders that wvlsols are derived.
    """

    config, utdate = extractor.pr.config, extractor.pr.utdate
    bottomup_solutions = get_bottomup_solutions(extractor, band)

    recipe_name = ""
    helper = RecipeHelper(config, utdate, recipe_name)
    caldb = helper.get_caldb()
    #def load_resource_for(self, basename, resource_type):
    basename = caldb.db_query_basename("flat_on",
                                       (band, extractor.pr.master_obsid))

    wvlsol_v0 = caldb.load_resource_for(basename, "wvlsol_v0")
    orders = wvlsol_v0["orders"]

    ap = Apertures(orders, bottomup_solutions)

    return ap
Ejemplo n.º 11
0
def process_band(utdate, recipe_name, band,
                 obsids, frametypes,
                 config, interactive=True):

    # utdate, recipe_name, band, obsids, config = "20150525", "A0V", "H", [63, 64], "recipe.config"

    from igrins.libs.recipe_helper import RecipeHelper
    helper = RecipeHelper(config, utdate, recipe_name)
    caldb = helper.get_caldb()

    from igrins.libs.load_fits import get_hdus, get_combined_image
    hdus = get_hdus(helper, band, obsids)

    a_and_b = dict()
    for frame, hdu in zip(frametypes, hdus):
        a_and_b.setdefault(frame.upper(), []).append(hdu)

    # print a_and_b.keys()

    a = get_combined_image(a_and_b["A"]) / len(a_and_b["A"])
    b = get_combined_image(a_and_b["B"]) / len(a_and_b["B"])

    sky_data_ = a+b - abs(a-b)

    
    from igrins.libs.get_destripe_mask import get_destripe_mask
    destripe_mask = get_destripe_mask(helper, band, obsids)

    from igrins.libs.image_combine import destripe_sky
    sky_data = destripe_sky(sky_data_, destripe_mask, subtract_bg=False)

    # from igrins.libs.destriper import destriper
    # sky_data = destriper.get_destriped(sky_data_)

    basename = helper.get_basename(band, obsids[0])
    store_output(caldb, basename, hdus[0], sky_data)
Ejemplo n.º 12
0
def process_band(utdate, recipe_name, band, obsids, config_name):

    helper = RecipeHelper(config_name, utdate, recipe_name)

    # STEP 1 :
    ## make combined image

    make_combined_image(helper, band, obsids, mode=None)

    # Step 2

    ## load simple-aperture (no order info; depends on

    extract_spectra(helper, band, obsids)

    fit_wvl_sol(helper, band, obsids)
Ejemplo n.º 13
0
def process_thar_band(utdate, refdate, band, obsids, config):

    helper = RecipeHelper(utdate, refdate, config)

    # STEP 1 :
    ## load simple-aperture (no order info; depends on
    ## aperture trace from Flat)

    # Step 2
    ## extract 1-d spectra from ThAr

    thar_products = get_thar_products(helper, band, obsids)

    # Step 3:
    ## compare to reference ThAr data to figure out orders of each strip
    ##  -  simple correlation w/ clipping

    new_orders = get_orders_matching_ref_spec(helper, band, obsids,
                                              thar_products)

    # Step 4:

    # step 5:
    ##  - For each strip, measure x-displacement from the reference
    ##    spec. Fit the displacement as a function of orders.
    ##  - Using the estimated displacement, identify lines from the spectra.
    thar_reidentified_products = identify_lines(helper, band, obsids,
                                                thar_products)

    # Step 6:

    ## load the reference echellogram, and find the transform using
    ## the identified lines.

    find_initial_wvlsol(helper, band, obsids, thar_products,
                        thar_reidentified_products, new_orders)

    # Step 8:

    ## make order_map and auxilary files.

    save_figures(helper, band, obsids, thar_products, new_orders)

    save_db(helper, band, obsids)
Ejemplo n.º 14
0
    from find_affine_transform import find_affine_transform
    find_affine_transform(helper, band, obsids)

    from igrins.libs.transform_wvlsol import transform_wavelength_solutions
    transform_wavelength_solutions(helper, band, obsids)

    # Step 8:

    ## make order_map and auxilary files.

    save_figures(helper, band, obsids)

    save_db(helper, band, obsids)

if __name__ == "__main__":

    utdate = "20160226"
    obsids_off = range(11, 21)
    obsids_on = range(583, 593)

    recipe_name = "FLAT"

    band = "H"

    config_name = "../recipe.config"

    helper = RecipeHelper(config_name, utdate)

    process_band(utdate, recipe_name, band, obsids_off, obsids_on, config_name)
Ejemplo n.º 15
0
def main(utdate, band, obsids, config_name):
    helper = RecipeHelper(config_name, utdate)
    find_affine_transform(helper, band, obsids)
Ejemplo n.º 16
0
def process_band_make_offset_map(utdate, recipe_name, band,
                                 obsids, config_name):

    from igrins.libs.recipe_helper import RecipeHelper
    helper = RecipeHelper(config_name, utdate, recipe_name)
Ejemplo n.º 17
0
def process_band(utdate, recipe_name, band, obsids, config_name):

    helper = RecipeHelper(config_name, utdate, recipe_name)

    identify_multiline(helper, band, obsids)
Ejemplo n.º 18
0
def process_band(utdate, recipe_name, band, obsids, config_name):

    from igrins.libs.recipe_helper import RecipeHelper
    helper = RecipeHelper(config_name, utdate, recipe_name)

    derive_wvlsol(helper, band, obsids)