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