Hi Tamas!

If I've got a Group , which is an amino acid, and I want to shift it by a 3D vector (or 3 2D vectors), how may I do it?

There is the org.biojava.bio.structure.Calc class that allows to do calculations with the structure.

e.g. to shift a structure do:


                double x = 2.0;
                double y = 0.2;
                double z = 12.3;

                Atom vector = new AtomImpl();
                vector.setX(x);
                vector.setY(y);
                vector.setZ(z);

                // shift the structure.
                Calc.shift(structure,vector);



 Similarly, if i want to rotate the same structure, how may I do it?

              double[][] matrix = new double[3][3];

                matrix[0][0] = 0.1;
                matrix[0][1] = 0.2;
                matrix[0][2] = 0.3;
                matrix[1][0] = 0.4;
                matrix[1][1] = 0.5;
                matrix[1][2] = 0.6;
                matrix[2][0] = 0.7;
                matrix[2][1] = 0.8;
                matrix[2][2] = 0.9;

                Calc.rotate(structure,matrix);


And here is an example regarding your questions from yesterday,
how to do mutations. most of the code actually deals with finding the right chain and residue. I will add the "mutator" class to cvs, so in future doing mutations will be a two liner...

Cheers,
Andreas


/*
 *                  BioJava development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 * Created on Nov 30, 2005
 *
 */

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.biojava.bio.structure.AminoAcid;
import org.biojava.bio.structure.AminoAcidImpl;
import org.biojava.bio.structure.Atom;
import org.biojava.bio.structure.AtomIterator;
import org.biojava.bio.structure.Chain;
import org.biojava.bio.structure.ChainImpl;
import org.biojava.bio.structure.Group;
import org.biojava.bio.structure.Structure;
import org.biojava.bio.structure.StructureImpl;
import org.biojava.bio.structure.io.PDBFileReader;
import org.biojava.bio.structure.io.PDBParseException;


public class structureTest {

    public structureTest() {
        super();

    }

    public static void main (String[] args){
        String filename   =  "/Users/ap3/WORK/PDB/5pti.pdb" ;
        String outputfile =  "/Users/ap3/WORK/PDB/mutated.pdb" ;

        PDBFileReader pdbreader = new PDBFileReader();

        try{
                Structure struc = pdbreader.getStructure(filename);
                System.out.println(struc);


                String chainId = " ";
                String pdbResnum = "2";
                String newType = "ARG";

                // mutate the original structure and create a new one.
                Mutator m = new Mutator();
Structure newstruc = m.mutate(struc,chainId,pdbResnum,newType);

                FileOutputStream out= new FileOutputStream(outputfile);
                PrintStream p =  new PrintStream( out );

                p.println (newstruc.toPDB());

                p.close();


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Mutator{
    List supportedAtoms;

    public Mutator(){
        supportedAtoms = new ArrayList();
        supportedAtoms.add("N");
        supportedAtoms.add("CA");
        supportedAtoms.add("C");
        supportedAtoms.add("O");
        supportedAtoms.add("CB");
    }

/** creates a new structure which is identical with the original one.
     * only one amino acid will be different.
     *
     * @param struc
     * @param chainId
     * @param pdbResnum
     * @param newType
     * @return
     * @throws PDBParseException
     */
public Structure mutate(Structure struc, String chainId, String pdbResnum, String newType)
    throws PDBParseException{


        // create a  container for the new structure
        Structure newstruc = new StructureImpl();

        // first we need to find our corresponding chain

        // get the chains for model nr. 0
        // if structure is xray there will be only one "model".
        List chains = struc.getChains(0);

        // iterate over all chains.
        Iterator iter = chains.iterator();
        while (iter.hasNext()){
            Chain c = (Chain)iter.next();
            if (c.getName().equals(chainId)) {
                // here is our chain!

                Chain newchain = new ChainImpl();
                newchain.setName(c.getName());

                 List groups = c.getGroups();

                // now iterate over all groups in this chain.
// in order to find the amino acid that has this pdbRenum.

                Iterator giter = groups.iterator();
                while (giter.hasNext()){
                    Group g = (Group) giter.next();
                    String rnum = g.getPDBCode();

                    // we only mutate amino acids
                    // and ignore hetatoms and nucleotides in this case
if (rnum.equals(pdbResnum) && (g.getType().equals("amino"))){

// create the mutated amino acid and add it to our new chain AminoAcid newgroup = mutateResidue((AminoAcid)g,newType);
                        newchain.addGroup(newgroup);
                    }
                    else {
                        // add the group  to the new chain unmodified.
                        newchain.addGroup(g);
                    }
                }

                // add the newly constructed chain to the structure;
                newstruc.addChain(newchain);
            } else {
// this chain is not requested, add it to the new structure unmodified.
                newstruc.addChain(c);
            }

        }
        return newstruc;
    }

    /** create a new residue which is of the new type.
     * Only the atoms N, Ca, C, O, Cb will be considered.
     * prolines are not mutated...
     * @param oldAmino
     * @param newType
     * @return
     */
    public AminoAcid mutateResidue(AminoAcid oldAmino, String newType)
    throws PDBParseException {

        AminoAcid newgroup = new AminoAcidImpl();

        newgroup.setPDBCode(oldAmino.getPDBCode());
        newgroup.setPDBName(newType);


        AtomIterator aiter =new AtomIterator(oldAmino);
        while (aiter.hasNext()){
            Atom a = (Atom)aiter.next();
            if ( supportedAtoms.contains(a.getName())){
                newgroup.addAtom(a);
            }
        }

        return newgroup;

    }

}

-----------------------------------------------------------------------

Andreas Prlic      Wellcome Trust Sanger Institute
                              Hinxton, Cambridge CB10 1SA, UK
                         +44 (0) 1223 49 6891

_______________________________________________
Biojava-l mailing list  -  Biojava-l@biojava.org
http://biojava.org/mailman/listinfo/biojava-l

Reply via email to