Materials ProjectのAPIの使い方(pymatgenを使う方法)
pymatgenのMPResterクラスを使って、Materials Projectからデータを取得してみます。
MPResterクラスのソースコードを見ると、以下のようなメソッドがあります。
使い方も、ソースコードに書いてあります。
def get_data(self, chemsys_formula_id, data_type="vasp", prop=""): def get_task_data(self, chemsys_formula_id, prop=""): def get_entries(self, chemsys_formula_id_criteria, compatible_only=True, inc_structure=None, property_data=None): def get_entries_in_chemsys(self, elements, compatible_only=True, inc_structure=None, property_data=None): def query(self, criteria, properties, mp_decode=True): def get_reaction(self, reactants, products): def parse_criteria(criteria_string):
queryメソッド
一番使いやすそうなメソッドです。他のメソッドとの速度比較はしていません。
criteriaは、物質名の指定方法です。
mp-1234, Fe2O3, \*2O3, Li-Fe-O, \*-Fe-Oなどの書き方ができるそうです。
入力
from pymatgen.matproj.rest import MPRester # API keyを使い、aという名のMPResterオブジェクトを作成 a = MPRester("6hel2p**********") # As-Se-Cu系のデータを入手 data = a.query(criteria='As-Se-Cu',properties=["icsd_id", "unit_cell_formula", "pretty_formula", "e_above_hull", "formation_energy_per_atom"]) # 取得した全データ print("################# All data #################") print(data) # 1データの取り出し print("####### data No = 0, pretty_formula ########") print(data[0]['pretty_formula']) print("###### data No = 0, unit_cell_formula ######") print(data[0]['unit_cell_formula']) print("##### data No = 0, unit_cell_formula(Se) #####") print(data[0]['unit_cell_formula']['Se'])
出力
################# All data ################# [{'icsd_id': None, 'pretty_formula': 'CuAsSe2', 'e_above_hull': 0.1309248899479165, 'formation_energy_per_atom': -0.004192994296874808, 'unit_cell_formula': {'As': 2.0, 'Cu': 2.0, 'Se': 4.0}}, {'icsd_id': None, 'pretty_formula': 'Cu3AsSe4', 'e_above_hull': 0, 'formation_energy_per_atom': -0.15044875617187436, 'unit_cell_formula': {'As': 1.0, 'Cu': 3.0, 'Se': 4.0}}, {'icsd_id': 15235, 'pretty_formula': 'Cu7As6Se13', 'e_above_hull': 0.07721697639823644, 'formation_energy_per_atom': -0.060259503527643796, 'unit_cell_formula': {'As': 6.0, 'Cu': 7.0, 'Se': 13.0}}, {'icsd_id': 15548, 'pretty_formula': 'CuAsSe', 'e_above_hull': 0, 'formation_energy_per_atom': -0.12834720258680538, 'unit_cell_formula': {'As': 24.0, 'Cu': 24.0, 'Se': 24.0}}, {'icsd_id': 42884, 'pretty_formula': 'CuAsSe2', 'e_above_hull': 0.10646151369791657, 'formation_energy_per_atom': -0.028656370546874754, 'unit_cell_formula': {'As': 1.0, 'Cu': 1.0, 'Se': 2.0}}] ####### data No = 0, pretty_formula ######## CuAsSe2 ###### data No = 0, unit_cell_formula ###### {'As': 2.0, 'Cu': 2.0, 'Se': 4.0} ##### data No = 0, unit_cell_formula(Se) ##### 4.0
上記のAll dataの出力を整形すると以下のようになりました。
(JSON Formatterには、文字列はダブルクオートでくくるようにと怒られました)
[ { 'icsd_id':None, 'pretty_formula':'CuAsSe2', 'e_above_hull':0.1309248899479165, 'formation_energy_per_atom':-0.004192994296874808, 'unit_cell_formula':{ 'As':2.0, 'Cu':2.0, 'Se':4.0 } }, { 'icsd_id':None, 'pretty_formula':'Cu3AsSe4', 'e_above_hull':0, 'formation_energy_per_atom':-0.15044875617187436, 'unit_cell_formula':{ 'As':1.0, 'Cu':3.0, 'Se':4.0 } }, { 'icsd_id':15235, 'pretty_formula':'Cu7As6Se13', 'e_above_hull':0.07721697639823644, 'formation_energy_per_atom':-0.060259503527643796, 'unit_cell_formula':{ 'As':6.0, 'Cu':7.0, 'Se':13.0 } }, { 'icsd_id':15548, 'pretty_formula':'CuAsSe', 'e_above_hull':0, 'formation_energy_per_atom':-0.12834720258680538, 'unit_cell_formula':{ 'As':24.0, 'Cu':24.0, 'Se':24.0 } }, { 'icsd_id':42884, 'pretty_formula':'CuAsSe2', 'e_above_hull':0.10646151369791657, 'formation_energy_per_atom':-0.028656370546874754, 'unit_cell_formula':{ 'As':1.0, 'Cu':1.0, 'Se':2.0 } } ]
get_entries_in_chemsysメソッド
1~3元系の全ての相の計算条件のデータが手に入ります。
出力はJSONではないようです。長すぎるので以下は1化合物分の抜粋です。
data = a.get_entries_in_chemsys(['As', 'Cu', 'Se'])
ComputedEntry Cu1 As1 Se2 Energy = -15.8505 Correction = 0.0000 Parameters: run_type = GGA is_hubbard = False pseudo_potential = {'labels': ['Cu_pv', 'As', 'Se'], 'pot_type': 'paw', 'functional': 'pbe'} hubbards = {} potcar_symbols = ['pbe Cu_pv', 'pbe As', 'pbe Se'] Data: