assyst.perturbations¶
Classes to apply (random) perturbations to structures.
- class assyst.perturbations.ElementScaledRattle(sigma: float, reference: dict[str, float], create_supercells: bool = False, rng: int | Generator | None = None)[source]¶
Bases:
RngMixin,PerturbationABCDisplace atoms by some amount from a normal distribution.
Operates like
Rattlebut uses a standard deviation derived from the relative sigma and the reference, where this reference is given by element.
- class assyst.perturbations.PerturbationABC[source]¶
Bases:
ABCApply some perturbation to a given structure.
- class assyst.perturbations.RandomChoice(choice_a: Callable[[Atoms], Atoms] | PerturbationABC, choice_b: Callable[[Atoms], Atoms] | PerturbationABC, chance: float, rng: int | Generator | None = None)[source]¶
Bases:
RngMixin,PerturbationABCApply either of two alternatives randomly.
- choice_a: Callable[[Atoms], Atoms] | PerturbationABC¶
- choice_b: Callable[[Atoms], Atoms] | PerturbationABC¶
- class assyst.perturbations.Rattle(sigma: float, create_supercells: bool = False, rng: int | Generator | None = None)[source]¶
Bases:
RngMixin,PerturbationABCDisplace atoms by some absolute amount from a normal distribution.
- class assyst.perturbations.Series(perturbations: tuple[Callable[[Atoms], Atoms] | PerturbationABC, ...])[source]¶
Bases:
PerturbationABCApply some perturbations in sequence.
- class assyst.perturbations.Stretch(hydro: float, shear: float, minimum_strain: float = 0.001, rng: int | Generator | None = None)[source]¶
Bases:
RngMixin,PerturbationABCApply random cell perturbation.
- assyst.perturbations.apply_perturbations(structures: Iterable[Atoms], perturbations: Iterable[Callable[[Atoms], Atoms] | PerturbationABC], filters: Iterable[Callable[[Atoms], bool] | FilterBase] | Callable[[Atoms], bool] | FilterBase | None = None, retries: int = 10) Iterator[Atoms][source]¶
Apply a list of perturbations to each structure and yield the result of each perturbation separately.
If a perturbation raises ValueError it is ignored.
- Parameters:
structures –
collections.abc.Iterableofase.Atomsto perturb.perturbations –
collections.abc.IterableofPerturbationthat modify structures.filters –
collections.abc.IterableofFilterto filter valid results (optional).retries –
int, max attempts per perturbation (default: 10).
- Yields:
ase.Atoms– perturbed structure that passes all filters.
- assyst.perturbations.element_scaled_rattle(structure: Atoms, sigma: float, reference: dict[str, float], rng: int | Generator | None = None) Atoms[source]¶
Randomly displace positions with gaussian noise relative to an elemental reference length.
Operates like
rattle()but uses a standard deviation derived from the relative sigma and the reference, where this reference is given by element.Operates IN PLACE!
- Parameters:
- Raises:
ValueError – if len(structure) == 1, create a super cell first before calling again
ValueError – if reference values are not positive
ValueError – if reference does not contain all elements in given structure
- assyst.perturbations.rattle(structure: Atoms, sigma: float, rng: int | Generator | None = None) Atoms[source]¶
Randomly displace positions with gaussian noise.
Operates INPLACE.
- assyst.perturbations.stretch(structure: Atoms, hydro: float, shear: float, minimum_strain=0.001, rng: int | Generator | None = None) Atoms[source]¶
Randomly stretch cell with uniform noise.
Ensures at least minimum_strain strain to avoid structures very close to their original structures. These don’t offer a lot of new information and can also confuse VASP’s symmetry analyzer.
Operates INPLACE.