OUOperatingGrant.png

粉末X線回折パターンの処理プログラム

ピークサーチとバックグラウンド推定

  • 粉末回折パターンを検索・同定するプログラムを作りたいのだが、まずは回折パターンからピーク位置を検出したり、バックグラウンドを推定する部分をPythonで書いてみた。

処理の概要

  • 使っている回折計がRigakuのSmartlabなので、出力される.ascファイルから回折パターンをまず読み込む。回折パターンの最初、最後の角度、ステップ角を読み込み、強度データを読み込む。
  • 回折パターンにスムージングを適用。現在は9点の多項式適合平滑化を使っている。そういう処理については、南茂夫編の「科学計測のための波形データ処理」CQ出版社がわかりやすいが、かなり古いのでプログラム例はBASICである。
  • 同様に多項式適合平滑化による微分を行う。こちらは7点だが、コマンドの引数で点数を変更可能なようにしている。微分はピーク位置を求めるためで、微分波形のプラス側からマイナス側に向かうところで、ちょうどゼロになったところがピーク位置となる。低角側から処理しているので、求められるピーク位置がどうしても高角側に少しずれる。そのため、ピーク位置近傍で再度平滑化した強度をチェックして、最大値のところをピーク位置とした。
  • 偽ピークを避けるなど、色々細かな調整が必要。また、微分波形は低角度ほどノイズが高い傾向があり、それは角度に対してPower則で近似できそうなので、それを考慮してプログラムした。それにより、低角側のノイズをピークとして検出することが大幅に減った。ピークかどうかの判断は、ピーク自体の強度、さきほどのノイズの角度依存性で適当に決め、それに検出感度を掛けている。検出感度はコマンドの引数でプログラムに与えられるので、検出感度を変えて、ピーク数を見ながら、何度か実行してみている。
  • 上記で求めたピーク位置から離れたところの強度を拾って、それをバックグラウンドにする。これもピークが混んでるところは避けて、うまく拾うように工夫が必要。
  • 上記で得たバックグランドデータは見たところまだ凸凹しているので、補間するのは適当ではない。そのためデータを多項式にフィットした。現在6次式を使っている。この部分の計算にはNumpyのpolyfitを使った。非常に簡単にできる。なお、高角端ではどうしてもフィットがずれるので、ピーク位置リストのさらに高角側にダミーデータを入れておいて、フィットを行い、高角側でのズレを防いだ。
  • 上記の多項式で全角度でバックグラウンドを計算。同時に、平滑化したパターンからバックグラウンドを引いたパターンも計算。
  • ピーク位置についてファイルに書き出す。角度、d-spacing, ピーク高さのみ。
  • 回折パターンとそれを処理したパターン(平滑化、微分)、バックグラウンド等を別のファイルにコンマ区切りで保存する。これをMacのアプリのPlot2 で開いて、表示する。ピーク位置も書き込んでいるので、回折パターン上に検出されたピーク位置を表示できる。下の図はそうやってPlot2で表示したところ。平滑化したパターン(青)、多項式近似のバックグラウンド(オレンジ)、検出されたピーク位置(逆三角)が示されている。微分や平滑化前のパターンもあるのだが、それらはいま見えないようにしている。こうするとセラミックス雑誌でよく見る、粉末パターンの表示方法と似ている。
    peakfind.png
  • まだ残っている課題
    • 大きいピークの肩にある小さいピークが拾えていない。
    • テストしたパターンはガラスホルダーのハローがないが、ガラスのハローがある時のバックグラウンドはうまくフィットできるか。
    • パーソナル粉末回折データベース自体の作成と、このプログラムで得たd-spacing listを使って検索するソフト部分の開発
    • 有機と無機を分けたいので、有機と無機を組成から確実に判別するアルゴリズムの考案
  • 今年(2018)の「知恵の見本市」までにはデータベースと検索ソフトのプロトタイプを作りたい。と思っていたら、募集のアナウンスが全くないので、今年はないようだ。

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-11 (水) 18:53:50 (246d)