Briswell Tech Blog

ブリスウェルのテックブログです

Pythonで銀河観測

先日、私たちが住んでいる「地球」が属している「太陽系」が属している「天の川銀河」(地球 ⊂ 太陽系 ⊂ 天の川銀河)の中心にあるブラックホールの姿が初めて撮影されました。すごい時代になったものです。

「Uppsala General Catalogue of Galaxies (UGC)」という北半球から見える約1万3千個の銀河のカタログがあります。そのカタログの中に、積分記号( ∫ )のような形の渦巻銀河「UGC 3697」があります。今回はその銀河をPythonで確認してみましょう。

銀河の画像を複数枚タイル状に表示する方法 - Qiita
pythonを用いて銀経銀緯で複数のfits画像を並べてプロットする方法 - Qiita

こちらの記事を参考にさせていただきました。ありがとうございました。

1. モジュールのインポート

from astroquery.vizier import Vizier #Vizierカタログのデータ取得用
from astroquery.skyview import SkyView #fitsファイル取得用
from astropy.wcs import WCS #天球上の座標取得用
from astropy.io import fits #fitsファイル読込用
import glob #ディレクトリのファイル取得用
import matplotlib.pyplot as plt #グラフ描画用

2. カタログ存在確認

catalog = "UGC"
code = "3697"
v = Vizier(catalog="VII/26D/catalog",column_filters={catalog:"="+code})
data = v.query_constraints()
print(data[0])

出力結果は以下です。UGCカタログ(VII/26D/catalog)に存在していますね。

UGC   A   RA1950  DE1950      MCG      MajAxis MinAxis  Hubble Pmag  i 
         "h:m:s" "d:m:s"                arcmin  arcmin         mag     
---- --- ------- ------- ------------- ------- ------- ------- ---- ---
3697     07 05.6  +71 55 MCG+12-07-028    3.30    0.20 INTEGRL 13.1  --

3. fitsファイルを保存

def save(p,name,obs): 
    for onep,oneo in zip(p,obs):
        onep.writeto(name+"_"+oneo+".fits",overwrite=True)

path_fits = "./"
galaxy = catalog+code
olist = ["DSS"] #Digitized Sky Survey

paths = SkyView.get_images(position=galaxy,survey=olist)
save(paths,path_fits+galaxy,olist)

4. fitsファイルを元に画像を作成

# fitsファイルを取得
dss = glob.glob("./*_DSS.fits")

# グラフ描画領域を作成
F = plt.figure(figsize=(6,8))

# fitsファイルの読込
dssfilename = dss[0]
dssname = dssfilename.replace(".fits",".png")
dsshdu = fits.open(dssfilename)[0]
dsswcs = WCS(dsshdu.header)
dssdata = dsshdu.data

# グラフタイトルを定義
plt.figtext(0.45, 0.93, galaxy, size="large")

# オリジナル画像表示
plt.subplot(211, projection=dsswcs) #2行1列の1番目
plt.imshow(dssdata, origin='lower')
plt.grid(color='white', ls='dotted')

# 拡大画像表示
dssxlen, dssylen = dssdata.shape
dsscx = int(0.5 * dssxlen)
dsscy = int(0.5 * dssylen)
dssdx = int(dssxlen * 0.15)
dsswcscut = dsswcs[dsscx-dssdx:dsscx+dssdx,dsscy-dssdx:dsscy+dssdx]

plt.subplot(212, projection=dsswcscut) #2行1列の2番目
plt.imshow(dssdata[dsscx-dssdx:dsscx+dssdx,dsscy-dssdx:dsscy+dssdx], origin='lower')
plt.grid(color='white', ls='dotted')

# 画像保存
plt.savefig(galaxy + ".png")
plt.close()

5. 結果

宇宙に浮かぶ ∫ なんとも素敵ですね...