peakfit プログラム仕様
peakfit.py - ピークフィッティングおよびピークサーチの機能を提供するモジュール。
このモジュールは、主にX線回折(XRD)データなどのスペクトルデータに対して、 ピークの検出、フィッティングパラメータの構築、およびモデル関数(ガウス関数、ローレンツ関数) によるデータシミュレーションを行うための機能を含んでいます。 線形最小二乗法をサポートするための基底関数や、入出力データの処理、プロット機能も提供します。
関連リンク: peakfit.py 技術ドキュメント (もし利用可能なドキュメントがあれば)
- optimize.optimize_peakfit.peakfit.Gaussian(x, x0, whalf, A=None)[ソース]
ガウス関数を計算します。
詳細説明: 与えられたx値、ピーク中心、半値幅に基づきガウス関数 A * exp(-((x - x0) / a)^2) を計算します。 ここで a = whalf / sqrt(ln2) です。 A がNoneの場合、半値幅 whalf から、ピーク高さが1となるような係数 (0.469718639 / whalf) を自動計算します。 定数 0.832554611 は sqrt(ln2) に相当します。exp は numpy.exp を想定しています。
- パラメータ:
x -- float or numpy.ndarray: ガウス関数を評価するx値。
x0 -- float: ピークの中心位置。
whalf -- float: ピークの半値幅。
A -- float, optional: ピークの高さまたは強度に関連する係数。Noneの場合、自動計算されます。
- 戻り値:
float or numpy.ndarray: 計算されたガウス関数の値。
- optimize.optimize_peakfit.peakfit.Lorentzian(x, x0, whalf, A=None)[ソース]
ローレンツ関数を計算します。
詳細説明: 与えられたx値、ピーク中心、半値幅に基づきローレンツ関数 A / (1.0 + ((x - x0) / whalf)^2) を計算します。 A がNoneの場合、半値幅 whalf から、ピーク高さが1となるような係数 (1.0 / (whalf * pi)) を自動計算します。 pi は円周率に相当します。pi は numpy.pi を想定しています。
- パラメータ:
x -- float or numpy.ndarray: ローレンツ関数を評価するx値。
x0 -- float: ピークの中心位置。
whalf -- float: ピークの半値幅。
A -- float, optional: ピークの高さまたは強度に関連する係数。Noneの場合、自動計算されます。
- 戻り値:
float or numpy.ndarray: 計算されたローレンツ関数の値。
- optimize.optimize_peakfit.peakfit.build_fit_params(xlist, ylist, options)[ソース]
ピークサーチの結果からフィッティングパラメータ変数の初期値を構築します。
詳細説明: peaksearch.peak_search を用いて入力データからピークを検出し、 検出された各ピークに対して強度(I0)、中心(xc)、半値幅(w)のフィッティングパラメータを生成します。 背景定数(bg_c0)のパラメータも追加されます。 各パラメータには、変数名、単位、スケール、最適化ID、線形ID、初期値、初期変動量、最小値、最大値、ペナルティが設定されます。
- パラメータ:
xlist -- list or numpy.ndarray: x値のリスト。
ylist -- list or numpy.ndarray: y値のリスト。
options -- dict: ピークサーチの設定を含む辞書。 "nsmooth": 平滑化ウィンドウサイズ (int) "norder": Savitzky-Golayフィルタの多項式次数 (int) "threshold": ピーク検出の閾値 (float) "ydiff1_threshold": 1次微分に基づくピーク検出の閾値 (float)
- 戻り値:
tuple: フィッティングパラメータの各要素のリスト (varname, unit, pk_scale, optid, linid, x0, dx, kmin, kmax, kpenalty)。 varname (list of str): パラメータ名のリスト。 unit (list of str): パラメータ単位のリスト。 pk_scale (list of str): パラメータスケールのリスト。 optid (list of int): 最適化対象IDのリスト (1:対象, 0:対象外)。 linid (list of int): 線形パラメータIDのリスト (1:線形, 0:非線形)。 x0 (list of float): 初期値のリスト。 dx (list of float): 初期変動量のリスト。 kmin (list of float): 最小値のリスト。 kmax (list of float): 最大値のリスト。 kpenalty (list of float): ペナルティ値のリスト。
- optimize.optimize_peakfit.peakfit.build_llsq_params(xlist, ylist, varname_all, pk_all, optid_all, linid_all)[ソース]
全フィッティングパラメータから線形回帰パラメータを抽出し、線形回帰を実行するためのデータ構造を構築します。
詳細説明: 線形回帰の対象となるパラメータ(線形係数)と、定数として扱われる非線形パラメータ (ピーク中心 xc と半値幅 w)を分離し、線形最小二乗法で利用可能な形式に変換します。 optid_combined は最適化可能かつ線形なパラメータを識別します。
- パラメータ:
xlist -- list or numpy.ndarray: x値のリスト。
ylist -- list or numpy.ndarray: y値のリスト。
varname_all -- list of str: 全てのフィッティングパラメータ名。
pk_all -- list of float: 全てのフィッティングパラメータの値。
optid_all -- list of int: 各パラメータが最適化の対象であるかを示すID (1:対象, 0:対象外)。
linid_all -- list of int: 各パラメータが線形パラメータであるかを示すID (1:線形, 0:非線形)。
- 戻り値:
tuple: 線形回帰用のデータリスト (xlin_list, ylin_list, varname_lin, pk_lin, optid_lin, const_names, const_values)。 xlin_list (list or numpy.ndarray): 線形回帰に使用するx値。 ylin_list (list or numpy.ndarray): 線形回帰に使用するy値。 varname_lin (list of str): 線形パラメータ名のリスト。 pk_lin (list of float): 線形パラメータの初期値リスト。 optid_lin (list of int): 線形パラメータの最適化対象IDリスト。 const_names (list of str): 定数パラメータ名のリスト。 const_values (list of list of float): 定数パラメータの値リスト。
- optimize.optimize_peakfit.peakfit.cal_linearpart(xlist, ylist)[ソース]
線形回帰に使用するyデータリストを返します。
詳細説明: 現在の実装では、入力された ylist をそのまま線形回帰の目的変数として返します。 将来的に、非線形成分を除去するなどの前処理を行うことが考えられます。
- パラメータ:
xlist -- list or numpy.ndarray: x値のリスト。
ylist -- list or numpy.ndarray: y値のリスト。
- 戻り値:
list or numpy.ndarray: 線形回帰に使用されるy値のリスト。
- optimize.optimize_peakfit.peakfit.cal_ylist(app, xk_all, x_list, fit=None, run=True, print_level=1)[ソース]
2次元リストの変数x_listから、2次元リストの関数値y_listを計算します。
詳細説明: 与えられたフィッティングパラメータ xk_all (背景定数、各ピークの強度、中心、半値幅) を使用して、 各x値に対応するモデルのy値を計算します。 複数のピークがある場合、それぞれのピーク関数と背景定数を加算して全体のモデルを構築します。
- パラメータ:
app -- tkApplication: アプリケーションオブジェクト。
xk_all -- list of float: 全てのフィッティングパラメータの値。
x_list -- list of list of float or numpy.ndarray: x値の2次元リスト。通常は [x_data]。
fit -- object, optional: フィットオブジェクト(現在は未使用)。
run -- bool, optional: 実行フラグ(現在は未使用)。
print_level -- int, optional: 出力レベル(現在は未使用)。
- 戻り値:
list of numpy.ndarray: 計算されたモデルのy値の2次元リスト。
- optimize.optimize_peakfit.peakfit.lsqfunc(idx, x, const_names, const_values)[ソース]
線形最小二乗法の基底関数を返します。
詳細説明: idx が 0 の場合、定数項(背景)の基底関数として 1.0 を返します。 それ以外の場合、指定されたインデックスに対応するピークの形状関数(強度1.0)を返します。 const_values には、ピークの中心 xc と半値幅 w のリストが含まれます。
- パラメータ:
idx -- int: 基底関数のインデックス。0は定数項、1以降は各ピークに対応します。
x -- float or numpy.ndarray: 基底関数を評価するx値。
const_names -- list of str: 定数として扱われるパラメータの名前のリスト。例: ["xc", "w"]。
const_values -- list of list of float: 定数として扱われるパラメータの値のリスト。例: [xc_list, w_list]。
- 戻り値:
float or numpy.ndarray or None: 計算された基底関数の値。
- optimize.optimize_peakfit.peakfit.main()[ソース]
メイン実行関数。ピークフィットテストプログラムの実行を制御します。
詳細説明: tkParams と tkApplication のモックオブジェクトを初期化し、 設定パラメータを設定します。 その後、入力データの読み込み、ファイル保存、およびピークサーチ(とプロット)の 一連の処理を実行します。
- optimize.optimize_peakfit.peakfit.peak_func(x, I0, xc, w)[ソース]
単一のピーク関数(現在はローレンツ関数)の値を計算します。
詳細説明: I0 が None の場合、強度係数を含まないピーク形状(高さ1.0)を返します。 それ以外の場合、指定された強度 I0 を乗算したピーク関数を返します。 現在の実装では Lorentzian 関数を使用しています。
- パラメータ:
x -- float or numpy.ndarray: 関数を評価するx値。
I0 -- float or None: ピークの強度係数。Noneの場合、強度は1.0として扱われます。
xc -- float: ピークの中心位置。
w -- float: ピークの半値幅。
- 戻り値:
float or numpy.ndarray: 計算されたピーク関数の値。
- optimize.optimize_peakfit.peakfit.peak_search(app, cfg, mf)[ソース]
データに対してピークサーチを実行し、結果をプロットします。
詳細説明: read_input_data 関数で入力データを読み込み、peaksearch.peak_search を呼び出して ピークを自動的に検出します。 検出されたピーク(位置、強度、半値幅)は、元のデータとスムージングされたデータ、 および検出された各ピークの仮のフィット曲線と共にプロットされます。 Savitzky-Golayフィルタによるスムージングと1次微分に基づくピーク検出が利用されます。
- パラメータ:
app -- tkApplication: アプリケーションオブジェクト。
cfg -- tkParams: 設定パラメータを保持するオブジェクト。 infile, mode, xlabel, ylabel, xmin, xmax, norder, nsmooth, threshold, ydiff1_threshold, figsize, fontsize, legend_fontsize 属性を持ちます。
mf -- object, optional: マスターフィットオブジェクト(現在は未使用のためNone)。
- 戻り値:
None
- optimize.optimize_peakfit.peakfit.plot_input(app, cfg, mf)[ソース]
入力データをプロットします。
詳細説明: read_input_data 関数を使用して入力ファイルからデータを読み込み、 matplotlibを使ってデータを散布図として表示します。 図のサイズ、フォントサイズ、凡例のフォントサイズは cfg オブジェクトで設定されます。
- パラメータ:
app -- tkApplication: アプリケーションオブジェクト。
cfg -- tkParams: 設定パラメータを保持するオブジェクト。 infile, figsize, fontsize, legend_fontsize 属性を持ちます。
mf -- object, optional: マスターフィットオブジェクト(現在は未使用のためNone)。
- 戻り値:
None
- optimize.optimize_peakfit.peakfit.read_input_data(app, infile, options=None)[ソース]
ファイルを読み込み、xラベル、yラベルの1次元リストと、2次元リストのx値、y値を返します。
詳細説明: 指定されたExcelファイルからデータを読み込みます。 ファイルの最初の列がx値、2番目の列がy値として扱われます。 options 辞書で xmin と xmax が指定されている場合、その範囲外のデータは除外されます。 ファイルが存在しない場合は、None を返します。
- パラメータ:
app -- tkApplication: アプリケーションオブジェクト。
infile -- str: 読み込むExcelファイルのパス。
options -- dict, optional: データ読み込みのオプションを含む辞書。 "xmin" (float): 読み込むx値の最小値。 "xmax" (float): 読み込むx値の最大値。 options がNoneの場合、これらのオプションは適用されません。
- 戻り値:
tuple: (xlabels, ylabels, xdatalist, ydatalist, wdatalist)。 xlabels (list of str): x軸のラベルのリスト。 ylabels (list of str): y軸のラベルのリスト。 xdatalist (list of list of float): x値の2次元リスト。 ydatalist (list of list of float): y値の2次元リスト。 wdatalist (None): 重みデータリスト(現在は未使用のためNone)。 ファイルが見つからない場合は (None, None, None, None, None)。
- optimize.optimize_peakfit.peakfit.recover_pk_all(pk, ai_all)[ソース]
線形回帰で得られた係数を全フィッティングパラメータにマージして返します。
詳細説明: pk は、非線形パラメータを含む全てのフィッティングパラメータのリストです。 ai_all は、線形回帰によって最適化された線形係数のリストです。 この関数は pk をコピーし、ai_all の値で線形回帰の対象となるパラメータ(背景定数とピーク強度)を更新します。 現在の実装では、pk[0] (背景定数) と pk[1], pk[4], ... (ピーク強度) が更新されます。
- パラメータ:
pk -- list of float: 全フィッティングパラメータのリスト(初期値または前回の非線形最適化結果)。
ai_all -- list of float: 線形回帰によって得られた線形係数のリスト。
- 戻り値:
list of float: 線形回帰の結果が反映された、更新後の全フィッティングパラメータのリスト。
- optimize.optimize_peakfit.peakfit.save_data(path, labels, data_list)[ソース]
データとラベルをExcelファイルに保存します。
詳細説明: 与えられたデータリストと対応するラベルを用いて、Pandas DataFrameを構築し、 指定されたパスにExcelファイルとして保存します。 DataFrameのインデックスは出力されず、ヘッダーは含まれます。
- パラメータ:
path -- str: データを保存するExcelファイルのパス。
labels -- list of str: 各列に対応するラベルのリスト。
data_list -- list of list or numpy.ndarray: 保存するデータのリスト。各要素が列データに対応します。
- 戻り値:
None