R: Center of Mass

com {bio3d} | R Documentation

## Center of Mass

### Description

Calculate the center of mass of a PDB object.

### Usage

    com(...)

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

    ## S3 method for class '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.

### Author(s)

Lars Skjaerven

### References

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

### See Also

`read.pdb`, `atom2mass`

### Examples

    # PDB server connection required - testing excluded

    ## Stucture of PKA:
    pdb <- read.pdb("3dnd")

    ## Center of mass:
    com(pdb)

    ## Center of mass of a selection
    inds <- atom.select(pdb, chain="I")
    com(pdb, inds)

    ## using XYZ Cartesian coordinates
    xyz <- pdb$xyz[, inds$xyz]
    com.xyz(xyz)

    ## with mass weighting
    com.xyz(xyz, mass=atom2mass(pdb$atom[inds$atom, "elety"]) )

    ## Not run:
    ## 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)

    ## End(Not run)

[Package bio3d version 2.3-3 Index]