pymatgen.analysis.prototypes package
This module is intended to match crystal structures against known crystallographic “prototype” structures.
The module also contains functions for getting the protostructure labels from a variety of symmetry detection libraries (spglib, moyopy, aflow-sym). The protostructure label is defined as the canonicalized aflow label with the alphabetically sorted chemical system appended - aflow_sym_label:chemsys.
The utilities for determining the protostructure label are upstreamed from the aviary package (https://github.com/CompRhys/aviary). If using these functions, please cite the following publications:
Goodall, R. E., Parackal, A. S., Faber, F. A., Armiento, R., & Lee, A. A. (2022). Rapid discovery of stable materials by coordinate-free coarse graining. Science advances, 8(30), eabn4117. https://doi.org/10.1126/sciadv.abn4117
Parackal, A. S., Goodall, R. E., Faber, F. A., & Armiento, R. (2024). Identifying crystal structures beyond known prototypes from x-ray powder diffraction spectra. Physical Review Materials, 8(10), 103801. https://doi.org/10.1103/PhysRevMaterials.8.103801
- canonicalize_element_wyckoffs(element_wyckoffs: str, spg_num: int | str) str[source]
Given an element ordering, canonicalize the associated Wyckoff positions based on the alphabetical weight of equivalent choices of origin.
- Parameters:
element_wyckoffs (str) – wyckoff substring section from aflow_label with the wyckoff letters for different elements separated by underscores.
spg_num (int | str) – International space group number.
- Returns:
element_wyckoff string with canonical ordering of the wyckoff letters.
- Return type:
str
- count_crystal_dof(protostructure_label: str) int[source]
Count number of free parameters in coarse-grained protostructure_label representation: how many degrees of freedom would remain to optimize during a crystal structure relaxation.
- Parameters:
protostructure_label (str) – label constructed as aflow_label:chemsys where aflow_label is an AFLOW-style prototype label chemsys is the alphabetically sorted chemical system.
- Returns:
Number of free-parameters in given prototype
- Return type:
int
- count_crystal_sites(protostructure_label: str) int[source]
Count number of sites from protostructure_label.
- Parameters:
protostructure_label (str) – label constructed as aflow_label:chemsys where aflow_label is an AFLOW-style prototype label chemsys is the alphabetically sorted chemical system.
- Returns:
Number of free-parameters in given prototype
- Return type:
int
- count_distinct_wyckoff_letters(protostructure_label: str) int[source]
Count number of distinct Wyckoff letters in protostructure_label.
- Parameters:
protostructure_label (str) – label constructed as aflow_label:chemsys where aflow_label is an AFLOW-style prototype label chemsys is the alphabetically sorted chemical system.
- Returns:
number of distinct Wyckoff letters in protostructure_label
- Return type:
int
- count_values_for_wyckoff(element_wyckoffs: list[str], counts: list[str], spg_num: str, lookup_dict: dict[str, dict[str, int]])[source]
Count values from a lookup table and scale by wyckoff multiplicities.
- count_wyckoff_positions(protostructure_label: str) int[source]
Count number of Wyckoff positions in protostructure_label.
- Parameters:
protostructure_label (str) – label constructed as aflow_label:chemsys where aflow_label is an AFLOW-style prototype label chemsys is the alphabetically sorted chemical system.
- Returns:
number of distinct Wyckoff positions in protostructure_label
- Return type:
int
- get_anonymous_formula_from_prototype_formula(prototype_formula: str) str[source]
Get an anonymous formula from a prototype formula.
- get_formula_from_protostructure_label(protostructure_label: str) str[source]
Get a formula from a protostructure label.
- get_protostructure_label(struct: Structure, method: Literal['aflow', 'spglib', 'moyopy'], raise_errors: bool = False, **kwargs) str | None[source]
Get protostructure label for a pymatgen Structure.
- Parameters:
struct (Structure) – pymatgen Structure
method (Literal["aflow", "spglib", "moyopy"]) – Method to use for symmetry
detection
raise_errors (bool) – Whether to raise errors or annotate them. Defaults to False.
**kwargs – Additional arguments for the specific method
- Returns:
- protostructure_label which is constructed as aflow_label:chemsys or
explanation of failure if symmetry detection failed and raise_errors is False.
- Return type:
str
- get_protostructure_label_from_aflow(struct: Structure, raise_errors: bool = False, aflow_executable: str | None = None) str[source]
Get protostructure label for a pymatgen Structure. Make sure you’re running a recent version of the aflow CLI as there’s been several breaking changes. This code was tested under v3.2.12. The protostructure label is constructed as aflow_label:chemsys.
- Install guide: https://aflow.org/install-aflow/#install_aflow
http://aflow.org/install-aflow/install-aflow.sh -o install-aflow.sh chmod 555 install-aflow.sh ./install-aflow.sh –slim
- Parameters:
struct (Structure) – pymatgen Structure
aflow_executable (str) – path to aflow executable. Defaults to which(“aflow”).
raise_errors (bool) – Whether to raise errors or annotate them. Defaults to False.
- Returns:
- protostructure_label which is constructed as aflow_label:chemsys or
explanation of failure if symmetry detection failed and raise_errors is False.
- Return type:
str
- get_protostructure_label_from_moyopy(struct: Structure, raise_errors: bool = False, symprec: float = 0.1) str | None[source]
Get AFLOW prototype label using Moyopy for symmetry detection.
- Parameters:
struct (Structure) – pymatgen Structure object.
raise_errors (bool) – Whether to raise errors or annotate them. Defaults to False.
symprec (float) – Initial symmetry precision for Moyopy. Defaults to 0.1.
- Returns:
- protostructure_label which is constructed as aflow_label:chemsys or
explanation of failure if symmetry detection failed and raise_errors is False.
- Return type:
str
- get_protostructure_label_from_spg_analyzer(spg_analyzer: SpacegroupAnalyzer, raise_errors: bool = False) str[source]
Get protostructure label for pymatgen SpacegroupAnalyzer.
- Parameters:
spg_analyzer (SpacegroupAnalyzer) – pymatgen SpacegroupAnalyzer object.
raise_errors (bool) – Whether to raise errors or annotate them. Defaults to False.
- Returns:
- protostructure_label which is constructed as aflow_label:chemsys or
explanation of failure if symmetry detection failed and raise_errors is False.
- Return type:
str
- get_protostructure_label_from_spglib(struct: Structure, raise_errors: bool = False, init_symprec: float = 0.1, fallback_symprec: float | None = 1e-05) str[source]
Get AFLOW prototype label for pymatgen Structure.
- Parameters:
struct (Structure) – pymatgen Structure object.
raise_errors (bool) – Whether to raise errors or annotate them. Defaults to False.
init_symprec (float) – Initial symmetry precision for spglib. Defaults to 0.1.
fallback_symprec (float) – Fallback symmetry precision for spglib if first symmetry detection failed. Defaults to 1e-5.
- Returns:
- protostructure_label which is constructed as aflow_label:chemsys or
explanation of failure if symmetry detection failed and raise_errors is False.
- Return type:
str
- get_protostructures_from_aflow_label_and_composition(aflow_label: str, composition: Composition) list[str][source]
Get a canonicalized string for the prototype.
- Parameters:
aflow_label (str) – AFLOW-style prototype label
composition (Composition) – pymatgen Composition object
- Returns:
- List of possible protostructure labels that can be generated
from combinations of the input aflow_label and composition.
- Return type:
list[str]
- get_prototype_formula_from_composition(composition: Composition) str[source]
An anonymized formula. Unique species are arranged in alphabetical order and assigned ascending alphabets. This format is used in the aflow structure prototype labelling scheme.
- Parameters:
composition (Composition) – Pymatgen Composition to process
- Returns:
anonymized formula where the species are in alphabetical order
- Return type:
str
- get_prototype_from_protostructure(protostructure_label: str) str[source]
Get a canonicalized string for the prototype. This prototype should be the same for all isopointal protostructures.
- Parameters:
protostructure_label (str) – label constructed as aflow_label:chemsys where aflow_label is an AFLOW-style prototype label chemsys is the alphabetically sorted chemical system.
- Returns:
Canonicalized AFLOW-style prototype label
- Return type:
str
- get_random_structure_for_protostructure(protostructure_label: str, **kwargs) Structure[source]
Generate a random structure for a given prototype structure.
NOTE that due to the random nature of the generation, the output structure may be higher symmetry than the requested prototype structure.
- Parameters:
protostructure_label (str) – label constructed as aflow_label:chemsys where aflow_label is an AFLOW-style prototype label chemsys is the alphabetically sorted chemical system.
**kwargs – Keyword arguments to pass to pyxtal().from_random()
- sort_and_score_element_wyckoffs(element_wyckoffs: str) tuple[str, int][source]
Determines the order or Wyckoff positions when canonicalizing AFLOW labels.
- Parameters:
element_wyckoffs (str) – wyckoff substring section from aflow_label with the wyckoff letters for different elements separated by underscores.
- Returns:
containing - str: sorted Wyckoff position substring for AFLOW-style prototype label - int: integer score to rank order when canonicalizing
- Return type:
tuple
- split_alpha_numeric(s: str) dict[str, list[str]][source]
Split a string into separate lists of alpha and numeric groups.
- Parameters:
s (str) – The input string to split.
- Returns:
- A dictionary with keys ‘alpha’ and ‘numeric’,
each containing a list of the respective groups.
- Return type:
dict[str, list[str]]
Submodules
pymatgen.analysis.prototypes.matcher module
In this module, the PrototypeDatabaseMatcher defaults to the AFLOW LIBRARY OF CRYSTALLOGRAPHIC PROTOTYPES. If using the default library, please cite their publication appropriately:
Mehl, M. J., Hicks, D., Toher, C., Levy, O., Hanson, R. M., Hart, G., & Curtarolo, S. (2017). The AFLOW library of crystallographic prototypes: part 1. Computational Materials Science, 136, S1-S828. https://doi.org/10.1016/j.commatsci.2017.01.017
- class AflowPrototypeMatcher(initial_ltol: float = 0.2, initial_stol: float = 0.3, initial_angle_tol: float = 5)[source]
Bases:
PrototypeDatabaseMatcherDeprecated alias for
PrototypeDatabaseMatcher.This class uses data from the AFLOW LIBRARY OF CRYSTALLOGRAPHIC PROTOTYPES. If using this class please cite their publication appropriately:
Mehl, M. J., Hicks, D., Toher, C., Levy, O., Hanson, R. M., Hart, G., & Curtarolo, S. (2017). The AFLOW library of crystallographic prototypes: part 1. Computational Materials Science, 136, S1-S828. https://doi.org/10.1016/j.commatsci.2017.01.017
Tolerances as defined in StructureMatcher. Tolerances will be gradually decreased until only a single match is found (if possible).
- Parameters:
prototype_db – DataFrame of prototype entries. Rows must contain “snl”.
initial_ltol (float) – fractional length tolerance.
initial_stol (float) – site tolerance.
initial_angle_tol (float) – angle tolerance.
- class PrototypeDatabaseMatcher(prototype_db: DataFrame, initial_ltol: float = 0.2, initial_stol: float = 0.3, initial_angle_tol: float = 5)[source]
Bases:
objectMatch structures against a database of crystal prototypes using anonymous structure matching.
Each prototype structure is preprocessed into a Niggli-reduced primitive cell at construction time. To match a query structure, it is reduced in the same way and then compared against all prototypes via
StructureMatcher.fit_anonymous(), which matches without regard to species identity. If multiple prototypes match, the tolerances are tightened iteratively (by 0.8x per step) until a single match is found or the length tolerance falls below 0.01.Tolerances as defined in StructureMatcher. Tolerances will be gradually decreased until only a single match is found (if possible).
- Parameters:
prototype_db – DataFrame of prototype entries. Rows must contain “snl”.
initial_ltol (float) – fractional length tolerance.
initial_stol (float) – site tolerance.
initial_angle_tol (float) – angle tolerance.
- get_prototypes(structure: Structure) list[dict[str, Any]] | None[source]
Get prototype(s) structures for a given input structure.
- Parameters:
structure (Structure) – structure to match
- Returns:
A list of dicts containing matched prototype data. This should be a list containing just a single entry, but it is possible a material can match multiple prototypes. The schema of each dict follows
_get_entry_data().