Fuzzy Ramachandran function

By Malcolm McLean Homepage

The Ramachandran plot describes protein torsion angles in phi / psi space.

Data from Lovell et al [1] has been repackaged in a handy to use C function. The raw data represents psi / psi angles culled from a set of 500 high-resolution structures in the Brookhaven PDB. They have been binned in two degree squares, and then a smoothing function applied to try to obtain the true data density.

However we are generally not so interested in the statistical distribution of the dat as in whether it represents an allowed or a disallowed region. The Ramachandran plot is a classic case of a fuzzy set. Some regions are highly populated, others totally disallowed due to steric clases, and others are essentially unpopulated but contain a few outliers.

General


Plot for general residues.


Glycine


Glycine is small and has no Carbon Beta. So angles can adopt a wide range of conformations.

Proline


Proline has a carbon attached to the nitrogen, severely restricting the flexibility of the torsion angles

Pre-Proline


Residues that come before proline have a rather different distribution as well, because prloine breaks alpha helices

In all the graphs green represents disallowed regions, red favoured regions where the function returns 1.0, and the fuzzy regions are shared from black to white. Apart from very small areas round the favoured regions, the fuzzy areas are very close to black.

By using different thresholds you can make the fuzzy function more strict or more lenient. I have used simple linear interploation to fuzzify. If you want a more generous representation of the fuzzy regions, you could take logarithms.


To use
/*
  Obtain fuzzy Ramachandran function for phi / psi angles
  Params: phi - radians C - N - CA - C torsion angle 
          psi - radians N - CA - C - N torsion angle
          mode - RAMA_GENERAL, RAMA_GLYCINE, RAMA_PROLINE, RAMA_PREPROLINE
                 (four plots for four important cases) 
  Returns: fuzzy set membership 1 = favoured, 0 = disallowed, fraction
   = unfavoured 
 */
 float fuzzyrama(float phi, float psi, int mode)
 
  

/*
  Obtain data density plot for Ramachandran function
  Params: phi - radians C - N - CA - C torsion angle 
          psi - radians N - CA - C - N torsion angle
          mode - RAMA_GENERAL, RAMA_GLYCINE, RAMA_PROLINE, RAMA_PREPROLINE
                 (four plots for four important cases) 
  Returns: data density at that point, from 0 to 1 at the highest peak.
 */
float rawrama(float phi, float psi, float mode)
 
Source files
fuzzyrama.c
fuzzyrama.h
rama_general.c
rama_glycine.c
rama_proline.c
rama_preproline.c

Reference

SC Lovell et al. (2003). Structure Validation by Cα Geometry: φ, ψ and Cβ Deviation. Proteins 50 , 437-450.