Source code for yammbs.outputs
"""Output models for minimizations."""
from __future__ import annotations
from pydantic import Field
from yammbs._base.array import Array
from yammbs._base.base import ImmutableModel
[docs]class MinimizedMolecule(ImmutableModel):
"""Base model for information about a minimized molecule."""
final_energy: float
mapped_smiles: str
coordinates: Array = Field(
description="Coordinates, stored with implicit Angstrom units",
)
[docs]class MinimizedQCArchiveMolecule(MinimizedMolecule):
"""A model for a QCArchive molecule which was minimized."""
qcarchive_id: int
[docs]class MinimizedQMDataset(ImmutableModel):
"""Base model for a dataset of minimized molecules."""
tag: str = Field("QCArchive dataset", description="A tag for the dataset")
version: int = Field(1, description="The version of this model")
mm_molecules: dict[str, list[MinimizedMolecule]] = Field(
dict(),
description="Molecules minimized with MM, keyed by the force field.",
)
[docs]class MinimizedQCArchiveDataset(MinimizedQMDataset):
"""A model for a dataset of minimized molecules from QCArchive."""
qm_molecules: dict[str, list[MinimizedQCArchiveMolecule]] = Field(
dict(),
description="Molecules minimized with QM",
)
[docs]class Metric(ImmutableModel):
"""A model for small molecule metrics."""
dde: float | None
rmsd: float
tfd: float
icrmsd: dict[str, float | None] # This could maybe be NamedTuple for cleaner typing
[docs]class MetricCollection(ImmutableModel):
"""A collection of metric models."""
metrics: dict[str, dict[int, Metric]] = Field(
dict(),
description="The metrics, keyed by the QM reference ID, then keyed by force field.",
)