fit_vbo_xps プログラム仕様
fit_vbo_xps.py
概要: XPS価電子帯スペクトルをフィッティングするためのスクリプト。
詳細説明: フィルム/基板混合XPS価電子帯スペクトルを、参照フィルムスペクトルと参照基板スペクトルの 重み付き合計、および多項式背景の和としてフィッティングします。 各参照スペクトルには独立したエネルギーシフトが適用されます。 フィッティングはNelder-Mead最適化手法を使用し、堅牢な損失関数とソフトバウンド制約をサポートします。
- モデル:
- I_mix(E) = A_f * I_film(E - dE_f) + A_s * I_sub(E - dE_s)
polynomial_background(E)
- フィッティングされたオフセットは主に以下として報告されます。
dE_shift = dE_f - dE_s
- 参照VBM位置が提供される場合、VBOは以下として計算されます。
VBO_BE = (VBM_film_ref + dE_f) - (VBM_sub_ref + dE_s)
結合エネルギー軸については、符号の慣例に注意が必要です。 スクリプトは結合エネルギー差とその負の値の両方を出力します。
例: python fit_vbo_xps.py ^
--film Bi2OS2100nm_20260508-1_Bi2OS2_pSi_HAXPES_fit_YBPS100_VBwideY2-deconvoluted_point13.xlsm ^ --substrate n-Si_20260508-1_Bi2OS2_pSi_HAXPES_fit_YNS_VBnarrowY-Si-deconvoluted_point10.xlsm ^ --mix TOA90_20260508-1_Bi2OS2_pSi_HAXPES_fit_YBPS25-90_VBwideY2-deconvoluted_point13.xlsm ^ --fit-xmin -2.5 --fit-xmax 8 ^ --show 1 --amp-sub0 1.0
関連リンク: fit_vbo_xps.py 技術ドキュメント
- class PES.fit_vbo_xps.Spectrum(name: str, x: ndarray, y: ndarray)[ソース]
ベースクラス:
object概要: XPSスペクトルデータを保持するデータクラス。
詳細説明: スペクトルの名前、エネルギー(または結合エネルギー)軸のデータ、 および強度(またはカウント)軸のデータを格納します。
- x
エネルギー(または結合エネルギー)軸のデータ。
- Type:
np.ndarray
- y
強度(またはカウント)軸のデータ。
- Type:
np.ndarray
- x: ndarray
- y: ndarray
- PES.fit_vbo_xps.build_parser()[ソース]
概要: コマンドライン引数パーサーを構築する。
詳細説明: XPS価電子帯スペクトルフィッティングスクリプトの実行に必要なすべてのコマンドライン引数 (入力ファイルパス、フィッティング範囲、初期パラメータ、最適化設定、出力設定など)を定義し、 設定された ArgumentParser オブジェクトを返します。
- 戻り値:
設定された引数パーサーオブジェクト (
argparse.ArgumentParser)。
- PES.fit_vbo_xps.crop(sp: Spectrum, xmin: float | None, xmax: float | None) Spectrum[ソース]
概要: Spectrumオブジェクトのデータを指定されたX軸範囲でトリミングする。
詳細説明: xmin と xmax の値に基づいて、sp オブジェクトのX軸とY軸のデータをフィルタリングし、 新しい
Spectrumオブジェクトを返します。
- PES.fit_vbo_xps.fit_mixture(film: Spectrum, sub: Spectrum, mix: Spectrum, args)[ソース]
概要: フィルムと基板の混合XPSスペクトルを最適化手法でフィッティングする。
詳細説明: scipy.optimize.minimize のNelder-Mead法を使用して、混合スペクトルをフィルム、基板、 および多項式背景の線形結合でフィッティングします。 エネルギーシフト、振幅、背景係数が最適化されます。 ソフトバウンド制約と堅牢な損失関数をサポートします。
フィッティングモデルは以下の通りです。 I_mix(E) = A_f * I_film(E - dE_f) + A_s * I_sub(E - dE_s) + poly_background(E)
- パラメータ:
film -- 参照フィルムスペクトルデータ。
sub -- 参照基板スペクトルデータ。
mix -- フィッティング対象の混合スペクトルデータ。
args -- コマンドライン引数を格納する argparse.Namespace オブジェクト。 フィッティングパラメータ(初期値、制約、損失関数設定など)が含まれます。
- 戻り値:
フィッティング結果を含む辞書。 - result (
scipy.optimize.OptimizeResult): scipy.optimize.minimize の結果オブジェクト。 - x (np.ndarray): フィッティング範囲内のX軸データ。 - y (np.ndarray): フィッティング範囲内の観測Y軸データ。 - yfit (np.ndarray): フィッティングモデルによって計算されたY軸データ。 - film_part (np.ndarray): フィッティングされたフィルム成分。 - sub_part (np.ndarray): フィッティングされた基板成分。 - bg_part (np.ndarray): フィッティングされた背景成分。 - params (dict): 最適化されたパラメータと統計情報。dE_film (float): フィルムスペクトルのエネルギーシフト。
dE_sub (float): 基板スペクトルのエネルギーシフト。
A_film (float): フィルムスペクトルの振幅。
A_sub (float): 基板スペクトルの振幅。
bg_coeff (
np.ndarray): 背景多項式の係数。rmse (float): 二乗平均平方根誤差。
nrmse (float): 正規化された二乗平均平方根誤差。
dE_shift_film_minus_sub (float): フィルムと基板のエネルギーシフト差。
objective (float): 最終的な目的関数の値。
success (bool): 最適化が成功したかどうか。
message (str): 最適化メッセージ。
interp (Tuple[interp1d, interp1d]): フィルムと基板の補間関数。
x0 (float): 背景多項式用のX軸中心点。
xscale (float): 背景多項式用のX軸スケール。
- 例外:
ValueError -- フィッティング範囲に有効なデータポイントが少なすぎる場合。
- PES.fit_vbo_xps.main()[ソース]
概要: スクリプトのメイン実行関数。
詳細説明: コマンドライン引数を解析し、必要なスペクトルデータを読み込み、 fit_mixture 関数を呼び出してフィッティングを実行します。 その後、最適化されたパラメータと計算されたVBM/VBO情報をコンソールに出力し、 save_outputs 関数を呼び出して結果をファイルに保存します。
- Param:
なし
- 戻り値:
なし
- PES.fit_vbo_xps.make_interp(sp: Spectrum, fill_value: float = 0.0)[ソース]
概要: Spectrumオブジェクトから線形補間関数を作成する。
詳細説明: scipy.interpolate.interp1d を使用して、指定された
Spectrumオブジェクトの X軸とY軸データに基づいて線形補間関数を構築します。 補間範囲外の値は fill_value で埋められます。- パラメータ:
sp -- 補間関数を作成する基になる
Spectrumオブジェクト。fill_value -- 補間範囲外のX値に対して返される値。デフォルトは0.0。
- 戻り値:
作成された線形補間関数 (
scipy.interpolate.interp1dオブジェクト)。
- PES.fit_vbo_xps.normalize_intensity(y: ndarray, mode: str = 'max') ndarray[ソース]
概要: スペクトル強度データを特定のモードで正規化する。
詳細説明: 入力 y 配列の強度を、視覚的な比較のために指定されたモードで正規化します。
"max": 強度の絶対値の最大値で割って正規化します(デフォルト)。
"minmax": (y - y_min) / (y_max - y_min) で正規化し、値を0から1の範囲にスケーリングします。
"area": 強度の絶対値の積分(台形法)で割って正規化します。
- パラメータ:
y -- 正規化する強度データ配列。
mode -- 正規化モード。"max", "minmax", または "area" のいずれか。デフォルトは"max"。
- 戻り値:
正規化された強度データ配列。
- PES.fit_vbo_xps.poly_background(x: ndarray, coeff: ndarray, x0: float, xscale: float) ndarray[ソース]
概要: 指定された係数を持つ多項式背景を生成する。
詳細説明: X軸データ x に基づいて多項式背景を計算します。 多項式の評価には、安定性のために x0 と xscale を用いてX軸が標準化されます。 例えば、coeff が [c0, c1, c2] の場合、背景は c0 + c1*(x-x0)/xscale + c2*((x-x0)/xscale)^2 となります。
- パラメータ:
x -- 多項式背景を計算するX軸データ。
coeff -- 多項式の係数配列(例: [c0, c1, c2] は c0 + c1*xr + c2*xr^2 に対応)。
x0 -- X軸のオフセット(中心点)。
xscale -- X軸のスケール因子。
- 戻り値:
計算された多項式背景のY値配列。
- PES.fit_vbo_xps.read_spectrum(path: str, sheet: str | int = 0, x_col: int = 0, y_col: int = 2, skip_first_blank: int = 1) Spectrum[ソース]
概要: XLSX/XLSM/CSVファイルからXPSスペクトルデータを読み込む。
詳細説明: 指定されたファイルパス、シート、X列、Y列からデータを読み込みます。 数値に変換できないデータは除外され、NaN値も処理されます。 X軸データは昇順にソートされ、重複するX値のYデータは平均化されます。
- パラメータ:
path -- 読み込むファイルへのパス。
sheet -- Excelファイルの場合のシート名またはゼロベースのシートインデックス。 CSV/TXTファイルの場合は無視されます。デフォルトは0。
x_col -- X軸データのゼロベースの列インデックス。デフォルトは0。
y_col -- Y軸データ(強度)のゼロベースの列インデックス。 デフォルトは2(供給されるファイルではデコンボリューションされたデータ)。
skip_first_blank -- 最初の行が空の場合にスキップするかどうか(1: スキップ、0: スキップしない)。 供給されるファイルでは通常空の最初の行があるため、デフォルトは1。
- 戻り値:
読み込まれたデータを含む
Spectrumオブジェクト。- 例外:
ValueError -- 有効なデータポイントが少なすぎる場合。
- PES.fit_vbo_xps.robust_scale(y: ndarray) float[ソース]
概要: データのロバストなスケール(強度範囲)を計算する。
詳細説明: 入力配列 y の95パーセンタイルと5パーセンタイルの差を計算することで、 外れ値に強い強度スケールを推定します。 計算されたスケールが非数値または非正の場合、代わりに絶対値の最大値を使用します。
- パラメータ:
y -- スケールを計算する対象の強度データ配列。
- 戻り値:
計算されたロバストなスケール値。
- PES.fit_vbo_xps.save_outputs(film: Spectrum, sub: Spectrum, mix: Spectrum, fit, args) Tuple[str, str, str, str][ソース]
概要: フィッティング結果と関連プロットをファイルに保存する。
詳細説明: フィッティングされた混合スペクトル、個々の成分、残差を含むCSVファイル、 フィッティングパラメータとVBM情報をまとめたテキストサマリーファイル、 およびフィッティング結果と入力スペクトルの比較プロット画像をPNG形式で出力します。
- パラメータ:
film -- 参照フィルムスペクトルデータ。
sub -- 参照基板スペクトルデータ。
mix -- フィッティング対象の混合スペクトルデータ。
fit -- fit_mixture 関数から返されたフィッティング結果辞書。
args -- コマンドライン引数を格納する argparse.Namespace オブジェクト。 出力パス、保存/表示設定、正規化モードなどが含まれます。
- 戻り値:
生成されたCSV、サマリー、フィッティングプロットPNG、正規化プロットPNGのファイルパスのタプル。