Difference between revisions of "OBForceFieldMMFF94"

From Open Babel
Jump to: navigation, search
 
Line 1: Line 1:
http://www.ccl.net/cca/data/MMFF94/
+
This class is a partial implementation of the all-atom [http://www.ccl.net/cca/data/MMFF94/ MMFF94] force field.
 +
 
 +
References:
 +
 
 +
# Thomas A. Halgren, J. Comput. Chem., 17, 490-519 (1996).
 +
# Thomas A. Halgren, J. Comput. Chem., 17, 520-552 (1996).
 +
# Thomas A. Halgren, J. Comput. Chem., 17, 553-586 (1996).
 +
# Thomas A. Halgren and Robert B. Nachbar, J. Comput. Chem., 17, 587-615 (1996).
 +
# Thomas A. Halgren, J. Comput. Chem., 17, 616-641 (1996).
 +
# Thomas A. Halgren, J. Comput. Chem., 20, 720-729 (1999).
 +
# Thomas A. Halgren, J. Comput. Chem., 20, 730-748 (1999).
 +
 
 +
The intent in the future is to produce a full, validated MMFF94 implementation.
 +
 
 +
=== Bond Stretching ===
 +
==== Energy ====
 +
[[Image:BondStretchingEnergy.png]]
 +
 
 +
<tex>E_{bond}=\frac{1}{2}143.9325k_{b}(r_{ab}-r_{ab}^0)^2(1+cs(r_{ab}-r_{ab}^0)+\frac{7}{12}cs^2(r_{ab}-r_{ab}^0)^2)</tex>
 +
 
 +
<tex>k_b</tex>: bond stretching force constant (mmffbnond.prm)
 +
 
 +
<tex>r_{ab}^0</tex>: ideal bond length (mmffbnond.prm)
 +
 
 +
<tex>r_{ab}</tex>: bond length between atoms a and b
 +
 
 +
<tex>cs</tex>: cubic stretching constant (-2.0)
 +
 
 +
The bond length can be calculated from the coordinates of the atoms <tex>a(x_a,y_a,z_a)</tex> and <tex>b(x_b,y_b,z_b)</tex>.
 +
 
 +
<tex>r_{ab} = \sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}</tex>
 +
==== Parameters ====
 +
==== Forces ====
 +
We can also calculate the forces on each atom by calculating the negative gradient.
 +
 
 +
<tex>\bf{F_a}=-\nabla_a E_{bond}=-\left(\frac{\partial E_{bond}}{\partial x_a},\frac{\partial E_{bond}}{\partial y_a},\frac{\partial E_{bond}}{\partial z_a}\right)</tex>
 +
 
 +
note: the force <tex>\bf{F_a}</tex> is a vector, the energy <tex>E_{bond}</tex> is a scalar.
 +
 
 +
<tex>\frac{\partial E_{bond}}{\partial x_a}=\frac{\partial E_{bond}}{\partial r_{ab}}\frac{\partial r_{ab}}{\partial x_a}</tex>
 +
 
 +
<tex>\frac{\partial E_{bond}}{\partial r_{ab}}=143.9325k_{b}(r_{ab}-r_{ab}^0)(1+1.5cs(r_{ab}-r_{ab}^0)+\frac{7}{12}2cs^2(r_{ab}-r_{ab}^0)^2)</tex>
 +
 
 +
We start by calculating the partial derivative with respect to <tex>x_a</tex>.
 +
 
 +
<tex>\frac{\partial r_{ab}}{\partial x_a}=\frac{\partial \sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}}{\partial x_a}=\frac{x_a-x_b}{\sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}}=\frac{x_a-x_b}{r_{ab}}</tex>
 +
 
 +
For <tex>y_a</tex> and <tex>z_a</tex> we find <tex>\frac{y_a-y_b}{r_{ab}}</tex> and <tex>\frac{z_a-z_b}{r_{ab}}</tex>.
 +
 
 +
<tex>\left(\frac{x_a-x_b}{r_{ab}},\frac{y_a-y_b}{r_{ab}},\frac{z_a-z_b}{r_{ab}}\right)=\frac{\bf{r_{ab}}}{r_{ab}}</tex>
 +
 
 +
<tex>\bf{F_a}=-143.9325k_{b}(r_{ab}-r_{ab}^0)(1+1.5cs(r_{ab}-r_{ab}^0)+\frac{7}{12}2cs^2(r_{ab}-r_{ab}^0)^2)\frac{\bf{r_{ab}}}{r_{ab}}</tex>
 +
 
 +
=== Angle Bending ===
 +
[[Image:AngleBendingEnergy.png]]
 +
 
 +
<tex>E_{angle}=\frac{1}{2}0.043844k_a(\theta_{abc}-\theta_{abc}^0)^2(1+cb(\theta_{abc}-\theta_{abc}^0))</tex>
 +
 
 +
<tex>k_a</tex>: angle bending force constant (mmffang.prm)
 +
 
 +
<tex>\theta_{abc}^0</tex>: ideal angle (mmffang.prm)
 +
 
 +
<tex>\theta_{abc}</tex>: angle
 +
 
 +
<tex>cb</tex>: cubic bending constant (-0.007)
 +
 
 +
The angle can be calculated from the coordinates of the atoms <tex>a(x_a,y_a,z_a)</tex>, <tex>b(x_b,y_b,z_b)</tex> and <tex>c(x_c,y_c,z_c)</tex>.
 +
 
 +
<tex>\theta_{abc}=arccos\left(\frac{\bf{r_{ab}}\cdot\bf{r_{bc}}}{r_{ab}r_bc}\right)=arccos\left(\frac{(x_ax_b+y_ay_b+z_az_b)}{\sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}\sqrt{(x_b-x_c)^2+(y_b-y_c)^2+(z_b-z_c)^2}}\right)</tex>
 +
 
 +
We can also calculate the forces on each atom by calculating the negative gradient.
 +
 
 +
<tex>\bf{F_a}=-\nabla_a E_{angle}=-\left(\frac{\partial E_{angle}}{\partial x_a},\frac{\partial E_{angle}}{\partial y_a},\frac{\partial E_{angle}}{\partial z_a}\right)</tex>
 +
 
 +
<tex>\frac{\partial E_{angle}}{\partial x_a}=\frac{\partial E_{angle}}{\partial \theta_{abc}}\frac{\partial \theta_{abc}}{\partial x_a}</tex>
 +
 
 +
<tex>\frac{\partial E_{angle}}{\partial \theta_{abc}}=0.043844k_{a}(\theta_{abc}-\theta_{abc}^0)(1+1.5cb(\theta_{abc}-\theta_{abc}^0))</tex>
 +
 
 +
We start by calculating the partial derivative with respect to <tex>x_a</tex>.
 +
 
 +
<tex>\frac{\partial \theta_{abc}}{\partial x_a}=\frac{\partial arccos\left(\frac{\bf{r_{ab}}\cdot\bf{r_{bc}}}{r_{ab}r_bc}\right)}{\partial x_a}</tex>
 +
 
 +
=== Bend Stretching ===
 +
=== Torsional ===
 +
=== Out-Of-Plane Bending ===
 +
=== Van der Waals ===
 +
=== Electrostatic ===
  
 
[[Category:Force_Fields]][[Category:Developer]]
 
[[Category:Force_Fields]][[Category:Developer]]

Revision as of 11:09, 15 February 2007

This class is a partial implementation of the all-atom MMFF94 force field.

References:

  1. Thomas A. Halgren, J. Comput. Chem., 17, 490-519 (1996).
  2. Thomas A. Halgren, J. Comput. Chem., 17, 520-552 (1996).
  3. Thomas A. Halgren, J. Comput. Chem., 17, 553-586 (1996).
  4. Thomas A. Halgren and Robert B. Nachbar, J. Comput. Chem., 17, 587-615 (1996).
  5. Thomas A. Halgren, J. Comput. Chem., 17, 616-641 (1996).
  6. Thomas A. Halgren, J. Comput. Chem., 20, 720-729 (1999).
  7. Thomas A. Halgren, J. Comput. Chem., 20, 730-748 (1999).

The intent in the future is to produce a full, validated MMFF94 implementation.

Bond Stretching

Energy

BondStretchingEnergy.png

E_{bond}=\frac{1}{2}143.9325k_{b}(r_{ab}-r_{ab}^0)^2(1+cs(r_{ab}-r_{ab}^0)+\frac{7}{12}cs^2(r_{ab}-r_{ab}^0)^2)

k_b: bond stretching force constant (mmffbnond.prm)

r_{ab}^0: ideal bond length (mmffbnond.prm)

r_{ab}: bond length between atoms a and b

cs: cubic stretching constant (-2.0)

The bond length can be calculated from the coordinates of the atoms a(x_a,y_a,z_a) and b(x_b,y_b,z_b).

r_{ab} = \sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}

Parameters

Forces

We can also calculate the forces on each atom by calculating the negative gradient.

\bf{F_a}=-\nabla_a E_{bond}=-\left(\frac{\partial E_{bond}}{\partial x_a},\frac{\partial E_{bond}}{\partial y_a},\frac{\partial E_{bond}}{\partial z_a}\right)

note: the force \bf{F_a} is a vector, the energy E_{bond} is a scalar.

\frac{\partial E_{bond}}{\partial x_a}=\frac{\partial E_{bond}}{\partial r_{ab}}\frac{\partial r_{ab}}{\partial x_a}

\frac{\partial E_{bond}}{\partial r_{ab}}=143.9325k_{b}(r_{ab}-r_{ab}^0)(1+1.5cs(r_{ab}-r_{ab}^0)+\frac{7}{12}2cs^2(r_{ab}-r_{ab}^0)^2)

We start by calculating the partial derivative with respect to x_a.

\frac{\partial r_{ab}}{\partial x_a}=\frac{\partial \sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}}{\partial x_a}=\frac{x_a-x_b}{\sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}}=\frac{x_a-x_b}{r_{ab}}

For y_a and z_a we find \frac{y_a-y_b}{r_{ab}} and \frac{z_a-z_b}{r_{ab}}.

\left(\frac{x_a-x_b}{r_{ab}},\frac{y_a-y_b}{r_{ab}},\frac{z_a-z_b}{r_{ab}}\right)=\frac{\bf{r_{ab}}}{r_{ab}}

\bf{F_a}=-143.9325k_{b}(r_{ab}-r_{ab}^0)(1+1.5cs(r_{ab}-r_{ab}^0)+\frac{7}{12}2cs^2(r_{ab}-r_{ab}^0)^2)\frac{\bf{r_{ab}}}{r_{ab}}

Angle Bending

AngleBendingEnergy.png

E_{angle}=\frac{1}{2}0.043844k_a(\theta_{abc}-\theta_{abc}^0)^2(1+cb(\theta_{abc}-\theta_{abc}^0))

k_a: angle bending force constant (mmffang.prm)

\theta_{abc}^0: ideal angle (mmffang.prm)

\theta_{abc}: angle

cb: cubic bending constant (-0.007)

The angle can be calculated from the coordinates of the atoms a(x_a,y_a,z_a), b(x_b,y_b,z_b) and c(x_c,y_c,z_c).

\theta_{abc}=arccos\left(\frac{\bf{r_{ab}}\cdot\bf{r_{bc}}}{r_{ab}r_bc}\right)=arccos\left(\frac{(x_ax_b+y_ay_b+z_az_b)}{\sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}\sqrt{(x_b-x_c)^2+(y_b-y_c)^2+(z_b-z_c)^2}}\right)

We can also calculate the forces on each atom by calculating the negative gradient.

\bf{F_a}=-\nabla_a E_{angle}=-\left(\frac{\partial E_{angle}}{\partial x_a},\frac{\partial E_{angle}}{\partial y_a},\frac{\partial E_{angle}}{\partial z_a}\right)

\frac{\partial E_{angle}}{\partial x_a}=\frac{\partial E_{angle}}{\partial \theta_{abc}}\frac{\partial \theta_{abc}}{\partial x_a}

\frac{\partial E_{angle}}{\partial \theta_{abc}}=0.043844k_{a}(\theta_{abc}-\theta_{abc}^0)(1+1.5cb(\theta_{abc}-\theta_{abc}^0))

We start by calculating the partial derivative with respect to x_a.

\frac{\partial \theta_{abc}}{\partial x_a}=\frac{\partial arccos\left(\frac{\bf{r_{ab}}\cdot\bf{r_{bc}}}{r_{ab}r_bc}\right)}{\partial x_a}

Bend Stretching

Torsional

Out-Of-Plane Bending

Van der Waals

Electrostatic