Fhkl.py 技術ドキュメント

プログラムの動作

Fhkl.py は、X線回折に関連する原子および結晶の特性(原子散乱因子、異常散乱因子、結晶構造因子)を計算し、その結果をテキスト出力およびグラフとして可視化するPythonプログラムです。

主な機能は以下の4つのモードに分けられます。

  • 原子散乱因子 (Atomic Scattering Factor, asf モード): 特定の原子に対し、X線の散乱ベクトル \(s\) の関数としての原子散乱因子 \(f(s)\) を計算し、グラフとしてプロットします。

  • 異常散乱因子 (Anomalous Scattering Factor, anom モード): 特定の原子に対し、X線の波長の関数としての異常散乱因子 \(f'\) (実部) と \(f''\) (虚部) を計算し、グラフとしてプロットします。

  • 結晶構造因子 (Crystal Structure Factor, F モード): CIF (Crystallographic Information File) ファイルで定義された結晶構造に対し、指定されたミラー指数 \((hkl)\) の結晶構造因子 \(F_{hkl}\) を計算し、関連する情報(面間隔、回折角、構成原子の原子散乱因子など)を表示・プロットします。

  • 結晶構造情報 (Information, inf モード): CIFファイルに記述されている結晶の構造情報を詳細に表示します。

このプログラムは、X線回折実験の解析や設計において、物質の原子レベルおよび結晶レベルでのX線散乱特性を理解し、予測するために利用できます。

原理

Fhkl.py は、主に以下の物理的および数学的原理に基づいています。

  • 原子散乱因子 (Atomic Scattering Factor, \(f(s)\)) X線が原子によって散乱される際、原子内の電子分布によって散乱波の振幅と位相が変化します。これを記述するのが原子散乱因子 \(f(s)\) です。\(s\) は散乱ベクトルであり、\(s = \frac{\sin\theta}{\lambda}\) で定義されます。ここで \(\theta\) はブラッグ角、\(\lambda\) はX線の波長です。 \(f(s)\) は通常、International Tables for Crystallography に記載されているようなガウス関数の和で近似されます。

    \[f(s) = \sum_{i=1}^4 a_i \exp(-b_i s^2) + c\]

    ここで、\(a_i, b_i, c\) は原子種によって異なる定数であり、プログラムはこれらのパラメータを内部データベースから取得して \(f(s)\) を計算します。

  • 異常散乱因子 (Anomalous Scattering Factor, \(f'\) および \(f''\)) 入射X線のエネルギーが原子の電子の吸収端エネルギーに近い場合、原子散乱因子は波長(またはエネルギー)に強く依存し、複素数となります。これを異常散乱と呼び、通常の原子散乱因子 \(f_0\) に加えて、実部の分散項 \(f'\) と虚部の吸収項 \(f''\) が考慮されます。

    \[f = f_0 + f' + i f''\]

    これらの項 \(f'\)\(f''\) は波長の関数であり、プログラムは内部データベースから取得したデータを用いて計算・プロットします。

  • 結晶構造因子 (Crystal Structure Factor, \(F_{hkl}\)) 結晶全体からのX線散乱の振幅と位相を表すのが結晶構造因子 \(F_{hkl}\) です。これはミラー指数 \((hkl)\) で指定される特定の回折面からのX線回折強度を決定する基本的な因子です。\(F_{hkl}\) は結晶中のすべての原子の原子散乱因子 \(f_j\) とその位置 \((x_j, y_j, z_j)\) を用いて以下のように表されます。

    \[F_{hkl} = \sum_j f_j \exp\left(2\pi i (h x_j + k y_j + l z_j)\right) \exp\left(-M_j\right)\]

    ここで、\(j\) は結晶非対称単位内の原子のインデックス、\(f_j\)\(j\) 番目の原子の原子散乱因子、\(x_j, y_j, z_j\)\(j\) 番目の原子の単位格子内での分数座標、\(M_j\) はデバイ・ウォーラー因子(熱振動による散乱強度の減少を表す項)です。プログラムはCIFファイルを解析し、この式に基づいて \(F_{hkl}\) を計算します。

  • 回折角と面間隔 X線回折の基本原理であるブラッグの法則 \(n\lambda = 2d \sin\theta\) により、入射X線の波長 \(\lambda\) と回折角 \(2\theta\) から結晶面の面間隔 \(d_{hkl}\) を求めることができます。ここで \(n\) は整数です。プログラムは結晶の格子パラメータとミラー指数から面間隔 \(d_{hkl}\) を計算し、対応するブラッグ角 \(2\theta\) を導出します。

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

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

  1. numpy: 数値計算のための基本的なライブラリです。

    • インストール方法:

      pip install numpy
      
  2. scipy: 科学技術計算のためのライブラリです。特に scipy.interpolate を使用しています。

    • インストール方法:

      pip install scipy
      
  3. matplotlib: グラフ描画のためのライブラリです。

    • インストール方法:

      pip install matplotlib
      
  4. tklib: 本プログラムは tklib というカスタムライブラリ内のモジュール(tkfile, tkutils, tkcrystal.tkcif, tkcrystal.tkcrystal, tkcrystal.tkatomtype)に強く依存しています。このライブラリは標準の pip リポジトリでは提供されていません。

    • インストール方法: tklib は通常、特定のGitHubリポジトリからソースコードをクローンし、Pythonのパスが通っているディレクトリ(例: Fhkl.py と同じディレクトリ、またはPythonのサイトパッケージディレクトリ)に配置することで利用可能になります。具体的な入手先については、別途提供元にお問い合わせください。

必要な入力ファイル

  • CIF_file (Crystallographic Information File)

    • 形式: .cif 拡張子を持つテキストファイル。

    • 内容: 結晶の空間群、格子定数、原子の種類、原子の単位格子内での位置などの構造情報が記述されています。

    • 用途: 結晶構造因子の計算 (F モード) および結晶構造情報の表示 (inf モード) に必要です。

    test.cif の例:

    # 例として、単純な立方晶のCIFファイルの一部を示します。
    data_example_crystal
    _cell_length_a           3.615
    _cell_length_b           3.615
    _cell_length_c           3.615
    _cell_angle_alpha        90.00
    _cell_angle_beta         90.00
    _cell_angle_gamma        90.00
    _space_group_IT_number   225
    _symmetry_space_group_name_H-M 'F m -3 m'
    loop_
    _atom_site_label
    _atom_site_type_symbol
    _atom_site_fract_x
    _atom_site_fract_y
    _atom_site_fract_z
    _atom_site_occupancy
    Ni Ni 0.0 0.0 0.0 1.0
    

生成される出力ファイル

Fhkl.py は、実行モードに応じて計算結果とプロットを標準出力および画面上のグラフウィンドウに表示しますが、ファイルとして結果を直接出力することはありません

  • 標準出力:

    • 各モードにおける計算結果(例: 波長、原子情報、散乱因子、結晶構造因子、回折角、面間隔など)がテキスト形式で表示されます。

    • CIFファイルの内容や結晶構造の詳細情報も表示されます。

  • グラフウィンドウ:

    • asf モード: 対象原子の原子散乱因子 \(f(s)\) のグラフが表示されます。

    • anom モード: 対象原子の異常散乱因子 \(f'(\lambda)\)\(f''(\lambda)\) のスペクトルグラフがそれぞれ別のサブプロットとして表示されます。

    • F モード: CIFファイル内の各原子種の原子散乱因子 \(f(s)\) のグラフが表示されます。

  • 終了操作: グラフ表示後、「Press ENTER to exit>>」のプロンプトが表示され、Enterキーを押すことでプログラムが終了します。

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

Usage:
  (Ia)  python Fhkl.py asf target_atom xray_source smin smax ns s_value plot_scale
      plot atomic form factor function for target_atom
      ex: python Fhkl.py asf Ni CuKa1 0.0 20.0 31 0.1 linear
  (Ib)  python Fhkl.py anom target_atom wl_min wl_max wl_value wl_scale
      plot anomalous scattering factor spectrum for target_atom
      ex: python Fhkl.py anom Ni None None None linear
  (IIa) python Fhkl.py F CIF_file xray_source h k l
      calculate crystal structure factor for the CIF specified by ciffile
          plot_scale: 'linear', 'log'
     ex: python Fhkl.py F test.cif CuKa1 5 1 3
  (IIb) python Fhkl.py inf CIF_file
      show crystal structure information for the CIF specified by ciffile
     ex: python Fhkl.py inf test.cif

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

1. 原子散乱因子 (Atomic Scattering Factor) の計算とプロット

  • 目的: 銅 (Cu) のKα1線源に対するニッケル (Ni) の原子散乱因子 \(f(s)\) を、散乱ベクトル \(s\) の範囲 0.0 から 20.0 nm\(^{-1}\) で31点計算し、\(s=0.1\) nm\(^{-1}\) の値を強調して線形スケールでプロットします。

python Fhkl.py asf Ni CuKa1 0.0 20.0 31 0.1 linear
  • 実行結果:

    • X線源 CuKa1 の波長 (0.15405 nm) が表示されます。

    • ターゲット原子であるニッケル (Ni) の原子番号、質量、原子散乱因子パラメータなどの情報が表示されます。

    • \(s = 0.1\) nm\(^{-1}\) における \(f(s)\) の値 (asf(s=0.1) = ...) が出力されます。

    • \(s\) の範囲における \(f(s)\) の計算結果が表形式で標準出力に表示されます。

    • 原子散乱因子 \(f(s)\) をプロットしたグラフウィンドウがポップアップ表示されます。横軸は散乱ベクトル \(s\) (nm\(^{-1}\))、縦軸は \(f(s)\) の実部です。\(s=0.1\) nm\(^{-1}\) の計算点にはマーカーが付けられます。

    • グラフウィンドウで Press ENTER to exit>> と表示され、Enterキーを押すとプログラムが終了します。

2. 異常散乱因子 (Anomalous Scattering Factor) の計算とプロット

  • 目的: ニッケル (Ni) の異常散乱因子 \(f'\)\(f''\) を全波長範囲で線形スケールでプロットします。None を指定することで、デフォルトの全波長範囲でスペクトルを表示し、特定の波長での値は強調しません。

python Fhkl.py anom Ni None None None linear
  • 実行結果:

    • ターゲット原子であるニッケル (Ni) の情報が表示されます。

    • 異常散乱因子のデータが読み込まれたデータベースパスが表示されます。

    • エネルギー (eV)、波長 (nm)、\(f'\)\(f''\) の値が表形式で標準出力に表示されます。

    • 異常散乱因子 \(f'\)\(f''\) のスペクトルグラフが、それぞれ異なるサブプロットとしてグラフウィンドウに表示されます。横軸は波長 (nm) です。

    • グラフウィンドウで Press ENTER to exit>> と表示され、Enterキーを押すとプログラムが終了します。

3. 結晶構造因子 (Crystal Structure Factor) の計算とプロット

  • 目的: test.cif ファイルで定義された結晶構造に対し、銅 (Cu) Kα1線源を使用して、ミラー指数 \((5, 1, 3)\) の結晶構造因子 \(F_{513}\) を計算し、関連情報を表示します。また、構成原子の原子散乱因子 \(f(s)\) もプロットします。

python Fhkl.py F test.cif CuKa1 5 1 3
  • 実行結果:

    • X線源 CuKa1 の波長 (0.15405 nm) とCIFファイル名、処理フラグが表示されます。

    • test.cif ファイルが読み込まれ、結晶の格子パラメータ、存在する原子種、原子サイトの拡張リスト(位置、占有率など)の詳細情報が標準出力に表示されます。

    • 指定されたミラー指数 \((5, 1, 3)\) に対する回折角 \(2\theta_B\) (度)、面間隔 \(d_{513}\) (Å)、散乱ベクトル \(s_B\) (nm\(^{-1}\)) の値が表示されます。

    • \(s_B\) における各構成原子の原子散乱因子 \(f(s_B)\) の値が表示されます。

    • 最終的な結晶構造因子 \(F_{513}\) の値 (F(5 1 3) = ...) が出力されます。

    • CIFファイル内の各原子種について、散乱ベクトル \(s\) の範囲における \(f(s)\) の計算結果が表形式で表示されます。

    • 各原子種の原子散乱因子 \(f(s)\) をプロットしたグラフウィンドウがポップアップ表示されます。横軸は散乱ベクトル \(s\) (nm\(^{-1}\))、縦軸は \(f(s)\) の実部です。計算された \(s_B\) の点にはマーカーが付けられます。

    • グラフウィンドウで Press ENTER to exit>> と表示され、Enterキーを押すとプログラムが終了します。

4. 結晶構造情報の表示

  • 目的: test.cif ファイルに記述されている結晶構造に関する詳細情報を表示します。

python Fhkl.py inf test.cif
  • 実行結果:

    • test.cif ファイルが読み込まれ、CIFデータオブジェクトが持つ生の情報 (cifdata.Print()) が詳細に表示されます。これには、CIFファイルのメタデータ、データブロック情報、ループデータなどが含まれます。

    • 続いて、結晶オブジェクトが持つ情報 (cry.PrintInf()) が表示されます。これには、格子パラメータ、空間群、非対称単位内の原子の情報、対称操作、拡張原子サイトなどが含まれます。

    • すべての情報が表示された後、プログラムは自動的に終了します。