def make_composition_energies_from_mp( elements: List[str], atom_energy_yaml: Optional[str] = None, ) -> CompositionEnergies: """Obtain the energies from Materials Project. When the atom_energy_yaml is provided, the total energies are aligned via atom energies. """ properties = ["task_id", "full_formula", "final_energy"] query = MpQuery(elements, properties=properties) comp_es = {} if atom_energy_yaml: energies = loadfn(atom_energy_yaml) diff = {e: energies[e] - mp_energies[e] for e in elements} else: diff = {e: 0.0 for e in elements} for m in query.materials: key = Composition(m["full_formula"]) energy = m["final_energy"] for k, v in key.as_dict().items(): energy += diff[k] * v comp_es[key] = CompositionEnergy(energy, m["task_id"]) print(comp_es) comp_es = remove_higher_energy_comp(comp_es) print(comp_es) return CompositionEnergies(comp_es)
def get_composition_from_string(comp_str): """validate and return composition from string `comp_str`.""" from pymatgen.core import Composition, Element comp = Composition(comp_str) for element in comp.elements: Element(element) formula = comp.get_integer_formula_and_factor()[0] comp = Composition(formula) return "".join( [ "{}{}".format(key, int(value) if value > 1 else "") for key, value in comp.as_dict().items() ] )