next up previous contents
Next: 3 データベースの活用:銀河の三次元分布図を描く Up: 5 計算機の更なる活用 Previous: 1 計算グラフィックス入門

Subsections


2 データベースの活用:HR図を描く

天文学・宇宙科学は、装置や予算が大きいという意味で巨大科学である。 世界有数の大望遠鏡の建設や衛星の打ち上げには巨額の費用がかかり、 研究機関毎にそのような施設を持つことはできない。そこで、これらの装置は、 特定の研究者・研究機関によってだけ使われるというのでで なく、多かれ少なかれ共同利用に供せられる。そのような場合、 取得されたデ−タは、一定の期間は、取得した研究者に専有的に使われるが、 しかる後は、運営している機関によりアーカイブとして保存され、 一般の研究者に公開される、というのがよくあるルールである。 これらは、オンラインで公開されている ものが多い。 こうした天文・宇宙科学の特質からか、天文学・宇宙科学の、 ネットワ−クでの情報公開の量とサービスは、他の分野に比べても、 充実したものが多いと思う。 ここでは 光学的に観測される約9000個の星の情報が格納されたThe Bright Star Catalogue (BSC4)[*] を用いて、HR図を描いてみよう。

1 書式

このBSC4カタログ は、一つの恒星に対し て、表5.1のような 情報が各行の指定された位置に、指定された形式で与えられている。


Table 5.1: BSC4 カタログの表記内容
項目 格納形式 行中の位置
HR番号 I4 1 - 4
名前 A7 8 - 14
赤経 (時) I2 74 - 75
赤経 (分) I2 77 - 78
赤経 (秒) F4.1 80 - 83
赤緯 符号 A1 85
赤緯 (度) I2 86 - 87
赤緯 (分) I2 89 - 90
赤緯 (秒) I2 92 - 93
実視等級 F5.2 109 - 113
スペクトル型 A2 137 - 138
視差 F5.3 170 - 174


Table 5.2: 入出力の表記
表記 意味
文字 ${\rm A}n$ $n$文字
整数 ${\rm I}n$ $n$桁整数(含符号)
実数 ${\rm F}m.n$ 小数点以下$n$桁、少数と符号も含め全体で$m$文字
  ${\rm E}m.n$ 小数点以下$n$桁、少数と符号も含め全体で$m$文字(単 精度)
  ${\rm D}m.n$ 小数点以下$n$桁、少数と符号も含め全体で$m$文字(倍 精度)
空白 ${\rm X}$  
行替 $/$  

但し、格納形式の${\rm A}n$ は、$n$文字分の文字データを意味し、 ${\rm I}n$ は、$n$桁の整数データである事を意味し、 ${\rm F}m.n$ は、小数点以下$n$桁で且つ小数点と符号も含めて$m$ 桁の実数 である事を意味している $(m\ge n+3)$。尚、書式としては、他に $1.25\times
10^{-8}$1.25E-08と表すような${\rm E}m.n$という形式がある。整数部は $-38$から$+38$までの整数、仮数部は小数点以下$n$桁で、且つE-08という表記 も含めて全部で$m$文字である事を意味している $(m\ge n+5)$

2 FORMAT文

このカタログを読んで、HR図を描いてみよう。 星の実視等級を$m$、星までの距離を$d$(パーセク)とすると、絶対等級$M$
\begin{displaymath}
M = m - 5.0 \log {{d}\over{10}}
\end{displaymath} (5)

となる。 星までの距離$d$(パーセク)は、 年周視差を$\pi$(秒)、地球の公転長半径を$R$(天文単位)とすると、
\begin{displaymath}
d=R/\pi
\end{displaymath} (6)

となる。そこで、BSC4カタログの視差と実視等級から、絶対等級を求め、 それをスペクトル型に対してプロットしてやればよい。 実視等級は数値データだから、グラフ化での取り扱いも容易だが、 スペクトル型は文字型データだから、取り扱いには工夫が必要だ。

格納形式が決まっているデータの読み込みや、決まった形式での書き込みのために、 FORMAT文なるものが用意されている。 以下に掲げるのは、BSC4カタログをBSC4.DATとして、読み込み、年周視差と 実視等級から絶対等級を求め、また、HR図にグラフ化する際に便利なように スペクトル型を数値化し た上で別のカタログに別の様式で格納するためのプログラム [*]である。

      program main

      implicit NONE
      integer N,m,maxindex
      parameter(N=50000,m=7,maxindex=10)
      integer j,number_of_stars,jj,jjj
      real Vmag,parallax
      real Abs_mag(N),Sp_index(N)
      character*1 Sp_type,Sp_sub,s(m),sub(maxindex)

      data s/'O','B','A','F','G','K','M'/
      data sub/'0','1','2','3','4','5','6','7','8','9'/
c-------------------------------------------------------------------------------
      number_of_stars=0

      open(unit=1,file='BSC4.DAT',status='OLD')
      open(unit=2,file='STARS.DAT',status='NEW')

! Read the BSC catalogue:
      do j=1,N
        read (1,100,end=20) Vmag,Sp_type,Sp_sub,parallax
        if(parallax.gt.0.)then
          do jj=1,m
            if(Sp_type.eq.s(jj))then
              do jjj=1,maxindex
                if(Sp_sub.eq.sub(jjj))then
                  number_of_stars=number_of_stars+1
                  Abs_mag(number_of_stars)=Vmag+5.0
     *                                     +5.0*log10(parallax)
                  Sp_index(number_of_stars)=float(10*(jj-1) + (jjj-1))
                  write(2,220) j,Vmag,
     *                         Sp_index(number_of_stars),
     *                         Abs_mag(number_of_stars)
                end if
              end do
            end if
          end do
        end if
      end do
   20 write(6,131) number_of_stars

      close(1)
      close(2)

  100 format(108x,f5.2,23x,2a1,31x,f5.3)
  131 format(////'   there are ',i6,' stars in the catalog'//)
  220 format(i7,3(3x,f5.2))

      stop
      end

READ文が今までのようにread(*,*)read(1,*)ではなく、 read(1,100)となっている事に注目しよう。最初の1は、ユニット番号 1番から読み込む事を意味している事は、もう判ると思う。次の100は、 100番の文番号のついたFORMAT文の形式で読む事を意味している。 100番の文番号の文は、確かにFORMAT文になっており、表5.1の 形式で読み込もうとしている事が判るであろう。 READ文で、end=20とあるのは、データを読み終えたら、20番の 文番号に飛ぶ事を意味している。データを幾つ読むのか、予め定まって いない場合に、使われる手段であることは以前に説明した。 この100番の文番号のついたFORMAT文では、HR番号や赤経赤緯等、今の目 的に要しないデータを読み飛ばすために、$n$X$n$個分の空白データを読んで いる。 WRITE文も、220番のFORMAT文を従えており、実数形式で 実視等級、スペクトル型に対応する数値、絶対等級を書き込もうとしている。 220番のFORMAT文での3xは、 3個の空欄を空ける事を意味している。文番号は、1文字目から5文字目までに書く 事が約束となっている。

3 DATA 文

上のプログラムでは、スペクトル型の文字部と細分類の数字部分をそれぞれ 1文字データSp_typeSp_subとして読み込み、型に応じて数値を 当て嵌める事によって、スペクトル型を数値化して、グラフ化する際の$x$-座標 に対応させようとしている。Sp_typeOであれば、1の位、Bであ れば10代、Aであれば20代をあてがう。そこで、7元の配列s(7)s(1)='O's(2)='B'$\cdots$s(7)='M'と定義して、 Sp_typeがどのs(n)に一致するかを調べれば良い。 ところで、プログラム中で中身が変わる事のない7元の配列s(7)を、 s(1)='O's(2)='B'$\cdots$s(7)='M'と定義式をいちいち 書くのは煩わしいし、プログラムもみにくくなる。 上のプログラムでは、代わりに、 data s/'O','B',$\cdots$'M'/のような文で与えている。 このような文をDATA文という。これは、1文字の文字型データ配列s(7)を 定義し、 s(1)='O's(2)='B's(3)='A'$\cdots$ s(7)='M' と与える役割を果たしている。その次の行の data sub/'0','1',$\cdots$'9'/ も同様の役割を果たす。

4 問題:HR図を描く

BSC4カタログを読んで、HR図を描け。

Figure 5.2: BSC4カタログ上の星のHR図。


next up previous contents
Next: 3 データベースの活用:銀河の三次元分布図を描く Up: 5 計算機の更なる活用 Previous: 1 計算グラフィックス入門
Jun Makino
平成15年4月17日