-
-
Source code for pymatgen.cli.pmg_query
-# coding: utf-8
-# Copyright (c) Materials Virtual Lab.
-# Distributed under the terms of the BSD License.
-
-
-"""
-Implementation for `pmg query` CLI.
-"""
-
-from pymatgen.ext.matproj import MPRester
-import json
-from monty.serialization import dumpfn
-import re
-from tabulate import tabulate
-
-
-[docs]def do_query(args):
-
"""
-
Perform query to the Materials Project
-
-
Args:
-
args (dict): Args from argparse.
-
"""
-
m = MPRester()
-
try:
-
criteria = json.loads(args.criteria)
-
except json.decoder.JSONDecodeError:
-
criteria = args.criteria
-
if args.structure:
-
count = 0
-
for d in m.query(criteria, properties=["structure", "task_id"]):
-
s = d["structure"]
-
formula = re.sub(r"\s+", "", s.formula)
-
if args.structure == "poscar":
-
fname = "POSCAR.%s_%s" % (d["task_id"], formula)
-
else:
-
fname = "%s-%s.%s" % (d["task_id"], formula, args.structure)
-
s.to(filename=fname)
-
count += 1
-
print("%d structures written!" % count)
-
elif args.entries:
-
entries = m.get_entries(criteria)
-
dumpfn(entries, args.entries)
-
print("%d entries written to %s!" % (len(entries), args.entries))
-
else:
-
props = ["e_above_hull", "spacegroup"]
-
props += args.data
-
entries = m.get_entries(criteria, property_data=props)
-
t = []
-
headers = ["mp-id", "Formula", "Spacegroup", "E/atom (eV)",
-
"E above hull (eV)"] + args.data
-
for e in entries:
-
row = [e.entry_id, e.composition.reduced_formula,
-
e.data["spacegroup"]["symbol"],
-
e.energy_per_atom, e.data["e_above_hull"]]
-
row += [e.data[s] for s in args.data]
-
-
t.append(row)
-
-
t = sorted(t, key=lambda x: x[headers.index("E above hull (eV)")])
-
print(tabulate(t, headers=headers, tablefmt="pipe", floatfmt=".3f"))
-
-
-
-