XRD_diffraction_angles.py 技術ドキュメント

プログラムの動作

XRD_diffraction_angles.py は、Crystallographic Information File (CIF) 形式で記述された結晶構造データと、指定されたX線源(または波長)、および最大回折角 (\(2\theta\)) を入力として、X線回折のBragg角を計算するPythonスクリプトです。

主な機能:

  • CIFファイルから結晶構造(格子定数、原子サイト情報など)を読み込みます。

  • 標準的なX線源(例: CuKα1, MoKαなど)の波長を内蔵辞書から取得するか、ユーザーが直接波長を指定できます。

  • 指定された最大\(2\theta\)角までのMiller指数 (hkl) の組み合わせを探索します。

  • Braggの法則に基づき、各(hkl)面からの回折角 (\(2\theta\)) と面間隔 (\(d_{hkl}\)) を計算します。

  • 同じ\(2\theta\)値を持つ回折ピークをグループ化し、面間隔、Miller指数、および多重度と共に結果を標準出力とログファイルに表示します。

解決する課題:

このプログラムは、特定の結晶材料に対して理論的に予測されるX線回折パターン(ピーク位置)を提供します。これは、実験で得られたX線回折データと比較することで、未知の結晶相の同定、既知の結晶材料の格子定数の確認、あるいは回折ピークの帰属(インデキシング)を行う際の強力なツールとなります。

原理

プログラムは主に以下の物理式とアルゴリズムに基づいて回折角を計算します。

  1. 結晶構造の読み込み: tklib.tkcrystal.tkcif.tkCIF クラスを使用してCIFファイルを解析し、結晶構造データ(tkCrystalオブジェクト)を取得します。このオブジェクトから実格子の情報(格子定数、格子ベクトルなど)と逆格子の情報(逆格子ベクトル、逆格子メトリックテンソル Rgij)を取得します。

  2. 逆格子ベクトルの長さの計算: Miller指数 \((h, k, l)\) に対応する逆格子ベクトル \(\vec{G}_{hkl}\) の長さ \(G_{hkl}\) は、逆格子メトリックテンソル Rgij を用いて計算されます。これは distance(org, np.array([h, k, l]), Rgij) 関数によって行われます。ここで org は逆格子空間の原点 \((0,0,0)\) を表します。 逆格子ベクトル \(\vec{G}_{hkl}\)\(h\vec{a}^* + k\vec{b}^* + l\vec{c}^*\) と表され、その長さ \(G_{hkl}\) は面間隔 \(d_{hkl}\) の逆数に等しい (\(G_{hkl} = 1/d_{hkl}\))。 逆格子メトリックテンソル \(g^{*ij}\) を用いると、その二乗は以下のブロック数式で表されます。 $\(G_{hkl}^2 = h^2 g^{*11} + k^2 g^{*22} + l^2 g^{*33} + 2hk g^{*12} + 2kl g^{*23} + 2lh g^{*31}\)\( プログラムでは、`distance`関数がこの計算を実行します。`Gmin` は逆格子空間の原点 \)(0,0,0)$ に対応する自明な点を無視するための閾値です。

  3. 面間隔 \(d_{hkl}\) の計算: 逆格子ベクトルの長さ \(G_{hkl}\) が求まれば、対応する面間隔 \(d_{hkl}\) は以下のインライン数式で簡単に計算できます。 \(d_{hkl} = 1 / G_{hkl}\)

  4. Braggの法則による回折角の計算: X線回折のBraggの法則は以下のブロック数式で与えられます。 $\(2 d_{hkl} \sin\theta = n \lambda\)\( ここで、\)d_{hkl}\( は面間隔、\)n\( は回折次数(通常は \)1\( と仮定)、\)\lambda\( はX線の波長、\)2\theta\( は回折角です。 \)n=1\( と仮定すると、\)\sin\theta = \frac{\lambda}{2 d_{hkl}}\( となります。 プログラムでは `sinQ = wl / 2.0 / d` と記述されています。 回折角 \)2\theta\( は、以下のインライン数式で計算されます。 \)2\theta = 2 \arcsin \left( \frac{\lambda}{2 d_{hkl}} \right)\( プログラムでは `Q2 = 2.0 * todeg * arcsin(sinQ)` と記述されており、`todeg` はラジアンを度へ変換する定数です。 計算された \)2\theta\( が `Q2max`(最大\)2\theta$角)を超えないピークのみが考慮されます。

  5. ピークの整理と多重度: 計算されたピークは\(2\theta\)の昇順にソートされ、同じ\(2\theta\)値を持つピークはグループ化されます。cry.multiplicity_hkl(h, k, l) 関数は、結晶の対称性に基づいて特定の(hkl)面に等価な面の数を計算し、その多重度 \(m\) として表示します。

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

このプログラムは以下の非標準Pythonライブラリに依存しています。

  • numpy: 数値計算、特に配列操作や三角関数計算に使用されます。

    • インストール方法:

      pip install numpy
      
  • matplotlib: グラフ描画ライブラリですが、このプログラムの主要な機能(回折角計算とテキスト出力)では直接使用されていません。もし将来的にプロット機能が有効にされた場合に使用されます。

    • インストール方法:

      pip install matplotlib
      
  • tklib: このプログラムは tklib パッケージ(tklib.tkapplication, tklib.tkutils, tklib.tkfile, tklib.tkcrystal など)および tkcrystalbase モジュールに強く依存しています。これらは一般的な pip コマンドでインストールできる標準的なライブラリではなく、このプログラムが動作する環境で別途提供されるか、適切に配置されている必要があります。具体的なインストールコマンドは提供できません。

必要な入力ファイル

プログラムの実行には、解析対象となる結晶の構造情報が記述された CIF (Crystallographic Information File) が必要です。

  • ファイル形式: CIF (Crystallographic Information File) 標準形式。

  • データ構造: 少なくとも以下の情報が含まれている必要があります。

    • 格子定数 (a, b, c, α, β, γ)

    • 空間群 (space group)

    • 原子のサイト座標 (x, y, z)

  • デフォルトファイル名: プログラムのデフォルト設定では SrTiO3.cif が期待されます。コマンドライン引数で異なるファイルを指定することも可能です。

例 (SrTiO3.cifの簡略版):

#_chemical_name_common                   Strontium Titanate
_cell_length_a                           3.905
_cell_length_b                           3.905
_cell_length_c                           3.905
_cell_angle_alpha                        90.00
_cell_angle_beta                         90.00
_cell_angle_gamma                        90.00
_symmetry_space_group_name_H-M           'P 1'
_space_group_IT_number                   1
loop_
  _atom_site_label
  _atom_site_type_symbol
  _atom_site_fract_x
  _atom_site_fract_y
  _atom_site_fract_z
  Sr1 Sr 0.0000 0.0000 0.0000
  Ti1 Ti 0.5000 0.5000 0.5000
  O1 O 0.5000 0.5000 0.0000
  O2 O 0.5000 0.0000 0.5000
  O3 O 0.0000 0.5000 0.5000

生成される出力ファイル

プログラムは実行結果を標準出力に表示するとともに、ログファイルとしてディスクに保存します。

  • ファイル名: 入力CIFファイル名に基づいて自動的に生成されます。具体的には、入力ファイル名が [filebody].cif であった場合、出力ファイル名は [filebody]-out.txt となります。 例: SrTiO3.cif を入力とした場合、SrTiO3-out.txt が生成されます。

  • 内容:

    • プログラムの実行パラメータ(入力ファイル、ログファイル、X線源、波長、最大\(2\theta\)角)。

    • 読み込まれた結晶構造の概要(格子定数、格子系、単位胞体積など)。

    • 計算されたX線回折ピークのリスト。このリストには、Miller指数 (hkl)、面間隔 (\(d_{hkl}\))、多重度 (\(m\))、および回折角 (\(2\theta\)) が含まれます。

    • 以下は出力の一部例です。

    Diffraction angle, d, h, k, l:
     h  k  l   m    dhkl    2Theta
     1  0  0   6    3.905000   22.766347
     1  1  0  12    2.761560   32.553935
     1  1  1   8    2.254756   40.063345
     2  0  0   6    1.952500   46.331575
    

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

プログラムはコマンドライン引数を受け付けて動作をカスタマイズできます。

python XRD_diffraction_angles.py [CIFファイル名] [X線源または波長] [最大2Theta角]
  • [CIFファイル名]: 解析対象のCIFファイルのパスを指定します。デフォルト値は SrTiO3.cif です。

  • [X線源または波長]: 使用するX線源の種類(例: CuKa1, MoKa, FeKa など)を指定します。または、直接X線の波長をオングストローム (Å) 単位で数値として指定することも可能です。デフォルト値は CuKa1 です。

  • [最大2Theta角]: 計算および表示する回折角 \(2\theta\) の最大値を度 (degree) 単位で指定します。デフォルト値は 150.0 度です。

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

以下の例では、入力ファイルとして SrTiO3.cif が現在のディレクトリに存在し、有効な内容であると仮定します。

  1. デフォルト設定で実行する: 最も基本的な実行方法です。デフォルトの入力ファイル (SrTiO3.cif)、デフォルトのX線源 (CuKa1)、およびデフォルトの最大\(2\theta\)角 (150.0 度) が使用されます。

    python XRD_diffraction_angles.py
    

    実行結果の説明: SrTiO3.cif から結晶構造が読み込まれ、CuKα1線 (\(\lambda = 1.54056\) Å) を用いた場合の、\(2\theta\)が150度までのX線回折ピークが計算されます。結果は標準出力と SrTiO3-out.txt ファイルに出力されます。

  2. 特定のCIFファイルとX線源を指定して実行する: 入力ファイルを my_sample.cif に、X線源を MoKa に変更して実行します。

    python XRD_diffraction_angles.py my_sample.cif MoKa
    

    実行結果の説明: my_sample.cif から結晶構造が読み込まれ、MoKα線 (\(\lambda = 0.71073\) Å) を用いた場合の、\(2\theta\)が150度までのX線回折ピークが計算されます。結果は標準出力と my_sample-out.txt ファイルに出力されます。

  3. 全ての引数を指定して実行する: 入力ファイルを new_material.cif に、X線波長を直接 1.234 Å に、最大\(2\theta\)角を 90.0 度に設定して実行します。

    python XRD_diffraction_angles.py new_material.cif 1.234 90.0
    

    実行結果の説明: new_material.cif から結晶構造が読み込まれ、波長 1.234 Å のX線を用いた場合の、\(2\theta\)が90度までのX線回折ピークが計算されます。結果は標準出力と new_material-out.txt ファイルに出力されます。