以下は、atominf_xrayutilities.py スクリプトのMyST形式のMarkdownドキュメントです。
# ``atominf_xrayutilities.py``
## 概要
このPythonスクリプトは、X線反射率測定 (XRR) のシミュレーションを実行するためのツールです。
``xrayutilities`` および ``pymatgen`` ライブラリを使用して、多層膜サンプルのXRRプロファイルを計算し、プロットします。また、CIFファイルから結晶構造情報を読み込み、シミュレーションに利用する機能もサポートしています。
## 非標準ライブラリ
このスクリプトは以下の非標準ライブラリに依存しています。これらは ``pip`` を使用してインストールできます。
```bash
pip install xrayutilities pymatgen matplotlib numpy
関数
gcm3_to_kgm3(rho)
密度をg/cm³からkg/m³に変換します。
引数:
rho(floatまたはint): 密度 (g/cm³)。
戻り値:
float: 密度 (kg/m³)。
nm_to_A(t_nm)
厚さをナノメートル(nm)からオングストローム(A)に変換します。
引数:
t_nm(floatまたはint): 厚さ (nm)。
戻り値:
float: 厚さ (A)。
is_cif_path(s)
与えられた文字列がCIFファイルのパスであるかを判定します。
文字列が str 型であり、.cif で終わる場合に True を返します(大文字・小文字を区別しません)。
引数:
s(str): 判定する文字列。
戻り値:
bool: CIFファイルパスであればTrue、そうでなければFalse。
load_from_cif(path)
指定されたCIFファイルから構造、化学式、密度を読み込みます。
pymatgen を使用してCIFファイルを解析し、Structure オブジェクト、還元化学式、および密度 (g/cm³) を抽出します。
引数:
path(str): CIFファイルへのパス。
戻り値:
tuple[pymatgen.core.Structure, str, float]:structure(pymatgen.core.Structure): 読み込まれた結晶構造オブジェクト。formula(str): 構造の還元化学式。density(float): 構造の密度 (g/cm³)。
main() 関数
多層膜のXRRシミュレーションを実行し、結果をプロットします。
層構造と基板の情報を定義し、それらから xrayutilities の LayerStack オブジェクトを構築します。
その後、XRRモデルを使用して反射率プロファイルを計算し、matplotlib で表示します。
CIFファイルからの層情報の読み込みもサポートしています。
主要処理
main() 関数は以下のステップでXRRシミュレーションを実行します。
層構造の定義 多層膜の各層と基板の情報は、Pythonのリストと辞書で定義されます。
layer_stack: 各層の組成 ("composition")、密度 ("density_gcm3")、厚さ ("thickness_nm")、粗さ ("roughness_A") を含む辞書のリストです。組成には化学式文字列またはCIFファイルパスを指定できます。substrate: 基板の組成、密度、粗さを含む辞書です。
例:
layer_stack = [ {"composition": "TiO2", "density_gcm3": 4.23, "thickness_nm": 50.0, "roughness_A": 0.5}, {"composition": "Al2O3", "density_gcm3": 3.95, "thickness_nm": 30.0, "roughness_A": 0.5}, {"composition": "SiO2", "density_gcm3": 2.20, "thickness_nm": 100.0, "roughness_A": 0.5}, # {"composition": "sample.cif", "density_gcm3": 0.0, "thickness_nm": 10.0, "roughness_A": 0.5}, ] substrate = {"composition": "Si", "density_gcm3": 2.33, "roughness_A": 0.5}
分子量の表示 定義された各層の化学組成(またはCIFファイルから読み込んだ化学式)について、
pymatgen.core.Compositionを使用して分子量を計算し、コンソールに表示します。基板の構築
substrateの情報をもとに、xrayutilities.materials.Amorphousオブジェクトで基板材料を定義します。密度はgcm3_to_kgm3()関数でkg/m³に変換されます。 この材料と無限の厚さ (float("inf"))、定義された粗さを用いて、xrayutilities.simpack.Layerオブジェクトとして基板を構築します。薄膜層の構築
layer_stackに定義された各層について、以下の処理を行います。層の組成がCIFファイルパスであれば、
load_from_cif()関数を使用して構造、化学式、および密度を読み込みます。層定義で密度が0.0以下の場合、CIFファイルから読み込んだ密度が使用されます。各層の材料を
xrayutilities.materials.Amorphousオブジェクトとして定義します。密度はgcm3_to_kgm3()関数で変換されます。各層の厚さは
nm_to_A()関数でオングストロームに変換されます。材料、厚さ、粗さを用いて
xrayutilities.simpack.Layerオブジェクトを構築し、先に構築した基板のLayerStackに順次追加していきます。最終的に、すべての層を含む
xrayutilities.simpack.LayerStackオブジェクトが"sample"という名前で作成されます。
XRRシミュレーション
構築された
LayerStack(sample) を用いて、xrayutilities.simpack.SpecularReflectivityModelオブジェクトを初期化します。X線エネルギーは
"CuKa1"に固定されています。角度範囲
alphaiは0.05度から2.5度までを2000点で線形にサンプリングされます。model.simulate(alphai)メソッドを呼び出し、XRR反射率Rを計算します。計算された入射角
alphaiを2倍してtwo_theta角度を計算します。
結果のプロット
matplotlib.pyplotを使用して、計算されたtwo_theta対反射率Rのプロファイルをプロットします。Y軸は対数スケール (
plt.semilogy) で表示されます。グラフには
"2θ (deg)"のX軸ラベル、"Reflectivity"のY軸ラベル、および"Multilayer XRR Simulation"のタイトルが設定されます。グリッドが表示され、レイアウトが自動調整された後、
plt.show()によってプロットウィンドウが表示されます。
使用方法
このスクリプトはPythonインタープリタで直接実行することを想定しています。
必要なライブラリがインストールされていることを確認します。
pip install xrayutilities pymatgen matplotlib numpy
スクリプトを保存し、ターミナルまたはコマンドプロンプトから実行します。
python atominf_xrayutilities.pyスクリプト内の
layer_stackおよびsubstrate変数を編集することで、シミュレーションする多層膜の構造を変更できます。 例えば、コメントアウトされているCIFファイルの読み込み部分を有効にすることで、CIFファイルから層の情報をロードできます。# {"composition": "sample.cif", "density_gcm3": 0.0, "thickness_nm": 10.0, "roughness_A": 0.5},上記のようにCIFファイルパスを
"composition"に指定し、密度を0.0に設定すると、CIFファイルから読み込まれた密度が使用されます。
入出力
入力
スクリプト内定義:
main()関数内のlayer_stackリストとsubstrate辞書で定義される多層膜の構造情報(組成、密度、厚さ、粗さ)。CIFファイル: 必要に応じて、層の組成として指定された
.cif拡張子を持つファイル。これらのファイルはpymatgenによって解析され、構造、化学式、密度が抽出されます。
出力
標準出力 (コンソール):
各層の化学組成とその分子量 (
g/mol)。
グラフィカル出力:
matplotlibによって生成されるXRRシミュレーション結果のプロットウィンドウ。X軸は2θ(度)、Y軸は反射率(対数スケール)です。