"nma"(pdb, inds = NULL, ff = 'calpha', pfc.fun = NULL, mass = TRUE, temp = 300.0, keep = NULL, hessian = NULL, outmodes = NULL, ... )build.hessian(xyz, pfc.fun, fc.weights = NULL, pdb = NULL, ...)"print"(x, nmodes=6, ...)
pdb
as obtained from
function read.pdb
. atom.select
that selects the elements of pdb
upon which the calculation should be based. If not provided the
function will attempt to select the calpha atoms automatically
(based on function atom.select
). ff
. See examples below. build.hessian
. For internal purposes and generally not
intended for public use. atom.select
)
specifying the atoms to include in the resulting mode object. nma
object obtained from nma.pdb
. build.hessian
,
aa2mass
, pfc.fun
, and print
. One
useful option here for dealing with unconventional residues is
mass.custom, see the aa2mass
function for details. Perform elastic network model (ENM) C-alpha normal modes calculation of a protein structure.
This function calculates the normal modes of a C-alpha model of a protein structure. A number of force fields are implemented all of whhich employ the elastic network model (ENM).
The calpha force field - originally developed by Konrad Hinsen - is the recommended one for most applications. It employs a spring force constant differentiating between nearest-neighbour pairs along the backbone and all other pairs. The force constant function was parameterized by fitting to a local minimum of a crambin model using the AMBER94 force field.
See load.enmff
for details of the different force fields.
By default nma.pdb
will diagonalize the mass-weighted Hessian
matrix. The resulting mode vectors are moreover scaled by the thermal
fluctuation amplitudes.
The implementation under default arguments reproduces the calculation
of normal modes (VibrationalModes) in the Molecular Modeling Toolkit
(MMTK) package. To reproduce ANM modes set ff='anm'
,
mass=FALSE
, and temp=NULL
.
mass=TRUE
. Note that the 6 first trivial
eigenvectos appear in columns one to six. mass=TRUE
). mass=FALSE)
). modes
component when
mass=FALSE
and temp=NULL
. xyz
containing the
Cartesian coordinates in which the calculation was performed. The current version provides an efficent implementation of NMA with execution time comparable to similar software (when the entire Hessian is diagonalized).
The main (speed related) bottleneck is currently the diagonalization
of the Hessian matrix which is performed with the core R function
eigen
. For computing a few (5-20) approximate modes the user
can consult package irlba.
NMA is memory extensive and users should be cautions when running larger proteins (>3000 residues). Use keep to reduce the amount of memory needed to store the final nma object (the full 3Nx3N Hessian matrix still needs to be allocated).
We thank Edvin Fuglebakk for valuable discussions on the implementation as well as for contributing with testing.
Skjaerven, L. et al. (2014) BMC Bioinformatics 15, 399. Grant, B.J. et al. (2006) Bioinformatics 22, 2695--2696. Hinsen, K. et al. (2000) Chemical Physics 261, 25--37.
## Fetch stucture pdb <- read.pdb( system.file("examples/1hel.pdb", package="bio3d") ) ## Calculate normal modes modes <- nma(pdb)Building Hessian... Done in 0.045 seconds. Diagonalizing Hessian... Done in 0.133 seconds.## Print modes print(modes)Call: nma.pdb(pdb = pdb) Class: VibrationalModes (nma) Number of modes: 387 (6 trivial) Frequencies: Mode 7: 0.018 Mode 8: 0.019 Mode 9: 0.024 Mode 10: 0.025 Mode 11: 0.028 Mode 12: 0.029 + attr: modes, frequencies, force.constants, fluctuations, U, L, xyz, mass, temp, triv.modes, natoms, call## Plot modes plot(modes) ## Visualize modes #m7 <- mktrj.nma(modes, mode=7, file="mode_7.pdb") ## Use Anisotropic Network Model modes <- nma(pdb, ff="anm", mass=FALSE, temp=NULL, cutoff=15)Building Hessian... Done in 0.043 seconds. Diagonalizing Hessian... Done in 0.144 seconds.## Use SSE information and SS-bonds sse <- dssp(pdb, resno=FALSE, full=TRUE) ss.bonds <- matrix(c(76,94, 64,80, 30,115, 6,127), ncol=2, byrow=TRUE) ## User defined energy function ## Note: Must take a vector of distances "my.ff" <- function(r) { ifelse( r>15, 0, 1 ) } ## Modes with a user defined energy function modes <- nma(pdb, pfc.fun=my.ff)Building Hessian... Done in 0.051 seconds. Diagonalizing Hessian... Done in 0.136 seconds.## A more manual approach sele <- atom.select(pdb, chain='A', elety='CA') xyz <- pdb$xyz[sele$xyz] hessian <- build.hessian(xyz, my.ff) modes <- eigen(hessian) ## Dealing with unconventional residues pdb <- read.pdb("1xj0")Note: Accessing on-line PDB file## nma(pdb) #modes <- nma(pdb, mass.custom=list(CSX=121.166))