Skip to content

Chemically equivalent angles in arginine are assigned different parameters #144

@epretti

Description

@epretti

Describe the bug

Some chemically equivalent C-N-H angles in arginine are assigned different harmonic angle parameters.

To Reproduce

Save arginine.pdb.txt as arginine.pdb and run

from openff.toolkit import ForceField, Topology
from openmm import HarmonicAngleForce, unit

force_field_path = "openff-2.3.0.offxml"

topology = Topology.from_pdb("arginine.pdb")
molecule = topology.molecule(0)
system = ForceField(force_field_path).create_openmm_system(topology)
angles, = (force for force in system.getForces() if isinstance(force, HarmonicAngleForce))

for angle_index in range(angles.getNumAngles()):
    *indices, theta, k = angles.getAngleParameters(angle_index)
    if indices in ([9, 10, 20], [9, 10, 21], [9, 11, 22], [9, 11, 23]):
        print(
            *(molecule.atom(index).name for index in indices),
            theta.in_units_of(unit.degree),
            k.in_units_of(unit.kilocalorie_per_mole / unit.radian ** 2),
            sep="\t"
        )

Output

CZ      NH1     HH11    119.104777675 deg       97.22432164919 kcal/(mol rad**2)
CZ      NH1     HH12    119.104777675 deg       97.22432164919 kcal/(mol rad**2)
CZ      NH2     HH21    117.15139543910001 deg  128.6229511823 kcal/(mol rad**2)
CZ      NH2     HH22    117.15139543910001 deg  128.6229511823 kcal/(mol rad**2)

Both NH* nitrogen atoms attached to the CZ carbon atom should be chemically equivalent, as well as the HH** hydrogen atoms attached to those nitrogen atoms. However, the C-N-H angles get assigned quite different parameters.

It seems like these two different SMIRKS are matching the two pairs of angles:

<Angle smirks="[*:1]~[#7X3$(*~[#6X3,#6X2,#7X2+0]):2]~[*:3]" angle="119.104777675 * degree ** 1" k="97.22432164919 * kilocalorie_per_mole ** 1 * radian ** -2" id="a20"></Angle>
<Angle smirks="[#1:1]-[#7X3$(*~[#6X3,#6X2,#7X2+0]):2]-[*:3]" angle="117.1513954391 * degree ** 1" k="128.6229511823 * kilocalorie_per_mole ** 1 * radian ** -2" id="a21"></Angle>

When loaded, the resonance form of the molecule is such that one C-N bond is a single bond and the other is a double bond:
Image
But the different resonance forms of the guanidinium group should make all four of these angles equivalent.

Incidentally, switching out the force field for openff_no_water-3.0.0-alpha0.offxml gives

CZ      NH1     HH11    119.75608417580001 deg  156.29492916679996 kcal/(mol rad**2)
CZ      NH1     HH12    119.75608417580001 deg  156.29492916679996 kcal/(mol rad**2)
CZ      NH2     HH21    118.04593704200002 deg  70.86640775433 kcal/(mol rad**2)
CZ      NH2     HH22    118.04593704200002 deg  70.86640775433 kcal/(mol rad**2)

i.e., the issue is still present, and in fact, the difference between the force constants more significant.

Computing environment (please complete the following information):
macOS 15.7.4, conda 25.11.1, environment is conda_list.txt

Additional context
This seems related to #56, although that issue discusses torsions, and this one demonstrates a problem with angles.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions