Package org.biojava.bio.structure
Class SVDSuperimposer
- java.lang.Object
-
- org.biojava.bio.structure.SVDSuperimposer
-
public class SVDSuperimposer extends java.lang.Object
A class that calculates the superimposition between two sets of atoms inspired by the biopython SVDSuperimposer class... example usage:try{ // get some arbitrary amino acids from somewhere String filename = "/Users/ap3/WORK/PDB/5pti.pdb" ; PDBFileReader pdbreader = new PDBFileReader(); Structure struc = pdbreader.getStructure(filename); Group g1 = (Group)struc.getChain(0).getGroup(21).clone(); Group g2 = (Group)struc.getChain(0).getGroup(53).clone(); if ( g1.getPDBName().equals("GLY")){ if ( g1 instanceof AminoAcid){ Atom cb = Calc.createVirtualCBAtom((AminoAcid)g1); g1.addAtom(cb); } } if ( g2.getPDBName().equals("GLY")){ if ( g2 instanceof AminoAcid){ Atom cb = Calc.createVirtualCBAtom((AminoAcid)g2); g2.addAtom(cb); } } Structure struc2 = new StructureImpl((Group)g2.clone()); System.out.println(g1); System.out.println(g2); Atom[] atoms1 = new Atom[3]; Atom[] atoms2 = new Atom[3]; atoms1[0] = g1.getAtom("N"); atoms1[1] = g1.getAtom("CA"); atoms1[2] = g1.getAtom("CB"); atoms2[0] = g2.getAtom("N"); atoms2[1] = g2.getAtom("CA"); atoms2[2] = g2.getAtom("CB"); SVDSuperimposer svds = new SVDSuperimposer(atoms1,atoms2); Matrix rotMatrix = svds.getRotation(); Atom tranMatrix = svds.getTranslation(); // now we have all the info to perform the rotations ... Calc.rotate(struc2,rotMatrix); // shift structure 2 onto structure one ... Calc.shift(struc2,tranMatrix); // // write the whole thing to a file to view in a viewer String outputfile = "/Users/ap3/WORK/PDB/rotated.pdb"; FileOutputStream out= new FileOutputStream(outputfile); PrintStream p = new PrintStream( out ); Structure newstruc = new StructureImpl(); Chain c1 = new ChainImpl(); c1.setName("A"); c1.addGroup(g1); newstruc.addChain(c1); Chain c2 = struc2.getChain(0); c2.setName("B"); newstruc.addChain(c2); // show where the group was originally ... Chain c3 = new ChainImpl(); c3.setName("C"); //c3.addGroup(g1); c3.addGroup(g2); newstruc.addChain(c3); p.println(newstruc.toPDB()); p.close(); System.out.println("wrote to file " + outputfile); } catch (Exception e){ e.printStackTrace(); }
- Since:
- 1.5
- Version:
- %I% %G%
- Author:
- Andreas Prlic
-
-
Constructor Summary
Constructors Constructor Description SVDSuperimposer(Atom[] atomSet1, Atom[] atomSet2)
Create a SVDSuperimposer object and calculate a SVD superimposition of two sets of atoms.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static double
getRMS(Atom[] atomSet1, Atom[] atomSet2)
Calculate the RMS (root mean square) deviation of two sets of atoms.Matrix
getRotation()
Get the Rotation matrix that is required to superimpose the two atom sets.Atom
getTranslation()
Get the shift vector.void
printMatrix(Matrix m)
Simple debug method to print a Matrix object on System.out.
-
-
-
Constructor Detail
-
SVDSuperimposer
public SVDSuperimposer(Atom[] atomSet1, Atom[] atomSet2) throws StructureException
Create a SVDSuperimposer object and calculate a SVD superimposition of two sets of atoms.- Parameters:
atomSet1
- Atom array 1atomSet2
- Atom array 2- Throws:
StructureException
-
-
Method Detail
-
getRMS
public static double getRMS(Atom[] atomSet1, Atom[] atomSet2) throws StructureException
Calculate the RMS (root mean square) deviation of two sets of atoms.- Parameters:
atomSet1
- atom array 1atomSet2
- atom array 2- Returns:
- the RMS of two atom sets
- Throws:
StructureException
-
getRotation
public Matrix getRotation()
Get the Rotation matrix that is required to superimpose the two atom sets.- Returns:
- a rotation matrix.
-
getTranslation
public Atom getTranslation()
Get the shift vector.- Returns:
- the shift vector
-
printMatrix
public void printMatrix(Matrix m)
Simple debug method to print a Matrix object on System.out.- Parameters:
m
- a Matrix
-
-