[gmx-users] Dihedral angle restraints in NMR refinement...

Chris Spronk C.Spronk at cmbi.kun.nl
Thu Sep 26 15:37:21 CEST 2002

4th try....

Dear all,

thanks for the many reactions, I'll try to explain a bit more what we
usually use in the determination of NMR structures.

when converting J-couplings (or chemical shifts) into dihedral angle
restraints we have to deal with the experimental uncertainty in the
measured quantity. In case of the J-couplings the uncertainty depends,
amongst others, on the magnitude of the J-coupling (due to the
differences in the slope of the karplus curve). So on each derived
dihedral angle there will be a different uncertainty. Although for some
cases the suggestion to use proper dihedrals will work fine (some people 
omit the error bounds), the proper dihedrals will not be suitable for
most cases. So normally we treat the experimental uncertainties using an
flat part in between the harmonics. We do not use a linear part beyond a
certain range nor any averaging for these restraints.

In XPLOR the dihedrals are restrained as follows:

the dihedral restraint energy is calculated as (and summed over all

E = C * well(modulo2pi(phi-phi0), delta phi)^^X


well(a,b) = a - b if a > b
well(a,b) = 0     if -b < a < b
well(a,b) = a + b if a < -b

C         = energy constant
phi       = actual angle
phi0      = angle centroid
delta phi = angle range
X         = exponent of the function (= usually 2 for harmonics)

So the restraint in gromacs should look something like this:

ai aj ak al phi0 deltaphi forceconstant exponent
35 37 39 54 -60     40          100.0        2

for an angle restrained between -100 and -20 degrees.

The python script to parse the xplor restraints (including example input 
files + a quickly written README, everything will be updated) is 
available from my homepage for download (attaching didn't work):


I did not compare the script to Davids perl script as yet, since I use
a somewhat different approach. First this remark:

there are different versions of XPLOR (CNS) around that cannot all
handle the same restraint syntax. Usually this is not a problem but in
case of ambiguous restraints one might run into problems. Further the
syntax is rather flexible which makes it hard to parse (for an
uneducated programmer like me).
So what I did is to have XPLOR or CNS read the restraints and then print
out all the contributions in each restraint in a format that is general
(for details send me an e-mail).

So the xplor restraint

assign ((resid 1 and name HB2) or
         (resid 29 and name HB2)) ((resid 3 and name HG2#)) 4.63 4.63 1.16

is printed as:

========== restraint    16 ==========
             A    1    MET  HB2
             A    29   LYS  HB2
             A    3    ILE  HG21
             A    3    ILE  HG22
             A    3    ILE  HG23
    R<average>=   3.710 NOE= 4.63 (- 4.63/+ 1.16) Delta=   0.000  E(NOE)=

which is much easier to parse and convert to gromacs format.
A similar thing is done for the dihedral angle restraints.
the script runs like:

parse_xplor.py xplor_input_restraints input_format sequence gromacs_pdb_file
parse_xplor.py restraints.log xplor ubi.seq ubi_gmx.pdb

That's it for now,

many thanks again for your help,


Chris Spronk
Centre for Molecular and Biomolecular Informatics
University of Nijmegen
Toernooiveld 1
NL-6500 GL Nijmegen
The Netherlands
fax  :	+31/+24/3652977
e-mail: C.Spronk at cmbi.kun.nl

More information about the gromacs.org_gmx-users mailing list