宿題 - 光赤外研究部

すばる中秋の名月の学校
宿題までのウォーミングアップ
市川幸平
2015 年 8 月
1 はじめに
本書の目的は、「すばる中秋の名月の学校 (以下、名月の学校)」の参加者が、模擬研究を行うに
あたって必要になるであろう必要最低限の Unix 知識を前もって取得しておくことにある。天文学
の研究では大量のデータから必要な情報を持ってきたり、大量の計算を行ったりすることは日常茶
飯事である。このような時に 1 つずつ人間がファイルを弄ったり計算をしていては終わりが来な
い*1 し、人間は残念ながらよくミスをする。特定のことを大量にやる、という作業は人間は苦手な
のだ。逆に、コンピュータはそういうのが得意で、そのコンピュータに指令を送るのに便利なのが
Unix のコマンドである。最終的にコマンドの塊をスクリプトやプログラムとしてまとめておけば、
その部分にミスがないかどうかを確認すればよく、ミスが起きていないかの確認作業も場所が絞ら
れてグッと楽になる。このように、Unix コマンドは研究の効率を大幅にあげてくれる要素がふん
だんに盛り込まれていて、研究の大きな友となってくれるわけだ。その友に出会える第一歩が本書
の目指すところである。
すでに Unix のコマンド操作や Perl, Python*2 などに慣れ親しんでいる人であれば、ほとんどの
ページをすっ飛ばして、最後の宿題の部分だけ取り組んでもらっても構わない。ただ、はじめて
Unix を触る人であれば、ここで紹介しているコマンドを一緒に動かしてみよう。このページを最
後まで読んで、一緒にコマンドを実行した人であれば、最終ページにある宿題はそこまで難しくは
ならないように設定してある。
2 用意するもの
この文書を読み進めるにあたって、まず準備してほしいものを羅列してみた。
• PC
• ターミナル
• gnuplot
*1
100 万天体に対して同じ計算をすることにして、人間であれば一回の計算に 10 秒かかるとしよう。それだけで
106 × 10 = 107 秒かかる。1 日のうち人間は 1/3 くらいしか働けないし疲れてくるので、3 × 107 ∼ 107.5 秒くら
いはかかるだろう。1 日は 24 × 3600 = (30 − 6)(30 + 6) × 100 = 86400 秒しかないし、1 年は 107.5 秒くらいし
かない。
*2
Perl, Python ともにプログラミング言語の名前。両言語とも、天文学で良く使われるプログラミング言語。最近は
Python の方が人気な印象。
1
• すばる春の学校「Unix のど基礎」を読む*3
今回、名月の学校に参加する皆さんであれば、自分の PC は所有しているだろうという仮定して
も問題ないはず。なので、一つ目はすでにクリアである。また、これから行う作業は、2 つ目に挙
げているターミナル上で行うものがほとんどなので、ターミナルは準備が必須である。とは言うも
のの、Linux, Mac の場合は、すでにターミナルはインストールされているので、ターミナルを開
いておこう*4 。Windows の場合は、少し準備が必要。よく行われているのは、Cygwin をインス
トールして対処する方法。これによって、ターミナルと同等の作業を容易に行うことができるよう
になる。「Cygwin インストール」 などで検索してみれば、方法はいくつでも見つかるはず。その
場合は、後述する gnuplot も Cygwin と同時にインストールしておくと楽である。もしどうしても
インストールがうまくいかない場合は “unix emulator online” などと検索すると、ターミナルっ
ぽいものをウェブ上で使用することができるサイトがいくつか見つかるはず。
gnuplot は今回使用するプロッタ*5 である。matplotlib*6 が好きだったり、SuperMongo*7 が好
きな人は、もちろんそれらを使用しても構わない。が、特に今までこだわりが無かった人は、まず
は gnuplot から始めてみよう。満足がいかない点が出てきたあたりで、他のプロッタも使用してみ
て比較する。そうやって自分の好きなプロッタに今後出会っていけばよい。ちなみに、gnuplot の
インストールもそんなに難しくない。各自の OS に合わせてインストールを行うこと*8 。
最後の「Unix のど基礎」で解説されたことは、今後はすでに既知のものとする。特に Unix を初
めて使う人は、「Unix のど基礎」を読んでいなければ、「3 章からいきなり難易度が上がったな!」
と感じることだろう。必ず一度は目を通し、自分で手を動かしておくこと。ターミナルがあなたの
目の前で今開かれているなら、時間はそんなにかからないだろう。「Unix の基礎」で書かれている
ディレクトリの概念は特に大事だし、ファイルを開いたりするエディタとして emacs も紹介され
ている*9 。これらの言葉や使い方を知っているだけで、今後の解説の理解度がグッと変わってくる
はずだ。
3 ターミナルを開いて遊んでみる
3.1 ファイルのダウンロード
では、まずはターミナルを開いて少し遊んでみる。ターミナルを開いたら、おそらくは自分の
ホームディレクトリにいるはず。自分が今どのディレクトリにいるのかの確認は、pwd コマン
*3
*4
*5
*6
*7
*8
*9
http://www.naoj.org/Observing/DataReduction/mtk/spring12/references/unix_class.pdf
Unix のど基礎に何度か出てくる別冊は
http://www.naoj.org/Observing/DataReduction/mtk/spring12/references/linuxbasic10s.pdf に あ
る。
もしターミナルがどこにあるかわからない場合はウェブ等で検索してみよう
図を描画するソフト/ライブラリのこと。
天文業界で良く使われるプロッタその 1。Python パッケージの一つであり、Python ユーザであれば違和感なく習
得が可能である。
天文業界で良く使われるプロッタその 2。
これも、わからないければ自分で調べてみたり、近くにいる詳しそうな友人や先輩に質問してみよう。
世の中には数多くのエディタが存在するが、少なくとも一つは使えるようにしておこう。そこで不満が出始めたら別
のエディタと比較検討して乗り換えていこう。emacs, vi, gedit などは周りにもユーザーがいることだろう。大事な
のは、彼らが言うことを鵜呑みにするのではなく、自分にマッチしているかどうかを自分で判断するという姿勢であ
る。そうでないと、気がつかないうちに不毛なエディタ戦争に巻き込まれてしまっているかもしれない。
2
ド*10 で可能だ。僕の場合、
$ pwd
/home/ichikawa
/home/ichikawa にいる。このディレクトリ名は各自異なるはずだが、自分の好きなディレクトリ
下で作業をしてほしい。僕はこの/home/ichikawa ディレクトリで作業をすることにする。さて、
自分のいるディレクトリ*11 が確認できたところで、
$ wget http://www.kusastro.kyoto-u.ac.jp/~ichikawa/Autumn2015.tar.gz
と打ってみよう。データのダウンロードが始まるはず。ダウンロードが済んだのを、ls コマン
ド*12 で確認しよう。
$ ls
Autumn2015.tar.gz
ls コマンドは特定のファイルやディレクトリを探すのにも便利である。
$ ls Autumn2015.tar.gz
Autumn2015.tar.gz
とファイル名が返ってくれば、カレントディレクトリに “Autumn2015.tar.gz” があるという意味
になる。
ところで、さきほどのコマンドのファイル名、まさか全部手でタイプはしていないだろうか。
$ ls A
まで打った時点で、一度タブキーを押してみよう。すると、
$ ls Autumn2015.tar.gz
と勝手にファイル名を補完してくれる。Unix コマンドは、タブキーを押すと、ユニーク性が保た
れる部分までは勝手にファイル名などの補完を行ってくれる。人間がタイプする手間を省いてくれ
る優しさあふれる設計をしてくれているのだ。これは、ディレクトリの移動をする際や、長いファ
イル名などを打ちたいときなどに大活躍する。
さて、話を元に戻そう。ダウンロードしたファイルは “.tar.gz” という拡張子を持っていて、こ
のままではファイルの中身を見ることができない。解凍をするには tar コマンドを使う。
$ tar zxvf Autumn2015.tar.gz
とすれば、解凍がはじまる*13 。ls してみると、新しいディレクトリが表示されるはず。
$ ls
Autumn2015/
*10
Autumn2015.tar.gz
print working directory の略。
*11
自分が今いるディレクトリをカレントディレクトリという。
list の略。
*13 きちんと tar zxvf A までタイプところでタブキーを押しただろうか。もしそうでないなら、君は少なくとも数秒は
人生を無駄にしてしまった。
*12
3
もし wget を打ってもエラーが返ってくるようだったら、その場合は wget がインストールされ
ていないかもしれない。そのチェックには which コマンドを使ってみよう。
$ which wget
/usr/bin/wget
などとパス*14 が返ってくれば、wget はきちんとインストールされている。wget コマンドはきち
んと動くはずだ。もう一度 URL などが間違っていないかチェックしよう。一方で、which コマン
ドを打って
$ which wget
$
などと何も返事が返って来ない場合は、wget コマンドはインストールされていない*15 。wget コ
マンドを自分でインストールするか、直接 URL を打ち込んでダウンロードを行い、カレントディ
レクトリまでファイルを移動しよう。そのためには mv コマンドが便利だ。あなたが指定している
ダウンロードディレクトリが”YourDownloadDirectory” という名前だとすると、そのディレクト
リからカレントディレクトリ “.” まで mv したいので、
$ mv YourDownloadDirectory/Autumn2015.tar.gz .
$ tar zxvf Autumn2015.tar.gz
最期に “.” が書かれているのを見逃さないようにしよう。tar で解凍して現れるディレクトリ
“Autumn2015” 内に、今回のウォーミングアップで使用するデータをすべて入れておいた。もし
以下で説明するダウンロードがうまくいかなかった場合は、このファイルの中に入っているものを
適宜 cp して使用しよう。
3.2 今回扱うデータのダウンロード
さて、今回のウォーミングアップでは、実際の観測サーベイのカタログデータを利用してみる。
使用するカタログは、Swift/BAT 70 ヶ月カタログ (以後、BAT カタログと言う) で、これは硬 X
線*16 (E = 14 − 195 keV) で全天を 70 ヶ月間サーベイして受かった*17 天体をまとめている。
まずは、BAT カタログのウェブサイト*18 に行き、カタログを見てみよう。図 1 のようなカ
タログを紹介するウェブサイトにたどり着くはずだ。今回はテキストデータを扱うので、“BAT
70-month Survey Products” と書かれているところの “Catalog: ASCII (∼300 KB)” の部分を
クリックしてみよう。すると、よくわからないテキスト文字列の羅列が表示されるだろう。よく
見てみると、これは、区切り文字*19 が | (バー) で、左から順に天体の番号、天体名 (SWIFT
*14
/usr/bin/wget は wget がどこに存在するかを表しているファイルの住所のようなもの。このようなものをパスと
言う。詳細を知りたければ検索してみよう。
あるいは、wget コマンドが存在する場所にパスが通っていない。
*16 硬 X 線は “hard X-ray” の日本語訳。天文業界では、X 線のうち、高エネルギー側を “hard (硬)” X 線、低エネ
ルギー側を “soft (軟)” X 線と呼ぶ。soft/hard の境界となるエネルギーは必ずしも決まっていないが、感覚的には
E = 2 keV を境に soft から hard と言う人が増える。
*17 “detect” の和訳として、
「受かる」という言葉を天文学者はよく使う。たとえば、
「NGC 1068 で Hα 輝線が受かっ
た」などのように使う。天文学者以外ではあまり使わないかもしれない。
*15
*18
http://swift.gsfc.nasa.gov/results/bs70mon/
*19
セパレータと言ったりもする。
4
図1
Swift/BAT 70 ヶ月カタログに載っている天体の種類と位置。わからない単語は自分で
調べてみよう。http://swift.gsfc.nasa.gov/results/bs70mon/より取得。
JXXXX.X-XXXX で表示されているもの)、赤経 (RA)、赤緯 (DEC)、· · · と並んでいるのがわか
る。つまり、一列ごとに各天体ごとの情報がずらりと並んでいるカタログであることがわかってく
る。これが今回、我々がウォーミングアップに使用するカタログデータである。
では、次にこれを自分の PC にダウンロードしてみよう。ダウンロードするには、Mac であれ
ば “Cmd+s” であったり、コピペする方法でもよいのだけれども*20 、今回はターミナルでコマン
ドを使ってダウンロードを試してみる。すでに試した wget コマンドを使えば*21 、ターミナル上で
$wget http://swift.gsfc.nasa.gov/results/bs70mon/inc/data/BAT_70m_catalog_20nov2012.txt
とすると、今自分がいるディレクトリに “BAT 70m catalog 20nov2012.txt” というファイルが存
在しているはず。ファイル確認の方法は ls コマンドだった。
$ls
Autumn2015/
Autumn2015.tar.gz
BAT_70m_catalog_20nov2012.dat
どうせなので、BAT カタログデータを新しいディレクトリを作って、その下におくことにしよう。
新しいディレクトリの作成は mkdir コマンド*22 を使う。
$ mkdir BAT70mon
$ ls
Autumn2015/
Autumn2015.tar.gz
BAT70mon/
*20
BAT_70m_catalog_20nov2012.dat
あまりおすすめしないけれども。
もし wget がうまくいかなかった場合は、Autumn2015/ の下に同様のファイルを置いてあるので、自分で cp して
くること。
*22 Make directory の略だったような。
*21
5
ファイルを移動しよう。ファイルの移動は mv コマンド*23 が使える。ファイル名が長いので、タ
ブキーを使って、補完機能を使っていこう。
$ mv BAT_70m_catalog_20nov2012.dat BAT70mon/
$ ls
Autumn2015/
Autumn2015.tar.gz
BAT70mon/
ls してみると、BAT カタログデータが表示されていない。これで、BAT カタログデータは、
“BAT70mon” ディレクトリの下に移動したことが確認できた。さて、我々も BAT70mon ディレ
クトリの下に行きたい。ディレクトリの移動は “cd” コマンド*24 で可能だ。
$ cd BAT70mon/
$ pwd
/home/ichikawa/BAT70mon
$ ls
BAT_70m_catalog_20nov2012.dat
BAT70mon の下にきちんと BAT カタログデータが入っていることがわかる。
3.3 カタログを少し見てみる
さて、BAT カタログの中身を見てみよう。データの中身を見る場合は “less” コマンドが使える。
$
less BAT_70m_catalog_20nov2012.dat
|
BAT_NAME|
|
|
RA|
deg|
DEC|
deg|
SNR|
COUNTERPART_NAME|
|
|
1|SWIFT J0001.0-0708 |
0.261| -7.123|
6.10|2MASX J00004876-0709117
|
2|SWIFT J0001.6-7701 |
0.326|-77.001|
5.41|Fairall 1203
|
3|SWIFT J0002.5+0323 |
0.664|
5.10|NGC 7811
|
4|SWIFT J0003.3+2737 |
0.862| 27.676|
3.332|
5.03|2MASX J00032742+2739173
...
...
どうやら、一行目には各列にどのようなデータが入っているかの説明が書かれているようだ。二行
目は、deg などと書かれているのをみると、どうやら各列の単位が書かれている。あと、6 列目に
は天体名が入っている。でもこいつら、列が多すぎていかんせん見づらい。たとえば、6 列目だけ
を抜き出したいときにはどうしたらいいんだろうか。その場合には awk というプログラミング言
語が非常に便利だ。
$ which awk
/usr/bin/awk
などときちんとパスが返ってくれば、君の PC でも awk は使える。さっそく、awk を使って 6 列
目だけを抜き出そう。
*23
*24
move の略
change directory の略。
6
$ awk -F"|" ’{print $6}’ BAT_70m_catalog_20nov2012.txt
...
2MASX J23470479+5142179
PKS 2349-01
IGR J23524+5842
2MASX J23525143-1704370
H 2356-309
PKS 2356-61
$
このコマンドには少し解説が必要だろう。今、右端にファイル名が書かれている。このファイルの
中にあるデータの 6 列目を抜き出したい。それが awk ’{print $6}’ の部分だ。ただ、これだけでは
今回はうまくいかない。awk は基本の区切り文字は空白 “ ” を採用しているので、区切り文字は |
であることを伝える必要がある。それがオプション部分の-F”|”だ。まとめると、上のコマンドは
「BAT 70m catalog 20nov2012.txt というファイルの 6 列目を、区切り文字 | で (一行ずつ) 表示
せよ。
」となる。
次に、今回のカタログの座標を切り出してみよう。このカタログには座標は 3 列目 (R.A.*25 )、4
列目 (Dec*26 ) と 8 列目 (ctpt RA)、9 列目 (ctpt DEC) に入っている。元論文*27 を読む限り、8
列目、9 列目の座標を使った方が良さそうだ。なので、今後はカタログから 8 列目と 9 列目を抜き
出そう。またもや awk を使って、
$ awk -F"|" ’{print $8,$9}’ BAT_70m_catalog_20nov2012.txt
...
358.1120
58.7000
358.2143 -17.0770
359.7830 -30.6280
359.7682 -60.9165
とすればよい。さきほどの$6 の部分が、$8, $9 となっているのがわかる。これで、「8 列目と 9 列
目を表示する」という意味になるのだ。非常に直感的でわかりやすい。
さて、どうせなので、後でいくらでも確認できるように、この座標を新たなファイルに保存して
しまおう。これは簡単で、> という記号を使う。ファイル名は “ra vs dec.txt” としよう。
$ awk -F"|" ’{print $8,$9}’ BAT_70m_catalog_20nov2012.txt > ra_vs_dec.txt
$ ls
BAT_70m_catalog_20nov2012.dat
ra_vs_dec.txt
$ less ra_vs_dec.txt
CTPT_RA CTPT_DEC
*25
R.A. は Right Ascension の 略 。日 本 語 で は 赤 経 と い う 。後 に 出 て く る 赤 緯 と 共 に 用 い る こ と で 、天 球
上 の 二 次 元 面 の 座 標 を 表 現 す る こ と が で き る 。天 文 学 で よ く 用 い ら れ る 座 標 系 の 一 つ で あ る 。詳 細 は
http://www.kusastro.kyoto-u.ac.jp/~iwamuro/LECTURE/OBS/coord.html などを参考にしてみよう。
*26 Declination の略。赤緯という。
*27
http://adsabs.harvard.edu/abs/2013ApJS..207...19B
7
deg
deg
0.2032
-7.1532
0.4419 -76.9540
0.6103
3.3519
0.8643
27.6548
1.0082
70.3217
1.5813
20.2029
...
と新たに “ra vs dec.txt” というファイルが作られているのがわかる。このように > を用いて (標
準) 出力先をファイルに書き換えることを「リダイレクト」と言う。この機能は非常によく使うの
で、必ず覚えておこう。
さて、さきほどのファイル (ra vs dec.txt) を見てみると最初の三行ほどは座標以外のものが
入ってしまっている。これらを除きたいときは、たとえば以下のようにすればよい。
$ awk ’NR>3{print}’ ra_vs_dec.txt > ra_vs_dec_nohead.txt
NR というのは行数を表す。awk は一行ごとに処理をするため、一行目の処理のときには NR
は 1、二行目の処理のときには NR は 2,m 行目の処理のときには NR は整数 m が入ってい
る。’NR>3{print}’ の部分は、「NR が 3 より大きいときにのみ、print を行う。」という意味にな
る。awk の場合、print の後に何もかかなければ、すべての列を表示する、という意味になる。ま
とめると、このコマンドは「ra vs dec.txt の 4 列目以降をすべて表示せよ」という意味であること
がわかる*28 。
さて、本当に余分な部分は切り取られただろうか。その確認方法は、less コマンドで可能であっ
た。実は、別の方法もある。要は最初の数行が切り取られているかを確認すればいいわけだから、
head コマンドも使うことができる。head コマンドは、ファイルの先頭から 10 行を表示するコマ
ンドだ。
$ head ra_vs_dec_nohead.txt
0.2032
-7.1532
0.4419 -76.9540
0.6103
3.3519
0.8643
27.6548
1.0082
70.3217
1.5813
20.2029
2.2982
-0.6152
2.6292
10.9749
4.2853
81.5856
5.2814 -19.1682
見事、最初の 3 行分は切り取られているのがわかる。ファイルの上から n 行を取り出したい時
は、オプション −n をつければよく、
*28
実はこのコマンドは、{print} 部分を省いても、同様の操作が行える。
8
$ head -n ra_vs_dec_nohead.txt
などとすればよい。
3.4 プロットしてみる
さて、座標を手に入れたのだから、それをプロットしてみたくなるものだろう。ここでとうとう
gnuplot の登場だ。gnuplot と打ってみよう。
$ gnuplot
G N U P L O T
Version 4.6 patchlevel 1
last modified 2012-09-26
Build System: Darwin x86_64
Copyright (C) 1986-1993, 1998, 2004, 2007-2012
Thomas Williams, Colin Kelley and many others
gnuplot home:
http://www.gnuplot.info
faq, bugs, etc:
type "help FAQ"
immediate help:
type "help"
(plot window: hit ’h’)
Terminal type set to ’x11’
gnuplot>
みたいなものが出てくれば、gnuplot にログイン完了だ。
さて、まずは簡単なものを試してみよう。
gnuplot> plot sin(x)
と打てば、図 2 が表示されるだろう。
1
sin(x)
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-10
-5
図2
0
5
gnuplot で作成した y = sin(x) の図。
9
10
このように、gnuplot は最初に用意されている関数をもとにプロットをすることができる。
gnuplot は我々が用意したファイルをプロットすることもできる。次は以下のように打ってみ
よう。
gnuplot> plot "ra_vs_dec_nohead.txt" u 1:2
すると、図 3 のような図が現れる。このコマンドは、 ”ra vs dec nohead.txt”の 1 列目を横軸、
2 列目を縦軸にして、データをプロットせよ、という意味をもつ。実は u 1:2 の “u” は “using” の
略で、ユニーク性が保たれていれば、gnuplot はコマンドの省略が可能である。gnuplot では様々
な条件を “set ∼” と書くが、“se ∼” でも同様の挙動をしてくれる。gnuplot は文字を打つ手間を
省いてくれる優しさも持ち合わせているのだ。
100
"ra_vs_dec_nohead.txt"
80
60
40
20
0
-20
-40
-60
-80
-100
0
図3
50
100
150
200
250
300
350
400
天球上の BAT カタログ天体の分布。横軸は R.A.、縦軸は Dec
あらためて図 3 をみてみよう。基本的にはまんべんなく天体は分布しているのがわかるが、座標
(180, −60) くらいから (300, 40) くらいまでにかけて、一筋の天体の塊が見えている。これはなん
だろうか。答えは後でわかるはず。
図の見栄えをもう少しマシにしよう。まず、右上の “ra vs dec.txt” の部分は図が見えづらくな
るので省きたい。横軸、縦軸の範囲も座標が分布する 0 ≤ x ≤ 360 と −90 ≤ y ≤ 90 にしてみた
い。その場合は、続いて以下を打ってみよう。
gnuplot> se xrange[0:360]
gnuplot> se yrange[-90:90]
gnuplot> plot "ra_vs_dec_nohead.txt" u 1:2 notitle
図 4 のようになるはずだ。この他にも、色を変更したり、プロット点の種類を変更したり、大き
さを変更したりも可能である。また、軸の文字が見づらい場合も好きなように変更できる。興味が
ある人は自分で調べてみよう。
さて、最後に図を保存してみよう。自分の見やすい形式 (.png とか) にしてくれてもよい。こ
の文書の執筆時では、天文学の業界では保存形式は.eps あるいは.pdf が主流である。なので今回
は.eps 形式の保存方法を紹介しよう。他の形式も保存方法はほとんど変わらないので、ぜひ試して
もらいたい。
gnuplot> se term eps
10
80
60
40
20
0
-20
-40
-60
-80
0
図4
50
100
150
200
250
300
350
天球上の BAT カタログ天体の分布改訂版。横軸は R.A.、縦軸は Dec
Terminal type set to ’epscairo’
Options are ’ transparent fontscale 0.5 size 5.00in, 3.00in ’
gnuplot> se output "radec.eps"
gnuplot> replot
gnuplot> exit
最初に保存したい eps 形式を指定 (se term eps) して、その次に保存するファイル名を指定 (se
output ”radec.eps”) している。その後、もう一度プロットしてやる (replot)。最後に、gnuplot
をログアウト (exit)。これで、図 4 と同じものが”radec.eps”として保存されているはずだ。
$ ls
BAT_70m_catalog_20nov2012.dat
ra_vs_dec.txt
ra_vs_dec_nohead.txt
radec.eps
ちなみに、eps ファイルは Mac ユーザーや一部の Linux ディストリビューションであれば、
open コマンドで見ることが可能である。
$ open radec.eps
open コマンドに相当するコマンドはディストリビューションごとにいくつかあるようなので、
Linux ユーザーは各自チェックされたし。
3.5 どれくらい遠い天体がいるのだろう
BAT カタログには天体の距離情報として、18 列目に赤方偏移 z *29 の情報が入っている。また、
19 列目には X 線光度*30 を log スケールで表した量が入っている。この 2 つの量を取得してプロッ
トをすれば、このカタログには、どの距離にどれくらいの明るさのものが存在するかが見て取れる
*29
赤方偏移, 英語で redshift は慣例的に z を用いる。定義は、本来の静止波長 λini に対して、観測波長が λobs
のとき、λobs = (1 + z)λini で定義される。つまり、波長の伸び具合を z で表している。z の値が大きいほ
ど我々から遠い場所にあることを示していて、z = 0.1 でだいたい 10 億光年ほど離れている。世の中には
z を入れるとどれくらい離れているかを計算してくれるウェブサイトはたくさんあり、たとえば cosmo calc
http://www.astro.ucla.edu/~wright/CosmoCalc.html などはよく見かけるウェブサイトである。
*30 光度: 天文学で良く用いる量で、単位は erg/s。つまり、単位時間あたりに天体から放射されるエネルギーを表す。
11
だろう。もう皆さん慣れてきたと思うけれども、こういう時は awk が便利だ。
$ awk -F"|" ’{print $18,$19}’ BAT_70m_catalog_20nov2012.dat
...
0.1640 44.95
-1.0000
NULL
0.1651 45.16
0.0963 44.52
となる。どうやら、いくつかの天体には z の情報に −1.0000 が入っているようだ。その時には 2
列目は”NULL”が入っている。このような天体は、信頼できる z 情報が得られないほど近傍の天体
の場合が多い。今回は、そういう天体は何天体いるのかを一応調べておこう。そのような条件の天
体数をカウントするだけのシンプルな作業だ。もちろん手で数えてはいけない。人間は必ずミスを
する。なので、Unix コマンドに頼ろう。そういう時は、wc コマンドが活躍してくれる。
$ wc -l BAT_70m_catalog_20nov2012.dat
1213
BAT_70m_catalog_20nov2012.dat
のように、ファイルの行数を数えてくれる。これを使うと、
$ awk -F"|" ’$19~/NULL/{print $18,$19}’ BAT_70m_catalog_20nov2012.dat | wc -l
432
と書ける。少々難しいかもしれないが、これは、| の左半分で「19 列目に NULL という単語が入っ
ている行のみ、18、19 列目を表示する」ということを行い、その表示をそのまま | の右側に引き
継ぎ*31 、wc -l コマンドで表示された行数を数えている。そして、返された数が 432 である。つま
り、1213 天体*32 中、432 天体には信頼できる z 情報が入っていない。
さて、当初の目的は「このカタログにはどの程度の z にどの程度の光度の天体が存在しているの
か?」であった。上記の 432 天体は超近傍にいることはわかっているので、今回はこれを省いて
ファイルに出力して、プロットをしてやろう。
$ awk -F"|" ’NR>3 && $19!~/NULL/{print $18,$19}’ BAT_70m_catalog_20nov2012.dat > z_vs_lx.txt
awk の条件にいろいろ書かれているが、これは「4 列目以降 (NR> 3) かつ、19 列目に NULL と
いう単語が入っていない行 ($19!∼/NULL/) のみ、18、19 列目を表示する。」というものである。
これで、一列目に z 、二列目に X 線光度 log LX が入っている “z vs lx.txt” を作ることができた。
さて、どうせなので、最遠方天体の z を調べてみよう。こういうときは、sort コマンドが便利だ。
$ sort
z_vs_lx.txt
...
3.1040 48.36
3.2000 47.98
3.2680 48.42
3.3660 48.01
*31
*32
このように出力を次のコマンドに引き継ぐ役割を持つ | を、「パイプ」という。
正確には、最初の 3 行には天体情報が入っていないので、1210 天体
12
3.6680 48.14
と、1 列目に入っている z を小さい方から順に並べてくれている。どうやら最大は z = 3.668 のよ
うだ。同じように、X 線光度の最小値、最大値も調べてみよう。X 線光度は 2 列目のデータなの
で、sort コマンドに 2 列目で sort するよう-k オプションを加えてやれば良い。
$ sort -k2 z_vs_lx.txt
...
3.2680 48.42
2.4000 48.45
2.3450 48.55
2.9793 48.57
2.5000 48.63
X 線光度の最大値は log LX /erg s−1 = 48.63 のようだ。太陽光度はおよそ 4 × 1033 erg s−1 なの
で、この天体は太陽よりおよそ 1015 倍は明るいことになる。
次に、X 線光度の最小値を探そう。sort と head を合わせて
$ sort -k2 z_vs_lx.txt | head -5
0.0007 39.81
0.0011 40.79
0.0029 41.02
0.0015 41.03
0.0033 41.47
としてもよいし、sort のオプション-r (逆順表示) を用いて、
$ sort -k2 -r z_vs_lx.txt
...
0.0033 41.47
0.0015 41.03
0.0029 41.02
0.0011 40.79
0.0007 39.81
としてもよい。どうやら X 線光度の最小値は log LX /erg s−1 = 39.81 だ。それでも太陽光度のだ
いたい 106 倍である。
さて、最後に “z vs lx.txt” に入っているデータを gnuplot でプロットしてみよう。
$ gnuplot
gnuplot> plot "z_vs_lx.txt" u 1:2
図 5 を見てみると、ほとんどの天体は z < 0.5 に分布していて、まばらに z = 4.0 近くまで天体
が分布しているのがわかる。桁を超える幅広いパラメータ範囲を表示するには log 表示が便利なの
で、x 軸を log 表示してみよう。gnuplot にはそのような機能も備わっている。
13
49
"z_vs_lx.txt"
48
47
46
45
44
43
42
41
40
39
0
0.5
1
1.5
2
2.5
3
3.5
4
図 5 BAT カタログ天体の z (x 軸) と X 線光度 (y 軸) の関係
gnuplot> se logscale x
gnuplot> plot "z_vs_lx.txt" u 1:2
としてやると、図 6 のようなプロットが見られるはずだ。
49
"z_vs_lx.txt"
48
47
46
45
44
43
42
41
40
39
0.0001
0.001
0.01
0.1
1
10
図 6 BAT カタログ天体の z (x 軸) と X 線光度 (y 軸) の関係
図 6 を見てあげると、z = 0.01 − 0.3 にかけて多くの天体が分布しているのがわかる。また、皆
さんも気づいたかもしれないが、図の右下には天体がまったく存在していない。これは遠方宇宙
(z ∼ 1) には、近傍宇宙 (たとえば z ∼ 0.01) で見られるような光度 (log LX = 42 − 44) の天体は
まったくいないという意味なのだろうか。必ずしもそれは真とは限らない。BAT サーベイも含め
て、その装置ごとに限界等級や限界 flux が決まっているため、より遠方のものほど、もともと明る
いものしか受かって来ないのだ。なので、右下の領域 (z 大かつ log LX 小) に存在するような天体
は BAT サーベイではそもそも受からず、議論をすることはできない。一方、左上の領域 (z 小か
つ log LX 大) も天体はほとんどいないが、これは純粋にそのような天体はレアであることがわか
る。ここに書いてある説明はやや難しいかもしれないが、興味がある人は、横軸を z, 縦軸を X 線
flux としてプロットをしてみるとよい。flux と光度 (luminosity) の違いや、限界 flux の理解の助
けになるはずだ。
14
3.6 筋模様の天体を暴く
さて、図 3 や図 4 などに見られた筋模様はどのような天体が分布して作っているのだろう。あり
がたいことに、BAT カタログは天体を種族ごとにわけて id しており、その情報はカタログの 21 列
目に入っている。種族ごとに R.A., Dec 情報を取得して、同様に plot してみよう。たとえば、い
わゆる活動銀河核 (Active Galactic Nuclei; AGN) と呼ばれる種族は、カタログでは id =4–8 に
分類されている。これを取得してみよう。
$ awk -F"|" ’$21>=4 && $21<=8 {print $8,$9}’ BAT_70m_catalog_20nov2012.dat > ra_vs_dec_AGN.txt
として、gnuplot で plot してみる (自分でやってみよう)。すると、図 7 のようになるはずだ。
100
"ra_vs_dec_AGN.txt"
80
60
40
20
0
-20
-40
-60
-80
-100
0
50
100
150
200
250
300
350
400
図 7 BAT カタログ内の AGN の分布。横軸は R.A.、縦軸は Dec。
図 7 を見てやる限り、AGN は一様に分布しているように見えるが、どうやら筋模様に該当する
部分にはあまり存在していない。AGN は筋模様の起源ではなさそうだ。AGN は銀河系の外に存
在する天体なので、筋模様は銀河系内の天体が作り出しているのかもしれない。同様にして、いく
つかの種族の座標を取り出してファイルに保存し、gnuplot で表示してみるとよい。よい awk の訓
練になるはずだ。
銀河系内の天体としては X 線連星 (X-ray binary) やパルサー、激変星 (cataclysmic variable;
CV) などが考えられる。これら系内天体候補をすべて含むためには、id = 1 と 9 ≤ id ≤ 15 の種
族の座標を取り出せば良い。取り出す方法は今の読者ならうまくできるはずだ。わからない場合は
自分で調べてみよう。調べる力も大事だ*33 。座標を表示してみると、図 8 のようになる。
図 8 を見てやれば、見事、系内天体が筋模様を作っていたことがわかる。実は筋模様に独立し
て、図の左下あたりに 2 つほど点の分布 ((80, −70) と (20, −75) あたり) があることがわかるが、
この分布はどこ由来なのかを調べてみるのも勉強になるだろう。
3.7 まとめ
以上、一つのカタログを元に、天体の様々な分布を見てやることができた。Unix コマンドや
awk の大事さが伝わっただろうか。ここからはさらに Unix や awk の知識をどんどんつけていく
*33
awk の条件式で or (または) に対応するものがわかれば、後は簡単なはず。
15
80
60
40
20
0
-20
-40
-60
-80
-100
0
50
100
150
200
250
300
350
400
図 8 BAT カタログ内の系内天体の分布。横軸は R.A.、縦軸は Dec。
のもよいし、少し背伸びをしたければ、Python というプログラミング言語を使えば、皆さんがや
りたいことの幅をさらに広げてくれるだろう。
実際の研究では今回よりもさらに条件を絞ったり、より定量的な議論を行ったり、他のカタログ
とマッチングを取ったりしていろいろなことを行うわけだが、そのあたりは実際に模擬研究で体験
できるはずだ。
16
4 宿題
1. 今回紹介した Unix のコマンド、および Unix の大事な概念であるリダイレクト、パイプを
自分で復習せよ。
2. BAT カタログデータ “BAT 70m catalog 20nov2012.dat” には最初三行だけ天体情報が
入っていない。Unix コマンド wc を用いてファイルの行数を数え、tail コマンドを用い
て*34 、最初の三行を削った新たなファイル “BAT 70m catalog nohead.dat” を作成せよ。
作成後に、wc コマンドを用いて、ファイルの行数が三行少なくなっていることを確認せよ。
3. 世の中にはコメントアウトという概念があり、コメントアウトしたところは飛ばしてデータ
を読み込むオプションが様々なプログラミング言語で用意されている。カタログデータの最
初 3 行のみ、行の先頭に#を追加し、ファイル名 “BAT 70m catalog cmthead.dat” として
保存せよ。
4. BAT カタログデータから z > 1 を満たす天体のみを抜き出し、“BAT 70m catalog zgt1.dat”
として保存せよ。また、天体数も数えて答えよ。
5. “BAT 70m catalog zgt1.dat” にはどのような種族が入っているだろうか。2 種類に絞られ
るはずだが、その種族の名前 (BAT カタログウェブサイトでいうところの source type) を
答えよ。また、それぞれの種族の天体数を数えよ。
6. “BAT 70m catalog zgt1.dat” に入っている 2 種族を分類し*35 、それぞれ “BAT 70m catalog zgt1 ty7.dat”
、“BAT 70m catalog zgt1 ty8.dat” として保存せよ。
7. “BAT 70m catalog zgt1 ty7.dat” および “BAT 70m catalog zgt1 ty8.dat” に入っている
天体の種族の座標分布 (横軸を R. A., 縦軸を Dec) をそれぞれの種族の分布がわかるように
一つの図に表示し、保存せよ。余裕があれば、各自 gnuplot のオプションを調べ、横軸や縦
軸のタイトルを加えたりフォントサイズを大きくしたりなどして、図を見やすくする工夫を
してみよ。
*34
*35
tail: ファイルの末尾を表示するコマンド。
ヒント: たとえば、awk で条件を付けて表示してやればよい。
17
• 参考文献・ウェブサイト
世の中には Unix や awk の解説書はたくさんあるが、まずは google で検索して、解答にたどり着
く力を得られるようにしよう。あなたが Mac ユーザーで、Unix に初めて触れて、ターミナルでさ
らにどんなことができるのかを知りたいのであれば、入門 Unix for Mac OS X*36 という本が
ある。
また、awk をもっと詳しく学びたいという人もいるかもしれない。その場合にはプログラミング
言語 AWK*37 という素晴らしい本がある。この本の後半はこのご時世、もはや awk でやる必要
があるのか、という気もするが、前半は便利なワンライナー*38 がたくさん載っている。
また、本書で紹介した BAT カタログ内の天体を細かく調べてみたい人がいるかもしれな
い。世の中には天体の検索方法はたくさんある。まずは、NASA Extragalactic Database
(NED)*39 で調べてみるとよいだろう。天体の座標や z だけでなく、天体がどのような種族 (銀河
なのか Blazar なのか等) なのか、過去にどの波長でその天体が観測されていて、その値はいくら
で · · · という情報まで載っている。また、SIMBAD Astronomical Database*40 も同様に有
用だ。Simbad では天体検索をすると、検索結果の右側の画面*41 で、各波長の画像が非常に簡単に
見ることができる。しかし肝に命じてもらいたいのは、「NED や Simbad に情報がない」からと
言って、それを根拠に結論を出すのは危険である。NED や Simbad はあくまで過去の論文やサー
ベイの結果を集約して表示しているのであって、過去の観測のすべてを網羅しているのではないこ
とをきちんと理解しておこう。(ここから書くことは読み飛ばしてもらってかまわないが) 論文
で AGN の可否を NED などに頼っている場合が見られるが、「AGN という情報がない」からと
言って「この天体は AGN ではない」という結論に必ずしもなるわけではない。気をつけよう。
• 著者紹介
市川 幸平 (Ichikawa, Kohei) https://motigomeman.wordpress.com/
国立天文台ハワイ観測所プロジェクト研究員。京都大学大学院 宇宙物理学教室で博士号 (理学) を
取得。超巨大ブラックホールの成長現場として活動銀河核に興味を持ち、活動銀河核 (AGN) がど
のようにして誕生してはブラックホールに物を落とし、最期を迎えるのかを研究している。
*36
*37
http://www.oreilly.co.jp/books/9784873116440/
https://www.usp-lab.com/book.awk.html
*38
意味がわからなければ調べるのである。
*39
http://ned.ipac.caltech.edu/
http://simbad.u-strasbg.fr/simbad/
AladinLite という
*40
*41
18
5 解答
1. 略
2. $ wc BAT_70m_catalog_20nov2012.dat
1213
20988
301789 BAT_70m_catalog_20nov2012.dat
$ tail -1210 BAT_70m_catalog_20nov2012.dat > BAT_70m_catalog_nohead.txt
$ wc BAT_70m_catalog_nohead.txt
1210
20956
301290 BAT_70m_catalog_nohead.txt
3. $ awk ’NR<=3{print "#"$0}NR>3’ BAT_70m_catalog_20nov2012.dat > BAT_70m_catalog_cmthead.txt
4. $ awk -F"|" ’$18>1.0’ BAT_70m_catalog_nohead.txt > BAT_70m_catalog_zgt1.txt
$ wc -l BAT_70m_catalog_zgt1.txt
30 BAT_70m_catalog_zgt1.txt
より、は 30 天体存在する。
5. $ awk -F"|" ’{print $21}’ BAT_70m_catalog_zgt1.txt | sort | uniq
7
8
より、source type は 7: Blazar/BL Lac と 8: QSO である。また、それぞれの天体数は
$ awk -F"|" ’$21==7{print $21}’ BAT_70m_catalog_zgt1.txt | wc -l
11
$ awk -F"|" ’$21==8{print $21}’ BAT_70m_catalog_zgt1.txt | wc -l
19
より、種族 7 は 11 天体、種族 8 は 19 天体である。
6. $ awk -F"|" ’$21==7 {print}’ BAT_70m_catalog_zgt1.txt > BAT_70m_catalog_zgt1_ty7.txt
$ awk -F"|" ’$21==8 {print}’ BAT_70m_catalog_zgt1.txt > BAT_70m_catalog_zgt1_ty8.txt
7. $ gnuplot
gnuplot> se datafile sepa "|"
gnuplot> plot "BAT_70m_catalog_zgt1_ty7.txt" u 8:9, "BAT_70m_catalog_zgt1_ty8.txt" u 8:9
gnuplot> se term eps
Terminal type set to ’epscairo’
Options are ’ transparent fontscale 0.5 size 5.00in, 3.00in ’
gnuplot> se output "radec_zgt1.eps"
gnuplot> replot
gnuplot> exit
できあがる図はこんな感じ。
19
100
"BAT_70m_catalog_zgt1_ty7.txt" u 8:9
"BAT_70m_catalog_zgt1_ty8.txt" u 8:9
80
60
40
20
0
-20
-40
-60
0
50
100
150
200
250
300
350
400
図 9 BAT カタログ内の系内天体の分布。横軸は R.A.、縦軸は Dec。
20