PythonでX線回折波形のシミュレーション(2)

PythonでX線回折波形を解析するためのパッケージ、xrayutilitiesを紹介します。
前回の記事では、X線回折波形の解析の準備として、結晶構造を定義する方法について紹介しました。
今回は定義した結晶構造に対して、構造因子や回折点、回折波形の計算方法について説明します。

前回の記事

構造因子の計算

X線回折を解析するために、避けては通れないのが構造因子の計算です。構造因子は次の数式であらわされます。

 F_{hkl} = \int _{V_{0}} \rho ({\bf z}) e ^{-q {\bf b \cdot z}} dV

Python初心者の私にはこの数式の計算を自分で実装することはできないので、xrayutilitiesで用意されている関数を使って計算してみましょう。

例えば、GaNの(001), (002), (004)の構造因子を計算するプログラムは次の通りです。
※GaNWZは自分で定義した結晶構造で、詳細は前回の記事を参考にしてください。

# defining material and experimental setup
en= 8048 # eV (CuKa)
# calculate the structure factor for GaN (001) (002) (004)
hkllist = [[0, 0, 1], [0, 0, 2], [0, 0, 4]]
for hkl in hkllist:
qvec = GaNWZ.Q(hkl)
F = GaNWZ.StructureFactor(qvec, en)
print(" |F| = %8.3f" % numpy.abs(F))

計算結果は、0, 49.113, 29.869となります。こんな簡単に計算できるなんて、、、

逆格子回折点の計算

逆格子マップを測定するときにどの逆格子点が測定可能か、事前に調べることで効率的に実験を進めることができます。
(逆格子マップ測定にかかる時間の長さに頭を抱えた人は多いはず)
けれど、逆格子点の計算は少々面倒。。。
そんな葛藤を吹き飛ばしてくれるのがxrayutilities!
逆格子点の計算も簡単に行うことができる(すごく便利!)
例えば、GaN, AlNの逆格子点を計算してみよう。

mat1 = GaNWZ
mat2 = AlNWZ
hxrd1 = xu.HXRD(mat1.Q(1, 0, 0), mat1.Q(0, 0, 1))
ax, h1 = xu.materials.show_reciprocal_space_plane(mat1, hxrd1, ttmax=180)
hxrd2 = xu.HXRD(mat2.Q(1, 0, 0), mat2.Q(0, 0, 1))
ax, h2 = xu.materials.show_reciprocal_space_plane(mat2, hxrd2, ax=ax)

たったこれだけで、下図のような逆格子点が描画できる。

2Θ-ωスキャンの波形を計算

積層構造の回折波形を計算することもできます。
※一つ注意事項としては、Dynamical Diffraction Modelでないと、薄層は計算できないようです。

# global parameters
wavelength = xu.wavelength('CuKa1')
offset = 0 # angular offset of the zero position of the data
#X線の波長と測定時のオフセットの設定
# set up LayerStack for simulation:GaN/AlGaN(~20nm)
lGaN = xu.simpack.Layer(GaN, inf)
lAlGaN = xu.simpack.Layer(AlGaN, 150, relaxation=1)
pstack = xu.simpack.PseudomorphicStack001('list', lGaN, lAlGaN)

まずは、積層構造を上記のように定義する。
後述の通り、回折波形を計算する際に測定面を指定する(hkl)。

twotheta=np.linspace(32,38,200)
md = xu.simpack.DynamicalModel(pstack, energy=en, resolution_width=0.0001)
Idyn = md.simulate(twotheta/2, hkl=(0, 0, 2))

plt.plot(twotheta/2,Idyn)
plt.yscale('log')
plt.show()

これでX線回折波形の計算ができるので、あとは実験データに対して、フィッティングする関数を作成すれば、実験データの解析を行うことができる。

ライブラリのインポート

上記のプログラムを実行するにあたって、最初に読み込むべきライブラリは次の通りです。

import matplotlib.pyplot as plt
import xrayutilities as xu
import numpy
from matplotlib.pylab import *

場合によっては使わないものもあるかもしれませんが、上記のプログラムを試される際にはこの通りに最初に宣言しておけば、問題ありません。

sciencompass34 has written 146 articles

はじめまして!”あおやぎ”と言います。
メーカーで研究開発の仕事をしています。このブログでは、私の専門分野である半導体やそれに関連する内容を紹介していきます。
半導体関連の知識をまとめたデータベースのようにしたいなと思っています。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください