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}コマンドでデータを渡します。
プログラムを実行するとフィッテング結果とフィッテングパラメータが表示されます。
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
(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