Source code for polymerist.mdtools.openfftools.solvation.solvents

'''For curating pre-defined solvent molecules'''

__author__ = 'Timotej Bernat'
__email__ = 'timotej.bernat@colorado.edu'

from pathlib import Path # TODO : reimplement "properly" "using importlib_resources (more complicated than it's worth for now)
_MODULE_PATH = Path(__path__[0])

from openff.toolkit import Molecule
from openff.units import unit as offunit

from ... import topology


[docs] def generate_water_TIP3P() -> Molecule: '''Helper method for creating a new TIP3P water representation from scratch''' TIP3P_ATOM_CHARGES = { # NOTE : units deliberately omitted here (become applied to entire charge array) 'H' : 0.417, 'O' : -0.843 } water = Molecule.from_smiles('O') water.name = 'water_TIP3P' water.partial_charges = [TIP3P_ATOM_CHARGES[atom.symbol] for atom in water.atoms]*offunit.elementary_charge for atom in water.atoms: atom.metadata['residue_name'] = 'HOH' return water
# predefine water file, if not already present _water_path = _MODULE_PATH / 'water_TIP3P.sdf' if not _water_path.exists(): water = generate_water_TIP3P() topology.package_atom_metadata(water, in_place=True) topology.save_molecule(_water_path, water) # register Molcules for all registered solvents for path in _MODULE_PATH.iterdir(): if path.suffix == '.sdf': offmol = Molecule.from_file(path) # load molecules from file globals()[path.stem] = topology.unpackage_atom_metadata(offmol, in_place=False) # recover metadata and register solvent Molecules locally