Mechanical Stiffness Calculations

This example shows how to perform mechanical resistance calculation for GFP protein (1gfl) and visualize the results using Matplotlib library and VMD program.

An ANM instance that stores Hessian matrix and normal mode data describing the intrinsic dynamics of the protein structure will be used as an input (model) as well as cooridinates of protein structure (coords, pdb).

See [EB08] for more information about the theory of mechanical resistance calculations and more examples.

Parse structure

We start by importing everything from the ProDy package:

In [1]: from prody import *

In [2]: from pylab import *

In [3]: ion()   # turn interactive mode on

We start by parsing chain A of PDB structure 1gfl together with the header, which will be used later for visualizing the secoundary structure.

In [4]: gfp, header = parsePDB('1gflA', header=True)

In [5]: gfp
Out[5]: <AtomGroup: 1gflA (1967 atoms)>

We want to use only Cα atoms for our calculations, so we select them into a new object calphas:

In [6]: calphas = gfp.ca

In [7]: calphas
Out[7]: <Selection: 'ca' from 1gflA (230 atoms)>

Build Hessian and calculate ANM modes

In the next step we instantiate an ANM instance:

In [8]: anm = ANM('GFP ANM analysis')

Then, build the Hessian matrix by passing selected atoms (230 Cα atoms) to ANM.buildHessian() method:

In [9]: anm.buildHessian(calphas, cutoff=13.0)

And calculate all anm modes as they will be needed for later:

In [10]: anm.calcModes(n_modes='all')

All modes are required to perform accurate mechanical stiffness calculations.

Stiffness Matrix Calculations

Mechanical stiffness calculations for the selected group of atoms can be performed using the calcMechStiff() function:

In [11]: stiffness = calcMechStiff(anm, calphas)

In [12]: stiffness
Out[12]: 
array([[0.        , 8.54744466, 8.55133411, ..., 8.73270017, 8.36529536,
        7.42692504],
       [8.54744466, 0.        , 8.89990284, ..., 8.98097054, 8.61849698,
        7.77257692],
       [8.55133411, 8.89990284, 0.        , ..., 8.87863489, 8.55675667,
        7.84521673],
       ...,
       [8.73270017, 8.98097054, 8.87863489, ..., 0.        , 8.87731778,
        8.36590599],
       [8.36529536, 8.61849698, 8.55675667, ..., 8.87731778, 0.        ,
        9.52997339],
       [7.42692504, 7.77257692, 7.84521673, ..., 8.36590599, 9.52997339,
        0.        ]])

To show the stiffness matrix as an image map use the following function:

In [13]: show = showMechStiff(stiffness, calphas, cmap='jet_r')
../../_images/gfp_showMechStiff.png

Note that ‘jet_r’ is the reverse of the jet colormap and is similar to the default coloring method of the VMD program.

The mean values of the mechanical stiffness matrix for each residue can be calculated using the showMeanMechStiff() function where the secoundary structure of the protein is drawn using header information.

In [14]: show = showMeanMechStiff(stiffness, calphas, header, 'A', cmap='jet_r')
../../_images/gfp_showMeanMechStiff.png

Mechanical Stiffness in VMD

We can generate tcl files for visualizing mechanical stiffness with VMD using the writeVMDstiffness() function. Select one residue in indices ([3]) or series of residues ([3, 7] means from 3 aa to 7 aa inclusive) and a range of effective spring constant k_range ([0, 7.5]).

We provide gfp as well as calphas so VMD has information about the complete protein structure, which it can use for graphical representations.

In [15]: writeVMDstiffness(stiffness, gfp, [3,7], [0,7.5], filename='1gfl_3-7aa')

In [16]: writeVMDstiffness(stiffness, gfp, [3], [0,7], filename='1gfl_3aa')

A TCL file will be saved automatically and can be used later in VMD by running the following command line instruction. Results can be loaded automatically to VMD by setting keyword loadToVMD=True.

:: vmd -e 1gfl_3aa.tcl

or typing the following in the VMD TKConsole (VMD Main) for Linux, Windows and Mac users:

:: play 1gfl_3aa.tcl

The tcl file contains a method for drawing lines between selected pairs of residues, which are highlighted as spheres. The color of the line can be modified by changing the draw color red line in the output file. Only colors from VMD Coloring Method will work. Other changes can be done within VMD in the Graphical Representations menu.

../../_images/1gfl_chA.png

The figure shows GFP results from writeVMDstiffness() function opened in VMD. Pairs of found residues LYS3-GLY116, LYS3-PRO211 and PRO211-ASN212 are shown as VDW spheres connected with red lines.

Additionally, 1gfl_3aa.txt file is created. It contains a list of residue pairs with the value of effective spring constant (in a.u. because kBT=1) obtained from calcMechStiff().

LYS3    GLY116  6.91650667766
LYS3    PRO211  6.85989128668
LYS3    ASN212  6.69507284967
...

The range of spring constant for k_range can be checked as follows:

In [17]: calcStiffnessRange(stiffness)
Out[17]: (5.271418245781293, 17.384909446532433)

See also calcMechStiffStatistic() and calcStiffnessRangeSel() functions for more detailed analysis of the stiffness matrix.

The results of the mean value of mechanical stiffness calculation can be seen in VMD using:

In [18]: writeDeformProfile(stiffness, gfp, select='chain A and name CA', pdb_selstr='protein')
../../_images/1gfl_defprofile_vmd.png

Calculate Distribution of Deformation

The distribution of the deformation in the distance contributed by each mode for a selected pair of residues has been described in [EB08], see Eq. (10) and plots are shown on Fig. (2).

These results can be plotted using plotting.showPairDeformationDist() or a list can be obtained using analysis.calcPairDeformationDist().

In [19]: d0 = calcPairDeformationDist(anm, calphas, 3, 132)

In [20]: show = showPairDeformationDist(anm, calphas, 3, 132)
../../_images/mechstiff_pair_deformation_dist_3-132.png

Figure shows the plotted distribution for deformations between 3-132 residue in each mode k.

To obtain results without saving any file type:

In [21]: d1 = calcPairDeformationDist(anm, calphas, 3, 212)

In [22]: d2 = calcPairDeformationDist(anm, calphas, 132, 212)

In [23]: plot(d1[0], d1[1], 'k-', d2[0], d2[1], 'r-')
Out[23]: 
[<matplotlib.lines.Line2D at 0x7f82c74fd050>,
 <matplotlib.lines.Line2D at 0x7f82c74fde90>]
../../_images/mechstiff_pair_deformation_dist_3-132_212.png