sagantaf

メモレベルの技術記事を書くブログ。

Astropy〜チュートリアルを通して使い方を学ぶ(1)

はじめに

Astoropyのチュートリアルを参考にして、使い方を学んでいく。


まずは一つ目のチュートリアルGetting Started with astropy.coordinates」を参考に、astropy.coordinatesを使って画像を表示させてみる。

このチュートリアルでは、「ヒクソン・コンパクト銀河群」の画像を利用している。

ヒクソン・コンパクト銀河群 - Wikipedia

ヒクソン・コンパクト銀河群 (英: Hickson Galaxy Groups、HCG )は、ポール・ヒクソンにより1982年に出版されたカタログ[2]に掲載された集団規模が比較的小さい銀河集団の総称である。


まずは基本セットのimport

from urllib.parse import urlencode
from urllib.request import urlretrieve

from astropy import units as u
from astropy.coordinates import SkyCoord
from astropy.table import Table

import numpy as np
from IPython.display import Image


matplotlibでastropyの描画ライブラリを使えるように設定

astropy.coordinatesパッケージのSkyCoordクラスで天球座標を表すことができる

天球座標とは、赤緯赤経と呼ばれる緯度経度のような尺度を使って地球から見た星の座標を示す

from astropy.visualization import astropy_mpl_style
import matplotlib.pyplot as plt
plt.style.use(astropy_mpl_style)
%matplotlib inline


SkyCoordオブジェクトを作る

from_nameというメソッドを使ってヒクソン・コンパクト銀河群のデータを取ってくる

sc = SkyCoord.from_name('HCG 7')
type(sc)

 astropy.coordinates.sky_coordinate.SkyCoord

SkyCoordというタイプのオブジェクトになっている また、scだけを実行すると、天球座標を表示できる

sc

RAは赤経、Decは赤緯を表す(RA=Right Ascertion, Dec=Declination)

SkyCoordのメソッド一覧はdirメソッドで確認できる

dir(sc)

['T', '__abstractmethods__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', (省略) 'temperature', 'to_pixel', 'to_string', 'transform_to', 'transpose', 'v_bary', 'velocity', 'z_sun']


作成したオブジェクトの赤経RA、赤緯Decを表示するには以下様々なコマンドがある

sc.ra

9∘48′58.5′′

sc.ra.hour

0.6544166666666668

sc.dec

0∘53′17.016′′

sc.dec.hour

0.05920400000000001


そのほか、SkyCoordの使い方は公式ページで確認できる

次に画像イメージをダウンロードする

画像の範囲を設定するための変数を用意

im_size = 12 * u.arcmin
im_size

12′

arcminは角度の単位。1arcminで1度の60分の1を表す(日本語では、分と呼ぶ)
単位の記号は1'
つまり 12' は、12/60=1/5度という小さい角度を表す

画像の大きさを設定するための変数 および 画像取得元のベースとなるURL を設定

im_pixels = 1024
cutoutbaseurl = 'http://skyservice.pha.jhu.edu/DR12/ImgCutout/getjpeg.aspx'

取得したい画像のパラメタを設定

query_string = urlencode(dict(ra=sc.ra.deg,
                              dec=sc.dec.deg,
                             width=im_pixels, height=im_pixels,
                             scale=im_size.to(u.arcsec).value/im_pixels))

上記では天球座標として作成したscの値を指定
 sc.ra.deg, sc.dec.deg (9.81625, 0.88806)
scaleパラメタでim_sizeを秒単位に変換している
 im_size.to(u.arcsec) 720′′



設定したパラメタとベースとなるURLを使って、取得したい画像をURLとして設定し、保存

url = cutoutbaseurl + '?' + query_string
urlretrieve(url, 'HCG7_SDSS_cutout.jpg')

('HCG7_SDSS_cutout.jpg', <http.client.HTTPMessage at 0x7f62d1631828>)


保存した画像を表示する

Imageメソッドで保存した画像のファイル名を指定することで表示させられる

Image('HCG7_SDSS_cutout.jpg')

f:id:sagantaf:20181118231449p:plain



パラメタを変更して画像の表示を変えてみる

画像パラメタquery_stringで指定する内容を変えることで画像の表示が変わる

まずは簡単に変更できるように関数を用意

def show_image(im_size, im_pixels):
    query_string = urlencode(dict(ra=sc.ra.deg,
                              dec=sc.dec.deg,
                             width=im_pixels, height=im_pixels,
                             scale=im_size.to(u.arcsec).value/im_pixels))
    url = cutoutbaseurl + '?' + query_string
    urlretrieve(url, 'HCG7_SDSS_cutout.jpg')
    return(Image('HCG7_SDSS_cutout.jpg'))


より広範囲の画像を出力には、im_sizeを変更することで対応できる

im_size2 = 60 * u.arcmin
show_image(im_size2, im_pixels)

f:id:sagantaf:20181118231532p:plain

逆も然りで、im_sizeを12から4にすることで、より詳細な画像を出力することができる

また、画像サイズの変更はim_pixelsを変えることで可能

im_size2 = 4 * u.arcmin
im_pixels = 512
show_image(im_size2, im_pixels)

f:id:sagantaf:20181118231552p:plain


まとめ

天体画像の取得・保存方法と色々な画像表示の方法について学んだ