EXPOでRietveld の変更点


#author("2024-05-10T15:15:13+09:00;2024-05-10T15:14:51+09:00","default:masami","masami")
#author("2024-08-02T13:31:16+09:00;2024-05-10T15:14:51+09:00","default:masami","masami")
*EXPOでRietveld解析のみ行う
#contents
----
(2024/05/10) デモ動画追加
**EXPOについて
 [[EXPO:http://www.ba.ic.cnr.it/softwareic/expo2014/]]は粉末回折X線データから未知結晶構造を解く直接法のプログラムだが、解いた構造のRietveld法による構造精密化もできる。EXPOの使い方については[[[EXPO2013使用方法]]]もご覧ください。学生実習で使う予定もあって、2020年末年始に(沢山降った雪と格闘する合間に)EXPOとGSAS-IIで色々と遊んでみた。EXPOは結晶構造を解くために使ったことはあるが、Rietveld法には普段RIETAN-FPを使うので、これまで実際にEXPOのRietveld法部分を使ったことはなかったが、今回初めて使ってみた。~
 最初は直接法で構造を求めて、そこからRietveld法で構造をrefineしていた。これが普通の解析のフロー。しかし、遊んでいるうちに、cifファイルを最初に読んでおけば、構造を求めるプロセス(Le Bail, indexing, extract, phase ...)は全てパスして、直ちにRietveld法を使うことができることが分かった。これはEXPOとしては多少変則的な使い方ではあるが、非常に簡単にRietveld法を試すことができて、Rietveld法のquickなデモに使える。さらに最近、多相も扱えるようになったので、本格的なRietveld法としても実用的であると感じた。ただ、粉末X線は基本的にはBragg-Brentano型回折計しかサポートしてないと思う。異方性温度因子にも対応していないが、普通粉末X線データで異方性温度因子まで精密化するのは簡単ではない。角度分散の中性子回折には対応している。GSAS-IIと比較したくなるが、私の個人的な感想ではEXPOの方が直感的に使えるところが良いと思った。多相の扱いはまだGUI化されていないが、それでもGSAS-IIよりは遥に使い方が簡単である。ただ、多様な回折データには対応してないなど万能ではない。GSAS-IIについては[[[GSAS-IIの使用方法]]]に書いた。なお、以下はGUIを使った方法であるが、コマンドラインで使うこともできたはずである。
 最初は直接法で構造を求めて、そこからRietveld法で構造をrefineしていた。これが普通の解析のフロー。しかし、遊んでいるうちに、cifファイルを最初に読んでおけば、構造を求めるプロセス(Le Bail, indexing, extract, phase ...)は全てパスして、直ちにRietveld法を使うことができることが分かった。これはEXPOとしては多少変則的な使い方ではあるが、非常に簡単にRietveld法を試すことができて、Rietveld法のquickなデモにも使える。さらに最近、多相も扱えるようになったので、本格的なRietveld法としても実用的であると感じた。ただ、粉末X線は基本的にはBragg-Brentano型回折計しかサポートしてないと思う。異方性温度因子にも対応していないが、普通粉末X線データで異方性温度因子まで精密化するのは簡単ではない。角度分散の中性子回折には対応している。GSAS-IIと比較したくなるが、私の個人的な感想ではEXPOの方が直感的に使えるところが良いと思った。多相の扱いはまだGUI化されていないが、それでもGSAS-IIよりは遥に使い方が簡単である。ただ、多様な回折データには対応してないなど万能ではない。GSAS-IIについては[[[GSAS-IIの使用方法]]]に書いた。なお、以下はGUIを使った方法であるが、コマンドラインで使うこともできたはずである。
#image(https://mkanzaki.sakura.ne.jp/images/EXPO_splash.png,center,40%)
** EXPOでRietveld法のみ実施する際の手順(単相の場合)
+EXPO起動。Newで、粉末回折データを読み込む。実例としてforsterite(Mg2SiO4)の測定データが[[ダウンロード:https://mkanzaki.sakura.ne.jp/data/forsterite.xy]]できる。組成を要求されるが、これは適当で良い(直接法の時は正しい情報が必要)。波長の選択など。このforsteriteの場合はCu菅球使用。必要なら解析で使用する角度範囲を変える。Ka2が出ている場合はKa2をチェック(このforsteriteの例ではチェックしない)。ダイアログでGoをクリック。データを読み込み、回折パターンが表示される。未知構造解析の場合は、ここからバックグラウンド推定、ピークサーチ、個別ピークフィッティング、指数付けに進むが、今回は何もしない。
+FileメニューからImport Structureを選択。そこでファイル選択ダイアログが出るので、回折データに対応する結晶構造のcifファイルを選ぶ。構造が別ウィンドウに表示される。実例としてMg2SiO4のcifが[[ダウンロード:https://mkanzaki.sakura.ne.jp/data/forsterite.cif]]できる。cifファイルは結晶構造等を記載したファイルで、オープン結晶構造データベース(COD)などから入手できる。もちろん文献のデータをVESTAに入力して、cifを出力させてもよい。
+EXPO起動。Newで、粉末回折データを読み込む。実例としてforsterite(Mg2SiO4)の測定データが[[ダウンロード:https://mkanzaki.sakura.ne.jp/data/forsterite.xy]]できる。組成を要求されるが、これは適当で良い(直接法の時は正しい情報が必要)。波長の選択など。このforsteriteの場合はCu菅球使用。必要なら解析で使用する角度範囲を変える。Ka2が出ている場合はKa2をチェック(このforsteriteデータではチェックしない)。ダイアログでGoをクリック。データを読み込み、回折パターンが表示される。未知構造解析の場合は、ここからバックグラウンド推定、ピークサーチ、個別ピークフィッティング、指数付けに進むが、今回は何もしない。
+FileメニューからImport Structureを選択。そこでファイル選択ダイアログが出るので、回折データに対応する結晶構造のcifファイルを選ぶ。構造が別ウィンドウに表示される。実例としてMg2SiO4のcifが[[ダウンロード:https://mkanzaki.sakura.ne.jp/data/forsterite.cif]]できる。cifファイルは結晶構造等を記載したファイルで、オープン結晶構造データベース(COD)などから入手できる。もちろん文献の結晶構造データをVESTAに入力して、cifを出力させてもよい。
+RefineメニューからRietveldを選択。出てきたウインドウでAutomatic Proceduresの2つをチェック。Le Bail法もここからできる。Refineボタンを押すと構造精密化(プロファイル等の精密化も)が始まる。自動で止まる。Rwpが十分下がったらおしまい。結晶構造の個々のパラメータやプロファイル関数をrefineするかどうかはチェックボックスで選択できる。パラメータ間の制約も簡単につけられる(GSAS-IIの制約の付け方よりは遥に簡単)。
#image(https://mkanzaki.sakura.ne.jp/images/EXPO-Rietveld.png,right,50%)
+詳しい結果が欲しい場合はPrint Optionsを使う。格子定数の誤差が出力に見つけられなかったが、出力されたcifには入っている。もちろんrefineしてない場合は誤差はついてない。もし誤差がついてない場合は、Rietveld Refinementのwindowで、GeneralタブのPrint Optionsでcifをチェックして、Refineボタンをクリック。riet.cifが自動的に出来ているはず。そちらには誤差がついているはず。
+そうやって得られた回折パターン等を右に示す。図の右下はRwpの改善の様子。この例(forsterite)だとプログラムの起動からたった2分以内で解析が終わった…~
+そうやって得られた回折パターン等を右に示す。図の右下はRwpの改善の様子。この例(forsterite)だとプログラムの起動からたった2分以内で解析が終わった…
Rpで比べると(Rwpはweightの取り方に依存すると思うので)、同じデータでRIETAN-FPを使うとEXPOの結果よりもう少しRpが下がった。GSAS-IIはRpが何故か表示されないので比較しづらいが、Rwpや残差パターンから見て明らかにEXPOより悪い。GSAS-IIはまだ初心者なので、十分使いこなせてないためかもしれないが…GSAS-IIは使えるピーク関数は1つのみで、Thompsonら(1987)のpsudo-Voigtに、Finger et al.(1994)の軸分散ブロード化を使っている。非対称性はFinger et al.(1994)の方法を単純化して使っているようだ。ちなみにFinger et al.(1994)の第3著者のJephcoatさんは数年前にこちらの研究所の教授だった。
-[[EXPOでRietveldのデモ動画:https://mkanzaki.sakura.ne.jp/images/EXPO-Rietveld-example-720p.mov]] 上記のforsteriteの解析の手順のデモ動画。114.5 MBあります。
** 多相のRietveld
 最近のバージョンでは多相も解析できるようになっているが、マニュアルには方法が書かれていないようである(2022/03/20時点)。また、GUIに対応してないようである。なので、上記と同じように1相でまずexpファイルを作っておく。そしてそのexpファイルをEdit機能か、エディターで直接修正することで多相に対応させることができる。%crystal directiveで相を追加できるようである。ただ%crystalはマニュアルには記載がない…最近出た[[EXPOの論文:https://doi.org/10.1107/S160057672200245X]]に少しそれについて書かれていたので、それを参考に試してみて、計算できるようになった。実例のexpファイルを以下に示す。

 %structure sandstone
 %job structure sandstone
 %init
 %data
 pattern /Users/masami/sandstone.xy
 wave 1.540560
 
 %crystal
 name quartz
 file quartz.cif
 
 %crystal
 name coesite
 file coesite.cif
 
 %crystal
 name stishovite
 file stishovite.cif
 
 %rietveld
 
 %continue

#image(https://mkanzaki.sakura.ne.jp/images/EXPO-multiphase.png,center,66%)
 これはアリゾナの隕石孔の砂岩試料の粉末X線回折パターンで、quartz > coesite >> stishoviteの3相含む例であり、[[sandstone.xy:https://mkanzaki.sakura.ne.jp/data/forsterite.xy]]が回折データファイル。波長はCu Ka1。%crystalで相を定義しており、そのcifファイル名を与えている。%crystalを繰り返せば、多相のRietveldが可能となる。3相のcifファイルは、[[quartz:https://mkanzaki.sakura.ne.jp/data/quartz.cif]]、[[coesite:https://mkanzaki.sakura.ne.jp/data/coesite.cif]]、[[stishovite:https://mkanzaki.sakura.ne.jp/data/~masami/stishovite.cif]]。試しに実施した結果のパターンを示す。特に何もしなくても順調に収束した。こちらも出力ファイルに細かい結果があるので、そちらに例えば定量分析結果などが出ている。この例の場合はRIETAN-FPでの計算も行っているが([[Plot2のマクロ利用]])、ほぼ同じ定量分析結果が得られた。なお、この試料は隕石が落ちてきた衝撃で元々あった砂岩(石英が主)が高圧高温条件に晒されて石英の高圧相のcoesite, stishoviteが一部生じている。
 なお、このページではRietveld法だけについて触れているが、現在結晶構造を解く際にも多相対応となっている。構造未知相以外の相の構造が知られているか、最低格子定数が決まっていることが必要である。ただ、私は多相データで試してみたが、なかなかうまくいかない。まずindexingで引っかかる。不純物ピークが混ざっているとindexingはなかなか難しい。とはいえ最後の方に結晶構造を解く場合のやり方を追記した。
 なお、このページではRietveld法だけについて触れているが、現在結晶構造を解く際にも多相対応となっている。構造未知相以外の相の構造が知られているか、最低格子定数が決まっていることが必要である。ただ、私は多相データで試してみたが、なかなかうまくいかない。まずindexingで引っかかる。不純物ピークが沢山混ざっているとindexingがそもそも難しい。とはいえ最後の方に結晶構造を解く場合のやり方を追記した。
***多相のRietveld解析をより簡単にするPythonスクリプト
 上記のやり方では.expファイルを作る部分が面倒なので、多相Rietveldを行うexpファイルを自動作成するPythonのスクリプトを作った。もちろん単相にも使える。ついでにウチの場合はリガクの装置なので、測定データが入っているrasファイルをまずEXPOが読めるxy形式に直すことも行う。rasファイルはコーディングがcp932のようなので、読み込む時に指定してやる必要があった(これ同じrasファイルでも装置で違ったりするので、もしコーディングがcp932でない時はpythonコードのその指定を外す)。実行の時には以下のようにrasファイル名、cifファイル名(複数可)を引数として与えてやる。当然、ras, cifファイルが存在しないといけない。実行するとxy, expファイルが作成される。
 > ./ras2exp.py test.ras test1.cif test2.cif test3.cif ...  
 出来たexpファイルをEXPOからファイルメニューの"Load and Go"で選択する。GoボタンをクリックするとすぐRietveld解析の画面になるので、Automatic refinement profileをチェックして、必要に応じてその他も設定して、Refineボタンをクリックすると計算が始まる。普通は数分以内に終了。fittingが悪い場合はrefineするパラメータを色々変えてみる。定量分析結果を見たい場合はInfoメニューからView Output fileをクリック。一番最後に出ている。RIETAN-FPは定量分析に誤差が付いてないが、EXPOは誤差がでる。
 参考に作成したPythonプログラム[[ras2exp.py:https://mkanzaki.sakura.ne.jp/codes/ras2exp.py]]を置いておきます。ただ、ウチの環境(リガク、Mac)で作ったもので、エラー等の処理もちゃんとしてません。テストも1つのデータセットでしか行なってません。波長等も必要に応じて変更する必要があります(現在はCu Ka1単色での指定)。Ka2の補正が必要ならalpha2を波長指定の次行に書いておく(%dataのところ)。
** 多相での初期構造解析
 全く指数付けもできてない状態からは結構ハードルが高いので(マニュアルに記載がないので利用方法のハードルも高いので)、格子常数と空間群が分かっている場合の例を以下に示します。同じくquartz, coesiteを含む砂岩の例で。stishoviteはごく少量なので今回は無視。coesiteは構造既知としてcifから読んで、quartzの構造を求める場合。%rietveldがあるのが不思議だが、多分Le BailがRietveldの中に含まれているためにこうしているようです。実際行っているのはLe Bail法のはず。最初extractionでエラーが最初出ますが、それは無視してください。extraction消すとRietveld用の構造を入れろとなってうまくいきません。extractionのエラーで落ちることがありますが、再度起動してやればうまくいきます。この例だとちゃんと石英構造が求まりました。そこでcoesiteとquartzを入れ替えてみたら、構造はうまく解けない…まあ相対的に量が少ないわりに構造はもっと複雑なので。
 全く指数付けもできてない状態からは結構ハードルが高いので(マニュアルに記載がないので利用方法のハードルも高いので)、格子常数と空間群が分かっている場合の例を以下に示します。同じくquartz, coesiteを含む砂岩の例で。stishoviteはごく少量なので今回は無視。coesiteは構造既知としてcifから読んで、quartzの構造を求める場合。%rietveldがあるのが不思議だが、多分Le BailがRietveldの中に含まれているためにこうしているようです。実際行っているのはLe Bail法のはず。最初extractionでエラーが最初出ますが、それは無視してください。extraction消すとRietveld用の構造を入れろとなってうまくいきません。extractionのエラーで落ちることがありますが、再度起動してやればうまくいきます。この例だとちゃんと石英構造が求まりました。そこでcoesiteとquartzを入れ替えてみたら、構造はうまく解けない…まあ相対的に量が少ないわりに構造はさらに複雑なので仕方ないのかもしれません。
なお、ここからさらにRietveldへ進む場合は、結晶構造を表示しているWindowで、構造をcifで出力。それをEXPOのメインWindowのメニューから読み込む。これで石英がRietveldのタブに出てきます。
 %structure sandstone
 %job structure sandstone
 %init
 %data
 pattern /Users/masami/sandstone.xy
 wave 1.540560
 %crystal
 name quartz
 space P 32 2 1
 cell 4.916  4.916 5.4054 90.0 90.0 120.0
 cont Si3 O6
 
 %crystal
 name coesite
 file coesite.cif
 
 %rietveld
 extraction
 %continue