银河中心坐标系的描述#

虽然许多其他框架在 astropy.coordinates 如果以某种方式标准化(例如,由IAU定义),则没有以银河系中心为原点的标准银河系参照系。(这与 Galactic 指向银河系中心但原点在太阳系的坐标)。这个 Galactocentric Frame类应该足够灵活,以支持这种变换的所有常见定义,但具有合理的默认参数值,例如相对于银河中心的太阳速度、银河中面以上的太阳高度等。 we describe our generalized definition of the transformation 从ICRS到/从银河中心坐标,以及 describe how to customize the default Galactocentric parameters 属性时使用的 Galactocentric 在不显式传递参数值的情况下初始化Frame。

转换的定义#

本文档描述了 ICRSGalactocentric 协调。由于数学上的微妙之处以及没有官方的标准/定义,本文对此进行了详细描述。有关如何在代码中使用此转换的示例,请参见 实例 剖面图 Galactocentric 类文档。

我们假设我们从ICRS参考坐标系中的3D位置开始:赤经、赤纬和日心距, \((\alpha, \delta, d)\) . 我们可以使用从笛卡尔坐标到球坐标的标准转换将其转换为笛卡尔位置:

\[\开始{aligned}\]

第一个变换旋转 \(x_{{\rm icrs}}\) 轴心使新的 \(x'\) 轴指向星系中心(GC),由ICRS位置指定 \((\alpha_{{\rm GC}}, \delta_{{\rm GC}})\) (在 Galactocentric 帧,这由帧属性控制 galcen_coord ):

\[\开始{aligned}\]

到目前为止的转变已经使 \(x'\) 向量指向GC的轴,但是 \(y'\)\(z'\) 轴指向任意方向。我们采用银河系平面的方向作为天文学联盟定义的银河系坐标北极的法线 (Blaauw et. al. 1960 ). 这个额外的“滚动”角度, \(\eta\) ,是通过沿 \(l=0\) 在这个过渡框架中 \(y'\) 位置。我们发现:

\[\开始{aligned}\]

迄今为止,完整的旋转矩阵为:

\[\开始{collected}\]

矢量旋转后的位置 \(\boldsymbol{{R}}\boldsymbol{{r}}_{{\rm icrs}}\) ,我们现在可以减去到GC的距离, \(d_{{\rm GC}}\) ,完全是沿着 \(x'\) 坐标轴:

\[\开始{aligned}\]

在哪里? \(\hat{{\boldsymbol{{x}}}}_{{\rm GC}} = (1,0,0)^{{\mathsf{{T}}}}\) .

最终的转换通过围绕最终的旋转来解释太阳在银河系中平面上方的(指定的)高度 \(y''\) 角度轴 \(\theta= \sin^{{-1}}(z_\odot / d_{{\rm GC}})\)

\[\开始{aligned}\]

在哪里? \(z_\odot\) 是太阳在中间平面上方的测量高度。

然后,完整的转变是:

\[\boldsymbol{r}{\rm GC}=\boldsymbol{H}\left(\boldsymbol{r}\boldsymbol{r}\rm icrs}-d{\rm GC}\hat{\boldsymbol{x}}{\rm GC}\right)。\]

控制默认帧参数#

所有定义参数的框架 Galactocentric 参数可在帧中设置为可自定义的传递 Galactocentric 初始值设定项。然而,使用帧通常很方便,而不必传入每个参数。因此,该类为这些参数提供了合理的默认值,但对太阳位置或银河系运动的更精确测量正在不断进行中。的默认值 Galactocentric 因此,帧属性将在后续版本中根据需要进行更新 astropy . 因此,我们提供了一种机制,通过 galactocentric_frame_defaults ScienceState 班级。

这个 galactocentric_frame_defaults 类控制中的默认参数设置 Galactocentric 通过将一组字符串名称映射到参数值的特定选项。有关有效名称的最新列表,请参阅的docstring galactocentric_frame_defaults 但这些都是名字 'pre-v4.0' ,将默认参数值设置为其原始定义(即astropy-v4.0之前)的值,以及 'v4.0' ,它将默认参数值设置为Astropy 4.0版中更新的更现代的测量值集。此外,自定义测量集可以注册到 galactocentric_frame_defaults 像内置选项一样使用。

galactocentric_frame_defaults 还跟踪所有参数值的引用(即定义参数值的科学论文),以及任何进一步指定的元数据信息。

和其他人一样 ScienceState 子类 galactocentric_frame_defaults 类可用于在运行时全局设置帧默认值。

实例#

可以通过初始化 Galactocentric 不带参数的框架:

>>> from astropy.coordinates import Galactocentric
>>> Galactocentric()
<Galactocentric Frame (galcen_coord=<ICRS Coordinate: (ra, dec) in deg
    (266.4051, -28.936175)>, galcen_distance=8.122 kpc, galcen_v_sun=(12.9, 245.6, 7.78) km / s, z_sun=20.8 pc, roll=0.0 deg)>

可以使用此类修改这些默认值:

>>> from astropy.coordinates import galactocentric_frame_defaults
>>> _ = galactocentric_frame_defaults.set('v4.0') 
>>> Galactocentric() 
<Galactocentric Frame (galcen_coord=<ICRS Coordinate: (ra, dec) in deg
    (266.4051, -28.936175)>, galcen_distance=8.122 kpc, galcen_v_sun=(12.9, 245.6, 7.78) km / s, z_sun=20.8 pc, roll=0.0 deg)>
>>> _ = galactocentric_frame_defaults.set('pre-v4.0') 
>>> Galactocentric() 
<Galactocentric Frame (galcen_coord=<ICRS Coordinate: (ra, dec) in deg
    (266.4051, -28.936175)>, galcen_distance=8.3 kpc, galcen_v_sun=(11.1, 232.24, 7.25) km / s, z_sun=27.0 pc, roll=0.0 deg)>

也可以通过将此类用作上下文管理器来更新默认参数值,将默认参数值本地更改为代码的一部分:

>>> with galactocentric_frame_defaults.set('pre-v4.0'):
...     print(Galactocentric()) 
<Galactocentric Frame (galcen_coord=<ICRS Coordinate: (ra, dec) in deg
    (266.4051, -28.936175)>, galcen_distance=8.3 kpc, galcen_v_sun=(11.1, 232.24, 7.25) km / s, z_sun=27.0 pc, roll=0.0 deg)>

同样,更改默认参数值不会影响显式指定的帧属性:

>>> import astropy.units as u
>>> with galactocentric_frame_defaults.set('pre-v4.0'):
...     print(Galactocentric(galcen_distance=8.0*u.kpc)) 
<Galactocentric Frame (galcen_coord=<ICRS Coordinate: (ra, dec) in deg
    (266.4051, -28.936175)>, galcen_distance=8.0 kpc, galcen_v_sun=(11.1, 232.24, 7.25) km / s, z_sun=27.0 pc, roll=0.0 deg)>

可以注册其他参数集,例如使用Dehnen&Binney(1998)对太阳运动的测量。我们还可以添加元数据,例如1-sigma错误:

>>> state = galactocentric_frame_defaults.get_from_registry("v4.0")
>>> state["parameters"]["galcen_v_sun"] = (10.00, 225.25, 7.17) * (u.km / u.s)
>>> state["references"]["galcen_v_sun"] = "http://www.adsabs.harvard.edu/full/1998MNRAS.298..387D"
>>> state["error"] = {"galcen_v_sun": (0.36, 0.62, 0.38) * (u.km / u.s)}
>>> galactocentric_frame_defaults.register(name="DB1998", **state)

与前面的示例一样,新参数集可以是get/set::

>>> state = galactocentric_frame_defaults.get_from_registry("DB1998")
>>> print(state["error"]["galcen_v_sun"])  
[0.36 0.62 0.38] km / s

除非使用 galactocentric_frame_defaults 类的默认参数值,则 Galactocentric Frame设置为 'latest' 这意味着如果您更新Astropy,则默认参数值可能会更改。如果您使用 Galactocentric 在没有明确指定所有参数值的情况下,我们建议在任何敏感地依赖于例如太阳运动或其他帧参数的选择的科学代码中手动设置帧默认设置。例如,在这样的代码中,我们建议将类似以下内容添加到您的导入块中(这里使用 'v4.0' 例如):

>>> import astropy.coordinates as coord
>>> coord.galactocentric_frame_defaults.set('v4.0')