X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2FMCview%2FPDBChain.java;h=5f23a266bd21902c84b9ed881177e07bc9ccbf6b;hb=dfc5d2b04210799f956df7824eba3693eca592c8;hp=2e0ce30bd721ed429e6ae06227f2a2f4cfbd2d3f;hpb=e5127e5f27f02c8f328539eaac68eabfbee1d135;p=jalview.git diff --git a/src/MCview/PDBChain.java b/src/MCview/PDBChain.java index 2e0ce30..5f23a26 100755 --- a/src/MCview/PDBChain.java +++ b/src/MCview/PDBChain.java @@ -1,265 +1,286 @@ -/* Copyright (C) 1998 Michele Clamp - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ +/* +* Jalview - A Sequence Alignment Editor and Viewer +* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*/ package MCview; import jalview.datamodel.*; + import jalview.schemes.ResidueProperties; import java.awt.*; + import java.util.*; +import jalview.analysis.AlignSeq; public class PDBChain { + public String id; + public Vector bonds = new Vector(); + public Vector atoms = new Vector(); + public Vector residues = new Vector(); + public int offset; + public Sequence sequence; + public boolean isVisible = true; + public int pdbstart = 0; + public int pdbend = 0; + public int seqstart = 0; + public int seqend = 0; + + public PDBChain(String id) { + this.id = id; + } - public String id; - public Vector bonds = new Vector(); - public Vector atoms = new Vector(); - public Vector residues = new Vector(); - public int offset; + public String print() { + String tmp = ""; - public Sequence sequence; - public boolean isVisible = false; + for (int i = 0; i < bonds.size(); i++) { + tmp = tmp + ((Bond) bonds.elementAt(i)).at1.resName + " " + + ((Bond) bonds.elementAt(i)).at1.resNumber + " " + offset + + "\n"; + } - public int pdbstart=0, pdbend=0, seqstart=0, seqend=0; + return tmp; + } - //public DrawableSequence ds; + void makeExactMapping(AlignSeq as, Sequence s1) + { + int pdbpos = as.getSeq2Start()-2; + int alignpos = s1.getStart() + as.getSeq1Start()-3; + + for(int i=0; i (float)1.0) { - red = (float)1.0; - } - if (red < (float)0.0) { - red = (float)0.0; + public void makeResidueList() { + int count = 0; + StringBuffer seq = new StringBuffer(); + + int i, iSize = atoms.size()-1; + for (i = 0; i < iSize; i++) + { + Atom tmp = (Atom) atoms.elementAt(i); + int resNumber = tmp.resNumber; + int res = resNumber; + + if (i == 0) { + offset = resNumber; + } + + Vector resAtoms = new Vector(); + + resAtoms.addElement((Atom) atoms.elementAt(i)); + i++; + resNumber = ((Atom) atoms.elementAt(i)).resNumber; + + //Add atoms to a vector while the residue number + //remains the same + while ((resNumber == res) && (i < atoms.size())) { + resAtoms.addElement((Atom) atoms.elementAt(i)); + i++; + + if (i < atoms.size()) { + resNumber = ((Atom) atoms.elementAt(i)).resNumber; + } else { + resNumber++; + } + } + + //We need this to keep in step with the outer for i = loop + i--; + + //Make a new Residue object with the new atoms vector + residues.addElement(new Residue(resAtoms, resNumber - 1, count)); + count++; + + Residue tmpres = (Residue) residues.lastElement(); + Atom tmpat = (Atom) tmpres.atoms.elementAt(0); + + // Keep totting up the sequence + if (ResidueProperties.getAA3Hash().get(tmpat.resName) == null) + { + seq.append("X") ; + // System.err.println("PDBReader:Null aa3Hash for " + + // tmpat.resName); + } else { + + seq.append(ResidueProperties.aa[((Integer) ResidueProperties.getAA3Hash() + .get(tmpat.resName)).intValue()]); + } } - b.startCol = new Color(red,(float)0.0,(float)1.0-red); - atno = ((Integer)AA3Hash.get(b.at2.resName.toUpperCase())).intValue(); + if(id.length()<1 || id.equals(" ")) + id = "_"; - red = ((float)hyd[atno] - hydmin)/(hydmax - hydmin); + sequence = new Sequence(id, seq.toString(), 1, seq.length()); + // System.out.println("PDB Sequence is :\nSequence = " + seq); + // System.out.println("No of residues = " + residues.size()); + } - if (red > (float)1.0) { - red = (float)1.0; + public void setChargeColours() { + for (int i = 0; i < bonds.size(); i++) { + try { + Bond b = (Bond) bonds.elementAt(i); + + if (b.at1.resName.toUpperCase().equals("ASP") || + b.at1.resName.toUpperCase().equals("GLU")) { + b.startCol = Color.red; + } else if (b.at1.resName.toUpperCase().equals("LYS") || + b.at1.resName.toUpperCase().equals("ARG")) { + b.startCol = Color.blue; + } else if (b.at1.resName.toUpperCase().equals("CYS")) { + b.startCol = Color.yellow; + } else { + //int atno = ((Integer) ResidueProperties.getAA3Hash().get(b.at1.resName.toUpperCase())).intValue(); + b.startCol = Color.lightGray; + } + + if (b.at2.resName.toUpperCase().equals("ASP") || + b.at2.resName.toUpperCase().equals("GLU")) { + b.endCol = Color.red; + } else if (b.at2.resName.toUpperCase().equals("LYS") || + b.at2.resName.toUpperCase().equals("ARG")) { + b.endCol = Color.blue; + } else if (b.at2.resName.toUpperCase().equals("CYS")) { + b.endCol = Color.yellow; + } else { + //int atno = ((Integer) ResidueProperties.getAA3Hash().get(b.at2.resName.toUpperCase())).intValue(); + b.endCol = Color.lightGray; + } + } catch (Exception e) { + Bond b = (Bond) bonds.elementAt(i); + b.startCol = Color.gray; + b.endCol = Color.gray; + } } - if (red < (float)0.0) { - red = (float)0.0; - } - - b.endCol = new Color(red,(float)0.2,(float)1.0-red); - } catch (Exception e) { - Bond b = (Bond)bonds.elementAt(i); - b.startCol = Color.gray; - b.endCol = Color.gray; - } } - } + public void setHydrophobicityColours() { + float hydmin = (float) ResidueProperties.getHydmin(); + float hydmax = (float) ResidueProperties.getHydmax(); + double[] hyd = ResidueProperties.getHyd(); - public void colourBySequence(jalview.gui.AlignViewport av, Sequence seq) { -jalview.gui.SequenceRenderer sr = new jalview.gui.SequenceRenderer(av); + Hashtable AA3Hash = ResidueProperties.getAA3Hash(); + for (int i = 0; i < bonds.size(); i++) { + try { + Bond b = (Bond) bonds.elementAt(i); - for (int i = 0; i < bonds.size(); i++) { - Bond tmp = (Bond)bonds.elementAt(i); - try { + int atno = ((Integer) AA3Hash.get(b.at1.resName.toUpperCase())).intValue(); + float red = ((float) hyd[atno] - hydmin) / (hydmax - hydmin); - if (tmp.at1.resNumber >= (offset + pdbstart - 1) && tmp.at1.resNumber <= (offset + pdbend - 1)) { + if (red > (float) 1.0) { + red = (float) 1.0; + } - int pos = seqstart + (tmp.at1.resNumber - pdbstart - offset) ; - int index = seq.findIndex(pos); + if (red < (float) 0.0) { + red = (float) 0.0; + } + b.startCol = new Color(red, (float) 0.0, (float) 1.0 - red); + atno = ((Integer) AA3Hash.get(b.at2.resName.toUpperCase())).intValue(); - tmp.startCol = sr.getResidueBoxColour(av.getGlobalColourScheme(), seq, index); + red = ((float) hyd[atno] - hydmin) / (hydmax - hydmin); - } else { - tmp.startCol = Color.gray; - } + if (red > (float) 1.0) { + red = (float) 1.0; + } - if (tmp.at2.resNumber >= (offset + pdbstart -1) && tmp.at2.resNumber <= (pdbend+offset-1)) { + if (red < (float) 0.0) { + red = (float) 0.0; + } + + b.endCol = new Color(red, (float) 0.2, (float) 1.0 - red); + } catch (Exception e) { + Bond b = (Bond) bonds.elementAt(i); + b.startCol = Color.gray; + b.endCol = Color.gray; + } + } + } - int pos = seqstart + (tmp.at2.resNumber - pdbstart-offset); - int index = seq.findIndex(pos); - tmp.endCol = sr.getResidueBoxColour(av.getGlobalColourScheme(), seq, index); - } else { - tmp.endCol = Color.gray; + public void setChainColours(Color col) + { + for (int i = 0; i < bonds.size(); i++) + { + Bond tmp = (Bond) bonds.elementAt(i); + tmp.startCol = col; + tmp.endCol = col; } - } catch (Exception e) { - tmp.startCol = Color.lightGray; - tmp.endCol = Color.lightGray; - } } - } - - public void setChainColours() { - for (int i = 0; i < bonds.size(); i++) { - Bond tmp = (Bond)bonds.elementAt(i); - try { - tmp.startCol = (Color) ResidueProperties.getChainColours().get(id); - tmp.endCol = (Color) ResidueProperties.getChainColours().get(id); - } catch (Exception e) { - tmp.startCol = Color.lightGray; - tmp.endCol = Color.lightGray; - } - } - } } - -