Performs a sequence and structural alignment of two PDB entities.

struct.aln(fixed, mobile, fixed.inds=NULL, mobile.inds=NULL, 
           write.pdbs=TRUE, outpath = "fitlsq", prefix=c("fixed",
           "mobile"), max.cycles=10, cutoff=0.5, ... )

Arguments

fixed

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

mobile

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

fixed.inds

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

mobile.inds

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

write.pdbs

logical, if TRUE the aligned structures are written to PDB files.

outpath

character string specifing the output directory when write.pdbs is TRUE.

prefix

a character vector of length 2 containing the filename prefix in which the fitted structures should be written.

max.cycles

maximum number of refinement cycles.

cutoff

standard deviation of the pairwise distances for aligned residues at which the fitting refinement stops.

...

extra arguments passed to seqaln function.

Details

This function performs a sequence alignment followed by a structural alignment of the two PDB entities. Cycles of refinement steps of the structural alignment are performed to improve the fit by removing atoms with a high structural deviation. The primary purpose of the function is to allow rapid structural alignment (and RMSD analysis) for protein structures with unequal, but related sequences.

The function reports the residues of fixed and mobile included in the final structural alignment, as well as the related RMSD values.

This function makes use of the underlying functions seqaln, rot.lsq, and rmsd.

Value

Returns a list with the following components:

a.inds

atom and xyz indices of fixed.

b.inds

atom and xyz indices of mobile.

xyz

fitted xyz coordinates of mobile.

rmsd

a numeric vector of RMSD values after each cycle of refinement.

References

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

Author

Lars Skjarven

See also

Examples

# \donttest{ # Needs MUSCLE installed - testing excluded if(check.utility("muscle")) { ## Stucture of PKA: a <- read.pdb("1cmk") ## Stucture of PKB: b <- read.pdb("2jdo") ## Align and fit b on to a: path = file.path(tempdir(), "struct.aln") aln <- struct.aln(a, b, outpath = path, outfile = tempfile()) ## Should be the same as aln$rmsd (when using aln$a.inds and aln$b.inds) rmsd(a$xyz, b$xyz, aln$a.inds$xyz, aln$b.inds$xyz, fit=TRUE) invisible( cat("\nSee the output files:", list.files(path, full.names = TRUE), sep="\n") ) }
#> Note: Accessing on-line PDB file #> PDB has ALT records, taking A only, rm.alt=TRUE #> Note: Accessing on-line PDB file #> #> Initial RMSD (321 atoms): 6.647 #> Cycle 1: 7 atoms rejected #> Mean: 1.3 Std: 6.1 Cut: 13.4 #> RMSD (314 of 321 atoms): 2.397 #> Cycle 2: 22 atoms rejected #> Mean: 1.2 Std: 1.7 Cut: 4.5 #> RMSD (292 of 321 atoms): 1.501 #> Cycle 3: 23 atoms rejected #> Mean: 1 Std: 0.9 Cut: 2.7 #> RMSD (269 of 321 atoms): 1.165 #> Cycle 4: 23 atoms rejected #> Mean: 0.9 Std: 0.6 Cut: 2 #> RMSD (246 of 321 atoms): 0.98 #> #> See the output files: #> /var/folders/xf/qznxnpf91vb1wm4xwgnbt0xr0000gn/T//Rtmp9oBdbc/struct.aln/fixed.pdb #> /var/folders/xf/qznxnpf91vb1wm4xwgnbt0xr0000gn/T//Rtmp9oBdbc/struct.aln/mobile_0.pdb #> /var/folders/xf/qznxnpf91vb1wm4xwgnbt0xr0000gn/T//Rtmp9oBdbc/struct.aln/mobile_1.pdb #> /var/folders/xf/qznxnpf91vb1wm4xwgnbt0xr0000gn/T//Rtmp9oBdbc/struct.aln/mobile_2.pdb #> /var/folders/xf/qznxnpf91vb1wm4xwgnbt0xr0000gn/T//Rtmp9oBdbc/struct.aln/mobile_3.pdb #> /var/folders/xf/qznxnpf91vb1wm4xwgnbt0xr0000gn/T//Rtmp9oBdbc/struct.aln/mobile_4.pdb
# } if (FALSE) { ## Align two subunits of GroEL (open and closed states) a <- read.pdb("1sx4") b <- read.pdb("1xck") ## Select chain A only a.inds <- atom.select(a, chain="A") b.inds <- atom.select(b, chain="A") ## Align and fit: aln <- struct.aln(a,b, a.inds, b.inds) }