OxfordでセメントのNMR測定

目次

更新履歴

<2021-07-10 土>

  • 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

<2021-09-10 金>

  • Sequences/cement_ssecho.pyのd0の計算間違いを修正した。
  • Sequences/cement_ssecho.pyのdelayを削って7usのtauから測定できるようにした。正しくシーケンスが実行されているか、oxfordに問い合わせ中。
  • Scripts/cement_run.pyにbackgroundを測定するparameterを追加した。
  • py/ridat2ssecho.pyでexcelファイルを出力する引数を追加した。

<2021-10-01 金>

cement_run.pyを修正して、solid echoのtauを次のように変更した。tauが 長いと、exponentialとgaussianのfittingに失敗して変なデータになるため。

taus = np.linspace(7, 10, 31) # 2021/10/01

<2021-10-20 水>

パルス幅を自前で決定するために、ridat2P90.pyを作成した。パルス幅を 変えてFID測定し、位相補正後に強度を求めてパルス幅 vs. 強度のデータ をフィッテングしてP90とP180を求めます。乾燥したサポナイトのパルス幅 を測定してみた。

エコー時間を極限まで小さくするために、TXenableをいろいろ変えて実験 した。10 mmプローブでは、TXenableを0.8 usまで短くしても測定データに 変化がないことを確認した。サンプルは、部屋に置いていた月布モンモリ ロナイトとオイルを使った。

<2022-10-18 火>

もろもろ大幅に変更した。cu_ではじまるファイルを作成している。 セメント説明用の動画を作成した。 https://amorphous.tf.chiba-u.jp/?p=1537

password: kadfj2qadKaf

<2022-12-01 木>

inversion-recovery測定の調整を行った。

<2023-02-07 火>

  • acquisition前のgroup_delayを考慮した。
  • echotime=2*tauになるようCPMGの定義を変更した。

<2023-02-14 火>

  • 宇野に測定方法を教えた。
  • 一連の測定(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

cpmg測定で生成したRiDatをosilapで逆ラプラス処理し、T2分布を求めるプ ログラム。osilapに渡すパラメータは、ridat2cpmg.pyで定義している。次 のように実行する。実行パスにosilapを配置しておく必要がある。

ridat2cpmg.py -r cpmg_wet.0001.RiDat

解析結果は、cpmg_dry.0001.decayとcpmg_dry.0001.distrが生成され、解 析結果をプロットする。

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

著者: 大窪 貴洋(千葉大学)

Created: 2023-02-14 火 18:47

Validate