コード例 #1
0
def save_matched_hipp_ids(spec_survey):
    if spec_survey == "rave":
        # Xmatch with RAVE, taking into account the epoch difference.
        tgas = gload.tgas()
        rave_cat = gload.rave()
        m1, m2, sep = gx.xmatch(rave_cat, tgas, colRA1='RAdeg', colDec1='DEdeg',
                                colRA2='ra', colDec2='dec', epoch1=2000.,
                                epoch2=2015.,swap=True)
        rave_cat = rave_cat[m1]
        tgas_rave = tgas[m2]

        tgas_rave_hip = masked_array_to_simple_array(tgas_rave)
        tgas_rave_hip_df = pd.DataFrame({"hip": tgas_rave_hip})
        tgas_rave_hip_df.to_csv("tgas_rave_hip_df.csv")

    elif spec_survey == "lamost":
        # Match LAMOST to TGAS
        tgas = gload.tgas()
        lamost_cat = gload.lamost()
        m1, m2, sep = gx.xmatch(lamost_cat, tgas, colRA1='ra', colDec1='dec',
                                colRA2='ra', colDec2='dec', epoch1=2000.,
                                epoch2=2015., swap=True)
        lamost_cat = lamost_cat[m1]
        tgas_lamost = tgas[m2]
        tgas_lamost_hip_id = masked_array_to_simple_array(tgas_lamost)
        tgas_lamost_hip_df = pd.DataFrame({"tycho2_id": tgas_lamost_hip_id})
        tgas_lamost_hip_df.to_csv("tgas_lamost_hip_df.csv")
コード例 #2
0
ファイル: tgas.py プロジェクト: migueldvb/gaia-kepler
def tgas_match(cat, **kwargs):
    """
    This cross-matches a pandas DataFrame to the TGAS catalog. The first
    argument should be a data frame and the other keyword arguments are passed
    to the ``gaia_tools.xmatch`` function.

    """
    # Load the catalogs
    tgas = gload.tgas()

    # Set the default columns
    kwargs["colRA1"] = kwargs.get("colRA1", "ra")
    kwargs["colDec1"] = kwargs.get("colDec1", "dec")
    kwargs["epoch1"] = kwargs.get("epoch1", 2000.0)
    kwargs["colRA2"] = kwargs.get("colRA2", "ra")
    kwargs["colDec2"] = kwargs.get("colDec2", "dec")
    kwargs["epoch2"] = kwargs.get("epoch2", 2015.0)

    # Do the cross-match using gaia_tools
    m1, m2, dist = xmatch.xmatch(cat.to_records(), tgas, **kwargs)

    # Build a pandas DataFrame out of the match and save the TGAS columns
    matched = pd.DataFrame(cat.iloc[m1])
    tgas_matched = tgas[m2]
    for k in tgas_matched.dtype.names:
        # Ugliness to deal with byte ordering
        matched["tgas_" + k] = tgas_matched[k].byteswap().newbyteorder()
    matched["tgas_match_distance"] = dist

    return matched
コード例 #3
0
        "colDec1": "DEdeg",
        "epoch1": 2000.0,
    },
    "tgas": {
        "colRA2": "tgas_ra",
        "colDec2": "tgas_dec",
        "epoch2": 2015.0,
        "colpmRA2": "tgas_pmra",
        "colpmDec2": "tgas_pmdec"
    }
}

# Do the cross-match with lamost using gaia_tools
lamost_cat = gload.lamost(cat='star')
# Dictionary unpacking syntax only works on python 3.5
m1, m2, dist = xmatch(lamost_cat, planets_tgas.to_records(),
                      dict(xmatch_kwargs['lamost'], xmatch_kwargs['tgas']))

# Add lamost columns to planets_tga dataframe
lamost_columns = ['teff', 'teff_err', 'logg', 'logg_err', 'feh', 'feh_err']

for k in lamost_columns:
    planets_tgas["lamost_" + k] = np.nan
    planets_tgas.loc[planets_tgas.iloc[m2].index,
                     "lamost_" + k] = lamost_cat[k][m1]

# Do the cross-match with rave using gaia_tools
rave_columns = [
    'RAdeg', 'DEdeg', 'Teff_K', 'eTeff_K', 'logg_K', 'elogg_K', 'Met_K',
    'eMet_K'
]
# Find column numbers to speed up loading of the data
コード例 #4
0
@author: tao
"""

import gaia_tools.load as gload
from gaia_tools import xmatch
import matplotlib.pyplot as plt
import numpy as np

import time

tgas_cat=gload.tgas()
apogee_cat=gload.apogee()

tic = time.clock()
m1,m2,sep= xmatch.xmatch(apogee_cat,tgas_cat,colRA2='ra',colDec2='dec',epoch1=2000.,epoch2=2015.,swap=True)
toc = time.clock()
dt_astropy=toc - tic

plt.figure(1)
plt.xlabel('J')
plt.ylabel('delta_theta(arcsec)')
plt.scatter(apogee_cat['J'][m1],sep*3600,c='k',s=0.5,marker='.')

delta_ra_gaia=apogee_cat['RA'][m1]-tgas_cat['ra'][m2]
delta_dec_gaia=apogee_cat['DEC'][m1]-tgas_cat['dec'][m2]
plt.figure(2)
plt.xlabel('delta_dec (arcsec)')
plt.ylabel('delta_ra (arcsec)')
plt.scatter(delta_dec_gaia*3600,delta_ra_gaia*3600,c='k',s=0.5,marker='.')
コード例 #5
0
# save a fits
hdu = fits.PrimaryHDU(spec)
flag_hdu = fits.ImageHDU(good_flag)
hdul = fits.HDUList([hdu, flag_hdu])
hdul.writeto(contspac_file_name)

good_flag = good_flag.astype(bool)

if corr_flag:  # correct north-south
    north_spec_idx = np.where(
        allstar_data['TELESCOPE'][good_flag] == 'apo25m')[0]
    south_spec_idx = np.where(
        allstar_data['TELESCOPE'][good_flag] == 'lco25m')[0]

    idx1, idx2, _ = xmatch(allstar_data[good_flag][north_spec_idx],
                           allstar_data[good_flag][south_spec_idx])

    spec = fits.getdata(contspac_file_name)

    lco_apo_mediff = np.median(spec[good_flag][south_spec_idx][idx2] -
                               spec[good_flag][north_spec_idx][idx1],
                               axis=0)
    np.save("lco_apo_median_dr17sync.npy", lco_apo_mediff)

    spec[good_flag][south_spec_idx] -= lco_apo_mediff

    os.rename(
        contspac_file_name,
        "{0}_{2}{1}".format(*os.path.splitext(contspac_file_name) +
                            ("uncorrected", )))
コード例 #6
0
def query_along_orbit(
        orbit,
        frame_point,
        frame_philims,
        # points
        points_inds=[],
        points_philims=None,
        # options
        frame_dt=1.9 * u.Myr,
        points_dt=None,
        max_separation=.5 * u.kpc,
        return_transforms=True,
        # for make_query
        local=False,
        _random_index=None,
        #
        distance=23.2 * u.kpc,
        duststr='output/ps1dust_{}.dat',
        # saving and logging
        pprint=False,
        save_window=False,
        save_frame=False,
        logger=_LOGFILE,
        verbose=None):
    """

    Parameters
    ----------
    orbit : SkyCoord
        icrs orbit

    frame_point : SkyCoord

    points_philims : list
        list (as long points_inds) of philim lists (len 4)

    save_window : bool or str
        False : nothing
        True : save to 'output/window.fits'
        str : save at this location

    save_frame : bool or str
        save the main Frame and coordtransforms
        False : nothing
        True : save to 'output/window.fits'
        str : save at this location

    """
    # -------------------------------------------------------------------------
    # Preparing

    ## checks
    assert isinstance(save_window, (bool, str))
    assert isinstance(save_frame, (bool, str))

    ## points_philims
    if points_philims is None:
        points_philims = (frame_philims, ) * len(points_inds)
    elif len(points_philims) != len(points_inds):
        raise ValueError('points_philims do not match points_inds in length')

    ## dt
    if points_dt is None:
        points_dt = (frame_dt, ) * len(points_inds)
    elif len(points_dt) != len(points_inds):
        return ValueError('points_dt do not match points_inds in length')

    # -------------------------------------------------------------------------
    # preplotting

    plt.plot(orbit.icrs.ra, orbit.icrs.dec, c='k')
    plt.scatter(frame_point.icrs.ra, frame_point.icrs.dec, s=100, c='r')
    for i in points_inds:
        plt.scatter(orbit.icrs.ra[i], orbit.icrs.dec[i], s=50, c='k')
    plt.set(title='Query Along Orbit',
            xlabel='\alpha [deg]',
            ylabel='\delta [deg]',
            savefig='plots/query_along_point.png')

    # -------------------------------------------------------------------------
    # the master custom frame

    logfile.newsection(title=f'Starting Query:', div='=')

    df, MasterFrame, crd_xfm = query_at_point(orbit,
                                              frame_point,
                                              frame_philims,
                                              dt=frame_dt,
                                              is_nbody=False,
                                              max_separation=max_separation,
                                              return_transforms=True,
                                              as_qtable=False,
                                              local=local,
                                              _random_index=_random_index,
                                              pprint=pprint,
                                              save_window=False,
                                              save_frame=save_frame,
                                              logger=logfile,
                                              verbose=verbose)

    # -------------------------------------------------------------------------
    # Querying at points

    for i, (ind, pdt,
            philims) in enumerate(zip(points_inds, points_dt, points_philims)):

        point = orbit[ind]

        logfile.newsection(title=f'Query @ Point {i+1}:', div='=')

        pointdf = query_at_point(orbit,
                                 point,
                                 philims,
                                 dt=pdt,
                                 is_nbody=False,
                                 max_separation=max_separation,
                                 return_transforms=False,
                                 as_qtable=False,
                                 local=local,
                                 _random_index=_random_index,
                                 pprint=pprint,
                                 logger=logfile,
                                 verbose=verbose)

        # xmatch the catalogs to identify duplicates
        _, idx2, _ = xmatch(df,
                            pointdf,
                            colRA1='ra',
                            colDec1='dec',
                            epoch1=2015.5,
                            colRA2='ra',
                            colDec2='dec',
                            epoch2=2015.5)

        # finding distinct values in pointdf
        inds = np.arange(len(pointdf))  # full index array for comparison
        nm = list(set(inds).difference(idx2))  # not matched values

        # merging tables
        df = vstack([df, pointdf[nm]])

    # -------------------------------------------------------------------------
    # modifying table

    register_stream_frame(crd_xfm.R_icrs_to_cust)

    # replace the custom coordinates by values from MasterFrame
    sc = SkyCoord(ra=df['ra'],
                  dec=df['dec'],
                  pm_ra_cosdec=df['pmra'],
                  pm_dec=df['pmdec'],
                  frame='icrs',
                  representation_type='spherical').transform_to(MasterFrame)
    sc.phi1.wrap_angle = '180d'

    df['phi1'] = sc.phi1.to(deg)
    df['phi2'] = sc.phi2.to(deg)
    df['pmphi1'] = sc.pm_phi1_cosphi2
    df['pmphi2'] = sc.pm_phi2

    df = QTable(df)

    df['prlx'][df['prlx'] < 0] = np.NaN

    table_utils.add_color_col(df, 'g', 'r')
    table_utils.add_color_col(df, 'g', 'i')
    table_utils.add_abs_pm_col(df, 'pmra', 'pmdec')

    logfile.write("adding color columns",
                  "did g-r",
                  "did g-i",
                  "did |pm|",
                  sep='\n\t',
                  end='\n')

    # -------------------------------------------------------------------------
    # Dust

    # distance = pal5['sc'][0].distance.to_value(u.kpc)

    ps1dust = load_dust_gri(duststr, df=df, distance=distance)

    ## Making color corrections
    logfile.write("Dextincting",
                  "g -> g dx",
                  "r -> r dx",
                  "i -> i dx",
                  "g-r -> g-r dx",
                  "g-i -> g-i dx",
                  "r-i -> r-i dx",
                  sep='\n\t',
                  end='\n')

    df['g dx'] = df['g'] - ps1dust['g']
    df['r dx'] = df['r'] - ps1dust['r']
    df['i dx'] = df['i'] - ps1dust['i']

    df['g-r dx'] = df['g dx'] - df['r dx']
    df['g-i dx'] = df['g dx'] - df['i dx']
    df['r-i dx'] = df['r dx'] - df['i dx']

    for c in ('g', 'r', 'i', 'g-r', 'g-i', 'r-i'):
        setattr(df[c + ' dx'].info, 'description', 'de-extincted w/ mwdust')

    ## Adding in Conversion to MegaCam
    df['g MC'] = MCG1_PS1.G_MP9401(df, g='g dx', r='r dx', gmi='g-r dx')
    df['r MC'] = MCG1_PS1.R_MP9601(df, g='g dx', r='r dx', gmi='g-r dx')
    df['g-r MC'] = df['g MC'] - df['r MC']

    for c in ('g MC', 'r MC', 'g-r MC'):
        setattr(df[c].info, 'description',
                'de-extincted & converted to MegaCam')

    # -------------------------------------------------------------------------
    # Saving

    df = QTable(df)

    if save_window:  # True or str
        if isinstance(save_window, str):
            fpath = save_window
        else:
            fpath = 'output/window.fits'
        logfile.write(f'saving to {fpath}')
        df.write(fpath, format='fits', overwrite=True)

    # -------------------------------------------------------------------------
    # postplotting

    plt.scatter(df['ra'].to_value(u.deg),
                df['dec'].to_value(u.deg),
                s=.1,
                c='k')
    plt.plot(orbit.icrs.ra, orbit.icrs.dec, c='k')
    plt.scatter(frame_point.icrs.ra, frame_point.icrs.dec, s=100, c='r')
    for i in points_inds:
        plt.scatter(orbit.icrs.ra[i], orbit.icrs.dec[i], s=50, c='k')
    plt.set(title='Query Along Orbit',
            xlabel='\alpha [deg]',
            ylabel='\delta [deg]',
            savefig='plots/query_along_point.png')

    # plt.scatter(df['phi1'], df['phi2'], s=.1, c='k', fig='new')
    # plt.plot(orbit.icrs.ra, orbit.icrs.dec, c='k')
    # plt.scatter(frame_point.icrs.ra, frame_point.icrs.dec, s=100, c='r')
    # for i in points_inds:
    #     plt.scatter(orbit.icrs.ra[i], orbit.icrs.dec[i], s=50, c='k')
    # plt.set(title='Query Along Orbit',
    #         xlabel='\alpha [deg]', ylabel='\delta [deg]',
    #         savefig='plots/query_along_point.png')

    # -------------------------------------------------------------------------
    # returning

    return df, MasterFrame, crd_xfm