# 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 used for validating SMIRKS

## 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.
`LibraryChargeHandler.LibraryChargeType` | A SMIRNOFF Library Charge type.
`GBSAHandler.GBSAType` | A SMIRNOFF GBSA 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.
`LibraryChargeHandler` | Handle SMIRNOFF `<LibraryCharges>` tags
`ToolkitAM1BCCHandler` | Handle SMIRNOFF `<ToolkitAM1BCC>` tags
`GBSAHandler` | Handle SMIRNOFF `<GBSA>` 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.

#### Parameter Attributes

`ParameterAttribute` and `IndexedParameterAttribute` provide a standard backend for ParameterHandler and Parameter attributes, while also enforcing validation of types and units.

`ParameterAttribute` | A descriptor for `ParameterType` attributes.
`IndexedParameterAttribute` | The attribute of a parameter with an unspecified number of terms.