Rietveld解析

目次

注意事項

この記事は2015年頃までにcygwin環境上でRIETAN-FPを動かしていた時のメモです。そのため、最近の環境で動作するか不明です。

1. はじめに

Rietveld法はX線や中性子線の粉末回折パターンから結晶構造を推定するプロ グラムです。世の中にはRietveld解析を行うプログラムが複数存在しますが、 日本語の情報が充実しているRIETAN-FPを使って解析することにします。 RIETAN-FPの特徴は以下のとおり。

  • 無料である。
  • windowsとmac版のバイナリ配布のみで、ソースコードが公開されていない。
  • 入力ファイルの形式がかなりわかりにくく、エラー表示なしに不正終了しがち。
  • MEM解析(電子密度マップ)ができる。
  • VESTAで開いた構造からインプットファイルを生成できる。
  • 秀丸でインプットファイルを生成して実行することを想定している。
  • 単相だけでなく2相以上を含む粉末回折パターンの解析もでき相の存在比を 推定できる。
  • 一部置換した構造や欠損による占有率を推定できる。


(注意)大窪は非晶質材料のNMRと分子シミュレー ションを研究テーマとしており、Rietveldで結晶構造解析を行って論文を書い たことも学会で発表したこともありません。 結晶学の最低限の知識 と計算機については教えることができますが、Rietveld解析の深いところや実 験条件のノウハウは参考文献を利用して自力で身につけてください。研究室に書籍もあります。記述の間違い等あったら、大窪に連絡してください。

2. X線の測定

X線回折実験法.pdfX線回折ジョイントセミナー.pdf を参考に注意深く試料調整を行って測定を行ってください(pdfファイルは研究室からのみアクセスできます)。サンプル依存のところがありますが、目安で以下の項目を挙げておきます。

2.1. 測定条件について

  • X線の光学調整は事前に行っておく。
  • 発散スリット(DS)と散乱スリット(SS)は1.0°として受光スリット(RS)は 0.15mmとする。強度が足りないなら縦スリットとDS, SSは大きくする。DSと SSは必ず同じ角度のものを使うこと。RSを広げると途端にピークの分解能が 下がるので0.15mmより大きいものは使わない。スリットをはめる時は、向き に注意(テーパーを背面)すること。
  • ステップスキャン(FT; fixed time 法)で測定する。
  • 20°から120°の範囲を0.02°ステップで測定し、少なくとも最大ピークの 強度は10,000cnt以上にする。10s/1stepの測定ならば (120-20)/0.02*10/3600=13.9hの測定時間になる。
  • 短い測定を何度か行って、測定条件を決める。いきなり長時間測定をしかけないこと。

2.2. サンプル調整について

  • 結晶性が高く不純物の少ない高品質な試料を準備する。少なくとも99.9%以上の純度の原料を高純度化学等から入手して合成する。
  • サンプルホルダーへの試料マウントは、ホルダー面と試料面を同じ高さにし 可能な限りフラットで凹凸のないようする。
  • 粉末の粒径は数um程度が良い。nmまで粒径が小さいと線幅が広がるし、50um以上の粗大粒子が存在すると強度の定量性がなくなる。乳棒乳鉢で数時間本気ですりつぶすと100nmくらいになります。そこそこすりつぶす程度が良いようです。

特定の結晶面が成長した粒子や層状化合物のような強く配向した粉末や多相の 回折パターンは、解析の難易度があがるので注意が必要です。

3. Rietveld解析環境の構築

解析は、インプットファイルを編集してプログラムを実行することの繰り返し です。インプットファイルはエディタで編集しますが、RIETAN-FPでは秀丸 (windowsのエディタ)使って解析を進める環境を推奨しているようです。私と 研究室の学生は洗脳によってemacs+unix(cygwin)で生活していますので、この 環境で解析を行いたいところです。

そのためemacs上でインプットファイルを編集する簡単なrietan-modeを作成し 関連するpythonプログラムを自作しています。まずはこの環境を整えて Rietveld解析を進めることとします。またVESTAから研究室のX線で測定したデー タ用のinsファイルを生成するins2concise.py, 最適化したいパラメータを変 更しながらrietanを呼び出して実行するrun_rietan.py, 解析結果をプロット するitxplot.pyを自作しています。

3.1. python本体と解析用pythonプログラムのインストール

emacsによるinsファイルの編集とcygwin上でコマンドラインによる操作で解析を進めます。python本体とモジュールのインストー ルする必要があります。 python本体と以下のモジュールをインストールします。

  • numpy
  • matplotlib

3年のゼミでとり扱いましたが、日常的にpythonを使っている学生にインストール作業を聞いても良いです。最近ではminiconda を使ったインストールが楽かと思います。

うまくpythonがインストールできているか、確認します。terminalからpythonを起動してpythonをinteractiveを起動します。

# python -i

以下のコマンドでモジュールをimportできるかチェックします。

>>> import numpy
>>> import pylab

エラーが何も表示されなかったら正しくモジュールがインストールされています。windows用のpythonをインストールした場合、pyhonプログラムを配置するディレクトリをwindows式で$HOME/.bashrcにパスを追加しておきます。

3.1.1. 解析用pythonプログラムのインストール

研究室共有フォルダ\\amorphous\glass\解析プログラム\Rietveld\rietan に大窪の自作した3つのプログラムがあります。またプログラム一式をtgzにしています。 rietan.tgz

  • dat2int.py (4-420室のXRD装置で測定した*.datファイルを*.intファイルに変換するプログラム)
  • ins2concise.py (VESTA生成の*.insから研究室で測定する装置の条件に変更した*.insを生成するプログラム)
  • run_rietan.py (最適化パラメータを調整しなからrietanを実行するプログラム)
  • itxplot.py (解析で生成されるitxファイルをプロットしたりピークと指数を表示するプログラム)

3つのファイルは/usr/local/binに配置します。

3.2. RIETAN_VENUSのインストール

https://jp-minerals.org/rietan/ からRIETAN_VENUSの windowsまたはmacバージョンをダウンロードしてzipを展開してでてくるフォ ルダRIETAN_VENUSを/usr/local/に移動

# mv RIETAN_VENUS /usr/local

パスを/usr/local/RIETAN_VENUSに通して環境変数RIETANをセットするた め~/.bashrcに以下のラインを追加します。macの場合はunix式で環境変数セッ トします。

export RIETAN="C:\cygwin64\usr\local\RIETAN_VENUS"
export LST2CIF="C:\cygwin64\usr\local\RIETAN_VENUS"

パスもセットしておきます。

export PATH="C:\cygwin64\usr\local\RIETAN_VENUS":$PATH

3.3. インストールのチェック

test.tgz をダウンロードして展開しrun_rietan.pyを実行します。

# tar xvzf test.tgz
# cd test
# run_rietan.py

以下のような出力が得られれば正しく解析環境ができています。

#  run_rietan.py 
RIETAN was successfully finished.
------------------------------------------------------------

Convergence parameters:
Rwp      =  68.648 (<15)
Re       =   5.609
S=Rw/Re  = 12.2379 (<1.3)
RB       =  91.075 (<10)
RF       =  74.385 (<2)
------------------------------------------------------------
test.ins, test.lst, and test.itx were updated.
------------------------------------------------------------
Check the fitting pattern: itxplot.py test.itx

さらにitxplot.pyで解析結果が表示されるか確認します。

# itxplot.py

以下のような図が表示されればOKです。

figure

図1: 出力される図

4. Rietveld解析の実行

4.1. intファイルの作成

dat2int.pyを使って420のX線装置で測定した*datから*.intファイルを生成します。最大強度を10,000になるようデータを規格化します。

dat2int.py hoge.dat -o hoge.int

4.2. cifファイルからinsファイルの生成

VESTAでcifファイルを開いたら Utilities->Standalization of Crystal Dataで念のため標準化された結晶の表記方法に変換します。その後、 File->Export dataでinsファイルを出力します。

VESTAで*.cifを開いて*.insをexportします。VESTAで生成した*.insから研究室装置用の*.insをins2concise.pyを使って生成します。

ins2concise.py hoge.ins -o huga.ins

4.3. rietanの実行

run_rietan.pyを使います。解析するディレクトリにhoge.insとhoge.intを置きます。

run_rietan.py

run_rietanはオプションがあります。

オプション 引数 説明
-h   ヘルプを表示します。。
-i hoge.ins 解析したいinsファイルを指定します。指定しなければ現在のディレクトリにある*.insを解析します。
-p   最適化するパラメータを選択します。
-l   最適化する原子パラメータを選択します。
-u   insファイルをupdateしません。
-b   backupファイルu生成しません。
–Sthread Svalue シェルからrun_rietan呼び出すときに使います。(Svalue以下になったらシェルを停止させます)

4.4. 解析結果の確認

emacs上で*.insを再読み込みします。

C-c C-c

itxplot.pyで*.itxファイルをプロットしてfitting結果を確認します。

itxplot.py

itxplot.pyはオプションがあります。

オプション 引数 説明
-h   ヘルプを表示します。
-p   グラフの表示をしません。
-v   角度と指数を出力します。
-o filename gnuplotでプロットしやすいファイルに出力します

5. 解析結果のチェック

きちんと解析が成功しているか以下の項目をチェックする必要があります。

5.1. SHIFTN

  • 第一パラメータは0.02より小さくなる。

5.2. 温度因子

  • 負になっているとダメ。
  • 0.1から2.0の値に入るようです。
  • 軽元素より重元素の値が小さくなっていること。

5.3. R因子

  • RFとRBは10以下を目指す。
  • Rwpは20以下にする。
  • 最大強度が10,000であればSは1.5以下になるようです。

5.4. 連続解析

guruguru.sh のようなシェルスクリプトを作って自動で解析します。

6. 解析の練習

6.1. 下準備

インプットファイルを解説したものpdfに印刷して参照しながら練習してください。TiO2-rutile.pdf 420で測定したルチル型のTiO2の解析を行います。TiO2-rutile.tgz をダウ ンロードして展開する。

tar xvzf TiO2-rutile.tgz

TiO2-rutileに含まれるファイルは以下のとおりです。

  • TiO2-rutile/TiO2-rutile.cif (NIMSから取得したルチル型TiO2のcifファイル)
  • TiO2-rutile/TiO2-rutile.dat (420で測定したXRDのデータ)

解析ディレクトリを作成して移動します。

cd TiO2-rutile
mkdir rietan
cd rietan

6.1.1. intファイルの作成

datファイルからintファイルを生成します。

dat2int.py ../TiO2-rutile.dat -o TiO2-rutile.int

6.1.2. insファイルの生成

vestaでTiO2-rutile.cifを開いてTiO2-rutile.insをexportします。vesta上 で下の作業を行います。

  • file -> export data
  • File typeでRIETAN (*ins)を選択してSave As TiO2-rutileとする。
  • Saveする場所はTiO2-rutile.cifを置いているディレクトリにしてSaveします。

6.1.3. 初期insの生成

vestaから生成したTiO2-rutile.insを420のXRD装置に合うよう編集して簡素 化したTiO2-rutile.insを生成します。

ins2concise.py ../TiO2-rutile.ins -o TiO2-rutile.ins

6.1.4. 解析スタート

emacsでTiO2-rutile.insを開きます。SCALEのみ精密化するようになってい ることを確認します。(1:精密化する 0:精密化しない)は全てのパラメータで共通です。

SCALE  2.14608E-5  1

プログラムを走らせます。

run_rietan.py 
RIETAN was successfully finished.
------------------------------------------------------------
Convergence parameters:
Rwp      =  83.212 (<15)
Re       =   6.772
S=Rw/Re  = 12.2869 (<1.3)
RB       =  64.525 (<10)
RF       =  53.885 (<10)
------------------------------------------------------------
TiO2-rutile.ins, TiO2-rutile.lst, and TiO2-rutile.itx were updated.
------------------------------------------------------------
Check the fitting pattern: itxplot.py TiO2-rutile.itx

emacs上でSCALEが更新されていることを確認します。

C-c C-c

BKGDを111111110000にして8つのパラメターを最適化します。emacs上でBKGD のお尻の数字を変更して解析します。

(変更前)BKGD  0.0  0.0  0.0  0.0  0.0  0.0
              0.0  0.0  0.0  0.0  0.0  0.0  000000000000
(変更後)BKGD  0.0  0.0  0.0  0.0  0.0  0.0
              0.0  0.0  0.0  0.0  0.0  0.0  111111110000
run_rietan.py
----------------------------------------------------------------------
RIETAN was successfully finished.
Convergence parameters:
Rwp      =  19.049 (<15)
Re       =   6.767
S=Rw/Re  =  2.8151 (<1.3)
RB       =  17.295 (<10)
RF       =  10.213 (<10)
----------------------------------------------------------------------
TiO2-rutile.ins, TiO2-rutile.lst, and TiO2-rutile.itx were updated.
----------------------------------------------------------------------

この繰り返しでRwpやSを収束する値まで減らしていきます。注意 原子の分率座標の最適化は結晶系を考えてか ならず制限を課してください。制限を課し方はSnO2.pdf のp128や日本語化 されたinsファイル(FapatiteJ.ins)の線形制約条件を参照すること。

6.1.5. シェルスクリプトの作成

run_rietan.pyはオプションで最適化するパラメータを変更(insファイルの 編集)して解析できます。emacs上で最適化する見通しがついたらシェルスク リプトを作成して収束するまで一気に解析します。シェルスクリプトは、 rieta/gurugurus.sh を参照してください。rietan/gurugur.shをコピーして 実行します。

./guruguru.sh

間違った局所的な解(温度因子がおかしい等)に陥ると、正しい解にたどりつ けません。その時は、最初から解析しなおすか初期値を見直す必要がありま す。guruguru.shを変更して解析の順番を変えつつ得られる最終的な解を吟 味するのが良いでしょう。その際、初期のinsファイルを保存しておいて上 書きすれば、最初の状態にいつでも戻れます。途中でスクリプトを止めたい 時は、ctrl-cです。

6.1.6. 結果の報告

十分に収束が確認できたら解析は成功です。以下の項目を結果として報告します。

  • 収束パラメータ(Rwp, Re, S, RB, RF) RFのFは物理量なので斜体にします。他の添字は斜体にしない。
  • 占有率、分率座標、温度因子
  • 格子定数

解析結果のTiO2-rutile.lstからlst2cifを使ってcifファイルを生成してvestaで描画できます。

lst2cif TiO2-rutile.lst

7. さらなるRietveld法の応用

簡単な解析になれたら、文献等を参考にして、以下のようなより難しい解析にすすみます。

  • MEM解析(電子密度分布)
  • 粒子の配向を考慮した解析

run_rietan.pyは上の応用解析に対応していません。適時、大窪に相談してください。プログラムを修正します。

8. 参考文献

8.1. rietanの配布サイト

参考文献も充実しているので参照してください。 http://fujioizumi.verse.jp/download/download.html

8.2. 教科書

研究室にある書籍。必要に応じてコピーしてください。pdfファイルは研究室からのみアクセスできます。

著者: 大窪 貴洋

Created: 2023-11-26 日 10:16

Validate