Calculate the center of mass of a PDB object.

com(...)

# S3 method for pdb
com(pdb, inds=NULL, use.mass=TRUE, ...)

# S3 method for xyz
com(xyz, mass=NULL, ...)

Arguments

pdb

an object of class pdb as obtained from function read.pdb.

inds

atom and xyz coordinate indices obtained from atom.select that selects the elements of pdb upon which the calculation should be based.

use.mass

logical, if TRUE the calculation will be mass weighted (center of mass).

...

additional arguments to atom2mass.

xyz

a numeric vector or matrix of Cartesian coordinates (e.g. an object of type xyz).

mass

a numeric vector containing the masses of each atom in xyz.

Details

This function calculates the center of mass of the provided PDB structure / Cartesian coordiantes. Atom names found in standard amino acids in the PDB are mapped to atom elements and their corresponding relative atomic masses.

In the case of an unknown atom name elety.custom and mass.custom can be used to map an atom to the correct atomic mass. See examples for more details.

Alternatively, the atom name will be mapped automatically to the element corresponding to the first character of the atom name. Atom names starting with character H will be mapped to hydrogen atoms.

Value

Returns the Cartesian coordinates at the center of mass.

References

Grant, B.J. et al. (2006) Bioinformatics 22, 2695--2696.

Author

Lars Skjaerven

See also

read.pdb, atom2mass

Examples

# \donttest{ # PDB server connection required - testing excluded ## Stucture of PKA: pdb <- read.pdb("3dnd")
#> Note: Accessing on-line PDB file
#> Warning: /var/folders/xf/qznxnpf91vb1wm4xwgnbt0xr0000gn/T//Rtmp4WslmZ/3dnd.pdb exists. Skipping download
#> PDB has ALT records, taking A only, rm.alt=TRUE
## Center of mass: com(pdb)
#> Warning: #> mapped element O1P to O #> mapped element O2P to O #> mapped element O3P to O #> mapped element C8 to C #> mapped element C11 to C #> mapped element C13 to C #> mapped element C12 to C #> mapped element C9 to C #> mapped element C5 to C #> mapped element C2 to C #> mapped element C1 to C #> mapped element S4 to S #> mapped element C3 to C #> mapped element N6 to N #> mapped element C7 to C #> mapped element N10 to N
#> x y z #> [1,] 9.760781 2.455901 -2.076182
## Center of mass of a selection inds <- atom.select(pdb, chain="I") com(pdb, inds)
#> x y z #> [1,] 22.72468 -0.6884178 8.571269
## using XYZ Cartesian coordinates xyz <- pdb$xyz[, inds$xyz] com.xyz(xyz)
#> x y z #> [1,] 22.68164 -0.7530328 8.586634
## with mass weighting com.xyz(xyz, mass=atom2mass(pdb$atom[inds$atom, "elety"]) )
#> x y z #> [1,] 22.72468 -0.6884178 8.571269
# } if (FALSE) { ## Unknown atom names pdb <- read.pdb("3dnd") inds <- atom.select(pdb, resid="LL2") mycom <- com(pdb, inds, rescue=TRUE) #warnings() ## Map atom names manually pdb <- read.pdb("3RE0") inds <- atom.select(pdb, resno=201) myelety <- data.frame(name = c("CL2","PT1","N1","N2"), symb = c("Cl","Pt","N","N")) mymasses <- data.frame(symb = c("Cl","Pt"), mass = c(35.45, 195.08)) mycom <- com(pdb, inds, elety.custom=myelety, mass.custom=mymasses) }