Source code for psi4.driver.wrapper_autofrag
#
# @BEGIN LICENSE
#
# Psi4: an open-source quantum chemistry software package
#
# Copyright (c) 2007-2024 The Psi4 Developers.
#
# The copyrights for code used from other parties are included in
# the corresponding files.
#
# This file is part of Psi4.
#
# Psi4 is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, version 3.
#
# Psi4 is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with Psi4; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# @END LICENSE
#
__all__ = ["auto_fragments"]
from typing import List, Optional
from psi4 import core
[docs]
def auto_fragments(
molecule: Optional[core.Molecule] = None,
seed_atoms: Optional[List[List[int]]] = None,
) -> core.Molecule:
r"""Detects fragments in unfragmented molecule using BFS algorithm.
Currently only used for the WebMO implementation of SAPT.
Parameters
----------
molecule : :ref:`molecule <op_py_molecule>`, optional
The target molecule, if not the last molecule defined.
seed_atoms
List of lists of atoms (0-indexed) belonging to independent fragments.
Useful to prompt algorithm or to define intramolecular fragments through
border atoms. Example: `[[1, 0], [2]]`
Returns
-------
:py:class:`~psi4.core.Molecule` |w--w| fragmented molecule in
Cartesian, fixed-geom (no variable values), no dummy-atom format.
Examples
--------
>>> # [1] prepare unfragmented (and non-adjacent-atom) HHFF into (HF)_2 molecule ready for SAPT
>>> molecule mol {\nH 0.0 0.0 0.0\nH 2.0 0.0 0.0\nF 0.0 1.0 0.0\nF 2.0 1.0 0.0\n}
>>> print mol.nfragments() # 1
>>> fragmol = auto_fragments()
>>> print fragmol.nfragments() # 2
"""
# Make sure the molecule the user provided is the active one
if molecule is None:
molecule = core.get_active_molecule()
molecule.update_geometry()
molname = molecule.name()
frag, bmol = molecule.BFS(seed_atoms=seed_atoms, return_molecule=True)
bmol.set_name(molname)
bmol.print_cluster()
core.print_out(""" Exiting auto_fragments\n""")
return bmol