空间运动的解释#
这个 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)