RRUFFの粉末X線回折データ(dif)で遊ぶ(20260128作成:最終更新20260128)
アリゾナクレーターの砂岩の粉末X線回折パターン(青)を検索したところ。石英が候補で出てきて大体合うが、余分なピークは共存するコーサイトによるもの。
前書き
RRUFFのラマンデータで遊ぶでRRUFFのラマンデータを使ったラマンスペクトルの検索プログラムを作ったのですが、それのindexを使ったプログラムを粉末X線パターンに書き直してみました。回折データもRRUFFが公開しているもの(dif)を使ってます。まあ、CODの結晶構造から作った粉末X線回折パターンを検索できるQualX2が既に存在するし、今使っているデータは3400個しかないので、有用かどうかは分かりませんが、鉱物については結構検索できると思います。またpython使っているのでOSには依存しません。
RRUFF difデータ
RRUFFはラマンだけではなくX線回折パターンデータセット(IRスペクトルなども)もあって、RRUFFのサイトから自由にダウンロードすることができます。dif.zipは実は2つあって、"Powder XRD"のところのものは3000個くらいしかありませんが、このdifとほぼ対応する粉末X線パターンデータ(XY_RAW.zip)があるので、検索した後でパターンを比較するのにはこちらの方が便利です。"AMCSD"の方にあるdif.zipはもっとサイズが大きく2万程度のデータがあります。ただそれに対応する粉末X線パターンデータはありません(cifがあるのでパターンを計算することは可能ですが)。今回は前者のdif.zipと同じところにあるXY_RAW.zipを使ってます。
indexファイルを使った検索
- 基本ラマンの時と同じです。プログラムはpythonで作成し、いつものようにGUIにはTkinterを使うのですが、以下の方針で作ることにしました。
- データベースソフトは使わないで、テキストファイルで処理します。
- difデータ(回折ピークのd値が載っている)を1つづつ処理して、d値を強度高い方から10個拾って、それをindex_dif.txtファイルに書き込みます。
- 別途検索用プログラムを作り、まずindex_dif.txtを最初に読み込んでおきます。次に同定したい観測粉末回折パターンを読み込んで、プロット、平滑化して、必要ならバックグラウンドを取り除いて10個ピーク検出してリストアップします。必要ならそこから使わないピークを選択できます。それをindex_dif.txtファイルと比較して、一致のよいものをリストアップします。リストアップしたものから選択されたものをXY_RAWの回折パターンとして表示して、観察パターンと一致しているかどうかはユーザーが判断します。
- 観察回折パターンはCu波長を使ったものを想定していて、相対波数と強度がカンマで区切られているcsvファイルかリガクのascファイルを想定してます。これは使っていた装置の関係です。もちろん別形式でも(プログラム直せば)対応できます。
- 楽するためになるべくnumpy, scipy等の機能を使います。たとえば平滑化はSavitzky-Golay法を使いますが、scipyのsignalにsavgol_filter()関数があるのでそれを使います。ピーク検出はscipy.signalのfind_peaks()関数を使います。
- 同定に使う観察回折パターンはほぼ単相のものを想定しています。不純物相のピーク位置が分かっている場合はそのピークを除外して検索することが可能です。主相以外の検索は現状できません。
- XY_RAWの回折パターンはCu Ka1,2で測定しているようですので、特に処理することなく観察パターンと比較してますが、私のデータはCu Ka1なので、ちょっと違いがありますが、検索では問題になりません。
- 手持ちのデータ10個ほどチェックして問題なく候補上位にリストアップされました。
もちろんWindowsユーザーであればQualX2を使えば、CODのデータベースから計算した強度で検索できます。
pythonコードのダウンロード
参考のためにコードを公開してます(Mac上で作成)。クリックするとファイル自体が開いてしまうので(その場合、セーブしてください)、リンク上で右クリックでダウンロードするを選んでください。また実際に使うためにはpythonライブラリの追加(matplotlib, numpy,scipyなど)、ファイルのディレクトリをPCに合わせて変更するなどが必要になります。Mac以外でも動くはずですが、フォントサイズがおかしいなどの問題があります(もちろんコードをいじれば直せますが)。