Thanks for the codes! I've noticed the methods in Calc, but my main questionis 
the following. Let's say I've got a primitive library of AminoAcides.They 
stored as a group, they have all the atoms. When I'm mutating thechain, I want 
to keep the backbone atoms in place, so as far as your mutatemethod goes it's 
ok. But now I want to replace the sidechain. In order to dothat, I'd shift and 
rotate the desired AA in place (Cbs would be identicaland the other backbone 
atoms as close as possible), and then copy thesidechain atoms to the mutated 
AA... (I hope that's clear)
So do I have to wrap my Group objects to a Chain/Structure object in orderto 
shift and rotate them?
I don't really get how the rotation is supposed to work... what is exactlythe 
matrix it asks for?
On 12/2/05, Andreas Prlic <[EMAIL PROTECTED]> wrote:>> 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 an!
d 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 filena!
me   =  "/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>
_______________________________________________
Biojava-l mailing list  -  Biojava-l@biojava.org
http://biojava.org/mailman/listinfo/biojava-l

Reply via email to