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.832554611sqrt(ln2) に相当します。expnumpy.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 は円周率に相当します。pinumpy.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)[ソース]

線形最小二乗法の基底関数を返します。

詳細説明: idx0 の場合、定数項(背景)の基底関数として 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()[ソース]

メイン実行関数。ピークフィットテストプログラムの実行を制御します。

詳細説明: tkParamstkApplication のモックオブジェクトを初期化し、 設定パラメータを設定します。 その後、入力データの読み込み、ファイル保存、およびピークサーチ(とプロット)の 一連の処理を実行します。

optimize.optimize_peakfit.peakfit.peak_func(x, I0, xc, w)[ソース]

単一のピーク関数(現在はローレンツ関数)の値を計算します。

詳細説明: I0None の場合、強度係数を含まないピーク形状(高さ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: 計算されたピーク関数の値。

データに対してピークサーチを実行し、結果をプロットします。

詳細説明: 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 辞書で xminxmax が指定されている場合、その範囲外のデータは除外されます。 ファイルが存在しない場合は、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

class optimize.optimize_peakfit.peakfit.tkApplication[ソース]

ベースクラス: object

アプリケーションの基本的な動作を模倣するクラスです。

詳細説明: 主にプログラムの終了動作を制御するために使用されます。 terminate メソッドは、ユーザーからの入力を待ってプログラムを一時停止させる機能を提供します。

terminate(pause=False)[ソース]

アプリケーションを終了または一時停止します。

詳細説明: pause がTrueの場合、ユーザーがEnterキーを押すまでプログラムの実行を一時停止します。 これにより、プロットされたグラフなどを確認する時間を確保できます。

パラメータ:

pause -- bool, optional: Trueの場合、終了前にユーザー入力を待ちます。デフォルトはFalse。

戻り値:

None

class optimize.optimize_peakfit.peakfit.tkParams[ソース]

ベースクラス: object

プログラム設定を保持するための空のクラスです。

詳細説明: このクラスは、設定パラメータを属性として動的に追加するために使用されます。 例えば、cfg.infile = 'data.xlsx' のように利用されます。