Gnuplotの使い方(2) — ヒストグラムを作る

学生実験ではMCAの出力がヒストグラムなのでデータをヒストグラムに作る機会はあまりないのですが、モンテカルロ法を使った立体角の導出をする場合には、自分でヒストグラムを作る必要が出てきます。Gnuplotでもリストモードで得られたデータをヒストグラムに詰めることができます。詳しくは、

http://stackoverflow.com/questions/2471884/histogram-using-gnuplot

で議論されていますが、日本語のまとまった解説がなかったのでまとめておきます。

リストモードとヒストグラム

リストモードとかヒストグラムがなんのことかわかっている人は読み飛ばしてください。主に学部学生向けの解説です。

放射線のエネルギー測定をする場合、放射線のエネルギーはイベント毎にデジタルデータに変換(Aanalog to Digital Conversion, ADC)されます。原子核素粒子実験等でよく使われるADCは、たいていの場合イベント毎のエネルギーをリストとして出力します。データの出力形式は装置毎に違いますが、出力は下記のような各イベント毎のエネルギーの表のようなものだと理解していればよいです。

リストモードのデータ
イベント番号 エネルギー(ch)
1 3029
2 2918
3 1001
4 362
5 769
... ...

これが、リストモードの出力です。この表は測定した放射線の数と同じ行数を持つため、測定イベントの数分だけ出力ファイルの容量も大きくなります。

放射線のエネルギースペクトルは、このようなリストモードで出力されるデータをヒストグラムにすることで得ることができます。ヒストグラムとは、リストモードで得られたデータをある範囲を幾つかの区間に分けそれぞれの区間に相当するイベントの頻度をグラフにしたものです。それぞれの区間のことをビン(bin)と呼びます。ヒストグラムを表にすると下記のようになります。

ヒストグラムの中身
ビン番号 範囲(ch-ch) 頻度
1 0-100 0
2 100-200 2
3 200-300 6
4 300-400 5
... ...

行数は定義されたビンの数と一致するため、測定時間が長くてもファイルの容量は少なくてすみます。そのため、学生実験等でよく使われるMCAでは、リストモードではなくヒストグラムに詰めた後のものを出力することが多いです。

ヒストグラムを作る

Gnuplotでも、リストモードのテキストデータからヒストグラムを作ることができます。サンプルデータを用意しました。各行にイベント毎のADC出力が書かれているだけのテキストデータです。

リストデータサンプル

これをヒストグラムにします。ヒストグラムの表示範囲は、0から20として、一つのビンの大きさを0.5にします。

 $ gnuplot
...
gnuplot> binwidth=0.5
gnuplot> bin(x,width)=width*floor(x/width)+width/2.0
gnuplot> plot [0:20] 'listdata.txt' using (bin($1,binwidth)):(1.0) smooth freq with boxes

これで、下のような図ができるはずです。

このヒストグラムの各ビンの数値が必要な場合は、set tableというコマンドを使ってテキストファイルに書き出します。

gnuplot> set table "histogram.txt"
gnuplot> plot [0:20] 'listdata.txt' using (bin($1,binwidth)):(1.0) smooth freq with boxes

これで、histogram.txtという名前ファイルができるはずです。二列目が各ビンの高さに相当します。