lsq_peakfit_test プログラム仕様

regression.lsq_peakfit_test.auto_stem(infile: str | Path) str
概要:

ファイルパスから拡張子を除いたファイル名部分を抽出します。

引数:
param infile:

入力ファイルパス。文字列またはPathオブジェクト。

type infile:

str | Path

戻り値:
returns:

拡張子を含まないファイル名。

rtype:

str

regression.lsq_peakfit_test.build_parser()
概要:

コマンドライン引数パーサーを構築します。

詳細説明:

argparse.ArgumentParser オブジェクトを初期化し、スクリプトが受け入れる 様々なコマンドライン引数(実行モード、入力/出力ファイルパス、データ列指定、 x軸範囲、プロット更新間隔、最適化メソッド、最大イテレーション数、 許容誤差、モデル選択基準など)を定義します。

戻り数:
returns:

構築されたArgumentParserオブジェクト。

rtype:

argparse.ArgumentParser

regression.lsq_peakfit_test.compute_fit_band(x, p_fit, free_names, cov_free)
概要:

フィット曲線とその信頼区間 (フィットバンド) を計算します。

詳細説明:

フィットされたパラメータ p_fit と共分散行列 cov_free を用いて、 デルタ法によりフィット曲線の誤差伝播を計算し、±1標準偏差のフィットバンドを推定します。 cov_free が None の場合は、バンドは計算されず、全てのバンドがフィット曲線と同じになります。

引数:
param x:

x座標のnumpy配列。

type x:

numpy.ndarray

param p_fit:

フィットされたパラメータ値を含む辞書。

type p_fit:

dict[str, float]

param free_names:

最適化対象となったパラメータの名前リスト。

type free_names:

list[str]

param cov_free:

最適化対象パラメータの共分散行列。Noneの場合は信頼区間を計算しません。

type cov_free:

numpy.ndarray | None

戻り値:
returns:

フィット曲線 (y0)、フィットバンド下限 (y0 - sigma)、フィットバンド上限 (y0 + sigma)、 および各点のy値の標準偏差 (sigma) のタプル。

rtype:

tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray]

regression.lsq_peakfit_test.free_names_all_optid1(params) list[str]
概要:

optidが1に設定されている全てのパラメータの名前リストを返します。

詳細説明:

この関数は、フィッティングにおいて最適化対象となるパラメータを特定するために使用されます。 params辞書内の各パラメータエントリに対し、"optid"キーの値が整数1であるものを抽出し、 そのパラメータ名をリストとして返します。

引数:
param params:

パラメータ設定を格納した辞書。各パラメータは"optid"キーを持つ可能性があります。

type params:

dict

戻り値:
returns:

optidが1のパラメータ名のリスト。

rtype:

list[str]

regression.lsq_peakfit_test.load_data(args)
概要:

指定された入力ファイルからx-yデータを読み込みます。

詳細説明:

args.infile, args.xcol, args.ycol, args.sheet, args.xmin, args.xmax の各設定に基づき、tkdataio.read_xy を使用してデータを読み込みます。 データは指定されたx範囲でフィルタリングされます。

引数:
param args:

コマンドライン引数を格納したNamespace。

type args:

argparse.Namespace

戻り値:
returns:

x座標のnumpy配列、y座標のnumpy配列、x軸ラベル文字列、y軸ラベル文字列のタプル。

rtype:

tuple[numpy.ndarray, numpy.ndarray, str, str]

regression.lsq_peakfit_test.main()
概要:

スクリプトのメインエントリポイントです。

詳細説明:

コマンドライン引数を解析し、指定された実行モードに応じて read, sim, lfit, fit, model_select のいずれかの関数を実行します。 outfile および paramfile が指定されていない場合は、infile から自動的にファイル名を生成します。 実行中に発生した例外は捕捉され、トレースバックが出力されます。

戻り値:
returns:

なし。

rtype:

None

例外:
raises ValueError:

未知の実行モードが args.mode に指定された場合に発生します。

regression.lsq_peakfit_test.make_progress_figure()
概要:

フィッティング進行状況を表示するためのMatplotlib図とAxesオブジェクトを作成します。

詳細説明:

データ、現在のフィット曲線、および残差を表示するための2つのサブプロットを持つ図を作成します。 上部のサブプロットはデータとフィット曲線用、下部のサブプロットは残差用です。

戻り値:
returns:

MatplotlibのFigureオブジェクト、上部プロットのAxesオブジェクト、下部プロットのAxesオブジェクトのタプル。

rtype:

tuple[matplotlib.figure.Figure, matplotlib.axes.Axes, matplotlib.axes.Axes]

regression.lsq_peakfit_test.model(x: ndarray, p: dict[str, float]) ndarray
概要:

擬Voigtピークとベースラインのモデルを計算します。

詳細説明:

p辞書から amp, x0, fwhm, eta を取得して擬Voigtピークを計算し、 さらに b0 (定数) と b1 (傾き) を取得して線形ベースラインを加算します。 b0 および b1 はオプションで、指定がない場合は0として扱われます。

引数:
param x:

x座標のnumpy配列。

type x:

numpy.ndarray

param p:

モデルパラメータを格納した辞書。 含まれるキー: amp, x0, fwhm, eta, (オプション) b0, (オプション) b1。

type p:

dict[str, float]

戻り値:
returns:

モデル関数によって計算されたy値のnumpy配列。

rtype:

numpy.ndarray

regression.lsq_peakfit_test.pseudo_voigt_unit(x: ndarray, x0: float, fwhm: float, eta: float) ndarray
概要:

正規化された擬Voigt関数を計算します。

詳細説明:

ガウス関数とローレンツ関数の線形結合で構成される擬Voigt関数を計算します。 半値全幅 fwhm は、最小値として 1.0e-300 にクランプされます。 eta はガウス成分とローレンツ成分の混合比を表します。

引数:
param x:

x座標のnumpy配列。

type x:

numpy.ndarray

param x0:

ピーク中心。

type x0:

float

param fwhm:

半値全幅。

type fwhm:

float

param eta:

ガウス成分とローレンツ成分の混合比 (0.0で純粋なガウス、1.0で純粋なローレンツ)。

type eta:

float

戻り値:
returns:

各x座標における擬Voigt関数の値のnumpy配列。

rtype:

numpy.ndarray

regression.lsq_peakfit_test.read_params(args)
概要:

パラメータファイルを読み込み、デフォルト値で補完します。

詳細説明:

args.paramfile で指定されたCSVファイルを読み込み、DEFAULT_PARAMS を用いて 不足しているパラメータを補完します。ファイルが存在しない場合は新規作成されます。 その後、各パラメータのスケールが適切であるか検証を行います。

引数:
param args:

コマンドライン引数を格納したNamespace。

type args:

argparse.Namespace

戻り値:
returns:

パラメータ設定を格納した辞書。

rtype:

dict

regression.lsq_peakfit_test.run_fit(args)
概要:

非線形最小二乗法を用いて擬Voigtモデルをフィットします。

詳細説明:

scipy.optimize.minimize を使用して、paramsファイルでoptid=1に設定された全てのパラメータを最適化します。 フィット進行中は、指定された間隔でプロットを更新し、アニメーションフレームを記録します。 最適化後、フィットされたパラメータ、標準誤差、残差平方和 (RSS)、 および共分散行列に基づく診断情報 (相関行列、JTJの固有値など) を出力します。 最終的なフィット曲線と信頼区間を含むプロット、フィット進行状況のアニメーション、 および診断データを含むExcelファイルを保存します。 リアルタイムプロットが有効な場合、plt.ion() でインタラクティブモードが有効になります。

引数:
param args:

コマンドライン引数を格納したNamespace。

type args:

argparse.Namespace

戻り値:
returns:

なし。

rtype:

None

regression.lsq_peakfit_test.run_lfit(args)
概要:

線形最小二乗法を用いて擬Voigtモデルの振幅とベースラインパラメータをフィットします。

詳細説明:

擬Voigt関数の中心 (x0)、半値全幅 (fwhm)、混合比 (eta) を固定し、 振幅 (amp) および線形ベースライン (b0, b1) のパラメータ (optid_lin=1のもの) のみを線形最小二乗法で最適化します。 フィット結果のパラメータと標準誤差がコンソールに出力され、 必要に応じてパラメータCSVファイルの更新と最終プロットの保存または表示が行われます。

引数:
param args:

コマンドライン引数を格納したNamespace。

type args:

argparse.Namespace

戻り値:
returns:

なし。

rtype:

None

regression.lsq_peakfit_test.run_model_select(args)
概要:

擬Voigtモデルのeta固定値候補に対するモデル選択基準 (RSS, AIC, BIC) を計算します。

詳細説明:

事前に定義された eta の候補値 (0.0, 0.25, 0.5, 0.75, 1.0) のそれぞれについて、 eta を固定した上で、それ以外の最適化対象パラメータを非線形最小二乗法でフィットします。 フィット後、残差平方和 (RSS)、赤池情報量基準 (AIC)、ベイズ情報量基準 (BIC) を計算し、 その結果をテーブル形式で出力します。 結果は args.criterion で指定された基準でソートされます。 args.saveがTrueの場合、結果は"{args.outfile}_model_select.xlsx"として保存されます。

引数:
param args:

コマンドライン引数を格納したNamespace。

type args:

argparse.Namespace

戻り値:
returns:

なし。

rtype:

None

regression.lsq_peakfit_test.run_read(args)
概要:

データファイルを読み込み、プロットして表示または保存します。

詳細説明:

load_data関数を使用して指定されたデータファイルを読み込み、そのx-yデータを散布図としてプロットします。 args.saveがTrueの場合、図は"{args.outfile}_read.png"として保存されます。 args.showがTrueの場合、図は画面に表示されます。図は処理後に閉じられます。

引数:
param args:

コマンドライン引数を格納したNamespace。

type args:

argparse.Namespace

戻り値:
returns:

なし。

rtype:

None

regression.lsq_peakfit_test.run_sim(args)
概要:

指定されたパラメータでモデルをシミュレーションし、結果をプロットします。

詳細説明:

read_params関数でパラメータファイルを読み込み、そのパラメータ値とload_data関数で読み込んだxデータを用いて model関数を評価し、y_simを計算します。 観測データ y と y_sim の残差を計算し、save_final_plot関数でシミュレーション結果を図として表示または保存します。

引数:
param args:

コマンドライン引数を格納したNamespace。

type args:

argparse.Namespace

戻り値:
returns:

なし。

rtype:

None

regression.lsq_peakfit_test.save_animation(path, x, y, frames, xlabel, ylabel)
概要:

フィッティング進行状況のアニメーションをGIFとして保存します。

詳細説明:

最適化の各ステップで記録されたフレームデータを用いて、フィット進行状況を示すアニメーションGIFを作成し、 指定されたパスに保存します。framesリストが空の場合は、何も実行されません。 アニメーションは PillowWriter を使用して作成され、3 FPSで保存されます。

引数:
param path:

GIFファイルの保存先パス。

type path:

str

param x:

x座標のnumpy配列。

type x:

numpy.ndarray

param y:

観測されたy値のnumpy配列。

type y:

numpy.ndarray

param frames:

各イテレーションの状態 (y_fit, residual, params, iteration, objective) を含む辞書のリスト。

type frames:

list[dict]

param xlabel:

x軸のラベル文字列。

type xlabel:

str

param ylabel:

y軸のラベル文字列。

type ylabel:

str

戻り値:
returns:

なし。

rtype:

None

regression.lsq_peakfit_test.save_final_plot(path, x, y, y_fit, y_lower, y_upper, residual, xlabel, ylabel, show)
概要:

最終フィット結果のプロットを生成し、保存または表示します。

詳細説明:

観測データ、フィット曲線、フィットバンド (±1標準偏差)、および残差を含む2つのサブプロットを作成します。 pathがNoneでない場合は指定されたパスに画像を保存し、showがTrueの場合は画面にプロットを表示します。 プロットは自動的に閉じられます。

引数:
param path:

画像ファイルの保存先パス。Noneの場合は保存しません。

type path:

str | None

param x:

x座標のnumpy配列。

type x:

numpy.ndarray

param y:

観測されたy値のnumpy配列。

type y:

numpy.ndarray

param y_fit:

フィットされたy値のnumpy配列。

type y_fit:

numpy.ndarray

param y_lower:

フィットバンドの下限値のnumpy配列。

type y_lower:

numpy.ndarray

param y_upper:

フィットバンドの上限値のnumpy配列。

type y_upper:

numpy.ndarray

param residual:

残差 (y - y_fit) のnumpy配列。

type residual:

numpy.ndarray

param xlabel:

x軸のラベル文字列。

type xlabel:

str

param ylabel:

y軸のラベル文字列。

type ylabel:

str

param show:

プロットを画面に表示するかどうかのフラグ。Trueで表示、Falseで非表示。

type show:

bool

戻り値:
returns:

なし。

rtype:

None

regression.lsq_peakfit_test.update_progress_plot(fig, ax1, ax2, x, y, y_fit, residual, p, iteration, obj, xlabel, ylabel)
概要:

フィッティング進行状況プロットを更新します。

詳細説明:

与えられたデータ、現在のフィット曲線、残差、パラメータ、イテレーション数、目的関数値を用いて、 指定されたMatplotlib Axesオブジェクトをクリアし、最新の情報を描画します。 タイトルにはイテレーション数と目的関数値、図内には現在のパラメータ値が表示されます。

引数:
param fig:

MatplotlibのFigureオブジェクト。

type fig:

matplotlib.figure.Figure

param ax1:

データとフィット曲線を表示する上部Axesオブジェクト。

type ax1:

matplotlib.axes.Axes

param ax2:

残差を表示する下部Axesオブジェクト。

type ax2:

matplotlib.axes.Axes

param x:

x座標のnumpy配列。

type x:

numpy.ndarray

param y:

観測されたy値のnumpy配列。

type y:

numpy.ndarray

param y_fit:

現在のフィットから計算されたy値のnumpy配列。

type y_fit:

numpy.ndarray

param residual:

残差 (y - y_fit) のnumpy配列。

type residual:

numpy.ndarray

param p:

現在のパラメータ値を含む辞書。

type p:

dict[str, float]

param iteration:

現在の最適化イテレーション数。

type iteration:

int

param obj:

現在の目的関数の値。

type obj:

float

param xlabel:

x軸のラベル文字列。

type xlabel:

str

param ylabel:

y軸のラベル文字列。

type ylabel:

str

戻り値:
returns:

なし。

rtype:

None