astropy径向速度修正函数

最近做原始谱线数据处理需要进行频率改正,刚好astropy提供了现成的速度修正函数,记录一下。

Astropy支持计算质心barycentric日心heliocentric径向速度修正。(请参见 径向速度修正 以及 radial_velocity_correction API文档以获取详细信息)。

radial_velocity_correction(kind='barycentric', obstime=None, location=None)

计算将地球表面给定时间地点的径向速度转换为质心速度或日心速度所需的修正量。

质心修正的计算精度比日心修正高,并包括额外的物理量(如时间膨胀)。如果需要m/s级别的精度,则使用质心修正。

不同精度的径向速度校正

3m/s精度

这个例子演示了如何计算这种修正,如果在某个特定时间从Keck天文台观测到一个已知的RA和Dec的物体。如果3 m/s左右的精度足够,则可以将计算出的修正值加到任何观测到的径向速度上,以确定最终的日心径向速度:

>>> from astropy.time import Time
>>> from astropy.coordinates import SkyCoord, EarthLocation
>>> # keck = EarthLocation.of_site('Keck')  # the easiest way... but requires internet
>>> keck = EarthLocation.from_geodetic(lat=19.8283*u.deg, lon=-155.4783*u.deg, height=4160*u.m)
>>> sc = SkyCoord(ra=4.88375*u.deg, dec=35.0436389*u.deg)
>>> barycorr = sc.radial_velocity_correction(obstime=Time('2016-6-4'), location=keck)  
>>> barycorr.to(u.km/u.s)  
<Quantity 20.077135 km / s>
>>> heliocorr = sc.radial_velocity_correction('heliocentric', obstime=Time('2016-6-4'), location=keck)  
>>> heliocorr.to(u.km/u.s)  
<Quantity 20.070039 km / s>

修正值由 radial_velocity_correction 使用光学近似 $v=zc$ (详细见 光谱(多普勒)当量 )。可以将修正值添加到任何观测到的径向速度上,以提供精确到约3 m/s的校正。

cm/s精度

如果需要更精确的校正,则必须注意更多细节。

首先,建议一直使用质心修正,因为(太阳系的)质心是一个固定点;而很显然日心并不是固定的,对日心的校正只适用于低精度的工作。因此,为了提高速度,日心修正不包括由于地球表面的引力势引起的引力红移等效应。基于这些原因,高精度的观测应始终使用质心修正 。

cm/s级径向速度修正所需的其他注意事项见 Wright & Eastman (2014) . 严格地说质心修正最重要的是 ,以便将其应用为:

$v_t$是真正的径向速度,$v_m$是测量的径向速度,$v_b$是由radial_velocity_correction返回的质心修正。

这里的算法足以在mm/s级别进行校正,但在应用中需要小心。返回的质心校正使用光学近似v=z*c。严格地说,质心校正是乘的,应用如下:

>>> from astropy.time import Time
>>> from astropy.coordinates import SkyCoord, EarthLocation
>>> from astropy.constants import c
>>> t = Time(56370.5, format='mjd', scale='utc')
>>> loc = EarthLocation('149d33m00.5s','-30d18m46.385s',236.87*u.m)
>>> sc = SkyCoord(1*u.deg, 2*u.deg)
>>> vcorr = sc.radial_velocity_correction(kind='barycentric', obstime=t, location=loc)  
>>> rv = rv + vcorr + rv * vcorr / c

质心修正 radial_velocity_correction 与Wright & Eastmann(2014)的论文中IDL实现的一致,对于无限远源,其精度水平为10 mm/s。radial_velocity_correction不包括夏皮罗延迟,也不包括该论文等式28的光传播时间修正。被忽略的那些参数并不重要,除非您要求精度高于1 cm/s。如果您确实要求精度,请参阅 Wright & Eastmann (2014) .

相对论修正:

(虽然有光学和射电的修正公式,但用相对论修正并不需要别的参数还能提高精度,所以我一般就用这个了)

速度、频率的相对论关系:

>>> import astropy.units as u
>>> CO_restfreq = 115.27120*u.GHz  # rest frequency of 12 CO 1-0 in GHz
>>> relativistic_CO_equiv = u.doppler_relativistic(CO_restfreq)
>>> measured_freq = 115.2832*u.GHz
>>> relativistic_velocity = measured_freq.to(u.km/u.s, equivalencies=relativistic_CO_equiv)
>>> relativistic_velocity  
<Quantity -31.207467619351537 km / s>
>>> measured_velocity = 1250 * u.km/u.s
>>> relativistic_frequency = measured_velocity.to(u.GHz, equivalencies=relativistic_CO_equiv)
>>> relativistic_frequency  
<Quantity 114.79156866993588 GHz>
>>> relativistic_wavelength = measured_velocity.to(u.mm, equivalencies=relativistic_CO_equiv)
>>> relativistic_wavelength  
<Quantity 2.6116243681798923 mm>