Residual Dipolar Couplings in Structure Refinement

From NESG Wiki
Jump to navigation Jump to search


Residual Dipolar Couplings (RDCs) originate from partial anisotropic averaging of the dipolar interaction which is dependent on the angle between an internuclear vector and the magnetic field. When a molecule sample orientations uniformly, as it does in normal solution NMR, RDCs average to zero and are not observable. However, if a molecule is dissolved in a dilute liquid crystalline medium it becomes partially aligned, and the dipolar couplings are not completely averaged to zero, leading to a small contribution to the splittings of NMR signals. The angular dependence of these contributions can provide valuable structural information. Protein structures can be validated using RDCs, and structures can be refined to improve quality.

Another application of RDCs is identification of the correct monomer orientation in homodimers. This application requires RDCs from two or more alignment media that give different orientations of principal alignment axes.

Below are protocols for the refinement of protein structures with RDCs using XPLOR-NIH [1].

RDC Refinement Using XPLOR-NIH


X-PLOR can be downloaded from

  • Obtain a good estimate of the magnitude of Da and R from the alignment tensors. The alignment tensors can be obtained either from the extremes of distribution of RDCs (which forms a histogram) or from the program REDCAT. REDCAT gives values for Sxx, Syy and Szz. These values are relateive to the maxium RDC (RDCmax) for that bond type. First, multiply these values from REDCAT by the associated maxium RDC value (for example 24350 for NH dipolar couplings). These alignment parameters are related to Da and R as follows:
Da = RDCmax * Szz/2  
R = Dr/Da where Dr = 0.5 * (Sxx-Syy) * RDCmax
  • Note that the sani constraint in XPLOR and or CNS requires three coefficients: DFS, Da and R. DFS is a fixed offset. For RDC data, DFS = 0.
  • In XPLOR define the axis representing the alignment tensor coordinate system. The coordinate system is represented by four pseudo atoms: OO(origin), X ,Y and Z. The coordinate system has to be positioned far away to prevent any interaction with the protein. For more than one aligned media, define separate axes for each medium. These axes can either be defined at the end of the pdb file or as a separate .pdb file. Shown below is an example from the pdb:
ATOM    608  X   ANI   500      33.000  30.000  30.000  1.00  0.00
ATOM    609  Y   ANI   500      30.000  33.000  30.000  1.00  0.00
ATOM    610  Z   ANI   500      30.000  30.000  33.000  1.00  0.00
ATOM    611  OO  ANI   500      30.000  30.000  30.000  1.00  0.00

You can also create a separate, standalone pdb file ('axis.pdb') with only one residue starting with ATOM 1. This separate pdb file can then be read in XPLOR or CNS as an additional coordinate file using the coor command.

  • Create an RDC constraint file. An example is shown below where -8.1 is the coupling value and plus and minus 0.5 is the error associated with it:
assign ( resid 500 and name OO )
         ( resid 500 and name Z )
         ( resid 500 and name X )
         ( resid 500 and name Y )
         ( resid 1 and name HN )
         ( resid 1 and name N ) -8.1 0.5 0.5

  • The following perl script ('') can be used to create an RDC constraint file ('myprotRdc.tbl'). The input to the script is coupling values as one column text file (same as used in REDCAT to import rdcs). Usage for this script is: myprot.rdc myprotRdc.tbl startingResidue Err1 Err2. The same script can be used for CNS, the only change is to make a tbl file with only one error Err1.
if($ARGC < 3 ) {
    print "Usage: infile outfile startingResidue# <err1> <err2> \n";
$fileIn = $ARGV[0];
$fileOut = $ARGV[1];
$startRes = $ARGV[2];
$rdcE1 = 0.6;
$rdcE2 = 0.5;
$useE2 = 0;

if ($ARGV[3] ){
   $rdcE1 = $ARGV[3];
if ($ARGV[4] ){
   $rdcE2 = $ARGV[4];
   $useE2 = 1;
unless( open(RDC_IN, $fileIn)) {
        die("could not open input file $fileIn \n");
unless( open(RDC_OUT, ">$fileOut")) {
        die("could not open outpu file $fileOut \n");

        $thisRes = $startRes;
while ($thisLine = <RDC_IN> ) {
        @parts = split(/\s+/,$thisLine );  # split by spaces
        $thisRDC = $parts[0];
        print("residue $thisRes, rdc $thisRDC \n");

        # if the rdc is  valid, write to the tbl file
        if ($thisRDC < 999 ) {
            print RDC_OUT "assign ( resid 500 and name OO ) \n";
            print RDC_OUT "           ( resid 500 and name Z ) \n";
            print RDC_OUT "           ( resid 500 and name X ) \n";
            print RDC_OUT "           ( resid 500 and name Y ) \n";
            print RDC_OUT "           ( resid $thisRes and name HN ) \n";
            print RDC_OUT "           ( resid $thisRes and name N )  ";
           if ($useE2 > 0 ) {
                print RDC_OUT " $thisRDC  $rdcE1  $rdcE2 \n\n";
            } else {
                print RDC_OUT " $thisRDC  $rdcE1  \n\n";
        $thisRes = $thisRes + 1;

  • Do not include all the RDCs for refinement. Leave 15-20% of the RDCs for validation.
  • Set the Xplor-NIH input file for dipolar coupling refinement. The RDC restraint is known as sani (susceptibility anisotropy). Define the force constant, ksani for each media and for each type of couplings.
  • The refined structure can be validated with the RDCs that are not used in refinement. From the refined structure RDCs can be back calculated (using REDCAT) and plotted against the experimental RDCs.

Details for performing RDC refinement in XPLOR/NIH starting from CNS

  • Prepare the RDC constraint file as discussed above.
  • Prepare noe and dihedral angle constraint files as for CNS ("aco.tbl", noe.tbl")
  • The nomenclature and thus the topology of methyl groups in XPLOR is NOT the same as for CNS. You must rebuild each of your CNS pdb files into XPLOR format using the script generate1.inp. Edit the script and replace myprot with the appropriate prefix for your protein. generate.inp will also generate a structure file ("myprot.psf") for use with XPLOR.
  • The script "doi" will repeatedly run generate1.inp, iterating over all of your input structures.
  • NOTE: generate1.inp does not like atoms OT1 and OT2 on the C terminal. Get rid of one and replace the other with O, make sure you preserve the exact column alignment in the pdb file.
  • Refinment with RDCs sets anglular constraints relative to a virtual "axis" residue. You must also have a copy of the axis residue pdb file ("axis.pdb") in the local directory.
  • The script refine_rdc_myprot.inp can be used to run the refinement including RDC constraints.
  • You must edit the script to provide the correct names for your noe, dihedral and rdc input files xxx.tbl, you must also edit the coefficients for the NH sani constraints to put in your Da and Rhombicity as calculated above.
  • The script "dos" will repeatedly run refine_rdc_myprot.inp, iterating over all of your input structures and creating refined structures.
  • These refined structures may then be directly used in CNS if water bath refinement is desired.

Details for performing RDC refinement in XPLOR/NIH using Python Interface

XPLOR-NIH can be used by python interface. It does offer many conveniences over the old XPLOR script interface, for instance, no longer there is need to setup the .psf file for the alignment tensor and the value of Da and R don't have to be fixed. The details for the usage can be found on the tutorial attached. With the new version of XPLOR-NIH script can be found in the eginput directory. The script can be modified based on the number of media, values of Da and R. Below is the sani part of the script for the refrence.

# orientation Tensor - used with the dipolar coupling term
#  one for each medium
#   For each medium, specify a name, and initial values of Da, Rh.
from varTensorTools import create_VarTensor
#                        medium  Da   rhombicity
for (medium,Da,Rh) in [ ('t',   -6.5, 0.62),
                        ('b',   -9.9, 0.23) ]:
    oTensor = create_VarTensor(medium)
    media[medium] = oTensor
# dipolar coupling restraints for protein amide NH.  
# collect all RDCs in the rdcs PotList
# RDC scaling. Three possible contributions.
#   1) gamma_A * gamma_B / r_AB^3 prefactor. So that the same Da can be used
#      for different expts. in the same medium. Sometimes the data is
#      prescaled so that this is not needed. scale_toNH() is used for this.
#      Note that if the expt. data has been prescaled, the values for rdc rmsd
#      reported in the output will relative to the scaled values- not the expt.
#      values.
#   2) expt. error scaling. Used here. A scale factor equal to 1/err^2
#      (relative to that for NH) is used.
#   3) sometimes the reciprocal of the Da^2 is used if there is a large
#      spread in Da values. Not used here.
from rdcPotTools import create_RDCPot, scale_toNH
rdcs = PotList('rdc') 
for (medium,expt,file,                 scale) in \
    [('t','NH' ,'tmv107_nh.tbl'       ,1),
     ('t','NCO','tmv107_nc.tbl'       ,.05),
     ('t','HNC','tmv107_hnc.tbl'      ,.108),
     ('b','NH' ,'bicelles_new_nh.tbl' ,1),
     ('b','NCO','bicelles_new_nc.tbl' ,.05),
    rdc = create_RDCPot("%s_%s"%(medium,expt),file,media[medium])

    #1) scale prefactor relative to NH
    #   see python/ for exact calculation
    # scale_toNH(rdc) - not needed for these datasets -
    #                        but non-NH reported rmsd values will be wrong.

    #3) Da rescaling factor (separate multiplicative factor)
    # scale *= ( 9.9 / rdcs[name].oTensor.Da(0) )**2
    rdc.setShowAllRestraints(1) #all restraints are printed during analysis
    rdc.setThreshold(1.5)       # in Hz
rampedParams.append( MultRamp(0.05,5.0, "rdcs.setScale( VALUE )") )

The command to run python script is

xplor -py 


1.    Schwieters, C.D., Kuszewski, J.J., Tjandra, N. and Clore, G.M.  (2003) The Xplor-NIH NMR molecular structure determination package.  J. Magn. Res. 160, 65-73.