将半径速度转换为银河静止标准(GSR)#

通常在日心或太阳系重心参考系中报告源的半径或视线速度。一种常见的变换是将太阳运动沿着视线投影到目标,因此将其转换为银河静止系(有时称为银河静止标准,GSR)。这种转变取决于银河系相对于巴里或日心系的方向的假设。它还取决于假设的太阳速度载体。在这里,我们将演示如何使用天空位置和重心径向速度来执行这种转换。

使用最新的银河系中心坐标约定:

>>> import astropy.coordinates as coord
>>> coord.galactocentric_frame_defaults.set("latest")

对于这个例子,让我们研究恒星HD 155967的坐标和重心半径速度,从 Simbad :

>>> from astropy import units as u
>>> icrs = coord.SkyCoord(
...     ra=258.58356362 * u.deg,
...     dec=14.55255619 * u.deg,
...     radial_velocity=-16.1 * u.km / u.s,
...     frame="icrs",
... )

接下来,我们需要决定假设的GSR框架中太阳的速度。我们将使用与 Galactocentric 框架,并将其转换为 CartesianRepresentation 对象使用 .to_cartesian() 方法 CartesianDifferential 对象 galcen_v_sun :

>>> v_sun = coord.Galactocentric().galcen_v_sun.to_cartesian()

我们现在需要从上面ICRS框架中的天空位置获得假设银河系中的单位载体。我们将使用这个单位矢量将太阳速度投影到视线上:

>>> gal = icrs.transform_to(coord.Galactic)
>>> cart_data = gal.data.to_cartesian()
>>> unit_vector = cart_data / cart_data.norm()

现在我们用这个单位向量来投影太阳速度:

>>> v_proj = v_sun.dot(unit_vector)

最后,我们将太阳速度的投影添加到半径速度上,以获得GSR半径速度:

>>> rv_gsr = icrs.radial_velocity + v_proj
>>> print(rv_gsr)
123.30460087379765 km / s

我们可以将其包装在一个函数中,这样我们就可以控制太阳速度并重复使用上面的代码:

>>> def rv_to_gsr(c, v_sun=None):
...     """Transform a barycentric radial velocity to the Galactic Standard of Rest
...     (GSR).
...
...     Parameters
...     ----------
...     c : `~astropy.coordinates.BaseCoordinateFrame` subclass instance
...         The radial velocity, associated with a sky coordinates, to be
...         transformed.
...     v_sun : `~astropy.units.Quantity`, optional
...         The 3D velocity of the solar system barycenter in the GSR frame.
...         Defaults to the same solar motion as in the
...         `~astropy.coordinates.Galactocentric` frame.
...
...     Returns
...     -------
...     v_gsr : `~astropy.units.Quantity`
...         The input radial velocity transformed to a GSR frame.
...     """
...     if v_sun is None:
...         v_sun = coord.Galactocentric().galcen_v_sun.to_cartesian()
...
...     gal = c.transform_to(coord.Galactic)
...     cart_data = gal.data.to_cartesian()
...     unit_vector = cart_data / cart_data.norm()
...
...     v_proj = v_sun.dot(unit_vector)
...
...     return c.radial_velocity + v_proj
>>> rv_gsr = rv_to_gsr(icrs)
>>> print(rv_gsr)
123.30460087379765 km / s