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 http://www.apache.org/licenses/LICENSE-2.0.
#
# 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)