*CODで遊ぶ (2016/04/16作成) [#h7f2db8a]
**CODとは [#s11136dc]
-Crystallography Open Database([[COD:http://www.crystallography.net/]])は、結晶構造のオープンデータベースであり、biopolymerを除いた、有機および無機結晶を対象としている。現在(2016/04/14)、36万件超が登録されている。鉱物を扱う者としては、アメリカ鉱物学会等の鉱物構造データベースがCODへ提供されているところが重要な点である。IUCr、ACSの雑誌で出版されたcifデータも自動的に登録されるようになっている。雑誌によってはCODへ構造データのデポジットを推奨するところもある。
-CODは個人のPC等に自由にダウンロードしてくることができるので、それを研究・教育等に利用することができる。例えば、CODサイトで行っている検索は、php, mysqlが使えれば、ローカルでも実施することができる。最近、CODで少し遊んでいるので、それらを紹介する。
**CODのダウンロード [#d6805521]
-CODのwikiにダウンロード方法が書かれているのでそれを参考にする。UNIX系(Mac OSXも)であれば、Subversionを使って、以下のようにすればよい。なお、現在データ量は膨大なので(40GB弱、2016/04/14)、ハードディスク容量に注意しよう。最初のダウンロードには長時間かかる。
次のコマンドで、CODをダウンロードする。
 > svn co svn://www.crystallography.net/cod
CODは常に更新しているので、時々アップデートする必要がある。最初のダウンロードが途中で止まった時もこれを実行する。まずcodディレクトリーに移動してから、
 > cd cod
 > svn update
もしアップデートで怒られたら、clean upを実行する
 > svn cleanup
**鉱物名を取り出す [#s004ce3d]
-膨大なcifファイルから情報を取り出す方法(コード)がまず必要となる。私の場合、鉱物を扱うことが多いので、鉱物名で検索できれば便利である。鉱物名はcifファイル中では、"_chemical_name_mineral"というタグで入っているので(常に存在する訳ではない)、それを読めばよい。また、鉱物名をそのcifファイル名とともにテキストファイルに書き出しておけば、後でそのテキストファイルを使って、鉱物名で検索することや、鉱物のみを対象とする処理等で利用できる。そこで簡単なPythonのコードを書いて試した。ここでは"_chemical_name_mineral"タグのみの処理であるが、中央部分を変えれば様々な情報を集めることができる。cifファイルが3層のディレクトリ下に分配されているので、まずディレクトリのリストを得て、それを3回繰り返して、最後にcifファイルのリストを得て、それらを処理する。Macの場合は、.DS_Storeというファイルが自動的にできるので、それをリストから除外する処理も必要となる。私のMacbook AirだとCOD全部処理するのに8分くらいかかったが、SSDを使っているのでこれは速い方だった。HDDのMac miniで試すと1時間以上かかった。"_chemical_name_mineral"には鉱物でない場合にも適当な内容が入っていることがあるが、その判定は不可能なので、そのままにしている。そうして出来たのが[[鉱物名リスト:http://www.misasa.okayama-u.ac.jp/~masami/minerals_in_cod.txt]]である。なお、鉱物の場合は温度や圧力を変えたデータや固溶体も多いため、同じ鉱物名でも、たくさんのcifファイルが存在する(たとえばforsterite)。そういう意味では、"_publ_section_title"の情報や組成(_chemical_formula_sum)を一緒に取り出して表示すればいいかもしれない。
-こういう作業中に問題があって、途中で止めるには、control-cを押す。または、psでpid番号を見つけて、killする。
**Vestaでオープン [#xcb0ee21]
-上記の[[鉱物名リスト:http://www.misasa.okayama-u.ac.jp/~masami/minerals_in_cod.txt]]をgrepを使うか、テキストエディタで開いて、検索すれば鉱物名に対応するcifファイル番号が分かる。
 > grep forsterite minerals_in_cod.txt
 forsterite,9000166.cif
 forsterite,9000167.cif
 forsterite,9000267.cif
 ...
-CODをダウンロードしてなくても、そのcifファイルを簡単に得ることができる。以下のようにウェブブラウザで、cifファイル名を直接指定してやれば、cifファイルがダウンロードされるので、それをVestaで開けばよい。
 http://www.crystallography.net/9000166.cif
-CODをダウンロードしている場合には、cifファイル本体はcodディレクトリから数えて5層下にあるので、GUIだとファイル名からファイルまでたどり着くのは結構面倒である(MacならSpotlightで検索した方が早い)。cifファイル名からそれがあるディレクトリは一意に決まるので、cifファイル名を引数に与えると、Vestaで開いてくれる簡単なPythonコードも作った。コードは短いので下に直接ペーストしておく。もちろんbase部分はそれぞれの環境に応じて変えないといけない。
 #!/usr/bin/python
 import sys,subprocess
 base = '/Users/masami/cod/cif/' # cif base directory, change here
 fname = sys.argv[1]
 dir = base + fname[0] + '/' + fname[1:3] + '/' + fname[3:5] + '/' + fname
 cmd = "open -a VESTA " + dir
 subprocess.call(cmd.split(" "))
たとえばこれをvesta.pyとして保存し、実行権限をつけて、実行する。もちろん、CODデータが必要で、それ以外のcifファイルは対象外。
 > chmod 755 vesta.py
 > ./vesta.py 9000166.cif
**さらに続く(多分) [#y7c3eb64]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS