Just to be more clear:I store the AminoAcides as HashMap<String,Group> where 1 
group contains 1AA, and the String is the name of the AA. (I prefer 1 letter 
code there)
To shift the desired AA in place, I'd match the Cb atomsThen rotate the AA so 
that the Ca-Cb line would matchThen rotate the AA so that the N-Ca-Cb pane 
matches (In this case it's equalto the N-Ca line match)
After this, the AA would be roughly in place.
After this there may should be a collision test, but I think that part canbe 
handeled by the GROMACS package, which I'd ther run anyway to see how 
themutation effects the structure.
On 12/2/05, Tamas Horvath <[EMAIL PROTECTED]> wrote:>> Thanks for the codes! 
I've noticed the methods in Calc, but my main> question is 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 the chain, I want to keep the backbone 
atoms in place, so as far as> your mutate method goes it's ok. But now I want 
to replace the sidechain. In> order to do that, I'd shift and rotate the 
desired AA in place (Cbs would be> identical and the other backbone atoms as 
close as possible), and then copy> the sidechain 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 order> to shift and rotate them?>> I don't really get how the 
rotation is supposed to work... what is exactly> the 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 sh!
ift 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;> >                  mat!
rix[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 
(Except!
ion 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();> >> >          // fi!
rst 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.getPD!
BCode();> >> >                      // 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