Skip to content

Instantly share code, notes, and snippets.

@computron
Created May 8, 2014 18:33
Show Gist options
  • Save computron/c0323115e92b48d0019d to your computer and use it in GitHub Desktop.
Save computron/c0323115e92b48d0019d to your computer and use it in GitHub Desktop.
Create, plot, and analyze Phase Diagrams using the pymatgen codebase and Materials Project database
"""
This is a basic example of how to create, plot, and analyze Phase Diagrams using the pymatgen
codebase and Materials Project database. To run this example, you should:
* have pymatgen (www.pymatgen.org) installed along with matplotlib
* obtain a Materials Project API key (https://www.materialsproject.org/open)
* paste that API key in the MAPI_KEY variable below, e.g. MAPI_KEY = "foobar1234"
For citation, see https://www.materialsproject.org/citing
For the accompanying comic book, see http://www.hackingmaterials.com/pdcomic
"""
from pymatgen import MPRester
from pymatgen.entries.compatibility import MaterialsProjectCompatibility
from pymatgen.phasediagram.pdanalyzer import PDAnalyzer
from pymatgen.phasediagram.pdmaker import PhaseDiagram
from pymatgen.phasediagram.plotter import PDPlotter
if __name__ == "__main__":
MAPI_KEY = None # You must change this to your Materials API key! (or set MAPI_KEY env variable)
system = ["Fe", "P"] # system we want to get PD for
# system = ["Fe", "P", "O"] # alternate system example: ternary
mpr = MPRester(MAPI_KEY) # object for connecting to MP Rest interface
compat = MaterialsProjectCompatibility() # sets energy corrections and +U/pseudopotential choice
# Create phase diagram!
unprocessed_entries = mpr.get_entries_in_chemsys(system)
processed_entries = compat.process_entries(unprocessed_entries) # filter and add energy corrections
pd = PhaseDiagram(processed_entries)
# Plot!
plotter = PDPlotter(pd, show_unstable=False) # you can also try show_unstable=True
plotter.show()
# plotter.write_image("{}.png".format('-'.join(system)), "png") # save figure
# Analyze phase diagram!
pda = PDAnalyzer(pd)
print 'Stable Entries (formula, materials_id)\n--------'
for e in pd.stable_entries:
print e.composition.reduced_formula, e.entry_id
print '\nUnstable Entries (formula, materials_id, e_above_hull (eV/atom), decomposes_to)\n--------'
for e in pd.unstable_entries:
decomp, e_above_hull = pda.get_decomp_and_e_above_hull(e)
pretty_decomp = [("{}:{}".format(k.composition.reduced_formula, k.entry_id), round(v, 2)) for k, v in decomp.iteritems()]
print e.composition.reduced_formula, e.entry_id, "%.3f" % e_above_hull, pretty_decomp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment