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