# Forcefield typing tools

## Chemical environments

Tools for representing and operating on chemical environments

> Warning

> This class is largely redundant with the same one in the Chemper package, and will likely be removed.

`ChemicalEnvironment` | Chemical environment abstract base class that matches an atom, bond, angle, etc.

## Forcefield typing engines

Engines for applying parameters to chemical systems

### The SMIRks-Native Open Force Field (SMIRNOFF)

A reference implementation of the SMIRNOFF specification for parameterizing biomolecular systems

#### ForceField

The `ForceField` class is a primary part of the top-level toolkit API. `ForceField` objects are initialized from SMIRNOFF data sources (e.g. an `OFFXML` file). For a basic example of system creation using a `ForceField`, see `examples/SMIRNOFF_simulation`.

`ForceField` | A factory that assigns SMIRNOFF parameters to a molecular system

#### Parameter Type

`ParameterType` objects are representations of individual SMIRKS-based SMIRNOFF parameters. These are usually initialized during `ForceField` creation, and can be inspected and modified by users via the Python API. For more information, see `examples/forcefield_modification`.

`ParameterType` | Base class for SMIRNOFF parameter types.
`BondHandler.BondType` | A SMIRNOFF bond type
`AngleHandler.AngleType` | A SMIRNOFF angle type.
`ProperTorsionHandler.ProperTorsionType` | A SMIRNOFF torsion type for proper torsions.
`ImproperTorsionHandler.ImproperTorsionType` | A SMIRNOFF torsion type for improper torsions.
`vdWHandler.vdWType` | A SMIRNOFF vdWForce type.

#### Parameter Handlers

Each `ForceField` primarily consists of several `ParameterHandler` objects, which each contain the machinery to add one energy component to a system. During system creation, each `ParameterHandler` registered to a `ForceField` has its `assign_parameters()` function called..

`ParameterList` | Parameter list that also supports accessing items by SMARTS string.
`ParameterHandler` | Base class for parameter handlers.
`BondHandler` | Handle SMIRNOFF `<Bonds>` tags
`AngleHandler` | Handle SMIRNOFF `<AngleForce>` tags
`ProperTorsionHandler` | Handle SMIRNOFF `<ProperTorsionForce>` tags
`ImproperTorsionHandler` | Handle SMIRNOFF `<ImproperTorsionForce>` tags
`vdWHandler` | Handle SMIRNOFF `<vdW>` tags
`ElectrostaticsHandler` | Handles SMIRNOFF `<Electrostatics>` tags.
`ToolkitAM1BCCHandler` | Handle SMIRNOFF `<ToolkitAM1BCC>` tags

#### Parameter I/O Handlers

`ParameterIOHandler` objects handle reading and writing of serialzied SMIRNOFF data sources.

`ParameterIOHandler` | Base class for handling serialization/deserialization of SMIRNOFF ForceField objects
`XMLParameterIOHandler` | Handles serialization/deserialization of SMIRNOFF ForceField objects from OFFXML format.