astropy:docs
  • Index
  • Modules

ナビゲーション

  • next »
  • « previous |
  • Astropy v4.3.1 »
  • 天文座標系 (astropy.coordinates ) »
  • 色分解、オフセット、ディレクトリマッチング、および関連機能

色分解、オフセット、ディレクトリマッチング、および関連機能¶

astropy.coordinates 座標オブジェクトを比較または一致させるための一般的なツールを含む。特に、座標間の分離を決定することと、座標(または複数の座標)をディレクトリと一致させる分離とを決定することが重要である。これらは主に座標オブジェクト上の方法として実現される.

退職する.¶

空の間隔は使えます astropy.coordinates.BaseCoordinateFrame.separation() あるいは…。 astropy.coordinates.SkyCoord.separation() 方法、この方法は、大円距離を計算する( not 小角度近似):

>>> import numpy as np
>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> c1 = SkyCoord('5h23m34.5s', '-69d45m22s', frame='icrs')
>>> c2 = SkyCoord('0h52m44.8s', '-72d49m43s', frame='fk5')
>>> sep = c1.separation(c2)
>>> sep  
<Angle 20.74611448 deg>

戻る対象は1つです Angle したがって、例は、以下のいくつかの等価角度単位のいずれかの単位アクセス角度を使用することができる。

>>> sep.radian  
0.36208800460262563
>>> sep.hour  
1.3830742984029318
>>> sep.arcminute  
1244.7668685626384
>>> sep.arcsecond  
74686.0121137583

また、2つの入力座標は同じフレームにはなく、一方は自動的に他方と一致するように変換され、異なるフレームに位置していても、分離が一致して決定されることを保証することに留意されたい。

上記の空中分離を除いて astropy.coordinates.BaseCoordinateFrame.separation_3d() あるいは…。 astropy.coordinates.SkyCoord.separation_3d() 方法:以下の属性を有する2つの座標間の3 D距離を決定する distance 定義::

>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> c1 = SkyCoord('5h23m34.5s', '-69d45m22s', distance=70*u.kpc, frame='icrs')
>>> c2 = SkyCoord('0h52m44.8s', '-72d49m43s', distance=80*u.kpc, frame='icrs')
>>> sep = c1.separation_3d(c2)
>>> sep  
<Distance 28.74398816 kpc>

ずれ量¶

角度分離と密接に関連するのは座標間のオフセットである.オフセットの重要な区別は、一般に、分離された単一のスカラ角度オフセットではなく、“から”および“座標へ”の概念である。 coordinates 天文学で遭遇するいくつかのよく見られるオフセットを計算する利便性を含む.

このような機能の最初の部分は position_angle() 方法です。この方法で計算する SkyCoord 例と天文学的約束に従ったもう1つ(パラメータ伝達として)(北以東の正の角度):

>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> c1 = SkyCoord(1*u.deg, 1*u.deg, frame='icrs')
>>> c2 = SkyCoord(2*u.deg, 2*u.deg, frame='icrs')
>>> c1.position_angle(c2).to(u.deg)  
<Angle 44.97818294 deg>

この2つの技術の結合は separation() そして position_angle() これにより、方向ずれ量のセットが与えられる。逆の動作を実行する−間隔および位置角度が与えられた場合に、新たな“目標”座標を決定する− directional_offset_by() 方法を提供しました:

>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> c1 = SkyCoord(1*u.deg, 1*u.deg, frame='icrs')
>>> position_angle = 45 * u.deg
>>> separation = 1.414 * u.deg
>>> c1.directional_offset_by(position_angle, separation)  
<SkyCoord (ICRS): (ra, dec) in deg
    (2.0004075, 1.99964588)>

この技術は、球面ジオメトリ(すなわち、それぞれ平均RAS/DECではない)を考慮することで、2つの座標間の中点(または実際の任意の点)を計算する際にも有用である。

>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> coord1 = SkyCoord(0*u.deg, 0*u.deg, frame='icrs')
>>> coord2 = SkyCoord(1*u.deg, 1*u.deg, frame='icrs')
>>> pa = coord1.position_angle(coord2)
>>> sep = coord1.separation(coord2)
>>> coord1.directional_offset_by(pa, sep/2)  
<SkyCoord (ICRS): (ra, dec) in deg
    (0.49996192, 0.50001904)>

一つもあります spherical_offsets_to() 角度オフセットを計算する方法(例えば、望遠鏡オペレータに明るい恒星からより暗いターゲットへの小さなオフセットを移動させる可能性がある):

>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> bright_star = SkyCoord('8h50m59.75s', '+11d39m22.15s', frame='icrs')
>>> faint_galaxy = SkyCoord('8h50m47.92s', '+11d39m32.74s', frame='icrs')
>>> dra, ddec = bright_star.spherical_offsets_to(faint_galaxy)
>>> dra.to(u.arcsec)  
<Angle -173.78873354 arcsec>
>>> ddec.to(u.arcsec)  
<Angle 10.60510342 arcsec>

“空のずれ”枠¶

球形オフセットの概念を拡張するために coordinates Frame類があります SkyOffsetFrame これは特定の点を中心とした異なるフレームを作成するだろう。これらのフレームは、空の任意の位置を中心としたフレームを作成する便利な方法であるので、位置オフセット(例えば、天文測定のために使用される)を計算するのに適しているので、“天空オフセットフレーム”と呼ばれる。

>>> from astropy import units as u
>>> from astropy.coordinates import SkyOffsetFrame, ICRS, SkyCoord
>>> center = ICRS(10*u.deg, 45*u.deg)
>>> center.transform_to(SkyOffsetFrame(origin=center)) 
<SkyOffsetICRS Coordinate (rotation=0.0 deg, origin=<ICRS Coordinate: (ra, dec) in deg
    (10., 45.)>): (lon, lat) in deg
    (0., 0.)>
>>> target = ICRS(11*u.deg, 46*u.deg)
>>> target.transform_to(SkyOffsetFrame(origin=center))  
<SkyOffsetICRS Coordinate (rotation=0.0 deg, origin=<ICRS Coordinate: (ra, dec) in deg
    (10., 45.)>): (lon, lat) in deg
    (0.69474685, 1.00428706)>

あるいは、便利な方法 skyoffset_frame() 既存の空のずれ枠からスカイオフセット枠を作成することができます SkyCoord **

>>> center = SkyCoord(10*u.deg, 45*u.deg)
>>> aframe = center.skyoffset_frame()
>>> target.transform_to(aframe)  
<SkyOffsetICRS Coordinate (rotation=0.0 deg, origin=<ICRS Coordinate: (ra, dec) in deg
    (10., 45.)>): (lon, lat) in deg
    (0.69474685, 1.00428706)>
>>> other = SkyCoord(9*u.deg, 44*u.deg, frame='fk5')
>>> other.transform_to(aframe)  
<SkyCoord (SkyOffsetICRS: rotation=0.0 deg, origin=<ICRS Coordinate: (ra, dec) in deg
    (10., 45.)>): (lon, lat) in deg
    (-0.71943945, -0.99556216)>

注釈

While sky offset frames appear to be all the same class, this not the case: the sky offset frame for each different type of frame for origin is actually a distinct class. E.g., SkyOffsetFrame(origin=ICRS(...)) yields an object of class SkyOffsetICRS, not SkyOffsetFrame. While this is not important for most uses of this class, it is important for things like type-checking, because something like SkyOffsetFrame(origin=ICRS(...)).__class__ is SkyOffsetFrame will not be True, as it would be for most classes.

同様のフレームワークは、銀河群などの階層物理システムに非常に有用な特定の既知オブジェクトに対するフレームを定義するツールとしても使用することができる。例えば、M 31の周囲のオブジェクトは、標準ICRA/DECと整列した座標枠に表示される場合があるが、M 31::

>>> m31 = SkyCoord(10.6847083*u.deg, 41.26875*u.deg, frame='icrs')
>>> ngc147 = SkyCoord(8.3005*u.deg, 48.5087389*u.deg, frame='icrs')
>>> ngc147_inm31 = ngc147.transform_to(m31.skyoffset_frame())
>>> xi, eta = ngc147_inm31.lon, ngc147_inm31.lat
>>> xi  
<Longitude -1.59206948 deg>
>>> eta  
<Latitude 7.26183757 deg>

注釈

現在のところ origin 一種 SkyOffsetFrame 計算変換のどの部分にも使用されない.♪the origin 空中回転にのみ用いられる。しかし、この状況は未来に変わるかもしれない。

カタログにマッチする¶

coordinates 座標フレームを用いて,必要な1組の他の座標に最も近い座標をディレクトリに見つけることができる.例えば仮定すると ra1/dec1 そして ra2/dec2 NumPy配列があるファイルからロードされているかどうか:

>>> from astropy.coordinates import SkyCoord
>>> from astropy import units as u
>>> c = SkyCoord(ra=ra1*u.degree, dec=dec1*u.degree)
>>> catalog = SkyCoord(ra=ra2*u.degree, dec=dec2*u.degree)
>>> idx, d2d, d3d = c.match_to_catalog_sky(catalog)

戻り距離 d3d 三次元距離です。この2つのソースがない限り (c )とカタログ (catalog )座標が関連する距離を有する場合、この数は、全ての震源の距離が1(無次元)であると仮定する。

上に表示された空中分離とは異なり、座標が使用される場合にのみ、最も近い3 Dマッチングを見つけることができます。 distance :

>>> c = SkyCoord(ra=ra1*u.degree, dec=dec1*u.degree, distance=distance1*u.kpc)
>>> catalog = SkyCoord(ra=ra2*u.degree, dec=dec2*u.degree, distance=distance2*u.kpc)
>>> idx, d2d, d3d = c.match_to_catalog_3d(catalog)

Now idx are indices into catalog that are the closest objects to each of the coordinates in c, d2d are the on-sky distances between them, and d3d are the 3-dimensional distances. Because coordinate objects support indexing, idx enables easy access to the matched set of coordinates in the catalog:

>>> matches = catalog[idx]
>>> (matches.separation_3d(c) == d3d).all()
True
>>> dra, ddec = c.spherical_offsets_to(matches)

この機能は match_coordinates_sky() そして match_coordinates_3d() 機能します。これらはいずれも以下の2つの場合で動作可能である. SkyCoord 対象者. or 下位レベルのフレームワーククラス:

>>> from astropy.coordinates import match_coordinates_sky
>>> idx, d2d, d3d = match_coordinates_sky(c, catalog)
>>> idx, d2d, d3d = match_coordinates_sky(c.frame, catalog.frame)

分離制約(例えば、一致する最大分離とみなされる)は、以下のものを使用してブーリアンマスクを作成することによって適用されることができる d2d あるいは…。 d3d それがそうです。例:

>>> max_sep = 1.0 * u.arcsec
>>> idx, d2d, d3d = c.match_to_catalog_3d(catalog)
>>> sep_constraint = d2d < max_sep
>>> c_matches = c[sep_constraint]
>>> catalog_matches = catalog[idx[sep_constraint]]

今、 c_matches そして catalog_matches 一致した信号源があるかどうか c そして catalog これらの間隔は、1コーナー秒未満である。

座標周辺を探索する¶

密接に関連した機能を検索することができます all 別の座標のセットの特定の距離(3 D距離または空中距離)内の座標。♪the search_around_* 方法(および関数)はこの機能を提供し,そのインタフェースは非常に類似している. match_coordinates_* :

>>> import numpy as np
>>> idxc, idxcatalog, d2d, d3d = catalog.search_around_sky(c, 1*u.deg)
>>> np.all(d2d < 1*u.deg)
True
>>> idxc, idxcatalog, d2d, d3d = catalog.search_around_3d(c, 1*u.kpc)
>>> np.all(d3d < 1*u.kpc)
True

これらの方法の重要な違いは,複数の(またはない)マッチングが可能であることである catalog どの場所の近くでも c それがそうです。この2つに索引すると c そして catalog インデックスを返すだけではなく catalog それがそうです。そして,これらのインデックスを2つに新たに組み込むことができる SkyCoord オブジェクト、または同じ順序を有する任意の配列:

>>> np.all(c[idxc].separation(catalog[idxcatalog]) == d2d)
True
>>> np.all(c[idxc].separation_3d(catalog[idxcatalog]) == d3d)
True
>>> print(catalog_objectnames[idxcatalog]) 
['NGC 1234' 'NGC 4567' ...]

ただし、この二重索引は search_around_* 座標のうちの1つがスカラーである場合、返されたインデックスは、スカラーについて:

>>> scalarc = SkyCoord(ra=1*u.deg, dec=2*u.deg, distance=distance1*u.kpc)
>>> idxscalarc, idxcatalog, d2d, d3d = catalog.search_around_sky(scalarc, 1*u.deg) 
ValueError: One of the inputs to search_around_sky is a scalar.

(そしてそのために search_around_* アルゴリズムはスカラーの場合効率が悪い),この場合の最適な方法は変更である. separation* 方法:

>>> d2d = scalarc.separation(catalog)
>>> catalogmsk = d2d < 1*u.deg
>>> d3d = scalarc.separation_3d(catalog)
>>> catalog3dmsk = d3d < 1*u.kpc

ここから生まれたのは catalogmsk あるいは…。 catalog3dmsk 変数はインデックス配列ではなくブール配列であるが,実際にはそれらの使用方式は通常 idxcatalog 上の例から分かる.ブーリアンマスクではなくインデックスが必要である場合、以下の動作を実行することができる。

>>> idxcatalog = np.where(catalogmsk)[0]
>>> idxcatalog3d = np.where(catalog3dmsk)[0]

Page Contents

  • 色分解、オフセット、ディレクトリマッチング、および関連機能
    • 退職する.
    • ずれ量
      • “空のずれ”枠
    • カタログにマッチする
    • 座標周辺を探索する

  Back to Top

© Copyright 2011–2021, The Astropy Developers.
Created using Sphinx 4.3.1.   Last built 18 12月 2021.