Skip to content

wade1990/openforcefield

 
 

Repository files navigation

Status Travis build Codecov coverage LGTM analysis
Latest Release Last release tag Commits since release DOI
Communication docs latest dev chat on slack
Foundation license platforms python Funding
Installation Releases Conda Last updated Anaconda Cloud downloads

The Open Force Field toolkit

The Open Force Field Toolkit, built by the Open Force Field Initiative, is a Python toolkit for the development and application of modern molecular mechanics force fields based on direct chemical perception and rigorous statistical parameterization methods.

The toolkit currently covers two main areas we have committed to stably maintain throughout their lifetimes:

Documentation

Documentation for the openforcefield toolkit is hosted at readthedocs.

Installation

openforcefield is a Python toolkit, and supports Python 3.6 and 3.7.

Installing via conda

Detailed installation instructions can be found here.

Installing from source

If you need to install via source, see the build and run package requirements listed in the development conda recipe.

Toolkit features

The SMIRKS Native Open Force Field (SMIRNOFF) format

This repository provides tools for using the SMIRKS Native Open Force Field (SMIRNOFF) specification, which currently supports an XML representation for force field definition files.

By convention, files containing XML representations of SMIRNOFF force fields carry .offxml extensions.

Example SMIRNOFF .offxml force field definitions can be found in openforcefield/data/test_forcefields/. These force fields are for testing only, and we neither record versions of these files, nor do we guarantee their correctness or completeness.

Working with SMIRNOFF parameter sets

The SMIRNOFF ForceField class is essentially a drop-in replacement for the OpenMM ForceField class.

# Load a molecule into the openforcefield Molecule object
from openforcefield.topology import Molecule
from openforcefield.utils import get_data_file_path
sdf_file_path = get_data_file_path('molecules/ethanol.sdf')
molecule = Molecule.from_file(sdf_file_path)

# Create an openforcefield Topology object from the molecule
from openforcefield.topology import Topology
topology = Topology.from_molecules(molecule)

# Load the smirnoff99Frosst SMIRNOFF force field definition
from openforcefield.typing.engines.smirnoff import ForceField
forcefield = ForceField('test_forcefields/smirnoff99Frosst.offxml')

# Create an OpenMM system representing the molecule with SMIRNOFF-applied parameters
openmm_system = forcefield.create_openmm_system(topology)

# Load a SMIRNOFF small molecule forcefield for alkanes, ethers, and alcohols
forcefield = ForceField('test_forcefields/Frosst_AlkEthOH_parmAtFrosst.offxml')

Detailed examples of using SMIRNOFF with the toolkit can be found in the documentation.

Chemical environments: Chemical environment perception and manipulation

The ChemicalEnvironments class can be used to parse and manipulate tagged SMARTS strings or single-fragment SMIRKS strings representing chemical environments with tagged atoms.

Working with chemical environments

from openforcefield.typing.chemistry import environment

smirks = "[#6X3,#7:1]~;@[#8;r:2]~;@[#6X3,#7:3]"
angle = environment.AngleChemicalEnvironment(smirks=smirks, toolkit='rdkit')
print(angle.asSMIRKS())
# "[#6X3,#7:1]~;@[#8;r:2]~;@[#6X3,#7:3]"

# add a new atom
atom3 = angle.selectAtom(3)
alpha_ORtypes = [('#8', ['X2'])]
alpha_bondANDtypes = ['!@']
alpha = angle.addAtom(atom3, bondANDtypes = alpha_bondANDtypes, newORtypes = alpha_ORtypes)
print(alpha.asSMIRKS()) # smirks for atom only
# "[#8X2H1;R0]"
print(angle.asSMIRKS())
# "[#6X3,#7:1]~;@[#8;r:2]~;@[#6X3,#7:3]~;!@[#8X2]"

Daylight provides detailed specifications of the SMILES, SMARTS, and SMIRKS languages.

Frequently asked questions (FAQ)

See FAQ.md for answers to a variety of common problems, such as:

  • Why do I need to provide molecules corresponding to the components of my system, or a Topology with bond orders?
  • Can I use an AMBER, CHARMM, or gromacs topology/coordinate file as a starting point for applying a SMIRNOFF force field?
  • What if I am starting from a PDB file?

Contributors

For a full list of contributors, see the GitHub Contributors page.

About

The Open Forcefield Toolkit provides implementations of the SMIRNOFF format, parameterization engine, and other tools. Documentation available at http://open-forcefield-toolkit.readthedocs.io

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Jupyter Notebook 61.3%
  • Python 38.7%