25Mg NMRによるMgOの定量

1 はじめに

スラグに含まれるMgOの含有量を25Mg 固体NMRスペクトルより評価するため に作成したプログラムです。実測したスペクトルをフィッテングする Mgnmr-fit.py とdead timeと緩和時間から25Mg 固体NMRスペクトルをシミュ レーションする Mgnmr-sim.py を配布しています。

2 プログラムのインストール

プログラムはpython3.xで作成しています。python3.xを実行できる環境が必要です。numy, scipy, matplotlibが必要です。miniconda経由でpythonをインストールしたら、以下のコマンドで必要なライブラリをインストールしてください。

conda install numpy matplotlib scipy xlrd

3 ピークフィッテングプログラム Mgnmr-fit.py

引数にasciiで保存されたスペクトルデータのファイルを指定します。

Mgnmr-fig.py hoge.asc

hoge.asc は以下のような中身です。1行目はスキップします。スペース区切りでchemical shift, real, imaginayのデータが並んでいます。

X    Real    Imaginary
461.235870559371    0.00210449772234    0.01879221769739
461.136206553686    0.01933322792531    0.02410598319926
461.036542548       0.03789569781875    0.01570270412245
460.936878542315    0.08138363489947   -0.0262731683934
460.837214536629   -0.01199943947864   -0.09054867096886
.
.
.

初期値に従って次の関数を用いてピークフィッテングを行います。 $$ f(x) = I_0\left[ (1 - a_0)\exp \left( -\ln(2) \left(\frac{x-a_1}{a_2}\right)^2 \right) + \frac{a_0}{1 + \left(\frac{x-a_1}{a_2}\right)^2} \right] $$

ここでパラメータ \(a_0, a_1, a_2, a_4\) は以下のような制限を課しています。

\begin{align} 0 \le &I_0 \le \infty \\ 0 \le &a_0 \le 1 \\ -\infty \le &a_1 \le \infty \\ 0 \le &a_2 \le \infty \\ \end{align}

コマンドでデータを渡します。

プログラムを実行するとフィッテング結果とフィッテングパラメータが表示されます。

Mgnmr-fit.png

Calculating hoge.asc...                                           
Filename: hoge.asc
RMS = 0.05    
(    Label Intensity  position      fwhm       G/L    area/%)
(      MgO     2.867     35.54   0.06755 8.879e-11     11.24)
(      MgO     12.14     35.54    0.3006    0.8023      47.6)
(    Mg2Si     3.182     70.82    0.1066         1     12.45)
(    Mg2Si     7.323     70.62    0.3195    0.6704     28.71)
TOTAL AREA:     255.87
MgO/Mg2Si: 1.4291049459588872
MgO content (mg): 12.42825960918913

4 NMRスペクトルシミュレーションプログラム Mgnmr-sim.py

dead timeを考慮して2つのピークからなるノイズの印加したFIDを生成し、フー リェ変換、位相補正することで、NMRスペクトルを計算します。さらに得られ たスペクトルのフィッテングすることで、ピーク面積を求めます。

-hで指定できるオプション一覧が表示されます。以下、オプションについてもう少し説明します。

オプション 内容 default
-h ヘルプを表します。  
-t1 Mg2Siに相当する緩和時間 0.02
-t2 MgOに相当する緩和時間 0.02
-s1 Mg2S1に相当する共鳴周波数 500
-s2 MgOに相当する共鳴周波数 -500
-d sampling time (dwell) 50e-6
–dead dead time (dwell) 50e-6
-p sampling point 4096
-hl xlsファイル中のヘッダが入っている行番号を指定します。 3
-s noize 0.3
-o 図をsaveするファイル名 None

FIDはT2による減衰のみを考慮して以下の式ににより生成します。実験と同様 にサンプリング開始点を \(t=0\) とします。

$$ I(t) = I_0\exp(2\pi wt)\exp\left(-\frac{t}{T_2}\right) + noize $$

フーリエ変換を行ってスペクトルを得ます。

$$ f(w) = \int_{-\infty}^{\infty} I(t)\exp(-iwt)dt $$

0次と1次の位相補正を行ってスペクトルとし、 Mgnmr-fit.py と同じ手順でピーク分離を行い面積比を求めます。 MgOのT2=0.01とした実行例と実行結果は以下のとおりです。

Mgnmr-sim.py -t2 0.01

Mgnmr-sim.png

(I, pos, fwmh, G/L) = (4753,  500.17, 10.00, 0.63)
(I, pos, fwmh, G/L) = (5067, -499.82, 17.02, 0.98)
Ia:Ib = 4752.94:5067.42
Ia/Ib = 0.94

著者: 大窪 貴洋

Created: 2018-01-29 月 17:28

Validate