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")
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
"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
@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='.')
# 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", )))
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