(2024/09/29) 最近試したら、M3 MacBookAirでは正常に動くようになりましたが、VESTAの起動時にssl関連のエラーが出ましたが、こちらの解決法(後者)で解決しました。ただ私のバージョンは3.11なので、そこを変更しました。
(2023/10/03) MacOSをSonoma 14.0にアップデートしたためか?、かなり動きが変に(遅く)なっている感じがあります。
(2023/09/25) Linux (Fedora 37)で動くようにしたコードをuploadしました。また、Fedora 37ではpythonコード名で起動することがなぜかできず、
> python COD_search.py &
とする必要がありました。
VESTAはrpmでインストールした場合のパス(/usr/bin/VESTA)にしているので、そうでない場合は191行のパスを変更してください。エディタはgnome-text-editorを起動しているので、こちらも必要に応じて201行を変更してください。DOI LINKで使っているWEBブラウザは使っているOSでデフォルト設定なので、OSに依存せず動くはずです。
無償の結晶構造データベースCODは非常に自由度の高いデータベースで、データベース全体をダウンロードすることが可能です。さらにCODサーバーは外部からの検索クエリー(SELECT文)も受け付けていて、検索したい内容を送ると、検索結果を返してくれます。これを利用して、鉱物名、化学組成等で結晶構造を簡易に検索をするアプリケーションを以前から作っています(結晶構造検索COD_SQL版)。しかしこれまで配布していたアプリケーションは有償のコンパイラを使っているので、アプリケーション更新のたびにコンパイラのライセンス料を私費で払う必要がありました。円安もあって結構高いのです。そこで今回、pythonでGUI部分をTkinterを使って作成しました。機能的にはほぼ同じで、検索結果リストから見たい結晶構造の行をダブルクリックすると、VESTAで構造が、エディターでcif(結晶構造情報ファイル)の内容が表示されます。こちらで追加した機能が1つあり、DOIの記載がある場合にその論文へアクセスする(WEBブラウザで開く)ことができます。
Python環境が必要です。入ってない時はAnacondaまたはpython公式からインストールするのが簡単だと思います。Macは最初からpythonが入ってますが、バージョンとモジュールの問題があるので、やはりAnacondaか本家からインストールしてください。現在MacとWindows10でのみテストしています。Linuxの場合はVESTAとエディタ起動部分のパスの変更が必要です(近いうちに対応させます)。
PyMySQLモジュールが必要です。これをcondaかpip3でインストールしておく必要があります。ネット調べるとインストール方法が出てきます。Anacondaを使っている場合は、Anaconda-Navigatorを起動して、EnvironmentsのところからpymysqlをGUIを使ってインストール可能です。
LinuxでpythonをAnacondaでインストールしたところ、pymysqlだけでなく、Tkinterもインストールする必要がありました。Linux(Fedora)ではTkinterはcondaやpip3でインストールできなくて、
> sudo yum install python-tkinter
でインストールしました。
CODサイトとSQLのSelect文を使ったやりとり及びcifのダウンロードのために、インターネット環境が必須です。
また、結晶構造を表示するプログラムVESTAがインストールされている必要があります。Windowsの場合は、VESTAをC:¥Program Filesの中に入れてください。他の場所に置いている場合は、cmd = r"C:\Program Files\VESTA-win64\VESTA.exe"の行をVESTAのある場所に変えてください。
cifファイルの内容はMac標準のTextEditで開きます。Windowsの場合はnotepadで開きます。どちらも標準アプリなので、インストールする必要はありません。pythonスクリプトを直せば、好みのエディタに変更できます。
こちらからpythonコードをダウンロードしてください。1つのpythonのファイルだけで、Mac、Windows共用です。改行がMac/Linux形式ですが、Windowsでもそのまま動くはずです。エディタ等で表示がおかしくなる場合は、改行形式をWindows用に変更してください。
普通にはターミナルを開いて、Macの場合に同じディレクトリにCOD_search.pyがある場合は、
> ./COD_search.py
と打ち込みます。./は現在のディレクトリの意味です。バックグラウンドで動かす場合は&を最後につけます。
> ./COD_search.py &
他のディレクトリにある場合はそのディレクトリ名+COD_search.pyで起動できます。起動しない場合は、ファイルが実行形式になってない可能性があります。その場合は
> chmod 755 COD_search.py
でCOD_search.pyを実行可能にします。または、pythonから起動する場合は、
> python COD_search.py
で起動します。
Windowsの場合も、
> python COD_search.py
で起動します。
ターミナルに慣れてない方は、総合環境のIPython, SpiderやJupyterからコードを開いて、そこからrunさせる方がいいかもしれません。Anacondaでインストールした場合は、これらが全て使えるようになってます。Anaconda Navigatorからそれらを起動できますし、Windowsのスタートメニューからもアクセスできます。
Windowsのpythonの環境によっては、pythonコードアイコンの右クリックで、「IDLEで編集」が出るかもしれません。その場合は、それを選んで、そこからrunで実行できます。
起動すると本ページ上部に示したwindowが表示されると思います。化学組成で検索する場合は、元素記号を上段の7つのテキストフィールドに左から入れてください。Mg2, Si, O4など、元素名と数値の組み合わせも入力可能です。ただ、例えばringwooditeのような少しstoichiometryからずれるような場合は(データベースでの組成がMg1.9とかになっているため)、Mg2などとすると、検索から漏れる場合がありますので、Mgにしてください。中段には、検索したい物質に入っていない元素名を入れてください。これは表示される候補が多すぎる時に、検索結果を制限する上で有用です。鉱物名、空間群、著者名、題名にあるワードなどのキーワードで検索するときは下段のテキストフィールドに入力してください。元素記号も入力されている場合は、ANDで検索することになります。したがって上の例では、Mg AND Si AND O AND Kudohで検索することになります。検索は全てANDで行います。
検索条件が設定されたら、右上のSearchボタンをクリックします。検索条件を満たした検索結果が、下部のlistboxに表示されます。関係ないものが多すぎる場合には、検索条件を変えてみてください。一番上にデータ数が表示されています。論文情報を見たい場合は、右側にあるラジオボタンの下側をチェックして、もう一度Searchボタンをクリックしてください。
検索されたリストの見たい行を選択して、ダブルクリックをすると、そのcifファイルがダウンロードされて、VESTAに結晶構造が表示されます(起動してない場合は起動します)。TextEdit/Notepadにチェックした場合(デフォルト設定)では、TextEdit(Mac)かnotepad(Windows)でcifファイルの内容が表示されます。ターミナルでこのコードを実行したディレクトリにcifディレクトリが自動的に作られ、ダウンロードしたcifファイルはそこに保存されていますので、再利用可能です。なお、実行したディレクトリでユーザー権限等の問題でディレクトリ作成不可な場合はエラーになりますので、実行ディレクトリを変更してください。
もし検索結果にDOIがある場合は、DOI Linkボタンをクリックすると、デフォルトのWebブラウザが開いて、DOIの示す雑誌のページを表示します。
CODサイトではmysqlをデータベースソフトとして使っており、これは外部にも開かれていて、我々でもsql queryを送り、その検索結果を受け取ることができます。このプログラムではこれを利用しています。検索結果にはCODの結晶構造のID番号が先頭にあります。このID番号が分かると、ID番号.cifとして構造情報ファイルがあるので、そのファイルをダウンロードして、VESTA, TextEdit/notepadを外部コマンドとして起動して、このcifファイルを読ませてます。データベースの詳しいことはCODのwikiに書かれてます。
CODのmysqlサーバーのアドレスはsql.crystallography.netで、ユーザー名はcod_readerになります。パスワードはありません。sqlでは検索にはSELECT文を使い、SELECT * FROM data where formula like %Mg% and formula like %Si% and formula like %O% and formula not like %Fe%などと書きます。データベース内にどういうデータがあるかはやはりwikiに記述があります。
MacとWindowsでGUIパーツの位置などが同じにならないので、WindowsかMacか判定して、パラメータなど変えて対応しています。
毎回のSearch後に接続をクローズしているので、このwindowを開きっぱなしでも特に問題はありません。
H, Cだけで検索すると、有機物のデータが多いので、膨大な検索結果となります。元素をなるべく多く入れて、制約する必要があります。また、適切な検索テキストを与えてやる必要もあります。
CaとCはCが共通なので、Cをexcludes those elementsに入れるとCaは検索されません。Hg/H, Na/Nなども同様です。区別できるうまい方法を思い付いてません…
鉱物で同じ組成でデータがいくつも出てくる理由は、温度や圧力を変化させた構造データがあるからで、常温常圧のデータが欲しい時はcifファイルを眺めて、測定条件を確認する必要があります。cifには圧力用のタグもあるのですが、多くの場合設定されてなく、測定圧力(温度も)は論文タイトルの最後に追加情報として書かれています。タイトルか、cifの中身を見てください。連番になっている場合は、ID番号の最も低いものが常圧または常温である可能性が高いはずです。
高圧鉱物の名前で比較的最近付いたものは、例えばbridgmanite, davemaoite, lingunite, libermanniteなど、鉱物名の検索では出てこないか、数が少ないはずです。しかし構造データは実はもっと存在します。そのような場合はあきらめずに化学組成や空間群から探してください。
格子定数などもあるので、格子定数の範囲で検索などもコードを書き換えれば可能です。