slxrd.py 技術ドキュメント

プログラムの動作

slxrd.py は、X線回折シミュレーションを行うPythonプログラムです。特に、複数の異なる単位格子から構成される層状構造(多層膜)のX線回折強度を、指定された2θ範囲で計算します。計算された回折パターンはCSVファイルとして出力されるとともに、matplotlib を用いてグラフとしてリアルタイムに表示されます。

プログラムは、ソースコード内に直接記述された構造パラメータ(単位格子長 \(a\)、構造因子 \(F\)、繰り返し数 \(N\)、および層の積層順序)に基づいてシミュレーションを実行します。これにより、研究者は様々な層状構造のX線回折パターンを容易に予測し、実験データと比較することが可能になります。

原理

本プログラムは、層状構造からのX線回折を計算するために、以下の物理学的な原理と数式を利用しています。

  1. X線波長 (\( \lambda \)): X線の波長はプログラム内で wl として定義されており、回折現象の基本パラメータです。

  2. 回折角 (\( \theta \)): Braggの法則 (\(2d \sin\theta = n\lambda\)) に基づき、結晶面間隔 \(d\) から回折角 \(\theta\) を計算します。プログラム内では \(2\theta\) の範囲で計算を行います。diffQ 関数は以下の式で \(\theta\) を計算します。 $\( \sin\theta = \frac{\lambda}{2d} \)\( ここで、\)d\( は単位格子長 \)a\( を回折指数 \)l\( で割った値 (\)d_{00l} = a/l$) となります。

  3. Laue関数: 各単位格子層からの回折波の振幅は、Laue関数 cLaue を用いて計算されます。これは、有限の結晶サイズを持つ層からの回折波の干渉効果を表します。 Laue関数 \(L(2\theta, N, a, \lambda)\) は以下の複素数で定義されます。

    \[ L(Q_2, N, a, \lambda) = \frac{1 - e^{i2\pi N \Delta}}{1 - e^{i2\pi \Delta}} \]

    ここで、 $\( \Delta = \frac{2a \sin(\theta)}{\lambda} \)\( であり、\)Q_2\( は \)2\theta\( に対応し、\)Q_2/2\( が \)\theta\( に対応します。\)N\( は単位格子の繰り返し数、\)a\( は単位格子長、\)i$ は虚数単位です。

  4. 多層膜の構造因子 (\(F\)): 多層膜全体からの回折波の総構造因子 \(F(2\theta)\) は、各層からの回折波の振幅と位相を合計することで計算されます。 $\( F(2\theta) = \sum_{l} F_l \cdot L_l(2\theta) \cdot e^{i 2\pi \frac{2 t_l \sin(\theta)}{\lambda}} \)\( ここで、\)F_l\( は \)l\( 番目の層の単位格子の構造因子、\)L_l(2\theta)\( は \)l\( 番目の層のLaue関数、\)t_l\( は \)l\( 番目の層の中心までの累積厚さ(各層の \)a \cdot N\( の合計)です。 位相因子 \)e^{i 2\pi \frac{2 t_l \sin(\theta)}{\lambda}}$ は、積層構造における各層からの回折波の相対的な位相差を表します。

  5. 回折強度 (\(I\)): 最終的な回折強度 \(I(2\theta)\) は、全体の構造因子 \(F(2\theta)\) の絶対値の2乗として計算されます。 $\( I(2\theta) = |F(2\theta)|^2 = F(2\theta) \cdot F^*(2\theta) \)\( ここで、\)F^*(2\theta)\( は \)F(2\theta)$ の複素共役です。

必要な非標準ライブラリとインストール方法

このプログラムは、以下の非標準Pythonライブラリを使用します。

  • numpy: 数値計算を効率的に行うためのライブラリ。

  • matplotlib: データの可視化(グラフ描画)を行うためのライブラリ。

これらのライブラリは、Pythonのパッケージ管理システム pip を使用してインストールできます。コマンドプロンプトやターミナルで以下のコマンドを実行してください。

pip install numpy matplotlib

必要な入力ファイル

本プログラムは、外部ファイルからの入力を必要としません。 シミュレーションで使用されるすべての構造パラメータ(各単位格子の a (単位格子長)、F (構造因子)、N (繰り返し数)、および層の積層順序を定義する layers)は、プログラムのソースコード内に大域変数として直接記述されています。

ユーザーは、slxrd.py のソースコードを直接編集することで、これらのパラメータを変更し、異なる層状構造のシミュレーションを行うことができます。

例:

# 単位格子: c軸長、構造因子、繰り返し数
cells = [
            {'a': 4.0, 'F': 10.0, 'N': 5},
            {'a': 4.1, 'F': 20.0, 'N': 5},
        ]
# 層構造: cellsの番号で指定
layers = [ 0, 1 ] # cell #0 と cell #1 をこの順で積層

生成される出力ファイル

プログラムの実行後、以下のファイルが生成されます。

  • slxrd.csv:

    • 内容: 計算されたX線回折パターンを示すデータが含まれるカンマ区切り(CSV)形式のテキストファイルです。

    • データ構造: 2列構成で、1行目はヘッダ行です。

      • 1列目: 2Q (2θ角度、度単位)

      • 2列目: Intensity (相対強度)

    • このファイルは、他のデータ解析ソフトウェアでの利用や、長期保存のために使用できます。

コマンドラインでの使用例 (Usage)

slxrd.py はコマンドライン引数を取らないため、標準的なPythonスクリプトとして実行します。

python slxrd.py

コマンドラインでの具体的な使用例

  1. プログラムの実行: コマンドプロンプトまたはターミナルを開き、slxrd.py ファイルが保存されているディレクトリに移動して、以下のコマンドを実行します。

    python slxrd.py
    
  2. 実行結果:

    • 標準出力: プログラムの実行中、各単位格子および繰り返し単位格子単位での概算回折角度(2θ)と相対強度がターミナルに表示されます。これは、プログラムが主要なピーク位置をどのように認識しているかの目安となります。

      Diffraction angles from each unit cell
      cell #0: a=4.0 F=10.0 N=5
        2Q(00 1)=  22.2570   I =     25 =   25 /    1
        2Q(00 2)=  45.7196   I =     25 =   25 /    1
      ...
      Diffraction angles from each periodic unit cells unit
      unit #0: a=4.0 F=10.0 N=5
        2Q( 1)=  22.2570   I =     25 =   25 /    1
        2Q( 2)=  45.7196   I =     25 =   25 /    1
      ...
      Write to [slxrd.csv]
      
    • ファイル生成: 実行ディレクトリに slxrd.csv という名前のCSVファイルが新しく作成されます。このファイルには、計算された2θ角度とそれに対応するX線回折強度のデータが格納されています。

      slxrd.csv の内容例:

      2Q,Intensity
      5.0,0.000000000000000000e+00
      5.029000000000000000e+00,0.000000000000000000e+00
      5.058000000000000000e+00,0.000000000000000000e+00
      ...
      
    • グラフ表示: matplotlib によって、計算されたX線回折パターンを示すグラフウィンドウが表示されます。X軸が2θ、Y軸が強度を示します。このグラフは、プログラムが生成する視覚的な出力であり、回折パターンの全体像を即座に確認するのに役立ちます。

      グラフが表示された後、「Press ENTER to exit」というメッセージがターミナルに表示され、ユーザーがEnterキーを押すまでプログラムは待機します。Enterキーを押すと、グラフウィンドウが閉じられ、プログラムが終了します。