フィッティング機能

MPlotには、プロットされているデータに対して簡易フィッティングを行うことができる。また制限はあるが自作の関数を読み込むこともできる。

起動

メニューから "Fitting" を選択すると、Fitting用ダイアログが現れる。

MPlot_FittingPanel

基本機能

Load Func File ボタン(0.3.5.1以降のリリースから)
自作した関数ファイルを読み込む(「関数の自作」の項参照 )
Data
ここでフィティングの対象となるデータとその範囲を設定する。 プルダウンメニューには現在表示中のデータが入っているので、対象となるデータを選択し、 From ボックスと to ボックスにフィッティングに使用する領域を打ち込む。起動直後、領域は自動的にデータの上限と下限が挿入される。
Function

ここで、フィッティング関数をプルダウンより選択する。起動直後は「基本関数」5種類のみである。 Load Func File で自作の関数を読み込むとここに追加される。

もし関数の画像があれば、プルダウンの下の領域に表示される。

Parameters

フィッティングパラメータを設定する。A1〜A8までFunctionで選択した関数が必要なものだけ設定できる。

Initial Value : 初期パラメータ値を入れる Fix : そのパラメータ値を固定するのに使用する。 Result Value : フィッティングが成功した時に結果が表示される。

Checkボタン
入力された初期パラメータ値を用いて、フィッティング関数でグラフを表示する関数。MPlotのメインウィンドウにグラフが追記される。ある程度初期パラメータ値を見積もることができる。
Fittingボタン
フィッティングを行う。各パラメータ値の結果はParameters枠のそれぞれのパラメータの箇所に表示される。フィッティング結果のChiスクエアはターミナルに表示される。グラフも追加される。
Closeボタン
Fittingダイアログを閉じる。

基本関数

Functions A1〜A8 : フィッティングパラメータ, x : 変数
Linear A1 + A2*x
Linear + Gauss A1+(A2*x)+A3*math.exp( -math.log(2)*( ((x-A4)/(A5/2.0))**2 ) )
Linear + Lorents A1+(A2*x)+A3*((A5/2.0)/( ((x-A4)**2) +(A5*A5/4.0) ) )
Linear + Gauss + Lorents A1+(A2*x)+A3*math.exp(-math.log(2)*( ((x-A4)/(A5/2.0))**2 ) ) +A6*((A8/2.0)/( ((x-A7)**2) +(A8/2.0)**2 ) )
Linear + Gauss + Gauss A1+(A2*x)+A3*math.exp(-math.log(2)*( ((x-A4)/(A5/2.0))**2 ) ) +A6*math.exp(-math.log(2)*( ((x-A7)/(A8/2.0))**2 ) )

関数の自作

(0.3.5.1以降のリリースから利用可能)

基本は5つの関数であるが、自由に関数を作成することも可能である。 作成した関数ファイルをFittingパネルの Load Func File ボタンを押して読み込めば良い。

関数ファイルの作例

以下に関数ファイルの例を示す。この例では関数として以下の二つの関数を実装する。

fit_Cubic
3次関数( y = A1 + A2*x + A3*x*2 + A4*x*x*x )
fit_HarfLife
半減期のデータに対するフィッティング関数 ( y = A1 + A2*EXP(-A3*x) )

サンプルコード

import math

def fit_Cubic(x):
    return A1() + A2()*x + A3()*x*x + A4()*x*x*x

def fit_HarfLife(x):
    return A1() + A2()*math.exp(-A3()*x)

params = [
    [ "CubicFunc", fit_Cubic,    4, "" ],
    [ "HarfLife" , fit_HarfLife, 3, "MPlotFittingFunc_HarfLife.png" ]
    ]

関数ファイル作成の注意点

全体の構成

関数ファイルは、以下の二つで構成される。

  1. フィッティング関数(def)
  2. 関数の情報(params)
フィッティング関数
  • 関数の引数は1つ(例ではどちらも"x")
  • フィッティングパラメータは、 A1() , A2() , ... , A8() まで使用できる。必ず () を付加しておくこと。
  • 先頭の import math により、 math.exp といったmathモジュールの全関数を用いることができる。他の数学的モジュールも使用可能(のはず)。
paramsのフォーマット

paramsは2重のリストでできている。リストで表された関数の情報を含むリストである。以下がフォーマットとなる。

[ [関数1の情報], [関数2の情報], ..., [関数nの情報] ]

また関数の情報は4つの情報からなり、以下のフォーマットとなる。

[ <関数のタイトル>, <関数>, <フィッティングパラメータの数>, <画像ファイル名> ]

ここで、

情報 フォーマット 説明
関数のタイトル 文字列 プルダウンメニューに表示されるタイトル (クォーテーション、ダブルクォーテーションで囲む)
関数 関数オブジェクト defで定義した関数(オブジェクトなのでカッコは不要)
パラメータの数 正の整数 defで定義した関数の中で使用しているA1()などの数 (例えばA3()まで使用しているなら3)
画像ファイル名 文字列 関数を端的に表示できるpng画像ファイルがあれば記述 する(関数ファイルと同じフォルダに入れる必要)

関数ファイルの場所

ファイルはどこに置いていても良い。ただし関数の画像ファイルがある場合同じフォルダに置く必要がある。

関数名について

他人が作成した関数名と同じあっても、読み込むファイルが別であれば別関数として扱われる。

装置固有の関数の追加

装置毎に必要となる関数を用意し、MPlot起動時に自動的に追加しておくこともできる。ファサード関数ファイルが置いてある同じ場所に、必要な関数ファイルを以下の名前て置いておくと自動的にフィッティング関数が追記される。

装置固有関数ファイル (XXXは装置コード)
置き場所 /opt/mlfsoft/python-utsusemi/ana/XXX/facade
ファイル名 MPlotFittingFunctions_XXX.py