peakfit_scipy_minimize プログラム仕様

概要: Scipyのminimize関数を用いたガウスピークフィッティングスクリプト。 詳細説明: このスクリプトは、与えられたデータに対してガウス関数をフィッティングするために

Scipyの最適化ルーチンminimizeを使用します。初期パラメータから開始し、 残差二乗和を最小化することで最適なピークパラメータ(振幅、中心、幅)を探索します。 結果はCSVファイルに保存され、リアルタイムでフィッティングの進行状況をグラフ表示できます。

関連リンク: peakfit-scipy-minimize_usage

cms.nlsq.peakfit_scipy_minimize.CalS2(params)[ソース]

概要: 実測データとモデルとの残差二乗和(S2)を計算します。 詳細説明: グローバル変数`xd`(x座標)と`yd`(実測yデータ)を使用し、

現在の`params`で計算されるモデルのy値(yc)との差の二乗和を計算します。 この関数は、Scipyの`minimize`関数における目的関数として利用されます。

パラメータ:

params -- list - 現在のガウスピークのパラメータ。

戻り値:

float - 計算された残差二乗和。

cms.nlsq.peakfit_scipy_minimize.callback(xk)[ソース]

概要: 最適化の各イテレーションで呼び出され、進行状況を更新しグラフを再描画します。 詳細説明: Scipyの`minimize`関数の`callback`引数として使用されます。

現在のパラメータ`xk`に基づいて残差二乗和を計算し、 イテレーション回数と残差二乗和の履歴(xiter, yfmin)を更新します。 さらに、フィッティング曲線と収束曲線を示すグラフをリアルタイムで更新し、 最適化の進行状況を視覚的に表示します。 この関数は多数のグローバル変数(xd, iter, figure, ax_fit, ax_conv, fitdata, convdata)にアクセスし、それらを変更します。

パラメータ:

xk -- numpy.ndarray - 現在の最適化パラメータの配列。

戻り値:

None

cms.nlsq.peakfit_scipy_minimize.diff1(params)[ソース]

概要: 残差二乗和の全パラメータに関する勾配ベクトル(ヤコビアン)を計算します。 詳細説明: `diff1i`関数を各パラメータに対して呼び出し、

残差二乗和の全パラメータに関する偏導関数からなるNumPy配列を構築します。 この関数はScipyの`minimize`関数にヤコビアン(`jac`引数)として渡され、 最適化アルゴリズムの効率を高めるために利用されます。 `nparams`はグローバル変数としてアクセスされます。

パラメータ:

params -- list - 現在のガウスピークのパラメータのリスト。

戻り値:

numpy.ndarray - 残差二乗和の全パラメータに関する勾配ベクトル。

cms.nlsq.peakfit_scipy_minimize.diff1i(i, params)[ソース]

概要: 特定のパラメータに関する残差二乗和の偏導関数を計算します。 詳細説明: CalS2`関数の特定のピークの特定のパラメータ(`I0, x0, `w`のいずれか)に関する

解析的な偏導関数を計算します。この関数は、diff1`関数から呼び出され、 Scipyの`minimize`関数のヤコビアンとして使用される勾配ベクトルを構築します。 `w`が非常に小さい場合、0.001にクリップされます。 `xd, yd, `nx`はグローバル変数としてアクセスされます。

パラメータ:
  • i -- int - 偏導関数を計算するパラメータのグローバルインデックス。 i % 3`で`I0 (0)、x0 (1)、w (2) のいずれか、 `i // 3`で対応するピーク番号を特定します。

  • params -- list - 現在のガウスピークのパラメータのリスト。

戻り値:

float - 指定されたパラメータに関する残差二乗和の偏導関数。

cms.nlsq.peakfit_scipy_minimize.joinf(list, format, sep)[ソース]

概要: リストの要素を指定されたフォーマットと区切り文字で結合します。 詳細説明: 渡されたリストの各要素を指定された書式文字列でフォーマットし、

指定された区切り文字で連結して一つの文字列として返します。 これは主に、数値のリストを整形して出力するために使用されます。

パラメータ:
  • list -- list - 結合する数値のリスト。

  • format -- str - 各要素に適用する書式文字列(例: "%12.8g")。

  • sep -- str - 要素間の区切り文字。

戻り値:

str - フォーマットされ結合された文字列。

cms.nlsq.peakfit_scipy_minimize.main()[ソース]

概要: ピークフィッティングプロセス全体を管理するメインルーチン。 詳細説明:

この関数は、以下のステップを実行してガウスピークフィッティングのワークフローを管理します。 1. フィッティングの対象となるシミュレートされたデータ(yd)を生成します。 2. 初期パラメータ(x0)に基づく初期フィッティング曲線(yini)を計算します。 3. 初期データとシミュレートされたデータを`initial_csv`ファイルに保存します。 4. `fplot`フラグが1に設定されている場合、matplotlibを用いて

生データ、初期フィット、およびフィッティングの進行状況(目的関数の収束)を リアルタイムで表示するためのグラフを初期化します。

  1. scipy.optimize.minimize`関数を呼び出して最適化を実行します。 これには、目的関数`CalS2、解析的なヤコビアン`diff1`、および 各イテレーションでグラフを更新する`callback`関数が使用されます。

  2. 最適化が完了した後、最終的な最適化パラメータ(res.x)を用いて 最終的なフィッティング曲線(yopt)を計算し、 `final_csv`ファイルに生データ、初期フィット、最終フィットと共に保存します。

  3. 最適化の収束履歴(イテレーションごとの目的関数の値)を`conv_csv`ファイルに保存します。

8. fplot`が1の場合、グラフを閉じるためにユーザーからの入力を待ちます。 この関数は、多くのグローバル変数(`xd, yd, xiter, yfmin, figure, ax_fit, ax_conv, fitdata, `convdata`など)にアクセスし、それらを初期化または更新します。

戻り値:

None

cms.nlsq.peakfit_scipy_minimize.save_csv(path, headerlist, datalist, is_print=0)[ソース]

概要: 指定されたパスにCSV形式でデータを保存します。 詳細説明: ヘッダーとデータリストを受け取り、CSVファイルとして書き込みます。

データの各列は`datalist`の要素に対応し、行は各列の対応するインデックスのデータで構成されます。 `is_print`が1の場合、書き込まれるデータ行が標準出力にも表示されます。

パラメータ:
  • path -- str - 保存先のファイルパス。

  • headerlist -- list - CSVファイルのヘッダー行のリスト。

  • datalist -- list - 保存するデータのリスト(例: [[col1_data], [col2_data], ...])。 各内部リストは1つの列のデータを含みます。

  • is_print -- int - データをコンソールに出力するかどうかを示すフラグ (0:しない, 1:する)。

戻り値:

int - ファイル書き込みが成功した場合は1、失敗した場合は0。

cms.nlsq.peakfit_scipy_minimize.ycal(x, params)[ソース]

概要: 与えられたx値とガウスピークパラメータに基づいてy値を計算します。 詳細説明: 複数のガウスピークの合計を計算します。

params`リストは`[I0_1, x0_1, w_1, I0_2, x0_2, w_2, ...] の形式でピークパラメータを含みます。 各ガウスピークは`I0 * exp(-(A * (x - x0))^2)`で表され、 `A`は`0.832554611 / w`で計算されます。 `w`が非常に小さい(0.001未満)場合、数値安定性のために0.001にクリップされます。

パラメータ:
  • x -- float - y値を計算するx座標。

  • params -- list - ガウスピークのパラメータのリスト。 `[I0_1, x0_1, w_1, I0_2, x0_2, w_2, ...]`の形式。 `I0`はピークの高さ、`x0`はピークの中心、`w`はピークの半値幅。

戻り値:

float - 計算されたy値。

cms.nlsq.peakfit_scipy_minimize.ycal_list(xd, params)[ソース]

概要: x座標のリストに対してy値を計算し、リストとして返します。 詳細説明: 与えられたx座標の各点に対して`ycal`関数を呼び出し、

対応するy値のリストを生成します。これはプロットやデータ保存に利用されます。

パラメータ:
  • xd -- list - x座標のリスト。

  • params -- list - ガウスピークのパラメータのリスト。

戻り値:

list - 各x座標に対応する計算されたy値のリスト。