X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureSelectionManager.java;h=936f13916d3680f77617e23b9ce8bde3b31620ef;hb=842559f239380e94327db76808eef6c4b28fdd89;hp=47973d0c3c92e3589a92f4f4ace86c21df2cdbad;hpb=2de8acfae59aced665e4c37ad0f7dcc2ed68818e;p=jalview.git diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 47973d0..936f139 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -1,20 +1,19 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) - * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Copyright (C) 2010 J Procter, AM Waterhouse, 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 file is part of Jalview. * - * 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. + * Jalview 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 3 of the License, or (at your option) any later version. * - * 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 + * Jalview 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 Jalview. If not, see . */ package jalview.structure; @@ -97,13 +96,22 @@ public class StructureSelectionManager return null; } - /* - * There will be better ways of doing this in the future, for now we'll use - * the tried and tested MCview pdb mapping + /** + * create sequence structure mappings between each sequence and the given pdbFile (retrieved via the given protocol). + * + * @param sequence - one or more sequences to be mapped to pdbFile + * @param targetChains - optional chain specification for mapping each sequence to pdb (may be nill, individual elements may be nill) + * @param pdbFile - structure data resource + * @param protocol - how to resolve data from resource + * @return null or the structure data parsed as a pdb file */ synchronized public MCview.PDBfile setMapping(SequenceI[] sequence, String[] targetChains, String pdbFile, String protocol) { + /* + * There will be better ways of doing this in the future, for now we'll use + * the tried and tested MCview pdb mapping + */ MCview.PDBfile pdb = null; try { @@ -131,25 +139,38 @@ public class StructureSelectionManager AlignSeq maxAlignseq = null; String maxChainId = " "; PDBChain maxChain = null; - + boolean first=true; for (int i = 0; i < pdb.chains.size(); i++) { + // TODO: re http://issues.jalview.org/browse/JAL-583 : this patch may need to be revoked + PDBChain chain = ((PDBChain) pdb.chains.elementAt(i)); + if (targetChain.length()>0 && !targetChain.equals(chain.id)) + { + continue; // don't try to map chains don't match. + } + // end of patch for limiting computed mappings + // TODO: correctly determine sequence type for mixed na/peptide + // structures AlignSeq as = new AlignSeq(sequence[s], ((PDBChain) pdb.chains - .elementAt(i)).sequence, AlignSeq.PEP); + .elementAt(i)).sequence, ((PDBChain) pdb.chains + .elementAt(i)).isNa ? AlignSeq.DNA : AlignSeq.PEP); as.calcScoreMatrix(); as.traceAlignment(); - PDBChain chain = ((PDBChain) pdb.chains.elementAt(i)); - if (as.maxscore > max + if (first || as.maxscore > max || (as.maxscore == max && chain.id.equals(targetChain))) { + first=false; maxChain = chain; max = as.maxscore; maxAlignseq = as; maxChainId = chain.id; } } - + if (maxChain==null) + { + continue; + } final StringBuffer mappingDetails = new StringBuffer(); mappingDetails.append("\n\nPDB Sequence is :\nSequence = " + maxChain.sequence.getSequenceAsString()); @@ -221,32 +242,42 @@ public class StructureSelectionManager return pdb; } - public void removeStructureViewerListener(Object svl, String pdbfile) + public void removeStructureViewerListener(Object svl, String[] pdbfiles) { listeners.removeElement(svl); - + if (pdbfiles==null) + { + return; + } boolean removeMapping = true; - + String[] handlepdbs; + Vector pdbs = new Vector(); + for (int i = 0; i < pdbfiles.length; pdbs.addElement(pdbfiles[i++])) + ; StructureListener sl; for (int i = 0; i < listeners.size(); i++) { if (listeners.elementAt(i) instanceof StructureListener) { sl = (StructureListener) listeners.elementAt(i); - if (sl.getPdbFile().equals(pdbfile)) + handlepdbs = sl.getPdbFile(); + for (int j = 0; j < handlepdbs.length; j++) { - removeMapping = false; - break; + if (pdbs.contains(handlepdbs[j])) + { + pdbs.removeElement(handlepdbs[j]); + } } + } } - - if (removeMapping && mappings != null) + + if (pdbs.size()>0 && mappings != null) { Vector tmp = new Vector(); for (int i = 0; i < mappings.length; i++) { - if (!mappings[i].pdbfile.equals(pdbfile)) + if (!pdbs.contains(mappings[i].pdbfile)) { tmp.addElement(mappings[i]); } @@ -310,13 +341,12 @@ public class StructureSelectionManager * highlight regions associated with a position (indexpos) in seq * * @param seq - * the sequeence that the mouse over occured on + * the sequeence that the mouse over occured on * @param indexpos - * the absolute position being mouseovered in seq (0 to - * seq.length()) + * the absolute position being mouseovered in seq (0 to seq.length()) * @param index - * the sequence position (if -1, seq.findPosition is called to - * resolve the residue number) + * the sequence position (if -1, seq.findPosition is called to + * resolve the residue number) */ public void mouseOverSequence(SequenceI seq, int indexpos, int index) { @@ -331,7 +361,10 @@ public class StructureSelectionManager if (listeners.elementAt(i) instanceof StructureListener) { sl = (StructureListener) listeners.elementAt(i); - + if (mappings==null) + { + continue; + } for (int j = 0; j < mappings.length; j++) { if (mappings[j].sequence == seq @@ -418,7 +451,7 @@ public class StructureSelectionManager * * @param sequenceI * @param position - * in an alignment sequence + * in an alignment sequence */ public void mouseOverVamsasSequence(SequenceI sequenceI, int position) { @@ -447,9 +480,10 @@ public class StructureSelectionManager * * for (int j = 0; j < mappings.length; j++) { * - * if (mappings[j].sequence == seq && mappings[j].getPdbId().equals(pdbid) && - * mappings[j].pdbfile.equals(sl.getPdbFile())) { System.out.println(pdbid+" - * "+mappings[j].getPdbId() +" "+mappings[j].pdbfile); + * if (mappings[j].sequence == seq && mappings[j].getPdbId().equals(pdbid) + * && mappings[j].pdbfile.equals(sl.getPdbFile())) { + * System.out.println(pdbid+" "+mappings[j].getPdbId() +" + * "+mappings[j].pdbfile); * * java.awt.Color col; for(int index=0; index0) + if (sel_listeners != null && sel_listeners.size() > 0) { Enumeration listeners = sel_listeners.elements(); while (listeners.hasMoreElements()) { - SelectionListener slis = ((SelectionListener) listeners.nextElement()); - if (slis!=source) { - slis.selection(selection, colsel, source); - }; + SelectionListener slis = ((SelectionListener) listeners + .nextElement()); + if (slis != source) + { + slis.selection(selection, colsel, source); + } + ; } } }