예제 #1
0
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)
예제 #2
0
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()
        ]
    )