Pico Tech - Peak Fit With Gnuplot Part4

Radiation Detection / Software Projects ... Peak Fit With R ... Peak Fit With Octave ... Peak Fit With Python / 日本語ページインデックス ... English Documents / 掲示板 / Peak Fit With Gnuplot

Peak Fit With Gnuplot Part4 検出器の特性調査編

Peak Fit With Gnuplot 最初の一歩とK40編、
Peak Fit With Gnuplot Part2 任意の単一ピーク編、
Peak Fit With Gnuplot Part3 複数ピーク+核種データ編の続編です。

他に、
Peak Fit With Gnuplot Part5 検出器の自動特性調査編、
Peak Fit With Gnuplot Part6 色々な関数編があります。


複数ピークのスクリプトの改造を進めるうちに、やっぱり色々なモデルを考える上で、
実際の検出器のデータ欲しい、ということで、まずウラン原石のスペクトルを利用して、
ピークを Peak Fit With Gnuplot Part2 で作ったスクリプトで調べてみました。

ウラン原石のスペクトルは、標準の3インチNaIをテレミノPMTアダプターに繋げて、去年測っておいたもの。
CsI63mmとファイル名に入っているのは、ノート欄の消し忘れだった筈。
http://pico.dreamhosters.com/raddata/2014_01_06_07_28_19-UoreY_N3_3-6-CsI_63mm.txt

これに対し、Identify.exeのライブラリーに登録してあるRa226のピークのエネルギーとその放出率のリストを使いました。

Ra226  A   1.60KY
  186.11/3.280E 00
  241.91/7.461E 00
  295.09/1.917E 01
  351.86/3.706E 01
  609.31/4.609E 01
  665.44/1.563E 00
  768.34/4.885E 00
  785.82/1.091E 00
  806.15/1.229E 00
  934.03/3.165E 00
 1120.27/1.504E 01
 1208.45/1.682E 01
 1238.10/5.916E 00
 1314.29/2.078E 01
 1377.65/4.020E 00
 1407.64/4.948E 00
 1764.49/1.592E 01
 1847.41/2.123E 00
 2008.17/6.927E 00
 2088.17/4.948E 00
 2204.09/4.993E 00
 2267.80/2.969E 00
 2358.23/7.917E 00
 2427.56/8.906E 00

まず、 Peak Fit With Gnuplot Part2 で作った、準備用スクリプトを走らせます。
http://pico.dreamhosters.com/raddata/ft0.plt

f='2014_01_06_07_28_19-UoreY_N3_3-6-CsI_63mm.txt'
load 'ft0.plt'

そして、上記のピークのエネルギーをEに代入しては、そのデータを調べて保存する、
というのを、この単一ピーク用スクリプトで、手動でやりました。
http://pico.dreamhosters.com/raddata/ft1.plt

n=3
E=186
@ft1

E=241
@ft1

という感じ。

なぜ、自動でやらなかったかといいますと、自動でやろうとしたら、上手くいかなかったからです。
これは、ピークによっては、隣と結構近いものもあり、調査の際のnの値を小さくしないと
良くフィットしないピークもあれば、逆に少し大きめにした方が、よいピークあるし、
全然フィットしないものもあったりした為です。
(もちろん、こういう作業も自動化しないと面倒ですから、将来的にはそうする予定です。)

その結果をコピペしたのがこれ。
http://pico.dreamhosters.com/raddata/Ra226_NaI_TPA_LC4.txt

そこから、調べたい部分を抜き出して、プロットしやすい形にしたのが、これ。
http://pico.dreamhosters.com/raddata/Ra226data.plt


上記のデータを使って、測定器の特性を調べます。

まず、ファイル名を扱いやすいように変数に入れます。
fr='Ra226data.plt'

フィットする直線と放物線を作ります。
fx1(x)=f1*x+f0
fx2(x)=f2*x**2+f1*x+f0

#適当に初期値を設定
f1=1
f0=1
f2=1

#最初は、エネルギーとチャンネルをフィット
fit fx1(x) fr u 1:3 via f1, f0

After 4 iterations the fit converged.
final sum of squares of residuals : 10.6915
rel. change during last iteration : -1.29144e-008
degrees of freedom (FIT_NDF) : 8 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 1.15604 variance of residuals (reduced chisquare) = WSSR/ndf : 1.33644
Final set of parameters Asymptotic Standard Error ======================= ========================== f1 = 0.507544 +/- 0.0005654 (0.1114%) f0 = 6.3695 +/- 0.6027 (9.462%)
correlation matrix of the fit parameters: f1 f0 f1 1.000 f0 -0.795 1.000

f0が下駄で、f1が傾きですので、おおよそ1チャンネル当たり2keVになっています。

#結果をプロット
set xlabel 'Energy (keV)
set ylabel 'Channel'
plot fr u 1:3 t fr,fx1(x) t 'fit result'

見た目では、結構直線に乗ってます。

試しに、二次式でもフィット
fit fx2(x) fr u 1:3 via f2,f1,f0

After 9 iterations the fit converged.
final sum of squares of residuals : 7.782
rel. change during last iteration : -1.64967e-012
degrees of freedom (FIT_NDF) : 7 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 1.05438 variance of residuals (reduced chisquare) = WSSR/ndf : 1.11171
Final set of parameters Asymptotic Standard Error ======================= ========================== f2 = 1.45643e-006 +/- 9.003e-007 (61.81%) f1 = 0.504214 +/- 0.002122 (0.4209%) f0 = 7.53665 +/- 0.907 (12.03%)
correlation matrix of the fit parameters: f2 f1 f0 f2 1.000 f1 -0.970 1.000 f0 0.795 -0.889 1.000

尻尾の上下の振れ方を決めるのがf2で、高いほうのデータが少ないせいか、正確でないせいか、
触れ幅が小さいからなのか、誤差が大きくなっています。
基本的な傾きを示すf1は、直線でフィットした時とあまり変わらず、誤差も小さくなっています。
下駄は、少し大きくなっています。

この例では、直線でもいいじゃないか?と思える結果ですが、気温とかの条件が変わると、
二次式の方が良いかもしれないので、直ぐに結論に飛びついて「確定しました」とか
思いたがらない方がよいでしょう。

#プロットしても、見た目には、直線とどこが違うのか?と思うような線。
plot fr u 1:3 t fr, fx2(x) t 'fx2'


次に、分解能の数値。
最初は、FWHMをエネルギーで表した場合。

fit fx1(x) fr u 1:4 via f1, f0

After 1 iterations the fit converged.
final sum of squares of residuals : 190.697
rel. change during last iteration : -2.98082e-016
degrees of freedom (FIT_NDF) : 8 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 4.88233 variance of residuals (reduced chisquare) = WSSR/ndf : 23.8372
Final set of parameters Asymptotic Standard Error ======================= ========================== f1 = 0.0538021 +/- 0.002388 (4.438%) f0 = 11.663 +/- 2.545 (21.82%)
correlation matrix of the fit parameters: f1 f0 f1 1.000 f0 -0.795 1.000

縦軸のラベルを変えてプロット。
直線からは、ちょっと外れている様な気がします・・・

set ylabel 'FWHM (keV)'
plot fr u 1:4 t fr,fx1(x) t 'fit result'

二次式でフィット
fit fx2(x) fr u 1:4 via f2,f1,f0

After 5 iterations the fit converged.
final sum of squares of residuals : 7.782
rel. change during last iteration : -2.76913e-007
degrees of freedom (FIT_NDF) : 7 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 1.05438 variance of residuals (reduced chisquare) = WSSR/ndf : 1.11171
Final set of parameters Asymptotic Standard Error ======================= ========================== f2 = 1.45643e-006 +/- 9.003e-007 (61.81%) f1 = 0.504214 +/- 0.002122 (0.4209%) f0 = 7.53665 +/- 0.907 (12.03%)
correlation matrix of the fit parameters: f2 f1 f0 f2 1.000 f1 -0.970 1.000 f0 0.795 -0.889 1.000

あまり代わり映えしませんし、高い方が線から外れている様な気がします。

plot fr u 1:4 t fr, fx2(x) t 'fit result'

そこで、1000keV以下についてフィットさせてみました。

fit [0:1000] fx2(x) fr u 1:4 via f2,f1,f0

After 5 iterations the fit converged.
final sum of squares of residuals : 4.84629
rel. change during last iteration : -8.55987e-006
degrees of freedom (FIT_NDF) : 4 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 1.10072 variance of residuals (reduced chisquare) = WSSR/ndf : 1.21157
Final set of parameters Asymptotic Standard Error ======================= ========================== f2 = -8.85315e-006 +/- 8.654e-006 (97.75%) f1 = 0.0764678 +/- 0.009656 (12.63%) f0 = 4.73412 +/- 2.147 (45.36%)
correlation matrix of the fit parameters: f2 f1 f0 f2 1.000 f1 -0.987 1.000 f0 0.916 -0.961 1.000

プロットでは、1000keV以降も出してみると、こっちの方が、高いほうの一部を除き、
合っているんじゃないか?とか思えますが、たった一つの測定データですので、
まだ良く分かりません。

あ、それと、そもそも、2次式に当てはまるようなものなのか、それとも平方根なのか、とか、
そういう話もありますので、基礎的な理屈を確認せずに、単純にどんな風な分布になるか
見ているだけの段階です。

plot fr u 1:4 t fr, fx2(x) t 'fit result'


続いて、FWHMをパーセントで出した値。
これは、エネルギーで出した値をエネルギーで割っているので、上のものとは、違う結果になる筈。

fit fx1(x) fr u 1:5 via f1,f0

After 5 iterations the fit converged.
final sum of squares of residuals : 3.83942
rel. change during last iteration : -4.97362e-014
degrees of freedom (FIT_NDF) : 8 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.692768 variance of residuals (reduced chisquare) = WSSR/ndf : 0.479928
Final set of parameters Asymptotic Standard Error ======================= ========================== f1 = -0.00197559 +/- 0.0003388 (17.15%) f0 = 9.45041 +/- 0.3612 (3.822%)
correlation matrix of the fit parameters: f1 f0 f1 1.000 f0 -0.795 1.000

set ylabel 'FWHM (%)'
plot fr u 1:5 t fr, fx1(x) t 'fit result'

まあ、分解能が、エネルギーが高くなるに連れて、よくなっていく(小さい値になっていく)というのは、わかりますが、
結構ばらついている感じ。

fit fx2(x) fr u 1:5 via f2,f1,f0

After 5 iterations the fit converged.
final sum of squares of residuals : 0.752157
rel. change during last iteration : -6.55723e-009
degrees of freedom (FIT_NDF) : 7 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.327797 variance of residuals (reduced chisquare) = WSSR/ndf : 0.107451
Final set of parameters Asymptotic Standard Error ======================= ========================== f2 = 1.50026e-006 +/- 2.799e-007 (18.66%) f1 = -0.00540577 +/- 0.0006597 (12.2%) f0 = 10.6527 +/- 0.282 (2.647%)
correlation matrix of the fit parameters: f2 f1 f0 f2 1.000 f1 -0.970 1.000 f0 0.795 -0.889 1.000

plot fr u 1:5 t fr, fx2(x) t 'fit result'

二次式の方も、高いほうで、分解能が悪化し始めるような線を引いているし、
エネルギーとチャンネルの関係の様に、簡単にいきません。


次は、効率曲線。これが、お目当てです。

この場合、ピークの山の高さを測定秒数で割ってレートにし、それを放出率で割っています。
直線にはならないのは分かっているのですが、まずは、直線で試してみます。
set ylabel 'Rate / Intensity (ratio)'
fit fx1(x) fr u 1:($6/$2) via f1,f0

After 4 iterations the fit converged.
final sum of squares of residuals : 0.0183549
rel. change during last iteration : -3.51153e-007
degrees of freedom (FIT_NDF) : 8 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.0478995 variance of residuals (reduced chisquare) = WSSR/ndf : 0.00229436
Final set of parameters Asymptotic Standard Error ======================= ========================== f1 = -5.15391e-005 +/- 2.343e-005 (45.45%) f0 = 0.085851 +/- 0.02497 (29.09%)
correlation matrix of the fit parameters: f1 f0 f1 1.000 f0 -0.795 1.000

plot fr u 1:($6/$2) t fr, fx1(x) t 'fit result'

こういう式だとうまくフィットするという例がありましたので、それで試してみます。
f(x)=(a*x+b)/(x-c)

ネタ元はこれ。
http://www.researchgate.net/profile/Ammir_Ali/publication/264979048_Efficiency_Calibration_Study_of_NaI%28Tl%29_Detector_for_Radioactivity_Measurements_in_Soils_from_Ain_Zalah_Oil_Field/links/53faa5e80cf2e3cbf565c699.pdf

a=0.0001
b=50
c=50
fit f(x) fr u 1:($6/$2) via a,b,c

After 14 iterations the fit converged.
final sum of squares of residuals : 6.95851e-005
rel. change during last iteration : -2.21749e-008
degrees of freedom (FIT_NDF) : 7 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.00315289 variance of residuals (reduced chisquare) = WSSR/ndf : 9.94073e-006
Final set of parameters Asymptotic Standard Error ======================= ========================== a = 0.00108725 +/- 0.00164 (150.8%) b = 7.52324 +/- 0.7245 (9.63%) c = 145.242 +/- 2.732 (1.881%)
correlation matrix of the fit parameters: a b c a 1.000 b -0.874 1.000 c 0.647 -0.917 1.000

plot fr u 1:($6/$2) t fr, f(x) t 'fit result'

こんな感じでもいいのかも。
でも、a の誤差が大きいのが気になる。

aの初期値を a=0.00000001 という風にしてみたら、
fit f(x) fr u 1:($6/$2) via a,b,c

After 4 iterations the fit converged.
final sum of squares of residuals : 7.38823e-005
rel. change during last iteration : -9.22346e-007
degrees of freedom (FIT_NDF) : 7 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.00324879 variance of residuals (reduced chisquare) = WSSR/ndf : 1.05546e-005
Final set of parameters Asymptotic Standard Error ======================= ========================== a = 1.00243e-008 +/- 0.001698 (1.694e+007%) b = 7.94798 +/- 0.7552 (9.501%) c = 144.035 +/- 2.866 (1.99%)
correlation matrix of the fit parameters: a b c a 1.000 b -0.874 1.000 c 0.647 -0.917 1.000

プロットの結果をみても見た目には違いが分からないし、
なんか、a の値って、あんまり重要ではないみたい・・・


続いて、山の高さだけでなく、それと分解能で決まる山の面積のレートでもってやってみます。

fit f(x) fr u 1:($7/$2) via a,b,c

After 24 iterations the fit converged.
final sum of squares of residuals : 0.0426616
rel. change during last iteration : -4.59772e-009
degrees of freedom (FIT_NDF) : 7 rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.0780674 variance of residuals (reduced chisquare) = WSSR/ndf : 0.00609451
Final set of parameters Asymptotic Standard Error ======================= ========================== a = 0.259167 +/- 0.04281 (16.52%) b = 49.9732 +/- 23.45 (46.94%) c = 132.19 +/- 10.27 (7.767%)
correlation matrix of the fit parameters: a b c a 1.000 b -0.849 1.000 c 0.657 -0.940 1.000

plot fr u 1:($7/$2) t fr, f(x) t 'fit result'

こちらの方がバラツキが少し大きいですが、多分、分解能の数値のばらつきのせいでしょう。


つづきは、自動特性調査編

Peak Fit With Gnuplot Part5


Last modified : Sun Apr 19 09:18:39 2015 Maintained by nkom AT pico.dreamhosters.com