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\) を導出します。
必要な非標準ライブラリとインストール方法
本プログラムは、標準ライブラリの他に以下の非標準ライブラリに依存しています。
numpy: 数値計算のための基本的なライブラリです。インストール方法:
pip install numpy
scipy: 科学技術計算のためのライブラリです。特にscipy.interpolateを使用しています。インストール方法:
pip install scipy
matplotlib: グラフ描画のためのライブラリです。インストール方法:
pip install matplotlib
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()) が表示されます。これには、格子パラメータ、空間群、非対称単位内の原子の情報、対称操作、拡張原子サイトなどが含まれます。すべての情報が表示された後、プログラムは自動的に終了します。