org.biojava.bio.structure
Class SVDSuperimposer

java.lang.Object
  extended by org.biojava.bio.structure.SVDSuperimposer

public class SVDSuperimposer
extends 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
SVDSuperimposer(Atom[] atomSet1, Atom[] atomSet2)
           
 
Method Summary
static double getRMS(Atom[] atomSet1, Atom[] atomSet2)
          calculate the RMS (root mean square) of two sets of atoms
 Matrix getRotation()
           
 Atom getTranslation()
           
 void printMatrix(Matrix m)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SVDSuperimposer

public SVDSuperimposer(Atom[] atomSet1,
                       Atom[] atomSet2)
                throws StructureException
Throws:
StructureException
Method Detail

getRMS

public static double getRMS(Atom[] atomSet1,
                            Atom[] atomSet2)
                     throws StructureException
calculate the RMS (root mean square) of two sets of atoms

Parameters:
atomSet1 -
atomSet2 -
Returns:
the RMS of two atom sets
Throws:
StructureException

getRotation

public Matrix getRotation()

getTranslation

public Atom getTranslation()

printMatrix

public void printMatrix(Matrix m)