RubyFitsでテーブルの全rowにアクセスする方法

githubで公開しているRubyFitsのFitsTableHDUにrow(index) と each_row()というメソッドを追加しました。すでにcloneしてくれている人はgit pullしてみてください。まだインストールしていない人は

1
git clone https://github.com/yuasatakayuki/RubyFits.git

としてcloneしてください。

row()とeach_row()は以下のように使う事ができます。

row(index)の例

指定したrowのデータを配列として取得できます。たとえば、

TIME RATE ERROR FRACEXP

という4つのカラムをもつファイル(Xselectで生成したlightcurveファイル)を読み込んで、f.row(3)等とすると、TIME RATE ERROR FRACEXPのデータが配列に入って返ってきます。

1
2
3
4
5
require "RubyFits"
include Fits

f=FitsFile.open("xis0_flare01.lc")
puts f[1].row(3).join(" ")

をdumpRow.rbとして保存し実行すると、

1
2
> ruby dumpRow.rb
31248.0 25.125 1.2531211376190186 1.0

と表示されます。

each_row()の例 each_row()に対してブロックを与えると、各rowのデータを含んだ配列に対して繰り返し処理をすることができます。

1
2
3
4
5
6
7
8
9
10
require "RubyFits"
include Fits
f=FitsFile.open("xis0_flare01.lc")

f[1].each_row() {|row|
	row.each(){|e|
		print "%-20s" % e
	}
	puts ""
}

実行結果は以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
31200.0             26.83333396911621   1.4953632354736328  0.75
31216.0             27.3125             1.3065340518951416  1.0
31232.0             27.875              1.319919466972351   1.0
31248.0             25.125              1.2531211376190186  1.0
31264.0             26.0625             1.2762861251831055  1.0
31280.0             25.625              1.2655285596847534  1.0
31296.0             24.1875             1.2295197248458862  1.0
31312.0             127.375             2.8215134143829346  1.0
31328.0             112.9375            2.656801462173462   1.0
31344.0             71.875              2.119478225708008   1.0
31360.0             53.1875             1.8232439756393433  1.0
31376.0             37.4375             1.5296547412872314  1.0
3