xrd_fit.py
概要
このスクリプトは、実験的に測定されたX線回折(XRD)パターンと、結晶構造情報ファイル(CIF)から計算された理論的なXRDパターンを比較・分析するためのツールです。主な機能として、パターンプロット、相関分析、オーバーラップチェック、およびLASSO回帰による混合相の定量フィッティングを提供します。
詳細説明
本スクリプトは、様々なモードでXRDデータ解析を実行します。
plot_all: 実験XRDパターンと各CIF由来の理論XRDパターンを個別のグラフに表示します。plot_one: 実験XRDパターンと各CIF由来の回折ピーク位置を一つのグラフに表示します。plot_one2: 実験XRDパターンと各CIF由来の理論XRDパターンを一つのグラフに表示します。overwrap: 異なるCIFパターン間のオーバーラップ(重なり)を評価します。CIFcorrelation: CIFパターン間の相関係数を評価します。correlation: 実験パターンとCIFパターン間の相関係数を評価します。fit: LASSO回帰を用いて実験パターンを背景とCIFパターンでフィッティングし、各相の寄与を定量化します。
スマアリング(ブロードニング)効果や背景処理もサポートしています。
関連リンク
xrd_fit_usage
非標準ライブラリ
本プログラムは以下の非標準ライブラリに依存しています。
tklib:tklib.tkapplicationtklib.tkfiletklib.tkutilstklib.tkvariousdatatklib.tksci.tkscitklib.tksci.tkmatrixtklib.tkcrystal.tkxrdtklib.tkgraphic.tkplotevent
コマンドライン引数
xrd_fit.py は以下のコマンドライン引数を取ります。引数の順序は固定されています。
引数番号 |
変数名 |
型 |
説明 |
デフォルト値 |
|---|---|---|---|---|
1 |
|
str |
実行モード ( |
|
2 |
|
str |
プラグインディレクトリのパス |
|
3 |
|
str |
入力実験XRDデータファイルのパス |
|
4 |
|
str |
CIFファイル群へのパスまたはワイルドカード |
|
5 |
|
str |
X線波長の種類 (例: |
|
6 |
|
float |
2\(\theta\)の最小値 |
|
7 |
|
float |
2\(\theta\)の最大値 |
|
8 |
|
float |
2\(\theta\)のステップ幅 |
|
9 |
|
float |
回折ピークの半値幅 (FWHM) |
|
10 |
|
float |
ガウス成分の割合 (0.0:ローレンツ, 1.0:ガウス) |
|
11 |
|
float |
スマアリングに用いるFWHM |
|
12 |
|
float |
スマアリングに用いるガウス成分の割合 |
|
13 |
|
str |
Y軸のスケール ( |
|
14 |
|
int |
背景多項式の次数 |
|
15 |
|
float |
LASSO回帰の正則化パラメータ |
|
グローバルパラメータ
スクリプト内で定義されているグローバルパラメータは以下の通りです。
module_names: ロードされたモジュール名のリスト (初期値: 空リスト[])。modules: ロードされたモジュールオブジェクトのリスト (初期値: 空リスト[])。markers: プロットに使用するマーカーシンボルのリスト。['o', 's', '+', 'x', 'D', 'v', '^', '<', '>', '8', 'h', 'H']
colors: プロットに使用する色のリスト。['black', 'red', 'blue', 'darkgreen', 'darkorange', 'hotpink', 'lightgreen', 'cyan', 'yellow', 'magenta', 'chocolate', 'navy', 'slategray', 'olive']
figsize: 標準のフィギュアサイズ。(12, 8)
figsize_one: 単一プロット用のフィギュアサイズ。(10, 6)
figsize_coeff: 係数プロット用のフィギュアサイズ。(8, 6)
fontsize: プロットのフォントサイズ。12
legend_fontsize: 凡例のフォントサイズ。8
legend_fontsize_one: 単一プロットの凡例のフォントサイズ。12
関数説明
usage()
コマンドライン引数の使い方を表示する。
詳細説明: アプリケーションとパラメータオブジェクトから利用方法文字列を取得し、整形して標準出力に出力する。
引数:
app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
initialize()
アプリケーションのパラメータを初期値で設定する。
詳細説明: デバッグフラグ、プラグインディレクトリ、モード、入力ファイルパス、CIFファイルパス、X線波長、2\(\theta\)範囲、FWHM、ガウス比率、Yスケール、背景次数、LASSOのalphaなどの初期値を設定する。
引数:
app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
update_vars()
コマンドライン引数に基づいて設定パラメータを更新する。
詳細説明:
sys.argv から引数を取得し、cparams オブジェクトの対応する属性に設定する。数値型引数は適切な型に変換される。
引数:
app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
read_file()
指定されたパスのファイルを読み込み、その内容を処理する。
詳細説明: 登録されているモジュールを順に試行し、ファイルのタイプを判別する。ファイルタイプが一致したモジュールを使用してデータを読み込み、必要に応じて変換する。
引数:
path: str. 読み込むファイルのパス。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値:
tuple. (module, inf). module はファイルを読み込んだモジュールオブジェクト、inf は読み込まれたデータを含む辞書。ファイルが読み込めない場合は (None, None).
read_all_files()
入力XRDファイルとすべてのCIFファイルを読み込む。
詳細説明:
cparams.infile で指定された入力XRDファイルを読み込み、その2\(\theta\)範囲に基づいて解析範囲を調整する。cparams.cif_files で指定されたマスクに一致するCIFファイルをすべて読み込み、変換処理を行う。input_only が True の場合、入力ファイルのみを読み込む。
引数:
app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。input_only: bool.Trueの場合、入力ファイルのみを読み込む。
戻り値:
dict. 読み込まれたモジュールとデータを含む辞書。キーは "module_input", "module_cif", "inf_input", "inf_cif_list"。
max_none()
None 値を含むリストまたはイテラブルの最大値を返す。
詳細説明:
入力されたリスト x の要素から None を除外し、残りの数値の最大値を計算する。数値要素が一つもない場合は、非常に小さい負の値を返す。
引数:
x: list or iterable. 数値とNoneを含むリストまたはイテラブル。
戻り値: float. 最大値。
min_none()
None 値を含むリストまたはイテラブルの最小値を返す。
詳細説明:
入力されたリスト x の要素から None を除外し、残りの数値の最小値を計算する。数値要素が一つもない場合は、非常に大きい正の値を返す。
引数:
x: list or iterable. 数値とNoneを含むリストまたはイテラブル。
戻り値: float. 最小値。
normalize_none()
None 値を含むリストの要素を指定された範囲に正規化する。
詳細説明:
リスト l の数値要素を [vmin, vmax] の範囲から [Amin, Amax] の範囲に線形変換して正規化する。vmin または vmax が指定されない場合は、リスト内の None 以外の要素から自動的に計算される。None 値は変更されない。
引数:
l: list. 数値とNoneを含むリスト。Amin: float. 正規化後の最小値。デフォルトは0.0。Amax: float. 正規化後の最大値。デフォルトは1.0。vmin: float, optional. 元データの最小値。指定しない場合は自動計算。vmax: float, optional. 元データの最大値。指定しない場合は自動計算。
戻り値: list. 正規化されたリスト。
normalize()
数値リストの要素を指定された範囲に正規化する。
詳細説明:
リスト l の要素を [vmin, vmax] の範囲から [Amin, Amax] の範囲に線形変換して正規化する。vmin または vmax が指定されない場合は、リスト内の要素から自動的に計算される。入力リストが None の場合は None を返す。
引数:
l: list. 数値のリスト。Amin: float. 正規化後の最小値。デフォルトは0.0。Amax: float. 正規化後の最大値。デフォルトは1.0。vmin: float, optional. 元データの最小値。指定しない場合は自動計算。vmax: float, optional. 元データの最大値。指定しない場合は自動計算。
戻り値:
list or None. 正規化されたリスト、または入力が None の場合は None。
plot_all()
実験XRDパターンとCIFからの理論パターンを個別のサブプロットに表示する。
詳細説明: 入力された実験XRDパターンを最上段のサブプロットに表示し、その後、読み込まれた各CIFファイルから計算されたXRDパターンをそれぞれ異なるサブプロットに表示する。各理論パターンには回折ピーク位置もプロットされる。すべてのプロットは共通の2\(\theta\)軸を共有する。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
plot_input()
入力された実験XRDパターンのみをプロットする。
詳細説明:
inf から実験XRDデータを取得し、一つのグラフにプロットする。Y軸のスケールは cparams.yscale に従う。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
plot_one()
実験XRDパターンとCIFからの回折ピーク位置を同じグラフに表示する。
詳細説明: 入力された実験XRDパターンと、読み込まれた各CIFファイルから計算された回折ピーク位置(強度は正規化)を同一のグラフにプロットする。これにより、実験パターンと各結晶相のピーク位置の関係を一度に確認できる。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
plot_one2()
実験XRDパターンとCIFからの理論XRDパターンを同じグラフに表示する。
詳細説明: 入力された実験XRDパターンと、読み込まれた各CIFファイルから計算された理論XRDパターン(ブロードニング適用済み)を同一のグラフにプロットする。これにより、実験パターンと各結晶相の回折プロファイルの形状を一度に比較できる。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
convolution()
データ y を指定された filter で畳み込む。
詳細説明:
離散的な畳み込み演算を実行し、y の各点において filter を適用して平滑化された(またはブロードニングされた)データ yc を生成する。nskip パラメータで畳み込みの計算間隔を制御し、結果のデータ点数を減らすことができる。
引数:
x: list or array. x座標のリスト。y: list or array. 畳み込み対象のy座標のリスト。filter: list or array. 畳み込みに使用するフィルタの配列。nskip: int. 畳み込み計算をスキップする間隔。1の場合、すべての点で計算する。
戻り値:
tuple. (_x, _y). 畳み込み後のx座標とy座標のリスト。y が None の場合は None を返す。
collect_data()
フィッティングや相関分析のために、実験および理論XRDデータを収集・前処理する。
詳細説明: 入力された実験XRDデータと各CIFファイルから計算された理論XRDデータを統一された2\(\theta\)範囲に補間し、スマアリング(畳み込み)と正規化を適用する。さらに、背景多項式のための基底関数も準備する。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。is_print: bool. 処理の詳細をコンソールに出力するかどうか。
戻り値:
tuple. (Q2_list, yobs_infile, ysim_infile, bg_names, bg_list, sample_names, ycif_list, labels_train, x_train)。
Q2_list: list. 共通の2\(\theta\)座標のリスト。yobs_infile: list. 前処理された実験XRD強度データ。ysim_infile: list or None. 前処理されたシミュレーションXRD強度データ(存在する場合)。bg_names: list. 背景多項式のラベルのリスト。bg_list: list. 背景多項式の基底関数(レジェンドル多項式)のリスト。sample_names: list. CIFファイルから取得した試料名またはファイルボディ名のリスト。ycif_list: list. 各CIFファイルから計算され前処理された理論XRD強度データのリスト。labels_train: list. 学習データ(x_train)の各列に対応するラベルのリスト。x_train: list. 学習データとなる背景多項式と理論XRD強度のリスト。
check_overwrap()
異なるCIFファイル由来のXRDパターン間のオーバーラップ(重なり)をチェックし、可視化する。
詳細説明: 各CIFファイルの回折ピークが、他のCIFファイルから生成された回折パターンとどの程度重なっているかを計算し、その結果をプロットする。これにより、複数の結晶相が混在する場合に、各相のピークが互いに干渉する度合いを評価できる。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
CIF_correlation()
CIFファイルから生成されたXRDパターン間の相関係数を計算し、可視化する。
詳細説明: すべてのCIFファイルから生成された理論XRDパターン間の相関係数を計算し、結果をテキストで出力する。また、各CIFパターンと入力実験パターンとの相関係数を、スマアリングFWHMを変化させながらプロットし、最も相関の高いスマアリング条件や、異なる相間の類似性を評価する。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
correlation()
入力された実験XRDパターンとCIFファイルから生成された理論パターンとの相関係数を計算し、可視化する。
詳細説明: 実験XRDパターンと、読み込まれた各CIFファイルから計算された理論XRDパターン間の相関係数を計算し、結果をテキストで出力する。さらに、これらの相関係数をスマアリングFWHMを変化させながらプロットし、最も相関の高い相や適切なスマアリング条件を評価する。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
fit()
LASSO回帰を用いて実験XRDパターンを背景とCIF由来の理論パターンでフィッティングする。
詳細説明:
実験XRDパターンを目的変数、背景多項式と各CIFファイルから計算された理論XRDパターンを説明変数として、LASSO回帰を実行する。異なる alpha 値での係数変化とRMSEの変化をプロットし、最終的に指定された alpha 値でのフィッティング結果(係数、RMSE、MAV)とフィッティングされたパターンをプロットで表示する。
引数:
inf: dict. 読み込まれたデータを含む辞書。app:tkApplicationのインスタンス。cparams: 設定パラメータを保持するオブジェクト。
戻り値: なし
main()
メイン関数。XRD解析スクリプトのエントリポイント。
詳細説明: アプリケーションの初期化、パラメータの読み込みと更新、プラグインモジュールのロード、および指定されたモードに応じたXRD解析処理(プロット、相関分析、フィッティングなど)を実行する。処理のログはファイルにも出力される。
戻り値: なし
入出力仕様
入力ファイル
実験XRDデータファイル:
コマンドライン引数
infileで指定されるファイル(例:*.txt)。ファイル形式は
plugin_dirで指定されたディレクトリ内のプラグインモジュールによって自動的に判別され、読み込まれます。通常、2\(\theta\)値と強度値を含むテキストファイルが想定されます。
CIFファイル:
コマンドライン引数
cif_filesで指定されるファイル群(例:data/*.*)。結晶構造情報ファイル(CIF形式)であり、回折ピークの計算に利用されます。
ファイル形式はプラグインモジュールによって判別されます。
出力ファイル
ログファイル:
入力ファイル名に基づいて自動生成されます(例:
{filebody}-out.txt)。スクリプトの実行ログ、パラメータ、計算結果の概要などがテキスト形式で記録されます。
グラフィカル出力:
matplotlibを用いて生成されるプロットが画面上に表示されます。これには、XRDパターン、回折ピーク位置、オーバーラップ、相関係数、フィッティング結果などが含まれます。画像ファイルとしての出力機能は、コードからは確認できません。表示されたプロットを手動で保存することは可能です。
使用例
python xrd_fit.py plot_all {infile} {wavelength} {xmin} {xmax} {xstep} {fwhm} {yscale} {BGorder} {alpha}
python xrd_fit.py plot_one {infile} {wavelength} {xmin} {xmax} {xstep} {fwhm} {yscale} {BGorder} {alpha}
python xrd_fit.py plot_one2 {infile} {wavelength} {xmin} {xmax} {xstep} {fwhm} {yscale} {BGorder} {alpha}
python xrd_fit.py fit {infile} {wavelength} {xmin} {xmax} {xstep} {fwhm} {yscale} {BGorder} {alpha}