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.

## GeneralPlot for general residues. |
## GlycineGlycine is small and has no Carbon Beta. So angles can adopt a wide range of conformations. |

## ProlineProline has a carbon attached to the nitrogen, severely restricting the flexibility of the torsion angles |
## Pre-ProlineResidues 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