以下は、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シミュレーションを実行し、結果をプロットします。

層構造と基板の情報を定義し、それらから xrayutilitiesLayerStack オブジェクトを構築します。 その後、XRRモデルを使用して反射率プロファイルを計算し、matplotlib で表示します。 CIFファイルからの層情報の読み込みもサポートしています。

主要処理

main() 関数は以下のステップでXRRシミュレーションを実行します。

  1. 層構造の定義 多層膜の各層と基板の情報は、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}
    
  2. 分子量の表示 定義された各層の化学組成(またはCIFファイルから読み込んだ化学式)について、pymatgen.core.Composition を使用して分子量を計算し、コンソールに表示します。

  3. 基板の構築 substrate の情報をもとに、xrayutilities.materials.Amorphous オブジェクトで基板材料を定義します。密度は gcm3_to_kgm3() 関数でkg/m³に変換されます。 この材料と無限の厚さ (float("inf"))、定義された粗さを用いて、xrayutilities.simpack.Layer オブジェクトとして基板を構築します。

  4. 薄膜層の構築 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" という名前で作成されます。

  5. XRRシミュレーション

    • 構築された LayerStack (sample) を用いて、xrayutilities.simpack.SpecularReflectivityModel オブジェクトを初期化します。

    • X線エネルギーは "CuKa1" に固定されています。

    • 角度範囲 alphai0.05 度から 2.5 度までを 2000 点で線形にサンプリングされます。

    • model.simulate(alphai) メソッドを呼び出し、XRR反射率 R を計算します。

    • 計算された入射角 alphai を2倍して two_theta 角度を計算します。

  6. 結果のプロット

    • matplotlib.pyplot を使用して、計算された two_theta 対反射率 R のプロファイルをプロットします。

    • Y軸は対数スケール (plt.semilogy) で表示されます。

    • グラフには "2θ (deg)" のX軸ラベル、"Reflectivity" のY軸ラベル、および "Multilayer XRR Simulation" のタイトルが設定されます。

    • グリッドが表示され、レイアウトが自動調整された後、plt.show() によってプロットウィンドウが表示されます。

使用方法

このスクリプトはPythonインタープリタで直接実行することを想定しています。

  1. 必要なライブラリがインストールされていることを確認します。

    pip install xrayutilities pymatgen matplotlib numpy
    
  2. スクリプトを保存し、ターミナルまたはコマンドプロンプトから実行します。

    python atominf_xrayutilities.py
    
  3. スクリプト内の 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軸は (度)、Y軸は反射率(対数スケール)です。