In [1]:
# Makes print and division act like Python 3
from __future__ import print_function, division
# Import the usual libraries
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
# Enable inline plotting
%matplotlib inline
from IPython.display import display, Latex, clear_output
from matplotlib.backends.backend_pdf import PdfPages
In [2]:
from astroquery.gaia import Gaia
from astroquery.simbad import Simbad
from astropy.coordinates import SkyCoord
In [3]:
def query_gaia(name, cat='dr2', radius=0.003, return_all=False):
"""
name : str
name of source to search for
cat : str
GAIA 'dr1' or 'dr2'
radius : float
Search radius in degrees
return_all : bool
By default, returns Gaia source closest in position to searched object.
By setting this to True, returns all sources found within search radius.
"""
cat = cat.lower()
sim = Simbad()
sim.TIMEOUT = 300 # 5 minute timeout
# Change URL to closer server
sim.SIMBAD_URL = 'http://simbad.harvard.edu/simbad/sim-script'
sim.remove_votable_fields('coordinates')
if 'dr1' in cat:
epoch = 'J2015'
elif 'dr2' in cat:
epoch = 'J2015.5'
else:
epoch = 'J2015.5'
sim.add_votable_fields('ra(d;A;ICRS;{};2000)'.format(epoch),
'dec(d;D;ICRS;{};2000)'.format(epoch),
'flux(K)', 'sp', 'otype(V)', 'parallax')
tbl = sim.query_object(name)
ra_name1 = tbl.colnames[1]
dec_name1 = tbl.colnames[2]
ra_val1 = '{}'.format(tbl[ra_name1][0])
dec_val1 = '{}'.format(tbl[dec_name1][0])
if 'dr1' in cat:
jstr = "SELECT TOP 10 source_id,ra,ra_error,dec,dec_error,parallax,parallax_error,phot_g_mean_mag,phot_variable_flag \
FROM gaiadr1.gaia_source \
WHERE CONTAINS(POINT('ICRS',gaiadr1.gaia_source.ra,gaiadr1.gaia_source.dec),\
CIRCLE('ICRS',{},{},{}))=1".format(ra_val1, dec_val1, radius)
elif 'dr2' in cat:
jstr = "SELECT TOP 10 source_id,ra,ra_error,dec,dec_error,parallax,parallax_error,phot_g_mean_mag,bp_rp,\
radial_velocity,radial_velocity_error,phot_variable_flag,teff_val,a_g_val \
FROM gaiadr2.gaia_source \
WHERE CONTAINS(POINT('ICRS',gaiadr2.gaia_source.ra,gaiadr2.gaia_source.dec),\
CIRCLE('ICRS',{},{},{}))=1".format(ra_val1, dec_val1, radius)
job1 = Gaia.launch_job(jstr)
tbl1 = job1.get_results()
if return_all:
return tbl1
if len(tbl1)>1:
# Calculate Separations
ra = tbl1.colnames[1]
dec = tbl1.colnames[3]
c1 = SkyCoord(tbl1[ra], tbl1[dec], frame='icrs',
obstime=epoch, equinox='J2000')
c2 = SkyCoord(tbl[ra_name1], tbl[dec_name1], frame='icrs',
obstime=epoch, equinox='J2000')
dist = c2.separation(c1)
ind = dist == dist.min()
tbl1 = tbl1[ind]
return tbl1
In [4]:
sim = Simbad()
sim.TIMEOUT = 300 # 5 minute timeout
# Change URL to closer server
sim.SIMBAD_URL = 'http://simbad.harvard.edu/simbad/sim-script'
sim.add_votable_fields('ra(d;A;ICRS;J2000;2000)',
'dec(d;D;ICRS;J2000;2000)',
'flux(K)', 'sp', 'otype(V)', 'parallax')
names = ['HD10647', 'HD107146', 'HD181327', 'HD61005', 'HD32297']
In [5]:
darr = []
for name in names:
tbl = sim.query_object(name)
tbl1 = query_gaia(name, cat='dr1', radius=0.003, return_all=False)
tbl2 = query_gaia(name, cat='dr2', radius=0.003, return_all=False)
p0, _p0 = tbl[('PLX_VALUE','PLX_ERROR')][-1]
if len(tbl1)==0:
p1 = _p1 = np.nan
else:
p1, _p1 = tbl1[('parallax','parallax_error')][-1]
if len(tbl2)==0:
p2 = _p2 = np.nan
else:
p2, _p2 = tbl2[('parallax','parallax_error')][-1]
dist_arr = 1000 / np.array([p0,p1,p2])
_dist_arr = np.array([_p0, _p1, _p2]) * dist_arr**2 / 1000
d0, d1, d2 = dist_arr
_d0, _d1, _d2 = _dist_arr
odict = {'name':name, 'd0': d0, 'd1':d1, 'd2':d2,
'd0_err':_d0, 'd1_err':_d1, 'd2_err':_d2,
'p0':p0, 'p1':p1, 'p2':p2,
'p0_err':_p0, 'p1_err':_p1, 'p2_err':_p2}
darr.append(odict)
In [6]:
for odict in darr:
if odict['d0']>0 or odict['d2']>0: print(odict['name'])
if odict['d0']>0:
str1 = 'Simbad: {:.2f} +/- {:.4f} mas'.format(odict['p0'],odict['p0_err'])
str2 = '{:.2f} +/- {:.4f} pc'.format(odict['d0'], odict['d0_err'])
print('{} ({})'.format(str1,str2))
if odict['d1']>0:
str1 = 'GAIA DR1: {:.2f} +/- {:.4f} mas'.format(odict['p1'],odict['p1_err'])
str2 = '{:.2f} +/- {:.4f} pc'.format(odict['d1'], odict['d1_err'])
print('{} ({})'.format(str1,str2))
if odict['d2']>0:
str1 = 'GAIA DR2: {:.2f} +/- {:.4f} mas'.format(odict['p2'],odict['p2_err'])
str2 = '{:.2f} +/- {:.4f} pc'.format(odict['d2'], odict['d2_err'])
print('{} ({})'.format(str1,str2))
if odict['d2']>0: print('')
In [ ]:
sim = Simbad()
sim.TIMEOUT = 300 # 5 minute timeout
# Change URL to closer server
sim.SIMBAD_URL = 'http://simbad.harvard.edu/simbad/sim-script'
sim.add_votable_fields('ra(d;A;ICRS;J2000;2000)',
'dec(d;D;ICRS;J2000;2000)',
'flux(K)', 'sp', 'otype(V)', 'parallax')
names = ['AA Tau', 'AB Aur', 'BP Tau',
'CX Tau', 'CY Tau', 'CW Tau', 'Coku Tau 4', 'CZ Tau',
'DG Tau', 'DM Tau', 'DR Tau', 'DQ Tau',
'FM Tau', 'GG Tau', 'GM Aur', 'HK Tau', 'HL Tau',
'IP Tau', 'IS Tau', 'RY Tau', 'T Tau', 'UX Tau', 'XZ Tau']
#names = ['AU Mic', 'HIP 17695', 'G 7-34', 'LP 776-25', 'G 161-71',
# 'FOMALHAUT C', 'AP Col', 'LP 944-20', '2MUCD 10320']
names = ['tau ceti', 'ax mic', 'GJ 380', 'sig Dra', '82 Eri', 'del Pav', 'GJ 892']
darr = []
for name in names:
tbl = sim.query_object(name)
tbl1 = query_gaia(name, cat='dr1', radius=0.003, return_all=False)
tbl2 = query_gaia(name, cat='dr2', radius=0.003, return_all=False)
p0, _p0 = tbl[('PLX_VALUE','PLX_ERROR')][-1]
if len(tbl1)==0:
p1 = _p1 = np.nan
else:
p1, _p1 = tbl1[('parallax','parallax_error')][-1]
if len(tbl2)==0:
p2 = _p2 = np.nan
else:
p2, _p2 = tbl2[('parallax','parallax_error')][-1]
dist_arr = 1000 / np.array([p0,p1,p2])
_dist_arr = np.array([_p0, _p1, _p2]) * dist_arr**2 / 1000
d0, d1, d2 = dist_arr
_d0, _d1, _d2 = _dist_arr
odict = {'name':name, 'd0': d0, 'd1':d1, 'd2':d2,
'd0_err':_d0, 'd1_err':_d1, 'd2_err':_d2,
'p0':p0, 'p1':p1, 'p2':p2,
'p0_err':_p0, 'p1_err':_p1, 'p2_err':_p2}
darr.append(odict)
for odict in darr:
if odict['d0']>0 or odict['d2']>0: print(odict['name'])
if odict['d0']>0:
str1 = 'Simbad: {:.2f} +/- {:.4f} mas'.format(odict['p0'],odict['p0_err'])
str2 = '{:.2f} +/- {:.4f} pc'.format(odict['d0'], odict['d0_err'])
print('{} ({})'.format(str1,str2))
if odict['d1']>0:
str1 = 'GAIA DR1: {:.2f} +/- {:.4f} mas'.format(odict['p1'],odict['p1_err'])
str2 = '{:.2f} +/- {:.4f} pc'.format(odict['d1'], odict['d1_err'])
print('{} ({})'.format(str1,str2))
if odict['d2']>0:
str1 = 'GAIA DR2: {:.2f} +/- {:.4f} mas'.format(odict['p2'],odict['p2_err'])
str2 = '{:.2f} +/- {:.4f} pc'.format(odict['d2'], odict['d2_err'])
print('{} ({})'.format(str1,str2))
if odict['d2']>0: print('')
for odict in darr:
if odict['d0']>0 or odict['d2']>0: print(odict['name'])
if odict['d0']>0: print('Simbad: {:.2f} +/- {:.4f} pc'.format(odict['d0'], odict['d0_err']))
if odict['d1']>0: print('GAIA DR1: {:.2f} +/- {:.4f} pc'.format(odict['d1'], odict['d1_err']))
if odict['d2']>0: print('GAIA DR2: {:.2f} +/- {:.4f} pc'.format(odict['d2'], odict['d2_err']))
if odict['d2']>0: print('')
for odict in darr:
if odict['d0']>0 or odict['d2']>0: print(odict['name'])
if odict['d0']>0: print('Simbad: {:.2f} +/- {:.4f} mas'.format(odict['p0'],odict['p0_err']))
if odict['d1']>0: print('GAIA DR1: {:.2f} +/- {:.4f} mas'.format(odict['p1'],odict['p1_err']))
if odict['d2']>0: print('GAIA DR2: {:.2f} +/- {:.4f} mas'.format(odict['p2'],odict['p2_err']))
if odict['d2']>0: print('')
In [ ]: