XRD_GUI.py 技術ドキュメント
プログラムの動作
XRD_GUI.py は、X線回折 (XRD) データの視覚化、処理、解析を目的としたグラフィカルユーザーインターフェース (GUI) アプリケーションです。研究者や技術者がXRDパターンを直感的に分析し、複数の測定データを比較し、特定のピーク情報を素早く取得し、高品質なグラフを作成して発表資料に利用することを支援します。
主な機能:
データとリファレンスの読み込み: 測定されたXRDデータファイル(
*.txtなど)および文献値のリファレンスデータファイル(*.txtなど)をGUIを通じて簡単に読み込むことができます。セッションの保存・読み込みにも対応しています。グラフ表示の柔軟性:
線形、対数、平方根のY軸スケール切り替え。
複数のデータセットやリファレンスを視覚的に分離するための自動および手動オフセット調整。
グラフ全体の縦横比やサイズ、プロットの分割比率のカスタマイズ。
軸ラベル、凡例、目盛、線の太さなどの詳細な描画設定。
データ処理:
Kα2除去: X線源に起因するKα2ダブルピーク成分を除去し、よりシャープなピークパターンを得る処理。
スムージング: Savitzky-Golayフィルターを用いて、測定データに含まれるノイズを平滑化する機能。
ピーク解析とマーキング:
ピーク付けモード: マウスクリックでグラフ上にピークマーカーを簡単に追加し、その位置を記録。
手動/自動マーカー: 特定のX軸位置に手動でマーカーを追加したり、自動ピーク検索機能で検出されたピークに一括でマーカーを付与したりできます。
マーカーのカスタマイズ: マーカーの記号、色、オフセット、線幅を個別に変更可能。
マウスオーバー情報: グラフ上のリファレンスピークにマウスを重ねると、そのピークのMiller指数 (hkl) と \(2\theta\) 値、さらにゴースト線や高次反射の情報が表示されます。
リファレンスフィルタリング: ユーザーが定義した数式に基づいて、表示するリファレンスピークを高度にフィルタリングする機能。GIXRD (Grazing Incidence X-ray Diffraction) 測定における面外配向性の評価に役立つ特殊関数も提供。
X線源関連の表示: 選択されたX線源の波長に基づいて、Kα2、Kβ、W Lα1, Lα2、またはカスタム波長のゴースト線、およびホバー中のピークの高次反射ピーク位置をグラフ上に表示します。
出力: 表示されているグラフをPNG、JPEG、SVG、PDF形式で高解像度で保存できます。
解決する課題:
XRDデータの基本的な可視化と調整を、プログラミング知識なしで手軽に行いたい。
複数のXRDパターンやリファレンスデータを一度に表示・比較し、共通の解析条件を適用したい。
特定のピークの指数付けや構造解析の補助として、リファレンスデータやゴースト線の情報を活用したい。
高解像度でカスタマイズ可能なグラフを、論文やプレゼンテーション向けに効率的に作成したい。
GIXRD測定など特定のX線回折手法における複雑なピーク解析(特に配向性評価)を支援したい。
原理
XRDデータ処理
Kα2除去:
XRD_GUI.pyでは、calculations.strip_ka2関数を使用して、X線管球から発生するKα1線とKα2線に起因するダブルピーク構造をKα1ピークのみに分離します。この処理は、通常Rachinger法などのアルゴリズムに基づいており、Kα1ピークから僅かにずれた位置に現れるKα2成分を特定の強度比(ユーザーが設定可能)で差し引くことで行われます。これにより、ピーク位置の精密な決定やピーク形状解析が容易になります。Savitzky-Golay スムージング: データに含まれるノイズを平滑化するために、
scipy.signal.savgol_filter関数を使用したSavitzky-Golay (サビツキー-ゴレイ) フィルターが採用されています。このフィルターは、指定されたウィンドウ内でデータを低次の多項式で最小二乗適合させ、中央の点をその多項式の値で置き換えることで機能します。通常の移動平均フィルターと比較して、ピークの高さや幅といった信号の重要な特徴を歪ませることなく、ノイズを効果的に除去できる利点があります。ユーザーは、ウィンドウサイズ (window_length) と多項式の次数 (polyorder) を設定して、スムージングの度合いを調整できます。
リファレンスフィルタリング
リファレンスピークの表示フィルタリングは、ユーザーが指定した条件に基づいて行われます。この機能は、内部的にはPythonの抽象構文木 (AST) を解析することで、セキュリティを確保しつつユーザー定義のブール式を評価します。これにより、悪意のあるコードの実行を防ぎつつ、柔軟なフィルタリングを可能にしています。
利用可能な変数:
h, k, l: 回折ピークのMiller指数。i: 回折ピークの相対強度(文献値)。pi: 円周率 (\(\pi\))。a, b, c, alpha, beta, gamma: リファレンスデータに格子定数情報が推定されている場合に利用可能な単位胞の格子定数(長さはÅ、角度は度)。
サポートされる演算子と関数:
算術演算子:
+ - * / // % **比較演算子:
== != < <= > >=論理演算子:
and or not括弧:
()組み込み関数:
abs, min, max, round, int, pow, sqrt, sin, cos, tan
GIXRD (Grazing Incidence X-ray Diffraction) 関連関数: GIXRD測定のような配向性のある試料の解析を支援するため、面外配向の評価に特化した以下の関数が提供されています。格子定数引数 (
a, b, c, alpha, beta, gamma) を省略した場合、システムがリファレンスデータから推定した格子定数を使用します。面外配向軸 (out_h, out_k, out_l) のデフォルトは(1, 0, 0)(a軸配向) です。gixrd_oop_dist(h, k, l, out_h=1, out_k=0, out_l=0, a=None, b=None, c=None, alpha=90.0, beta=90.0, gamma=90.0)(hkl) 面と、指定された面外配向軸 (
out_hkl) で定義されるエワルド球走査線との逆格子空間での絶対距離 [Å⁻¹] を返します。この値が小さいほど、そのピークが面外配向に近いことを示します。
gixrd_oop_ndist(h, k, l, fwhm_out_deg=0.05, fwhm_in_deg=0.5, out_h=1, out_k=0, out_l=0, a=None, b=None, c=None, alpha=90.0, beta=90.0, gamma=90.0)ピークの広がり (FWHM: 半値幅) を考慮し、走査線がピーク中心から「何標準偏差 (\(\sigma\)) 離れているか」を返します。面外 (out-of-plane) および面内 (in-plane) のFWHMを入力として指定します。ピークが楕円状に広がっていることを考慮に入れたより現実的な判定に利用できます。
gixrd_oop_vis_fwhm(h, k, l, nsigma=2.0, out_h=1, out_k=0, out_l=0, a=None, b=None, c=None, alpha=90.0, beta=90.0, gamma=90.0)走査線がピークの \(n\sigma\) 以内を通る場合に
Trueを返す、最も簡単な可視性判定関数です。nsigmaはピークの広がりに対する許容範囲を決定します(例:nsigma=2.0は2標準偏差以内)。
ブラッグの法則
XRDにおける回折現象の基本的な関係式はブラッグの法則によって記述されます。
ここで、
\(d\): 回折を起こす格子面間隔
\(\theta\): 回折角(ブラッグ角、入射X線と格子面とのなす角)
\(n\): 回折次数(通常は1)
\(\lambda\): X線の波長
逆格子空間においては、\(d^* = 1/d\) の関係や、\(Q = 4\pi/\lambda \sin\theta\) または \(K = 2/\lambda \sin\theta\) のような波数ベクトル・散乱ベクトルが用いられます。
ゴースト線と高次反射の計算
ゴースト線: XRD測定で主に使用するX線の波長 (\(\lambda_{\text{main}}\)) で観測された回折ピークが、もしX線管球からわずかに漏れ出た別の波長 (\(\lambda_{\text{ghost}}\)) によって生じたと仮定した場合、そのピークが本来の位置 (\(2\theta_{\text{peak}}\)) からどこに現れるか (\(2\theta_{\text{ghost}}\)) を計算します。これはブラッグの法則に基づき、同じ格子面間隔 \(d\) からの回折として導出されます。
\[\frac{\sin(\theta_{\text{peak}})}{\lambda_{\text{main}}} = \frac{\sin(\theta_{\text{ghost}})}{\lambda_{\text{ghost}}}\]これより、\(2\theta_{\text{ghost}}\) は次式で求められます。
\[2\theta_{\text{ghost}} = 2 \arcsin\left(\frac{\lambda_{\text{ghost}}}{\lambda_{\text{main}}} \sin\left(\frac{2\theta_{\text{peak}}}{2}\right)\right)\]高次反射: グラフ上で選択されている1次反射 (\(n=1\)) の回折ピーク (\(2\theta_{\text{peak}}\)) が、同じ格子面からの2次、3次などの高次回折 (\(n=2, 3, \dots\)) の場合にどこに現れるか (\(2\theta_n\)) を計算します。これもブラッグの法則から導かれます。
\(n\lambda = 2d\sin\theta_n\) および \(1\lambda = 2d\sin\theta_{\text{peak}}\) の関係から、
\[\sin\theta_n = n \sin\theta_{\text{peak}}\]これより、\(2\theta_n\) は次式で求められます。
\[2\theta_n = 2 \arcsin(n \sin(\theta_{\text{peak}}))\]
格子定数推定
gixrd.estimate_lattice_from_peaks 関数は、読み込まれたリファレンスデータにおいて、回折ピーク位置とそれに対応するミラー指数 (hkl) のペアが十分に揃っている場合に、そのデータが属する結晶系の単位胞の格子定数 (a, b, c, alpha, beta, gamma) を推定します。この推定は、通常、逆格子ベクトルと格子定数の関係を用いた最小二乗法などの最適化手法によって行われます。格子定数が推定されることで、GIXRDフィルタリング関数などでその情報を活用し、より高度な解析が可能になります。
必要な非標準ライブラリとインストール方法
XRD_GUI.py を実行するには、以下のPython非標準ライブラリが必要です。これらは pip コマンドを使用して簡単にインストールできます。
pip install numpy
pip install matplotlib
pip install PyQt6
pip install pandas
pip install scipy
一度にインストールする場合:
pip install numpy matplotlib PyQt6 pandas scipy
必要な入力ファイル
1. XRDデータファイル
形式: 2列以上の数値データを含むプレーンテキストファイル (
.txt,.csvなど)。構造:
通常、1列目にX軸データ(例: \(2\theta\) 角度 [deg.] または \(Q\) 値 [Å⁻¹])、2列目にY軸データ(例: 強度 [arb.unit])が含まれます。
ファイルにヘッダー行が含まれていても、プログラムは自動的にデータ部分を識別して読み込みます。
例 (
sample_data.txt):2theta_deg Intensity 10.00 100 10.05 120 ... 90.00 50
2. リファレンスデータファイル
形式: ピーク位置、強度、ミラー指数を含むプレーンテキストファイル (
.txtなど)。構造:
最低3列のデータが必要で、それぞれ回折ピーク位置、相対強度、そしてミラー指数 (hkl) を表します。ミラー指数は通常、3つの整数値 (
h k l) または4つの整数値 (h k i l) の形式でスペース区切りで記述されます。例 (
reference_si.txt):2theta Intensity h k l 28.443 1000 1 1 1 47.302 500 2 2 0 56.120 250 3 1 1 69.131 120 4 0 0
3. セッションファイル
形式: JSON (
.json)構造: アプリケーションの現在の状態(読み込まれたXRDデータセットとリファレンスデータ、各データの表示設定、グラフのプロットパラメータ、UIの状態など)をシリアライズしたものです。これにより、作業の中断や共有が容易になります。ユーザーが「セッションを保存」機能を使用すると生成されます。
生成される出力ファイル
1. グラフ画像ファイル
形式: PNG (
.png), JPEG (.jpg,.jpeg), SVG (.svg), PDF (.pdf)。内容: 現在GUIに表示されているグラフの高解像度画像。解像度はデフォルトで300 dpiで保存されます。PNGは背景透過に対応しています。
2. セッションファイル
形式: JSON (
.json)。内容: 「必要な入力ファイル」セクションで説明されているのと同様に、現在のアプリケーション状態を全て保存したファイルです。ユーザーが「セッションを保存」機能を使用すると生成され、次回以降の作業再開や他のユーザーとの設定共有に利用されます。
コマンドラインでの使用例 (Usage)
XRD_GUI.py はGUIアプリケーションであり、コマンドライン引数を介して直接的なデータ処理や設定変更を行う機能は提供していません。起動するにはPythonインタープリタでスクリプトを実行するだけです。
python XRD_GUI.py
コマンドラインでの具体的な使用例
XRD_GUI.py はGUIアプリケーションであるため、コマンドライン引数を使った複雑な実行例は存在しません。基本的な起動と、その後のGUI操作について説明します。
プログラムの起動: ターミナルまたはコマンドプロンプトを開き、
XRD_GUI.pyが保存されているディレクトリに移動して、以下のコマンドを実行します。python XRD_GUI.py実行結果の表示:
まず、コンソールにはプログラムが依存するライブラリのチェック状況が表示されます。すべてのライブラリが揃っている場合、"すべてのライブラリが揃っています。"というメッセージが表示されます。
その後、
XRD_GUIのメインウィンドウがデスクトップ上に表示されます。
GUI操作の例:
XRDデータの読み込み:
ウィンドウ左側のコントロールパネルにある「データ管理」タブを選択します。
「XRDデータ読み込み」ボタンをクリックします。
ファイル選択ダイアログが開くので、XRDデータファイル(例:
my_sample_xrd.txt)を選択し、「開く」をクリックします。読み込まれたデータがメイングラフエリアに表示され、左側の「データリスト」にファイル名が追加されます。
リファレンスデータの追加:
「リファレンス読み込み」ボタンをクリックします。
ファイル選択ダイアログからリファレンスデータファイル(例:
silicon_ref.txt)を選択し、「開く」をクリックします。リファレンスピークがグラフの下部エリアに表示され、左側の「リファレンスリスト」に追加されます。
グラフ設定の変更:
左側のコントロールパネルの「設定/描画」タブを選択します。
例えば、「Y軸スケール (データ)」のドロップダウンリストから「対数」を選択すると、データグラフのY軸が対数スケールに切り替わります。
「グラフのフォント設定」ボタンをクリックして、グラフのフォントやサイズを変更できます。
ピークのマーキング:
左側のコントロールパネルの「解析」タブを選択します。
「ピーク付けモード開始」ボタンをクリックすると、カーソルが十字に変わり、グラフ上でクリックした位置にピークマーカーが追加されます。
グラフ上のリファレンスピークにマウスをホバーさせると、そのピークのhkl情報や\(2\theta\)値、ゴースト線などの情報がツールチップで表示されます。
グラフの保存:
「グラフを保存」ボタンをクリックします。
ファイル保存ダイアログが開くので、ファイル名と形式(PNG, PDFなど)を指定して保存します。
このように、XRD_GUI.py はコマンドラインから起動された後、すべての操作はGUIを通じて直感的に実行されます。