すばる秋の学校
2017
宿題とその準備
1
はじめに
本書では、「すばる秋の学校 2017 -September I’ll remember-に参加するにあたり、予め習得 しておくことが望ましい知識やテクニックを得ることを目的とする。天文学の研究ではコンピュー タを用い、取得した観測データから様々な天体の情報を取り出したり、大量の計算を行ったりする 機会が多い。これらの解析をキーボードに一つ一つ打ちつつ進めている途中で、ふと初期の解析・ 計算をやり直す必要が出てくると、今まで行ってきた作業をもう一度行う必要が出てくる。こう いったことが1,2回であればまだ耐えられるが、実際の解析や計算は試行錯誤を何度も繰り返す場 合がほとんどである。作業量が増えるとどうしてもミスも増えてしまうため、場合によっては改善 作業をしているつもりでも知らない間に改悪してしまっているということも起こりうる。 正確かつ効率的な解析・計算をコンピュータで行う上で、基礎となるもののひとつがLinuxの ターミナルで使用するコマンド群である。これらのコマンドを使用することで、大量のデータに対 し同じ処理を一度に行ったりすることができる。これらのコマンドをひとまとめにしたものをスク リプトと呼ばれる一つのファイルにまとめておけば、解析の見直しも容易に行える上、万が一やり 直しが必要となった場合もスクリプトを修正して再度実行するだけで良くなる。 本書のゴールは6章の宿題を完成させつつ、Linuxのコマンドや図作成ソフトに慣れ親しむこと である。宿題のテーマはあくまで例で、選択した実習コースとは関連しない場合もあるが、天文学 においてごく一般的なトピックを扱った。普段よりLinuxを使用した天文のデータ処理を行った ことがある人は、2、3章あたりは飛ばしてもよいが、「Linuxって?」という読者は、本書を順に 読み進め、紹介したコマンドなどをすべて実際に使ってみてほしい。
2
準備
本書を読み進めて宿題に取り組むために、まずパソコンを準備してほしい。一声にパソコンと言っても、オペレーティングシステム(OS)はWindowsやMacOSなどさまざまなものがある。
所有しているパソコンのOSがMacOSやLinuxであれば、コマンドを打ち込む先であるターミナ
ルはすぐ使えるので、何もせず3章に移ってよい。一方、Windowsを使用している場合は準備が
必要だ。これは、Windowsに標準装備されているターミナル(コマンドプロンプト)は、天文でよ
く使われるものとは仕様が違うためである。そのため、以下のいずれかの手段を取る必要がある。 1. Bash on Ubuntu on Windowsを導入する(難易度:★★ ただしWindows 10のみ) 2. cygwinをインストールする (難易度:★★)
3. VM Wareなどの仮想デスクトップにLinux OSをインストールする(難易度:★★★) 4. Linux OSをデュアルブートさせられるようにする(難易度:★★★★★)
う。しかし、開発者モードに切り替えることによるセキュリティリスクがあることも念頭に入れて おかねばならない。2の方法はWindows 10に限らず選択できる。いずれの方法もウェブ検索すれ ば具体的な方法がわかるので、自分自身に適した方法を選び、準備を行ってほしい*1。
3
Linux
ど基礎
3.1
ターミナルの操作
必要な道具のインストールが済んだら、ターミナルの使い方に話を進めよう。まずターミナ ルを立ち上げる。Windowsの場合はスタートメニュー等から先ほどインストールしたBash onUbuntu on Windowsやcygwinを起動してみよう。MacOSの場合は「アプリケーション」フォ ルダ下の「ユーティリティ」フォルダに「ターミナル」というアプリケーションが格納されている のでこれを起動する。Linux系OSの場合、例えばUbuntu 16.04.2ならデスクトップ画面を右ク リックして「端末を開く」を選べばターミナルが起動するが、起動方法はOSの種類ごとに異なる 上、バージョンによっても異なったりすることもある。Linux系OSを使っている人ならターミナ ル起動方法は知っていると思うが、わからない場合はウェブで検索してみよう。 ターミナルを立ち上げると図1上のようなウィンドウが現れることだろう。ターミナルに様々
なコマンドを入力することでGUIのファイルブラウザ(WindowsのExplorerやMacのFinder
等、図1下、GUIは“Graphical User Interface”の略)と同様にディレクトリ(フォルダ)を開 いてファイルを閲覧したりアプリケーションを立ち上げることができる。とはいえターミナルと GUIファイルブラウザでできることには違いもあり、天文研究に使うような専門的なソフトウェ アの多くはGUIに対応しておらずターミナルからしか使用することができない。本書でまずター ミナルの使い方を解説するのもこのためである。 ターミナルの操作に慣れるため、いくつかのコマンドを実行してみよう。ターミナルがコマンド を受け付けられる状態ならターミナルの一番下の行にプロンプトが表示される(図1上参照)。プ ロンプトは通常、ユーザー名・端末名・カレントディレクトリ(ターミナルが現在開いているディ レクトリ)等の羅列で、末尾に“$”がつく。すでに何かのコマンドを実行中でその終了を待ってい るような状態の場合、ターミナルの一番下の行にプロンプトが現れない。 今、立ち上げた直後のターミナルにはプロンプトが現れているはずである。ターミナルのウィン ドウが選択された状態でキーボードからコマンドを入力しエンター(リターン)キーを押せばコマ ンドを実行できる。以下のコマンドを実行してみよう(実行例は図1上の通り)。 • pwd:カレントディレクトリのパス(下記)を表示 • ls:現在開いているディレクトリ(カレントディレクトリ)の中身を表示 ディレクトリのパスを指定すればカレントディレクトリ以外の中身も見られる • cd 「ディレクトリのパス」:他のディレクトリに移動(カレントディレクトリの変更) パスとはファイルシステム上でファイルやディレクトリの所在地を示す住所のようなもので、カレ ントディレクトリの中にあるファイルやディレクトリについてはその名称だけで足りる。各コマン ドでディレクトリのパスを指定する場合、コマンドとパスの間には半角スペースを入れよう。 *1もしどうしても導入がうまく行かない場合は、著者(yuhei.takagi@nao.ac.jp)に連絡されたい。筆者の個人的主観 としてもっともおすすめする方法は3である。
図1 GUIのファイルブラウザとターミナルの例。筆者のMacのスクリーンショットだが、 WindowsやLinuxでも大差ないはず。
3.2
ファイル・ディレクトリとパス
各コンピュータの記憶領域は図2のようなディレクトリ構造で管理される。図1のようにター ミナル上でもGUIファイルブラウザ上でも参照するディレクトリ構造は基本的に同じである。先 に見たように、ターミナル上で特定のファイルやディレクトリを指定する場合にはパスを使う。カ レントディレクトリの中のファイルやディレクトリはその名前だけで指定できる、カレントディレ クトリ以外にあるファイルやディレクトリを指定したい場合はディレクトリ名を「/」でつないで 次のように指定する。ルートディレクトリ
home bin media
subaru01 subaru02 subaru03
Desktop
各ユーザのホームディレクトリ
hogehoge.txt
図2 ディレクトリ構造の例。長方形はディレクトリ、楕円はファイルを表す。
• cd ./Documents/images:カレントディレクトリにある「Documents」の中の「images」に 移動 頭の「./」はカレントディレクトリを示すが省略可能 カレントディレクトリ内のファイルやディレクトリが名前だけで指定できるのはこの省略形 • ls ../../bin:二階層上にある「bin」というディレクトリの中身を表示 「../」はカレントディレクトリを内包している(一階層上の)ディレクトリを示す • ls /bin:ルートディレクトリにある「bin」というディレクトリの中身を表示 頭の「/」はルートディレクトリ(最上階層)を示す。 「./」や「../」ではじまるカレントディレクトリからの対象への経路を表したパスを相対パス、 「/」で始まるルートディレクトリから見た対象の位置を表すパスを絶対パスとよぶ。 ディレクトリに関するコマンド2例: • mkdir 「ディレクトリのパス」:新しくディレクトリを作成 • rmdir 「ディレクトリのパス」:ディレクトリの削除(空の場合)
3.3
テキストの編集と閲覧
データ解析の際、テキストファイルを編集することがよくある。テキストファイルの編集のため のアプリケーションは数多くあるが、ほとんどのUnix系OSに標準でインストールされているの がEmacsと vi である。ここではより広く使われている(と思われる)Emacsを使ってみよう。ホームディレクトリ下に「try emacs」というディレクトリを作り、その中でEmacsを開く。具
体的には次の通り(行頭の“$”はプロンプトを表すもので、入力する必要はない)*2。
$ mkdir try emacs $ cd try emacs $ emacs & *2三行目のemacsを起動するコマンドの最後についている“&”は、emacsをバックグラウンドで立ち上げるために ついている。“&”なしでもemacsは起動するが、その場合はemacsを終了するまでもとのターミナルでコマンド を実行することができなくなる。
Emacs が起動したら、「C-x C-f」で新規ファイルの作成を開始する。Emacs の説明にはよく 「C-x」とか「M-x」という表現が現れるが、これはそれぞれ「Ctrlキーを押しながらxを押す」、 「Altキーを押しながらxを押す」という意味である。つまり、新規ファイルを作成するにはCtrl キーを押しながらx、fキーを順に押せばよい*3。ウィンドウ下部で新規ファイルの名前を聞いて くるので、「test.txt」とでもしておき、適当な文章を入力したら、「C-x C-s」で保存、続いて「C-x C-c」で Emacsを終了する。なお、Emacsを起動する際に-nwオプションをつけると、コマンド を入力したターミナル内にE macsを起動させることができる。 本節の最後に、テキストファイルを閲覧するためのコマンドを二つ紹介する。 • cat「ファイルのパス」 • less 「ファイルのパス」 両方のコマンドを試しつつ挙動の違いを確認してみよう。less で開いた環境はqキーで終了でき る。テキストファイルを単に閲覧したいだけであればこれらのコマンドを使うとよいだろう。
3.4
リモートログイン
秋の学校で使用する解析サーバを含め、大学・研究機関等が保有する高性能なコンピュータを使 う際には、実際にそのコンピュータの前に座るのではなくネットワーク経由で他のコンピュータか ら遠隔操作することが多い。 ネットワーク経由で他のコンピュータにログインする事をリモートログインといい、多くの場合 sshコマンドを用いる。一般には「ssh -X subaru01@ana03.adc.nao.ac.jp」のように入力する。オ プション「-X」はX11フォワーディングを許可という意味で、ホスト上で新しいウィンドウを開 く操作をした際に、その新しいウィンドウをクライアントの画面に転送することを可能にする。@ マークより後ろに書かれている文字列がログインするコンピュータ名で、@マークより前はログイ ンするアカウント名である。自分が直接操作しているコンピュータ(クライアント)とログインす る先のコンピュータ(ホスト)でのアカウント名が同じ場合、アカウント名は省略できる。また、 ユーザー名ホストの名前も同じネットワーク上では短縮可能なので、秋の学校を行うすばる棟共同 利用室では上記のコマンドは「ssh -X ana03」と省略できる。 sshコマンドを実際に使ってみるためには自分が操作するパソコンとネットワークで接続された 別のコンピュータにアカウントを持っていなければならないため宿題の段階ではsshコマンドは扱 わないが、秋の学校当日には使うことになるコマンドなので心の片隅に置いておいてほしい。3.5
ターミナルの終了
さて、本書はまだまだ続くが、ここで一旦ターミナルの終了方法を説明しておく。exitがターミ ナルを終了するコマンドである。環境によってはexit コマンドを実行してもターミナルが機能を 停止するだけで、ウィンドウは開いたままという場合もある。その場合は各OSの標準的な方法で ウィンドウを閉じアプリケーションを終了されたい。ターミナルを終了できることを確認したら、 再びターミナルを立ち上げて次章に進もう。 *3ウィンドウ上部のメニューバーを使ったほうが簡単かもしれないが、環境によってはメニューバーが無かったりする こともあるので基本的なコマンドは覚えておこう。4
実際にデータを触ってみる
4.1
gnuplot
のインストール
秋の学校の宿題の内容は、要約すると「たくさんあるデータからグラフを作り、そのグラフを用 いて議論を深める」ことである。そこで、グラフ作成ツールを自身の作業環境に取り込もう。グラ
フを作成するソフトウェアは数多くあるが、天文学でよく使われるのはSuperMongo、matplotlib、
gnuplotなどで、一番とっつきやすいものはgnuplotだろう*4。gnuplot のインストール方法は
ウェブ検索で簡単に見つけられるが、各OSや環境によってその方法は異なる。ここではインス トール方法の説明は割愛するので、各々で適した方法で準備をし、次節に移ろう*5。
4.2
データのダウンロード
ひと通りターミナルの使い方がわかり、グラフ作成ツールの準備もできた。では天文に関する データを実際に触りつつ、グラフの作成に取り組もう。まず、今回のウォームアップおよび宿題で 使用するデータをダウンロードする。このデータは、 http://optik2.mtk.nao.ac.jp/schola/2017/docu/homework.tar.gz に準備されている。ブラウザなどで上記アドレスにアクセスすればダウンロードできるが、ここは ターミナル上でwgetコマンドを使用してみよう。 $ wget http://optik2.mtk.nao.ac.jp/schola/2017/docu/homework.tar.gz とターミナルに打ち込めばダウンロードが開始する。ダウンロードが済んだら、lsコマンドを使用 してファイルがカレントディレクトリにあることを確認しよう。正しくダウンロードできていれ ば、「homework.tar.gz」というファイルがあるだろう。このファイルは圧縮されているので、解凍 する必要がある。 $ tar xvzf homework.tar.gz と打てばファイルが解凍され、拡張子が「txt」であるファイルが3つ現れる。これがウォームアッ プと宿題で使用するファイルである。*4matplotlibはPythonパッケージであるため、Pythonで得た計算結果をプロットする際は重宝するだろう。 SuperMongo(SM)は天文業界では伝統的なソフトウェアであるが、有料である。 *5使用したいプログラムがインストールされているか調べる方法として、whichコマンドを使用する方法がある。 $ which gnuplot と入力し、 /usr/local/bin/gnuplot などのパスが返ってくれば、対象のプログラムは使用することができる。
インストール方法については、Bash on Ubuntu on WindowsやUbuntu等のDebian系LinuxOSを使用し
ている人は、ターミナルに
$ sudo apt-get install gnuplot $ sudo apt-get install gnuplot-x11
4.3
データの中身を見てみる
では解凍したデータを見てみよう。今回準備したデータには、M45、M67、NGC 188 とい う 3 つの散開星団に属する星々のデータが記されている。それぞれのファイル名には、散開 星団の名前の後に、このデータを発表した論文の筆者の名前が記されている*6。データを見る には、3 章で説明したように catコマンドやlessコマンドを使用すれば良いが、ここで使用す るデータは行数が多いため、エディタを使うと良いだろう。3.3 章で紹介したように、Emacs でM67 Yadav+08.txtを開くと、図3のような画面が現れる*7。データの最初の数十行は“#” で始まる記述が連続しているが、これはこのデータの提供元や、本データに何が記されている かが書かれている。この情報を読めば分かる通り、このデータはVizieR というウェブサイト (http://vizier.u-strasbg.fr/viz-bin/VizieR)から取得されている。このサイトでは、こ れまでに出版された天文学に関する論文中の観測データを取得することができる。 “#”で始まる行がしばらく続いた後には、ただひたすら数字が並んでいるのが分かる。これが観 測で得られた情報の羅列である。数字の羅列が始まる直前の行には、各列に書かれている情報の名前が記されている。このデータの中で重要なものは“RAJ2000”、“DEJ2000”、“B(V, Ic)mag”、
“e B(V, Ic)”などだろう。RAJ2000、DEJ2000はこの星がある場所を示していて、それぞれ日本
語で赤経、赤緯と呼ぶ*8。B mag、V mag、Ic magはそれぞれ異なる波長で測定された星の明る
さ(magnutude: 等級)である。天体の明るさを測定する時は、ある特定の波長帯(バンド)の光を 取り出して測定する。ここで登場しているB、V、IcバンドはJohnson-Cousinsという名の測光 システムで使用されるバンドである(図4)。測光システムは複数あり、透過波長や透過率はそれぞ 図3 Yadav+08.txtをemacsで開いた様子。 *6各データがどのような望遠鏡・装置等で取得されたかという情報は巻末の付録にまとめたので、一読してほしい。 *7ターミナルに“emacs M6”とまで打ち込んだ後Tabキーを打つと入力補完してくれる。 *8星の天球上の場所を表すものを座標系といい、赤経赤緯で表す座標系を赤道座標と呼ぶ。その他にもよく使われるも のとして銀河座標などがある。ぜひ調べてみよう。
図4 様々な測光システムのフィルタ透過率(Bessell 2005, ARA&A, 43, 293)。縦軸が透過 率、横軸は波長。 れ異なっているので、自分が今どの測光システムを使用しているかを注意する必要がある*9。
4.4
図を作ってみる
数字の羅列を眺めているだけでは面白くないので、簡単な図を作ってみよう。図を作るときに使 用するのが4.1章でインストールしたgnuplotだ。ではターミナルに *9厳密には、たとえ同じ測光システムのフィルターを使っていたとしても、個々のフィルターの透過率やCCDの感度 特性の違いにより系統誤差が生じる可能性がある。異なる観測装置で取得したデータを比較する際は、この系統誤差 の補正をする必要がある。図5 gnuplotで出力される図その1。 $ gnuplot と打とう*10。ターミナル上に、 G N U P L O T (中略)
Terminal type set to ’x11’ gnuplot> と現れれば、gnuplotは無事起動している。この状態で、gnuplot専用のコマンドを打ち込んでい くことで、図を作成することができる。 手始めに、M67 Yadav+08.txtに含まれる星の地図のようなものを作ってみよう。つまり、横軸 が赤経、縦軸が赤緯となるような図を作る。その前に準備として、以下のコマンドを打ち込む。
gnuplot> set datafile separator ","
これは、これから読み込むファイルにおいて、列と列の区切り文字が「, (カンマ)」であることを
gnuplotに与えている。区切り文字がスペースやタブである場合は、このコマンドは必要ない。
では図を出力しよう。gnuplotで、テキストファイルのデータを読み込んでプロットするには、
gnuplot> plot "M67 Yadav+08.txt" using 3:4
と入力する。すると図5のようなウィンドウが新たに立ち上がる。上記コマンドの“using 3:4”と
は、データの3列目と4列目をそれぞれ横軸と縦軸の値とせよ、という意味を持つ*11。
*10gnuplotはターミナル上で動くため、コマンドの末尾に“&”をつけると正しく起動しないので注意。 *11“using”というコマンドは“u”と省略可能。他にも“with”を“w”、“line”を“li”などと省略できる。
図6 gnuplotで出力される図その2。
ひとまず図にはなったものの、これをそのまま研究発表会や論文に使用することはよくない。こ れは図に示すべき情報が不足しているからである。まず今の状態では図を見ただけだと横軸と縦軸 が何を表しているのかが伝わらないので、軸の名前を入力する。
gnuplot> set xlabel "RA (deg)" gnuplot> set ylabel "DEC (deg)"
上記のように入力することで、gnuplotに軸の名前を与えることができる。再度plotをすれば軸名 が記された図が出力されるが、以前と同じデータ点を用いて図を再出力させたい場合は、単に gnuplot> replot と打つだけで良い。 次は右上にある凡例が気になるところだ。グラフの作り手にとっては、どのファイルのどの行を 使用して作ったデータかが分かるとありがたいが、第三者からしたらファイル名などは何の情報も もたないので、削除するか、わかりやすい言葉に書き換える必要がある。この例では凡例は不要な ので、以下のようなコマンドで凡例を消す。
gnuplot> unset key
図の見栄えにこだわる人は、プロットの色や形を変更したいと思うかもしれない。その場合は、 以下のように指定すればよい。
gnuplot> plot "M67 Yadav+08.txt" using 3:4 pt 5 lc rgb "black"
上記コマンド中のptとlcはそれぞれpointtypeとlinecolorを示している。ウェブで検索すれば、
gnuplotにどのようなpointtypeとlinecolorが準備されているかが分かるだろう。
ここまでの作業を行うと図6のような図ができ、どのような情報が示されたグラフかということ
11.7 11.8 11.9 132.8 132.9 DEC (deg) RA (deg) -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 B-V DSS colored 1’ 17.03’ x 18.93’ N E Powered by Aladin 図7 gnuplotで作成した図その3(左)とM67の画像(右)。左図の円の大きさは星の明るさ に、各プロットに色は星のカラーにそれぞれ対応している(カラーについては次章を参照)。 赤緯11.6∼12.2度の範囲にある星の情報が含まれていて、一部データが欠損していることなどが分 かる。この図に対し、M67 Yadav+08.txt中の他の情報を取り込みつつ改変した図が図7左であ る。この図とM67の実際の写真(図7右)を比べてみることで、作成した図が確かにM67の地図 のようなものになっていることが確認できる*12。それでは一度gnuplotを以下のコマンドで終了 し、次章に移ろう。 gnuplot> quit
5
色等級図
5.1
カラー
図7 左をみると、右側に赤から青へのグラデーションで色付けされたバーがあり、その横に “B− V ”と書かれている。これはB バンドとV バンドの等級差を示していて、これを「カラー」 と呼ぶ。星の等級は、5等小さくなると明るさが100倍になると定義されているため、1等の差は 明るさにして約2.5倍(√5 100≃ 2.512)異なることになる。つまり、ある星のB− V の値は、その 星のB バンドとV バンドの明るさの比を示す*13。B、V は“Blue”と“Visible”の頭文字で、そ れぞれ青と緑∼黄色に該当する波長の光を指す(図4)。したがってB− V の値が小さい場合、B バンドにおける光の強度が相対的に大きくなることから、「その星は青い」という言い方をする。 星のカラーは星のどのような物理量とリンクされているのだろうか。その答えは温度である。星 からの輻射は黒体放射で近似でき、高温の星ほど短波長側に、逆に低温の星は長波長側にピークを もつ。したがって、青い星ほど高温、赤い星ほど低温ということができる。 *12gnuplotを駆使すればこのような図も書けるが、今はここまでする必要はない。 *13等級の尺度は複数の標準星を使って決められている。また、B− V = 0の基準はA0V型星である。A0V型という のは星のスペクトル型のことである。余力がある人は調べてみよう。では、先ほど地図を作ったM67に属する星のカラーを計算してみよう。計算そのものはデータ 中のB 等級とV 等級の差を計算するだけだが、いかんせん数が膨大である。こういう時に重宝す るのがawk(オーク)だ。awkを使うことで、データ中の列の抽出や計算が簡単に行える。 早速awkを使って計算、と行きたいところだが、4.3章で触れたようにこのデータには“#”で 始まる行がたくさんある。これらは計算には含めたくないので、まず以下のようなコマンドをター ミナルに打ってみよう*14。 $ grep -v ^# M67 Yadav+08.txt grepは文字列の検索に使用するコマンドで、指定した条件に合う行を出力する。しかしここでは 「“#”で始まらない行」を抽出したいので、-vオプションを使用して指定した文字列を含まない行 を抽出させるようにし、さらに“#”の前に“ˆ”をつけ、行の先頭が#でないものを出力せよ、と いう指示を出している。 このコマンドを実行すると、大量の文字列ががターミナルに吐き出される。ターミナルをスク ロールして上の方まで戻れば、“#”で始まる行がなくなっていることを見ることができるが、それ は少々面倒である。そこで、以下のようなコマンドを打ち込んでみよう。
$ grep -v ^# M67 Yadav+08.txt | head
一つ前に入力したコマンドと同じコマンドの後に“|”がある。これはパイプといい、パイプの前の コマンドの結果をパイプの後に続くコマンドに引き渡すことができる。パイプの後に続くheadと いうコマンドは、たくさんあるデータのうち最初の10行のみを表示するコマンドである*15。この コマンドを実行すれば、“#”で始まる行がなくなっていることが確認できる。 いよいよawkの登場である。今から計算したいのはB− V なので、BバンドとV バンドの情報 のみを抽出したい。これらは元のデータの5列目と7列目にあるので、この2列のみを抽出する。
$ grep -v ^# M67_Yadav+08.txt | awk -F"," ’{print $5" "$7}’
“awk”の後に書かれていることを順に説明しよう。まず、−Fオプションで、データ中の区切り文 字を指定している。次に’{print $5” ”$7}’で、5列目と7列目を出力し、さらに5列目の内容と 7列目の内容の間にスペースを出力せよ、と指示している。ダブルクォーテーションの中身を例え ば何かも文字列にすれば、その文字列を5列目と7列目の間にはさみながら結果を出力する。 次にB − V を計算しよう。これもawkで簡単に行うことができる。以下のように、printする ものとして5列目と7列目の差を指定するだけでよい。awkでは、四則演算はもちろん、指数や 対数、三角関数などを扱うこともできる。
$ grep -v ^# M67_Yadav+08.txt | awk -F"," ’{print $5" "$7" "$5-$7}’
*14“#”で始まる行は基本的にはコメント行としてみなされ、例えばgnuplotでは読み込まれない。しかしこれから使
うawkで、ファイルを読み込んでprintする場合は“#”で始まる行も対象となるため、予め除いておくとよい。
これでようやく目的のデータが出力された。しかし、今のままでは単にターミナルに結果が現れる だけで、どこにも保存されない。そこで利用するのがリダイレクトだ。 $ (略) awk -F"," ’{print $5" "$7" "$5-$7}’ > M67_BvsVvsB-V.txt このように、コマンドの最後に“>”を打ち、ファイル名を指定すれば、そのファイルに結果がすべ て書き込まれる。この章で出てきたパイプとリダイレクトはとても重要なので必ず覚えておこう。 なお、もし既存のファイルに追加でデータを書き込みたい場合は“>>”を使用する。“>”を使用 してしまうと、もともと存在していたファイルがある場合、その内容は完全に消去され新しい内容 に置き換わってしまうので注意が必要である。出力先のファイル名などは自分自身がわかりやすい ものにしておくと良い。
5.2
色等級図を作ろう
色等級図とは、文字通り星の色と明るさの関係を示した図で、恒星の種族や進化を議論する上で 非常に重要である。図の作成は、4.4章で記したようにgnuplotを起動しコマンドを順に入力して いけばよい。ただ、gnuplotで与えるコマンド群をひとまとめにし、スクリプトとして保存してお けば、図の修正などがとても簡単にできる。それでは以下のように新規ファイルをエディタを立ち 上げ、そこに必要なgnuplotのコマンドをすべて書きこもう。 $ emacs M67_cmd.plt & テキストファイルに書き込むgnuplotのコマンド群の例を以下に示す。 #軸ラベルの設定set xlabel "{/Times-Italic B-V} (mag)" #フォントをイタリックに変更
set ylabel "{/Times-Italic V} (mag)"
#プロット範囲の設定 set xrange [-1:3] set yrange [22:6] #等級は数字が小さいほうが明るい #凡例を消す unset key #プロット(psはプロットサイズの変更)
plot "M67_BvsVvsB-V.txt" using 3:2 pt 5 ps 0.5 lc rgb "black"
#図の保存
set terminal postscript eps enhanced color "Times" 10 size 14cm, 10cm set output "M67_cmd.eps"
replot
スクリプトの最後の3行で、gnuplotで作成された図が新しいepsファイルとして出力されるよう
6 8 10 12 14 16 18 20 22 -1 -0.5 0 0.5 1 1.5 2 2.5 3 V (mag) B-V (mag) 図8 M67の色等級図。 $ gnuplot M67_cmd.plt もしスクリプト内に何か間違いがあり、グラフを書くことに失敗すると、エラーメッセージが出力 される。どこか間違っているかを調べ、再度実行してみよう。特に何もメッセージがでなければ、 テキストファイルに打ち込んだコマンドがすべて実行されグラフが完成したはずだ。では以下のコ マンドを実行して図を見てみよう*16。図8が完成した色等級図である。 $ gv M67_cmd.eps なお、プレゼンテーション用の資料を作る際は、eps形式のファイルのままだと不都合な場合も
ある。epsファイルをjpgはpngに変換する方法は複数あるが、imagemagickのconvertコマン
ドを利用するのが一番簡単だろう。各OS、環境に合わせた方法でインストールした後、以下のよ
うなコマンドを使用すればjpgに変換できる。
$ convert -density 300 M67_cmd.eps M67_cmd.jpg
できた図を眺めてみよう。この図を見てみると分かるように、ある星団に属する星々のカラーと 等級はランダムに分布しているのではなく、何かしらの法則にしたがって分布している。特に、図 の左上から右下に向かって帯状にプロットが分布している様子が見てとれる。さらに帯の左上の部 分では、帯が右に向かって折れ曲がり、右上の方へ伸びていっているようにも見える。 本章の冒頭でも述べたように、色等級図上での星の位置や分布を調べることで、星の進化や星団 の年齢について議論を深めることができる。星は分子雲で誕生した後、徐々に収縮し、やがて安定 して水素の核融合を起こす星(主系列星)になるが、色等級図上で帯状に分布している星々がこの 主系列星にあたる。太陽もこの帯に属する。つまり、青い主系列星ほど明るく、逆に赤い主系列星 *16gvはeps形式のファイルを閲覧するためのコマンドである。epsファイルを閲覧できるコマンドは他にもあるので、 当然そちらを使用してもよい。
は暗い。主系列星を質量で比較すると、青いものほど質量は大きくなる。主系列星が老いてくると 主系列星の帯を離れ、徐々に色等級図の右上へ移動していく。この段階にある星を巨星と呼ぶ。 M67の色等級図を見ると、B− V が0.5から2までの間には帯が連続して分布しているが、0.5 より小さいところには帯がなく、星の分布が右上に移動している。重たい星ほどより多くの水素を 費やしながら核融合反応を起こすため、重たい星ほど主系列段階に留まる時間は短い。つまりこの M67の色等級図から分かることは、B− V が0.5より小さい主系列星はもうすでに巨星に進化し ているということである。なお、5.1章で述べたように、カラーは星の温度と対応しているので、 図8の横軸は温度に書き換えることができる。温度と星の明るさの関係を示したものをヘルツシュ プルング・ラッセル図(HR図、Hertzsprung-Russel Diagram)という。
5.3
議論を深めよう
図が完成した後に行うべきことは、その図から新たな知見を得るべく議論を深めていくことであ る。実際、自身で色等級図を作ってみて、様々な疑問が湧いてきたのではないだろうか。ここでは そのいくつかを取りあげてみたい。 5.3.1 誤差 M67 Yadav+08.txtの中身を見ている時に、e Bやe Vなどの項目が気になった人がいるかも しれない。これは、BやV の誤差である。どれだけ大きな望遠鏡と高性能の観測装置を使ったと しても、誤差を完全に0にすることはできない。 現代の天文学では、望遠鏡で集めた光をCCDなどの検出器で捉えることで天体からの光を測定 するが、測定された光にはフォトンノイズや、リードノイズなどによる統計誤差が含まれている。 フォトンノイズは、天体からの光の統計的なゆらぎ、つまりCCD等の検出器に捉えられる光子の 量のばらつきに起因する。このノイズの大きさは捉えられた光量の平方根で表される。一方リード ノイズは、検出器に捉えられた光(正確には電子)を読みだす際に生じる誤差である。観測から得 られたデータを用いて議論を進める際、これらの誤差を正しく評価することが重要である。 前章で完成させた色等級図にも、本来は横軸と縦軸の誤差を考慮し、エラーバーをつけるこ とが望ましい。縦軸のV 等級についてはV 等級の誤差をそのままプロットすれば良いが、横軸 のB − V の誤差はどうしたらよいだろうか。このような場合は誤差伝搬則というものを利用し、 B− V の誤差δB−V は、B とV の誤差(δB、δV)を用い、 δB−V = √ (δB)2+ (δV)2 (1) というように計算する。ではこれもawkで計算してしまおう。10ページの例のように、grepを使 い“#”で始まる行を除くコマンドを打ち込み、その後にパイプで以下のようなコマンドをつなぐ。 (略) | awk -F"," ’{printf("%5.3f %4.3f %4.3f %4.3f\n", $7,$8,$5-$7,sqrt($6**2+$8**2))}’ここでは以前に使用したawkのprintではなく、printfを使用した。printfを使うことで、出力さ
れる値や文字列に対してより正確なフォーマットを指定することができる。書式は、
’{printf("(出力フォーマットの指定)", (各要素の指定)}’
6 8 10 12 14 16 18 20 22 -1 -0.5 0 0.5 1 1.5 2 2.5 3 V (mag) B-V (mag) 6 8 10 12 14 16 18 20 22 -1 -0.5 0 0.5 1 1.5 2 2.5 3 V (mag) B-V (mag) 図9 (左)エラーバー付きのM67の色等級図。(右)測光精度が0.1等以下のデータ点を使用し て作ったM67の色等級図。 というような形式になっている。例に挙げたコマンドでは、フォーマット指定の箇所は、「1列目は 5桁で小数点代3位までを浮動小数点で出力し、スペースをあけた後2列目を4桁で小数点第3位 まで出力、更にスペースをあけ・・・」というような指示になっている。4列目の最後についてい る“\n”は改行を支持するコマンドで、printfでこのコマンドを忘れると、出力されるデータがす べて一行にまとめられてしまう。フォーマットの指定が終わった後は、各要素にどういった内容を 出力するかを指定する。ここでは、「1列目は元ファイルの7列目を、2列目には元ファイルの8列 目を、3列目には元ファイルの5列目と7列目の差を・・・」というような感じになっている。出 力結果を確認し、無事に計算ができているようであれば、計算結果を“M67 V eV B-V eB-V.txt” などと名付けたファイルにリダイレクトしておこう。 それではエラーバーつきのグラフを作成してみよう。基本的には5.2章で作成したスクリプトを ほぼそのまま使えるが、プロットを指示するコマンド部分だけ、以下のように書き換える。
plot "M67_V_eV_B-V_eB-V.txt" using 3:1:4:2 with xyerrorbar pt 5 ps 0.5 lc rgb "black"
以前の記述方法と変わった点は、using以下で4つの列を指定し、with xyerrorbarという指示を
加えたことだ。この記述によりx軸方向とy軸方向の両方にエラーバーがつく。またusingの指定 順は、「x軸、y軸、x軸方向の誤差、y軸方向の誤差」である。こうしてできあがる図が図9左だ。 エラーバー付きの色等級図を見ると、図の下の方に行くにつれてエラーバーが大きくなっている 様子が分かる。これはつまり、暗い星ほど誤差が大きくなっていることを表している。そこで、誤 差がある一定の値よりも大きいデータは測定が正確にできていないと考え、図には載せないように してみよう。ここでは例として、BとV の誤差が0.1以上のものは除外するという方向で進める。 このような作業もawkでできる。前の例にならい、grepでまず“#”から始まる行を取り除いた 後、以下のようなawkコマンドを実行する。
$ grep ... | awk -F"," ’{if ($6 <= 0.1 && $8 <= 0.1) print $0}’
上記のように、awkのifを利用すれば「6列目が0.1以下かつ8列目が0.1以下」行のみをprint できる。ifの条件文中にある“&&”は「かつ(and)」を表わしている。もし「または(or)」にした
6 8 10 12 14 16 18 20 22 -1 -0.5 0 0.5 1 1.5 2 2.5 3 V (mag) B-V (mag) 図10 固有運動を元に計算した星団に属する可能性が高い天体のみで作ったM67の色等級図。 い場合は“||(パイプ2つ)”を使う。printの後に指定している“$0”は「すべての列をそのまま出 力せよ」という意味である。このデータを再度リダイレクトし、誤差の計算を行った*17上で書い たグラフが図9右である。これで、図の下側に散らばっていた点が少し整理された。 5.3.2 色等級図の左下に散らばっている星々の正体 図を何度も作り変えていっている過程で、図の下側にたくさん分布していたプロットが整理され てきた。それでもまだ図9右では、左下にプロットが散らばっている。色等級図やHR図について 少し勉強した人なら、このような図の左下に分布するような星は白色矮星であるということを知っ ているかもしれない。ではこれらはすべて白色矮星なのだろうか? 図7を思い返してみると、このデータに含まれている星は、M67の方向にある天体をすべて取 り出してきたデータのように見受けられる。つまりこのデータの中には、本当にM67という星団 に属する星もいれば、M67方向にはあるが距離は全然違う場所にあるような星も含まれている可 能性がある。では、M67に属する天体だけ取り出すにはどうしたら良いだろうか? 元 デ ー タ の M67 Yadav+08.txt を も う 一 度 よ く 見 て み よ う 。デ ー タ の 最 後 の 方 の 列 に 、 “pmRA”、“pmDE”という項目がある。これは固有運動(proper motion)と呼ばれる量で、星そ
のものの運動による天球上の移動を示している。単位のmas/yrは一年あたりの移動量(masは
milli arc secondの略)である。このデータで与えられている個々の天体の固有運動量は、M67の
平均的な固有運動量からの相対値である。つまり“pmRA”、“pmDE”の値が0に近いほど、その 星がM67の平均固有運動と近い固有運動を持っていることになり、M67に属する可能性が高い。 それではawkを使って、相対固有運動量が小さい天体を抽出し、図を作成してみよう。星団に 属する可能性が高い星を導出するには、相対固有運動に加え、星の分布なども考慮しつつ計算する 必要があるが、ここでは簡単のため赤経・赤緯方向とも相対固有運動の値が0±5 masの値を取る ものを抽出してみよう。もうここまで読み進めた人であれば、コマンドを書き記さなくてもやり方 は分かるはずだ。図10のようなグラフが完成するだろう。ここまでデータを精査して図を作ると、 *17“print $0”と指定した箇所を、誤差を計算した際に使用したprintf文に書き換えれば、一行のコマンドですべての 処理を終えることが可能である。
-2 0 2 4 6 8 10 12 -1 -0.5 0 0.5 1 1.5 2 2.5 3 V (mag) B-V (mag) 図11 絶対等級で示したM67の色等級図。 主系列の帯がくっきりと現れるほか、主系列から離れて巨星へ向かう点(転向点)も確認しやすく なった。 5.3.3 絶対等級 前節まででほぼ色等級図はできあがったとも言えるが、これを他の星団の結果と比較したい場 合、縦軸の値がV (見かけのV バンド等級)だと勝手が悪い。そこで、縦軸を絶対等級に変換し よう。絶対等級とは、その星がもし10パーセク*18の距離にあったと仮定した時の明るさである。 M67までの距離は、諸説あるがここでは900パーセクとし、絶対等級を計算しよう。見かけの等 級をm、絶対等級をM、距離(pc)をrとすると、 m− M = 5 log r − 5 (2) と書ける。この式とawkを使用し、絶対等級を計算しよう。awkでは対数の計算もできるが、そのま ま“log”と入力すると自然対数となってしまうため、底の変換公式を利用して“log(900)/log(10)” と記述しよう。計算が正しくできていれば、図11のような図が完成するだろう。 *181パーセクは、年周視差が1秒角となる星までの距離を意味し、おおよそ3.26光年である。
6
宿題
宿題は以下の3点である。 1. NGC188 Stetson+04.txtを利用し、NGC188 の色等級図(B− V vs V )を作成せよ。測 光誤差が0.1等以下の天体を使用し、エラーバーを付与せよ。縦軸は絶対等級で表すこと (NGC188までの距離は1770パーセクとする)。本データには固有運動等を元に計算した 「星団に属する可能性」が各星に与えられているので、それを用いてプロットする星を制限 してもよい。 2. M45 Stauffer+07.txtを利用し、M45の色等級図(B− V vs V )を作成せよ。縦軸は絶対 等級で表すこと(M45までの距離は140パーセクとする)。誤差のデータが含まれていない のでエラーバーはつけなくてよい。 3. M67、NGC188、M45の色等級図を一つの図の上に重ねあわせて表示せよ。また、その図 を用いて、各星団の進化段階について考察せよ。 • 各 設 問 に つ い て 図 を 作 成 し 、A4 2-3 枚 程 度 に ま と め 、yuhei.takagi@nao.ac.jp 及 び yuu.niino@nao.ac.jpまで送付すること。 • 締切:9/15(金) 17:00 • 初日に、参加者の解答を元にした解説を行う。一部の参加者にグラフ及びその考察を説明し てもらうことも想定しているので、説明の簡単な準備を行っておくこと。 いずれの作図も、本書をここまで読みながらパソコンを操作していれば、特に難しい操作をする ことなくできるだろう。本文中で示したawkの使用例がほぼそのまま使える(抜き出す列をや区 切り文字などを正しく指定しなおすくらいで済むはずだ)。少し時間をかけて考えてほしい部分は 3の後半部分である。先入観にとらわれず、様々な可能性を考えながら考察を深めてほしい。付録
A
使用データについて
A.1
M67 Yadav+08.txt
• Yadav, R. K. S., et al. 2008, A&A, 484, 609 • 観測諸元
– 望遠鏡:MPG/ESO 2.2m telescope (La Silla, Chile)
– 装置:Wide-Field Imager (WFI)、視野:34′× 33′
– 観測日:2000年2月16日、2004年2月12日
– フィルタ:B、V、I
– 積分時間:20–300秒
A.2
NGC188 Stetson+04.txt
• Stetson, P. B., et al. 2004, PASP, 116, 1012
• 著者らの観測データに加え、11の過去研究の測光データを合わせたものを使用。
• 観測諸元(新規取得分)
– 望遠鏡:Plaskett 1.8 m telescope, Dominion Astrophysical Observatory (Canada)
– 装置:f/5 Newtonian camera、視野:9′.3× 9′.3 計86フレームを取得 – 観測日:1996年7月11–12日 – フィルタ:B、V、R – 積分時間:6–900秒 • B, V バンドのデータ及び固有運動の測定が行われている天体のみ抽出済み。 • その他アーカイブデータなども使用。詳しくはStetson et al. 2004を参照。
A.3
M45 Stauffer+07.txt
• Stauffer, J. R., et al. 2007, ApJS, 172, 663
• 近赤外線観測の論文。可視の測光データは23の過去研究のデータを取りまとめたものを
使用。
• B, V バンドのデータがあるもののみ抽出済み。