Core concepts

OpenFF Molecule

A graph representation of a molecule containing enough information to unambiguously parametrize it. Required data fields for a Molecule are:

  • atoms: element (integer), formal_charge (integer), is_aromatic (boolean), stereochemistry ('R'/'S'/None)

  • bonds: order (integer), is_aromatic (boolean), stereochemistry ('E'/'Z'/None)

There are several other optional attributes such as conformers and partial_charges that may be populated in the Molecule data structure. These are considered “optional” because they are not required for system creation, however if those fields are populated, the user MAY use them to override values that would otherwise be generated during system creation.

A dictionary, Molecule.properties is exposed, which is a Python dict that can be populated with arbitrary data. This data should be considered cosmetic and should not affect system creation. Whenever possible, molecule serialization or format conversion should preserve this data.

OpenFF System

An object that contains everything needed to calculate a molecular system’s energy, except the atomic coordinates. Note that this does not exist yet, and that OpenMM System objects are being used for this purpose right now. Development is underway on GitHub.

OpenFF Topology

An object that efficiently holds many OpenFF Molecule objects. The atom indexing in a Topology may differ from those of the underlying Molecules

OpenFF TopologyMolecule

The efficient data structures that make up an OpenFF Topology. There is one TopologyMolecule for each instance of a chemical species in a Topology. However, each unique chemical species has a single OpenFF Molecule representing it, which may be shared by multiple TopologyMolecules. TopologyMolecules contain an atom index map, as several copies of the same chemical species in a Topology may be present with different atom orderings. This data structure allows the OpenFF toolkit to only parametrize each unique Molecule once, and then write a copy of the assigned parameters out for each of the Molecule in the Topology (accounting for atom indexing differences in the process).

OpenFF ForceField

An object generated from an OFFXML file (or other source of SMIRNOFF data). Most information from the SMIRNOFF data source is stored in this object’s several ParameterHandlers, however some top-level SMIRNOFF data is stored in the ForceField object itself.