Source code for qiskit_nature.second_q.formats.molecule_info

# This code is part of a Qiskit project.
# (C) Copyright IBM 2020, 2023.
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""A dataclass storing Molecule information."""

from __future__ import annotations

from dataclasses import dataclass
from typing import Sequence

from qiskit_nature.units import DistanceUnit

[docs]@dataclass class MoleculeInfo: """A dataclass storing molecule information.""" symbols: Sequence[str] """The ordered sequence of atoms which make up this molecule.""" coords: Sequence[tuple[float, float, float]] """The XYZ coordinates of the atoms.""" multiplicity: int = 1 """The multiplicity of the molecule (`= 2 * spin + 1`).""" charge: int = 0 """The total charge of the molecule.""" units: DistanceUnit = DistanceUnit.ANGSTROM """The distance unit in which the XYZ coordinates are stored.""" masses: Sequence[float] | None = None """The sequence of masses for all atoms part of the molecule.""" def __str__(self) -> str: string = ["Molecule:"] string += [f"\tMultiplicity: {self.multiplicity}"] string += [f"\tCharge: {self.charge}"] string += [f"\tUnit: {self.units.value}"] string += ["\tGeometry:"] for atom, xyz in zip(self.symbols, self.coords): string += [f"\t\t{atom}\t{xyz}"] if self.masses is not None: string += ["\tMasses:"] for mass, atom in zip(self.masses, self.symbols): string += [f"\t\t{atom}\t{mass}"] return "\n".join(string)