CIRICのXPS

1 XPSについて

X線光電子分光装置(日本電子・JPS-9030)
https://www.jeol.co.jp/products/detail/JPS-9030.html

  • リファレンスは表面のCの信号で合わせる。
  • カメラがついていないので目視でエッチング位置やX線を照射する位置を決めなければならない。
  • チャンバー奥側のX線源にサンプルがぶつからないようにする。
  • X線のスポットは6 mmで使う。0.2 mmくらいまで絞れるらしい。
  • エッチングスポットは10 mm
  • ArエッチングはX線を照射するチャンバーから移動したパスボックスで行う。 そのためエッチングしながら測定する場合、パスボックスの出し入れを伴う ため少し場所がずれるかも(?)。
  • エッチング、測定、エッチング、測定…のような深さ方向の測定は、手動でパスボックスとチャンバーの出し入れを行う必要がある。自動でできるらしいが使用しないこと。
  • バルクサンプルはパスボックス内で2 hくらい真空にする。
  • 粉サンプルはパスボックス内で3 hくらい真空にする。粉がチャンバー内に落ちないようよく確認すること。
  • チャンバー内でステージと出し入れする棒を接続する時は、必ずx=50 mmの 標準位置で行うこと。

2 講習会

講習会で撮影した動画です。firefoxだとブラウザ上で再生できますが、ダウ ンロードして見た方が良いでしょう。 動画の再生の VLC がおすすめです。学 内からのみ閲覧できます。

3 フィッテングプログラム xps2fit.py

装置で保存したcsvファイルを読みこんでフィッテングするプログラムを自作していま す。次のような特徴があります。

  • 面積で規格化した以下のようなVoigt関数の重ね合わせでピークをフィッテングし ます。ここで \(p_0,p_1,p_2,p_3\) はフィッテングパラメータです。

\[ f = p_0\left[ p_3\frac{\sqrt{\ln(2)}}{p_2\sqrt{\pi}} \exp\left\{-\ln(2)\left(\frac{x-p_1}{p_2}\right)^2\right\}+ (1 - p_3) \frac{1}{\pi p_2} \frac{1}{1+\left(\frac{x-p_1}{p_2}\right)^2} \right] \]

  • 装置で保存したcsvファイルを読んで解析します。
  • フィッテングするパラメータの境界を指定して、境界内でもっとも最適な値 を求めてくれます。また一部のパラメータを固定してフィットすることも可能です。
  • ピーク強度は負にならないように制限しています。
  • コマンド1行で、フィッテングで求めた面積比やピーク位置などの結果をファ イルに保存しフィッテング結果の図も生成してくれます。そのため、大量 のデータを同じ条件(初期値、パラメータ範囲、フィッテング範囲、バック グラウンド範囲)で一括フィッテングできます。また似たようなサンプルを 同条件でフィッテングする場合に、GUIでチマチマ初期値を設定する必要がなくな るので便利です。
  • pythonで作成しています。コマンドラインでしか動きません。
  • 作図も含めて250行程度でシンプルに作成しています。Voigt関数以外でフィッテングしたい場合でもプログラムの拡張は容易でしょう。

3.1 インストール

python3.xで作成しています。 xps2fit.py を適当なパスの通ったところに配 置してください。python本体に加え以下のモジュールが必要です。

  • numpy
  • matplotlib
  • scipy

3.2 使い方

装置で保存したcsvファイルを引数で渡します。フィッテング結果は、標準出 力に出力されます。test.csv はcsvで出力したデータファイルです。

xps2fit.py test.csv 

フィッテングの初期値と境界、フィッテング範囲、ベースラインを引くデータ 範囲は xps2fit.py の50行あたりで定義(辞書データのvoigt)しています。辞書 データの最初の要素から、複数のピークのラベルと境界+初期値を3つの数字の 組で辞書データとして作成しています。パラメータを固定したい場合は3つの 数字を同じにすれば良いです。1要素が1つピークに相当するので、定義した要 素数だけのピーク数を考慮してフィットします。ピークの数に制限はありません。

辞書データの後ろから2番目の要素はバックグラウンドを引く範囲を複数指定 しています。指定する範囲はいくつあってもかまいません。最後の要素はフィッ テングの範囲です。

中身を見ればわかると思うので自分のサンプルに合うよう指定してください。

以下の内容で、SiとOを定義しています。

# フィッテングパラメータの初期値, 境界, background-ranges, fit-range
# label1, pos1, hwhm1, G/L1
# label2, pos2, hwhm2, G/L2
# .
# .
# .
# backgrond-ranges
# fitting range
voigt = {}
voigt["Si"] = [["Si-1", (525, 535, 545), (1, 1, 3), (0, 0.5, 1)],
               ["Si-2", (526, 536, 546), (1, 1, 3), (0, 0.5, 1)],
               ["Si-3", (526, 537, 546), (1, 1, 3), (0, 0.5, 1)],
               [(520, 522), (530, 531), (542, 549)],
               (530, 545)]
voigt["O"] = [["O-1", (103, 106, 110), (1, 1, 3), (0, 0, 1)],
              ["O-2", (103, 107, 110), (1, 1, 3), (0, 0, 1)],
              [(110, 115), (100, 103), (90, 93)],
              (101, 114)]

初めてのフィッテングで初期値を探す場合、-nofitを与えればフィッテング せずに初期値でプロットするので、結果を眺めながら初期値を決定すれば良いでしょう。

xps2fit.py -nofit test.csv 

csvファイルに複数のデータが含まれても解析できます。datasetの配列にデー タが保存されています。プログラムの後ろの方で、読み込んだデータとフィッ テングパラメータでDATA()を作っています。適当に自分用に改造してもらえれ ばと思います。

3.3 解析例

test.csv を以下のコマンドで実行した例です。

xps2fit.py test.csv

出力される結果です。Si.out, O.out, Si.png, O.png

------------------------------------------------------------------------
# Initial position and boundary
# label: position hwmh G/L
Si-1: (525, 535, 545) (1, 1, 3) (0, 0.5, 1)
Si-2: (526, 536, 546) (1, 1, 3) (0, 0.5, 1)
Si-3: (526, 537, 546) (1, 1, 3) (0, 0.5, 1)
# Output data
# label: I(%) position hwmh G/L
Si-1: 2979.4(13.40) 534.6 1.000 1.00
Si-2: 13302.8(59.82) 535.8 1.010 0.94
Si-3: 5956.0(26.78) 535.6 1.871 1.00
Si.png was created.
------------------------------------------------------------------------
# Initial position and boundary
# label: position hwmh G/L
O-1: (103, 106, 110) (1, 1, 3) (0, 0, 1)
O-2: (103, 107, 110) (1, 1, 3) (0, 0, 1)
# Output data
# label: I(%) position hwmh G/L
O-1: 1553.0(38.77) 106.5 1.467 1.00
O-2: 2452.2(61.23) 106.5 1.020 1.00
O.png was created.

フィッテングの数値データはoutファイルに保存されています。

Si.out

------------------------------------------------------------------------
# Initial position and boundary
# label position hwmh G/L
Si-1: (525, 535, 545) (1, 1, 3) (0, 0.5, 1)
Si-2: (526, 536, 546) (1, 1, 3) (0, 0.5, 1)
Si-3: (526, 537, 546) (1, 1, 3) (0, 0.5, 1)
# Output data
# label: I(%) position hwmh G/L
Si-1: 2979.4(13.40) 534.6 1.000 1.00
Si-2: 13302.8(59.82) 535.8 1.010 0.94
Si-3: 5956.0(26.78) 535.6 1.871 1.00
#        x      Iobs      back      Ical     ISi-1     ISi-2     ISi-3
    520.10   1818.60   1763.01      0.98      0.00      0.98      0.00
    520.20   1858.70   1771.35      0.99      0.00      0.99      0.00
    520.30   1821.20   1779.54      1.00      0.00      1.00      0.00
 .
 .
 .

O.out

------------------------------------------------------------------------
# Initial position and boundary
# label position hwmh G/L
O-1: (103, 106, 110) (1, 1, 3) (0, 0, 1)
O-2: (103, 107, 110) (1, 1, 3) (0, 0, 1)
# Output data
# label: I(%) position hwmh G/L
O-1: 1553.0(38.77) 106.5 1.467 1.00
O-2: 2452.2(61.23) 106.5 1.020 1.00
#        x      Iobs      back      Ical      IO-1      IO-2
     90.10    438.00    432.38      0.00      0.00      0.00
     90.20    444.40    433.26      0.00      0.00      0.00
     90.30    445.40    434.12      0.00      0.00      0.00
.
.
.

また次のようなpngファイルも保存されます。

fit.png

図1: フィッテング結果

研究室のページに戻る

著者: 大窪 貴洋(千葉大学)

Created: 2018-11-27 火 20:40

Validate