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