ピークプロファイルのフィッティングに使ういろいろなIgorPro関数
IgorPro functions used for peak-profile fitting Lorentzian Function Lorfit(w,x) Wave w; Variable x Variable r=w[0] r += w[1]*w[3]*(1/((x-w[2])^2+w[3]^2))/pi return r End
<< Parameters >> w[0] : Bakcground,w[1] : Integral,w[2] : Center,w[3] : Width この形のLorentzianを使うと, PeakTop=w[1]/pi/w[3].Integral=w[1],FWHM=2*w[3] の関係になる.積分値を扱いたいときにはわかりやすい. Multi-Lorentzian peaksのときは次のようにピーク数を増やす. Function Lorfit(w,x) Wave w; Variable x Variable r=w[0] r += w[1]*w[3]*(1/((x-w[2])^2+w[3]^2))/pi r += w[4]*w[6]*(1/((x-w[5])^2+w[6]^2))/pi return r End ちなみに,IgorPro組み込みのLorentzianは w[0]+w[1]/((x-w[2])^2+w[3]) の形をしていて, PeakTop=w[1],Integral=w[1]/sqrt(w[3])*pi,FWHM=2*sqrt(w[3]) である.ピーク値を扱いたいときはわかりやすい.
Gaussian Function Gausfit(w,x) Wave w; Variable x Variable r=w[0] r += w[1]*(exp(-(x-w[2])^2/2/w[3]^2))/w[3]/sqrt(2*pi) return r End << Parameters >> w[0] : Bakcground,w[1] : Integral,w[2] : Center,w[3] : Width この形のGaussianを使うと, PeakTop=w[1]/w[3]/sqrt(2*pi).Integral=w[1],FWHM=2*w[3]*sqrt(2*ln(2))=2.3548*w[3] である.積分値を扱いたいときにはわかりやすい. Multi-Gaussianのときは次のようにピーク数を増やす. Function Gausfit(w,x) Wave w; Variable x Variable r=w[0] r += w[1]*(exp(-(x-w[2])^2/2/w[3]^2))/w[3]/sqrt(2*pi) r += w[4]*(exp(-(x-w[5])^2/2/w[6]^2))/w[6]/sqrt(2*pi) return r End ちなみに,IgorPro組み込みのGaussianは w[0]+w[1]*exp(-((x-w[2])/w[3])^2) の形をしていて, PeakTop=w[1],Integral=w[1]*w[3]*sqrt(pi),FWHM=2*w[3]*sqrt(ln(2))=1.665*w[3] である. ピーク値を扱いたいときはわかりやすい.
Squared-Lorentzian Function SQLorfit(w,x) Wave w; Variable x Variable r=w[0] r += 2*w[1]*w[3]^3*(1/((x-w[2])^2+w[3]^2))^2/pi return r End
<< Parameters >> w[0] : Bakcground,w[1] : Integral,w[2] : Center,w[3] : Width この形のSquared-Lorentzianを使うと, PeakTop=2*w[1]/w[3]/pi.Integral=w[1],FWHM=2*sqrt(sqrt(2)-1)*w[3]=1.2872*w[3] である.積分値を扱いたいときにはわかりやすい. Multi-squared-Lorentzianのときは次のようにピーク数を増やす. Function SQLorfit(w,x) Wave w; Variable x Variable r=w[0] r += 2*w[1]*w[3]^3*(1/((x-w[2])^2+w[3]^2))^2/pi r += 2*w[4]*w[6]^3*(1/((x-w[5])^2+w[6]^2))^2/pi return r End Asymmetric Squared-Lorentzian Function ASQLorfit(w,x) Wave w; Variable x Variable r=w[0] Variable npts= numpnts(w) if(x<w[2]) r += 2*w[1]/w[3]*((1-w[4])*w[3])^4*(1/((x-w[2])^2+((1-w[4])*w[3])^2))^2/pi elseif(x>=w[2]) r += 2*w[1]/w[3]*((1+w[4])*w[3])^4*(1/((x-w[2])^2+((1+w[4])*w[3])^2))^2/pi endif return r End
<< Parameters >> w[0] : Bakcground,w[1] : Integral,w[2] : Center,w[3] : Width,w[4] : asymmetry (-1 < w[4] < 1) Multi-squared-Lorentzianのときは次のようにピーク数を増やす.
Function SQLorfit(w,x) Wave w; Variable x Variable r=w[0] Variable npts= numpnts(w) if(x<w[2]) r += 2*w[1]/w[3]*((1-w[4])*w[3])^4*(1/((x-w[2])^2+((1-w[4])*w[3])^2))^2/pi elseif(x>=w[2]) r += 2*w[1]/w[3]*((1+w[4])*w[3])^4*(1/((x-w[2])^2+((1+w[4])*w[3])^2))^2/pi endif if(x<w[6]) r += 2*w[5]/w[7]*((1-w[4])*w[7])^4*(1/((x-w[6])^2+((1-w[4])*w[7])^2))^2/pi elseif(x>=w[6]) r += 2*w[5]/w[7]*((1+w[4])*w[7])^4*(1/((x-w[6])^2+((1+w[4])*w[7])^2))^2/pi endif return r End
pseudo-Voigt (Lorentzian + Gaussian) Function pseudVoigt(w,x) Wave w Variable x Variable r=w[0] Variable i=1 // w[1]:intensity, w[2]:center, w[3]:Gamma(FWHM), w[4]:eta(G-L) r+=w[1]*(2*w[4]/w[3]/pi/(1+4*((x-w[2])/w[3])^2)+2*(1-w[4])/w[3]*SQRT(ln(2)/pi)*exp(-4*ln(2)*((x-w[2])/w[3])^2)) return r End
<< Parameters >> w[0] : Bakcground,w[1] : Integral, w[2] : Center, w[3] : FWHM(GaussianとLorentzianの半値全幅を共通にとる),w[4] : η-parameter(η=0のときGaussian,η=1のときLorentzian). GaussianとLorentzianの重ね合わせ.それぞれの単独での積分値は規格化されているので,ηで重みが変わる. Multi-squared-Lorentzianのときはi=5〜8のパラメータも使う. Asymmetric pseudo-Voigt (Lorentzian + Gaussian) Function Asym_pseudVoigt(w,x) Wave w Variable x Variable r=w[0] Variable i=1 // w[1]:intensity, w[2]:cen, w[3]:Gamma(FWHM), w[4]:eta(G-L), w[5]:asymmetry (-1 < w[5] < 1) if(x<w[2]) r+=w[1]*(2*w[4]/w[3]/pi/(1+4*((x-w[2])/(1-w[5])/w[3])^2)+2*(1-w[4])/w[3]*SQRT(ln(2)/pi)*exp(-4*ln(2)*((x-w[2])/(1-w[5])/w[3])^2)) elseif(x>=w[2]) r+=w[1]*(2*w[4]/w[3]/pi/(1+4*((x-w[2])/(1+w[5])/w[3])^2)+2*(1-w[4])/w[3]*SQRT(ln(2)/pi)*exp(-4*ln(2)*((x-w[2])/(1+w[5])/w[3])^2)) endif return r End Asymmetric pseudo-Voigt (Squared-Lorentzian and Gaussian) Function Asym_psdVoigtSQLG(w,x) Wave w Variable x Variable r=w[0] Variable i=1, f=1/2/sqrt(sqrt(2) - 1) // w[1]:intensity, w[2]:cen, w[3]:FWHM, w[4]:eta(G-SQL), w[5]:asymmetry if(x<w[2]) r+=w[1]*(2*w[4]/f/w[3]/pi*((1-w[5])*f*w[3])^4*(1/((x-w[2])^2+((1-w[5])*f*w[3])^2))^2+2*(1-w[4])/w[3]*SQRT(ln(2)/pi)*exp(-4*ln(2)*((x-w[2])/(1-w[5])/w[3])^2)) elseif(x>=w[2]) r+=w[1]*(2*w[4]/f/w[3]/pi*((1+w[5])*f*w[3])^4*(1/((x-w[2])^2+((1+w[5])*f*w[3])^2))^2+2*(1-w[4])/w[3]*SQRT(ln(2)/pi)*exp(-4*ln(2)*((x-w[2])/(1+w[5])/w[3])^2)) endif // w[6]:intensity, w[7]:cen, w[8]:FWHM, W[9]:eta(G-SQL), W[10]:asymmetry if(x<w[7]) r+=w[6]*(2*w[9]/f/w[8]/pi*((1-w[10])*f*w[8])^4*(1/((x-w[7])^2+((1-w[10])*f*w[8])^2))^2+2*(1-W[9])/w[8]*SQRT(ln(2)/pi)*exp(-4*ln(2)*((x-w[7])/(1-W[10])/w[8])^2)) elseif(x>=w[7]) r+=w[6]*(2*w[9]/f/w[8]/pi*((1+w[10])*f*w[8])^4*(1/((x-w[7])^2+((1+w[10])*f*w[8])^2))^2+2*(1-W[9])/w[8]*SQRT(ln(2)/pi)*exp(-4*ln(2)*((x-w[7])/(1+W[10])/w[8])^2)) endif // r+=w[11]*(exp(-(x-w[12])^2/2/w[13]^2))/w[13]/sqrt(2*pi) return r End 台形型関数 Function hill(w,x) Wave w; Variable x Variable r=w[1] r += (w[0]-w[1])/(1+(w[3]/(x-w[2]))^w[4]) return r End << Parameters >> w[0] : 両サイドのy値, w[1] : 中心部分のy値, w[2] : 中心のx値, w[3] : 幅, w[4] : 壁の鋭さ.偶数で固定.大きいほど急峻.
|