OxfordでセメントのNMR測定
目次
更新履歴
- scriptと解析プログラムを作成し、wetとdryなcementの測定行った。
- Sequences/cement_ssecho.py
- Sequences/cement_cpmg.py
- Sequences/cement_fid.py
- Scripts/cement_run.py
- py/ridat2cpmg.py
- py/ridat2lib.py
- py/ridat2plot.py
- py/ridat2ssecho.py
- Sequences/cement_ssecho.pyのd0の計算間違いを修正した。
- Sequences/cement_ssecho.pyのdelayを削って7usのtauから測定できるようにした。正しくシーケンスが実行されているか、oxfordに問い合わせ中。
- Scripts/cement_run.pyにbackgroundを測定するparameterを追加した。
- py/ridat2ssecho.pyでexcelファイルを出力する引数を追加した。
cement_run.pyを修正して、solid echoのtauを次のように変更した。tauが 長いと、exponentialとgaussianのfittingに失敗して変なデータになるため。
taus = np.linspace(7, 10, 31) # 2021/10/01
パルス幅を自前で決定するために、ridat2P90.pyを作成した。パルス幅を 変えてFID測定し、位相補正後に強度を求めてパルス幅 vs. 強度のデータ をフィッテングしてP90とP180を求めます。乾燥したサポナイトのパルス幅 を測定してみた。
エコー時間を極限まで小さくするために、TXenableをいろいろ変えて実験 した。10 mmプローブでは、TXenableを0.8 usまで短くしても測定データに 変化がないことを確認した。サンプルは、部屋に置いていた月布モンモリ ロナイトとオイルを使った。
もろもろ大幅に変更した。cu_ではじまるファイルを作成している。 セメント説明用の動画を作成した。 https://amorphous.tf.chiba-u.jp/?p=1537
password: kadfj2qadKaf
inversion-recovery測定の調整を行った。
- acquisition前のgroup_delayを考慮した。
- echotime=2*tauになるようCPMGの定義を変更した。
- 宇野に測定方法を教えた。
- 一連の測定(solid echo, cpmg, inv-cpmg)をbatchで行うようにした。
ファイルの入手
git経由でファイルを入手する。
git clone https://amorphous.tf.chiba-u.jp/gitweb/nagoya/rinmr.git
Sequences/
- Volumes/Users/Public/Documents/Application\ Developer/Sequences に配置されるpulse sequenceファイル。
py/
ridat2lib.py
RiDataを操作するためのライブラリ。
ridat2cpmg.py
ridat2plot.py
RiDatを単にプロットするプログラム。複数のファイルを指定できる。
ridat2plot.py cpmg_dry.000*RiDat
ridat2solid.py
solid echoの測定データを解析するプログラム。solid echoのデータは、 tau毎に別ファイルとして保存されているので、すべてのファイルを引数で渡す。
ridat2ssecho.py -r ssecho_wet.*RiDat
これで、解析結果がプロットされ、解析結果としてssecho_wet.outが生成される。 excelファイルに計算結果を出力した場合は、-xでファイル名を渡す。
ridat2ssecho.py ssecho_wet.*RiDat -x hoge.xlsx
これでhoge.xlsxが生成される。ただし、全ての数値データを出力するのでしばらく時間がかかる。また、pandasが必要となる。
ridat2P90.py
パルス幅を変えて測定した複数のFIDデータについて、最初のデータを位相 補正して強度を求め、パルス幅と強度データを作成する。作成したデータ を以下の関数でfittingして、パルス幅を求めるプログラム。 \[ I(t) = p_0 \exp(-p_1 t) \sin(p_2t) \]
solid echoの測定データを解析するプログラム。solid echoのデータは、 tau毎に別ファイルとして保存されているので、すべてのファイルを引数で渡す。
ridat2P90.py cement-P90.0*RiDat
これで標準出力に求めたパルス幅とfitting結果が表示される。
P90: 2.2854732283347157 us P180: 4.570946456669431 us
ridat2invrec.py
INVRECで測定したデータをfitしてT1を求める。
INVRECの測定例。T1とT1nは予測されるT1値とD1のポイント数。
C.INVREC("T1_N55", T1=0.01, T1n=8)
測定データの解析例
ridat2invrec.py -r T1_N55.*.RiDat
これでT1wを求める。
ridat2invcpmg.py
INVCPMGLOGで測定したしたデータから、intファイルを生成してosilapを使っ て2DのILTを行う。解析結果は、T1T2分布(distr)と減衰(decay)データファ イルを生成する。
INVCPMGLOGの測定例。D1をデータ点最適化するために予め測定しておいた T1を指定する。またD1のポイント数も指定する。
C.INVCPMGLOG("T1T2_N55", NS=4, T1n=20, T1=0.002)
測定データの解析例。150us以降のデータを切り出す。
ridat2invcpmg.py -r T1T2_N55.*RiDat -s 150e-5
これで、int, decay, distrファイルが生成される。
distrplot2D.py
2次元のdistrファイルを2Dプロットする。
decayplot2D.py
ILTから求めたdecayファイルのデータをプロットする。lineは、T1T2分布 から求めたdecayデータ。
decayplot2D.py T1T2_N55.decay -m T1T2
Discrete解析する場合は、–fitと-nで成分数を指定する。2成分でフィッ トする場合は次のとおり。
decayplot2D.py T1T2_N55.decay -m T1T2 --fit -n 2