空间运动的解释#

这个 SkyCoord 对象支持根据源的空间运动和评估新位置的时间(或坐标的当前时间和新时间之间的差)更新源的位置。这是通过使用 apply_space_motion() 方法。

例子#

首先,我们将创建一个 SkyCoord 对象 obstime ::

>>> import astropy.units as u
>>> from astropy.time import Time
>>> from astropy.coordinates import SkyCoord
>>> c = SkyCoord(l=10*u.degree, b=45*u.degree, distance=100*u.pc,
...              pm_l_cosb=34*u.mas/u.yr, pm_b=-117*u.mas/u.yr,
...              frame='galactic',
...              obstime=Time('1988-12-18 05:11:23.5'))

考虑到空间运动,我们现在可以在其他时间找到位置。我们可以指定观测时间和期望时间之间的时差:

>>> c.apply_space_motion(dt=10. * u.year) 
<SkyCoord (Galactic): (l, b, distance) in (deg, deg, pc)
    ( 10.00013356,  44.999675,  99.99999994)
 (pm_l_cosb, pm_b, radial_velocity) in (mas / yr, mas / yr, km / s)
    ( 33.99980714, -117.00005604,  0.00034117)>
>>> c.apply_space_motion(dt=-10. * u.year) 
<SkyCoord (Galactic): (l, b, distance) in (deg, deg, pc)
    ( 9.99986643,  45.000325,  100.00000006)
 (pm_l_cosb, pm_b, radial_velocity) in (mas / yr, mas / yr, km / s)
    ( 34.00019286, -116.99994395, -0.00034117)>

或者,我们可以指定评估位置的新时间:

>>> c.apply_space_motion(new_obstime=Time('2017-12-18 01:12:07.3')) 
<SkyCoord (Galactic): (l, b, distance) in (deg, deg, pc)
    ( 10.00038732,  44.99905754,  99.99999985)
 (pm_l_cosb, pm_b, radial_velocity) in (mas / yr, mas / yr, km / s)
    ( 33.99944073, -117.00016248,  0.00098937)>

如果 SkyCoord 物体没有指定的径向速度(RV),假设RV为0。假设源在惯性系中以等速直线运动,则确定了源的新位置。没有计划支持更复杂的进化(例如,非惯性系或更复杂的进化),因为这超出了 astropy 核心包(尽管它很可能在各种附属包的范围内)。

示例:使用速度计算不同时期的天空位置#

在本例中,我们将使用 Gaia TGAS 天体测量学,用于计算在2MASS测量观测到该天空区域时源的天空位置。TGAS天体测量是在参考纪元J2015.0上提供的,而2MASS测量是在1990年代末进行的。对于感兴趣的恒星,其自身运动足够大,两次测量之间的天空位置存在明显差异。

在计算了源的先前位置之后,我们将把源与2MASS目录交叉匹配以进行计算 Gaia -2此对象源的主颜色。

备注

此示例需要从 Gaia TGAS和2MASS目录。为了下面的方便和速度,我们创建了包含数据的dictionary对象。我们用Astropy的附属软件包检索了数据 astroquery 使用以下查询:

import astropy.coordinates as coord
import astropy.units as u
from astroquery.gaia import Gaia
from astroquery.vizier import Vizier

job = Gaia.launch_job("SELECT TOP 1 * FROM gaiadr1.tgas_source \
    WHERE parallax_error < 0.3  AND parallax > 5 AND pmra > 100 \
    ORDER BY random_index")
result_tgas = job.get_results()[0]

c_tgas = coord.SkyCoord(ra=result_tgas['ra'] * u.deg,
                        dec=result_tgas['dec'] * u.deg)
v = Vizier(columns=["**"], catalog="II/246/out")
result_2mass = v.query_region(c_tgas, radius=1*u.arcmin)['II/246/out']

此源的相关列中的TGAS数据(见上文注释中的查询):

>>> result_tgas = dict(ra=66.44280212823296,
...                    dec=-69.99366255906372,
...                    parallax=22.764078749733947,
...                    pmra=144.91354358297048,
...                    pmdec=5.445648092997134,
...                    ref_epoch=2015.0,
...                    phot_g_mean_mag=7.657174523348196)

上述位置周围1 arcminute内所有源的2 mass数据(见上述注释中的查询):

>>> result_2mass = dict(RAJ2000=[66.421970000000002, 66.433521999999996,
...                              66.420564999999996, 66.485068999999996,
...                              66.467928999999998, 66.440815000000001,
...                              66.440454000000003],
...                     DEJ2000=[-70.003722999999994, -69.990768000000003,
...                              -69.992255999999998, -69.994881000000007,
...                              -69.994926000000007, -69.993613999999994,
...                              -69.990836999999999],
...                     Jmag=[16.35, 13.663, 16.171, 16.184, 16.292,
...                           6.6420002, 12.275],
...                     Hmag=[15.879, 13.955, 15.154, 15.856, 15.642,
...                           6.3660002, 12.185],
...                     Kmag=[15.581, 14.238, 14.622, 15.398, 15.123,
...                           6.2839999, 12.106],
...                     Date=['1998-10-24', '1998-10-24', '1998-10-24',
...                           '1998-10-24', '1998-10-24', '1998-10-24',
...                           '1998-10-24'])

我们将首先创建一个 SkyCoord 对象来自TGAS目录中提供的信息。请注意,我们将 obstime TGAS目录提供的参考纪元的对象(重心坐标时间为J2015.0):

>>> import astropy.units as u
>>> from astropy.coordinates import SkyCoord, Distance
>>> from astropy.time import Time
>>> c = SkyCoord(ra=result_tgas['ra'] * u.deg,
...              dec=result_tgas['dec'] * u.deg,
...              distance=Distance(parallax=result_tgas['parallax'] * u.mas),
...              pm_ra_cosdec=result_tgas['pmra'] * u.mas/u.yr,
...              pm_dec=result_tgas['pmdec'] * u.mas/u.yr,
...              obstime=Time(result_tgas['ref_epoch'], format='jyear',
...                           scale='tcb'))

我们接下来创建一个 SkyCoord 对象具有2MASS目录中的天空位置,以及 Time 对象获取2MASS目录中提供的2MASS观测的日期(对于该区域中的数据,观测日期是相同的,因此我们只取第0个值)::

>>> catalog_2mass = SkyCoord(ra=result_2mass['RAJ2000'] * u.deg,
...                          dec=result_2mass['DEJ2000'] * u.deg)
>>> epoch_2mass = Time(result_2mass['Date'][0])

我们现在可以使用 apply_space_motion() 计算另一个历元TGAS源位置的方法。这将使用固有运动和视差信息来演化假设直线运动的源的位置:

>>> c_2mass_epoch = c.apply_space_motion(epoch_2mass)

现在我们有了2质量纪元的TGAS源的坐标,我们可以进行交叉匹配(另请参见 分隔、偏移、目录匹配和相关功能 ):

>>> idx, sep, _ = c_2mass_epoch.match_to_catalog_sky(catalog_2mass) 
>>> sep[0].to_string() 
'0d00m00.2818s'
>>> idx 
array(5)

它找到的最接近的源是0.2818弧秒,与2MASS目录中的行索引5相对应。例如,我们可以计算 Gaia -2组件颜色:

>>> G = result_tgas['phot_g_mean_mag']
>>> J = result_2mass['Jmag'][idx] 
>>> K = result_2mass['Kmag'][idx] 
>>> G - J, G - K 
(1.0151743233481962, 1.3731746233481958)