MateriApps
物質科学シミュレーションのポータルサイト

現在アプリ掲載数307件

お問合せ / アプリ掲載依頼
    • JP
    • EN
  • MateriApps について
  • レビュー募集
もっと詳しく探す
  • NEWS / 講習会・イベント
  • アプリ一覧
  • アプリ詳細検索
  • キーワード解説
  • レビュー
  • 事例
  • アプリコンシェルジュ
  • インストールしないでアプリを
    試せる「MateriApps LIVE!」

    詳細はこちら
  • MateriApps について
  • レビュー募集
  • プライバシーポリシー
  • お問合せ / アプリ掲載依頼
  • アプリ一覧
  • pymatgen

pymatgen

  • 公開度:3 ★★★
  • ドキュメント充実度:3 ★★★

物質解析のためのpythonライブラリ。物質構造に関する柔軟なクラスが整備され、結晶構造や各種物性データを効率よく取り扱うことができる。相図・電位pH図・拡散係数解析を行うことができるほか、バンド構造や状態密度などの電子状態解析も可能。Materials Projectと連動して開発が活発に行われている。

pymatgenを使ったMaterials Projectのデータ収集
Last Update:2021/12/09
あなたはすでに投票済みです!

MateriApps開発チーム

(2020年2月1日)

1. はじめに

pymatgenは結晶構造やバンド構造などの各種物性データを簡単に取り扱うことができるPythonライブラリである。様々なクラスが導入されているが、そのうちの一つとして、MPResterクラスという物質材料の第一原理計算結果のデータベースであるMaterials Projectのデータをダウンロードできるインターフェースが整備されている。

pymatgenのドキュメント・サンプルはhttps://pymatgen.org/index.htmlやhttps://docs.materialsproject.org/open-apis/the-materials-api/、https://github.com/materialsproject/mapidocなど様々なものがあるが、ここではpymatgenを使ってMaterials ProjectにあるABO3系(A, Bは任意の原子、Oは酸素原子)のデータを収集してみる。他のレビュー記事ではpymatgenを利用した物理量計算の例を紹介しているので、もしそちらに興味があれば参照していただきたい。

2. 準備
・Materials ProjectのAPI key

まず、pymatgenを用いてMaterials Projectのデータをダウンロードするために、API keyを作成する必要がある。Materials Projectの公式サイト https://materialsproject.org にアクセスして、Sign Inをしたのち、右上の”API”をクリックする。その後,  “API Keys”のところを読んで指示に従いAPI keyを作る。もし、すでに作られている場合は、自分のAPI keyが表示されている。

・pymatgenのインストール

次に、pymatgenのインストールを行う。pymatgenの公式ドキュメント https://pymatgen.org でのインストール方法を読むとcondaもしくはpipで簡単にインストールをできることがわかる。pipの場合、

pip install pymatgen

とすれば、インストールできる。もし、自分の行いたい計算環境で管理者権限がない場合(研究室クラスター、スーパーコンピュータなど)は

pip install pymatgen --user

とすればlocalの環境にインストールできる。

3. Pythonスクリプトの内容・使い方

今回作ってみたのはABO3系のcifファイルダウンロードといくつかの物質についての物理量をMaterials Projectから持ってくるPythonスクリプトである。スクリプトはここからダウンロードできる。もしくはターミナル上で

wget https://ma.issp.u-tokyo.ac.jp/wp-content/uploads/sites/3/2020/02/get113fromMP.py

を実行してもダウンロードできる。以下、簡単に中身の説明をしていく

・1-4行目:importとAPI keyの設定。5行目の”USER API KEY”のところにMaterials ProjectのAPI keyを入力する。

  from pymatgen.ext.matproj import MPRester
  import os
   
  MY_API_KEY="USER API KEY"

・6-26行目:pymatgenの使い方がわからなくなったとき適宜参照できるよう、よく使いそうな情報とそれらの参考URLを記載している。そのほかにも公式ドキュメントのMPRester箇所やMPRester.query箇所は書き方の参考になる。query箇所に関してはこちらの日本語記事も参考になるであろう。

・28-55行目:ABO3系のcifファイルをダウンロードするスクリプト箇所。28-36行目にはどのようなABO3のcifファイルをダウンロードした以下の条件が記載されている。

#Get cif files of ABO3 systems
# Only for 0 < band_gap < 1 and spacegroup = Pm-3m
criteria_properties = {"spacegroup.symbol" : 'Pm-3m', "$and": [ {"band_gap":{"$gt": 0}}, {"band_gap":{"$lt": 1}} ]}
# Only for (band_gap = 0 nor total_magnetization != 0) and spacegroup = Pm-3m
#criteria_properties = {"spacegroup.symbol" : 'Pm-3m', "$nor": [ {"band_gap": 0}, {"total_magnetization":{"$ne": 0}} ]}
# Only for band_gap > 0 and spacegroup = Pm-3m
#criteria_properties = {"spacegroup.symbol" : 'Pm-3m', "band_gap":{"$gt": 0}}
# Only for band_gap != 0 and spacegroup = Pm-3m (the same result as for band_gap > 0)
#criteria_properties = {"spacegroup.symbol" : 'Pm-3m', "band_gap":{"$ne": 0}}

デフォルトでは、空間群が”Pm-3m”でバンドギャップが0より大きく1より小さい値であるという条件を使っている。なお、”$and: [ ]”や{“$gt”: 0}という表記はmongoDBで使われており、詳しくは12-26行目のコメントを参照していただきたい。日本語ページとしては、ここやここなどがmongoDBの理解の参考になる。

38-47行目は以下の通りである。

# define physical properties/infos you want to obtain
output = ['pretty_formula','task_id','cif']
with MPRester( MY_API_KEY ) as m:
    #Get pretty_formula of ABO3 systems
    data_pretty_formula = m.parse_criteria("**O3")
    my_criteria = data_pretty_formula
    #satisfy "criteria_properties" condition
    my_criteria.update( criteria_properties )
    #Get cif files of materials in "my_criteria"
    results = m.query(criteria=my_criteria, properties=output)

このセクションの初めは、MaterialsProjectのどのような情報をダウンロードしたいかを決めている。このキーワードは6-9行目のリスト(公式ページ)から選ぶことができる。今回のスクリプトでは、Materials Projectで管理されている物質名とそのID、対応するcif情報をダウンロードするように指定している。with文以下では、Materials Projectから情報をダウンロードする手順が記載されている。
まず、組成式が”ABO3”(A、Bはワイルドカード*で表現している。)の辞書クラスのリスト
data_pretty_forumulaを手に入れる。続いてmy_criteriaにdata_prety_forumulaをコピーする(data_prety_forumulaを再利用しないのでcopy()を使わなくても良い。)。その後28-55行目で定義したcriteria_propertiesをmy_criteriaに追記する。最後にmy_criteriaに記載されている条件からoutputで定義した情報をダウンロードし、resultsに格納する。

・49-55行目:cifの出力。ABO3_cifディレクトリにcifファイルを出力するよう設定している。ファイル名は物質ID_物質名にしている。

・57-69行目:SrBO3系での計算された物理量をダウンロードするスクリプト箇所。59行目

criteria_properties = {"elements": {"$in":["V","Ti","Co"], "$all":["Sr"]}}

では、”Sr”を必ず含み($all)、”V”,”Ti”,”Co”のいずれかを含む($in)という条件が書かれている。

61行目

output = ['pretty_formula', "band_gap", "formation_energy_per_atom", "spacegroup.symbol"]

で、出力する物理量を設定している。今回のスクリプトでは、組成式、バンドギャップ値、生成エネルギー、空間群を出力するようにしている。with文以下は38-47行目と同じである。

・71-73行目:結果の出力。

4. 実行結果

実行すると以下のテキストと実行ディレクトリにABO3_cifというディレクトリが出力される。”UserWarning: No electronegativity”という警告がいくつか出ると思うが、特に気にしなくて良い。ABO3_cifディレクトリには40個程度のcifファイルがダウンロードされている。

{'pretty_formula': 'SrCoO3', 'band_gap': 0.0, 'formation_energy_per_atom': -1.970111289333334, 'spacegroup.symbol': 'P4/mmm'}
{'pretty_formula': 'SrCoO3', 'band_gap': 0.0, 'formation_energy_per_atom': -1.9235721123333342, 'spacegroup.symbol': 'Pm-3m'}
{'pretty_formula': 'SrCoO3', 'band_gap': 0.0, 'formation_energy_per_atom': -1.9179158828333336, 'spacegroup.symbol': 'P2_1/m'}
{'pretty_formula': 'SrCoO3', 'band_gap': 0.0, 'formation_energy_per_atom': -1.932051960333333, 'spacegroup.symbol': 'P-1'}
{'pretty_formula': 'SrCoO3', 'band_gap': 0.0, 'formation_energy_per_atom': -1.9658606908333334, 'spacegroup.symbol': 'Amm2'}
{'pretty_formula': 'SrCoO3', 'band_gap': 0.0, 'formation_energy_per_atom': -1.9871399353333339, 'spacegroup.symbol': 'P4/mbm'}
{'pretty_formula': 'SrTiO3', 'band_gap': 1.8583000000000003, 'formation_energy_per_atom': -3.552249219, 'spacegroup.symbol': 'I4/mcm'}
{'pretty_formula': 'SrTiO3', 'band_gap': 1.8274, 'formation_energy_per_atom': -3.551357205, 'spacegroup.symbol': 'Pm-3m'}
{'pretty_formula': 'SrTiO3', 'band_gap': 1.7869999999999995, 'formation_energy_per_atom': -3.551666971000001, 'spacegroup.symbol': 'I4/mcm'}
{'pretty_formula': 'SrTiO3', 'band_gap': 1.7367000000000004, 'formation_energy_per_atom': -3.513146747666667, 'spacegroup.symbol': 'P6_3/mmc'}
{'pretty_formula': 'SrVO3', 'band_gap': 0.0, 'formation_energy_per_atom': -2.8794546823333342, 'spacegroup.symbol': 'Pm-3m'}

5. まとめ

このレビュー記事では、pymatgenを使ったMaterials Projectのデータ収集についてまとめてみた。ダウンロードしたcifや物理量を使って機械学習させることで、何かしらの予測器を作ることもできるであろう。Materials informaticsに興味があれば、是非挑戦してほしい。

 

2021/7/15: スクリプトや説明文等を追記・修正
2021/7/30: 他記事の紹介やタイポ等を追記・修正

04 / 06

  • 01基本情報
  • 02事例・論文
  • 03講習会
  • 04レビュー
  • 05開発者の声
  • 06このアプリ情報に
    ついてのお問い合わせ
TOP

MateriApps
物質科学シミュレーションのポータルサイト

  • NEWS / 講習会・イベント
  • アプリ一覧
  • アプリ詳細検索
  • キーワード解説
  • 事例
  • アプリコンシェルジュ
  • プライバシーポリシー
お問合せ / アプリ掲載依頼
  • 東京大学 物性研究所 The Institute for Solid State Physics
  • 東京大学 The University of Tokyo
  • CDMSI
  • CCMS

© MateriApps, 2013-2023. All rights reserved.