Applying a force field

The main method you will use in foyer is the Forcefield.apply() method. There are a few important arguments you should understand.

The first several are the assert_bond_params assert_angle_params, assert_dihedral_params, and assert_improper_params. These arguments require that the supplied force field has parameters for every bond, angle, dihedral, and improper in the system. In most cases, if you get an error, it means that your force field is missing parameters for one of the bonds/angles/dihedrals/impropers in the system. This could be because the parameters are missing or because the atom-typing (i.e., the SMARTS strings) are incorrect. These arguments are True by default, with the exception of assert_improper_params. In all cases, it is wise to verify that the final files you generate have the expected number of bonds/angles/dihedrals/impropers for your system.

The other important optional argument is the combining_rule option, which is "lorentz" (Lorentz-Berthelot) by default. The other valid option is "geometric", if your force field uses geometric combining rules.