X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fstructure%2FStructureSelectionManager.java;h=0b3696c975f502a27b8a36b68f6d29bc23cf77a7;hb=08cc3b53619f49a365d7346c3cc8d7a5ddd1b455;hp=e9d736f1dafd1cb17f769af265fa2783a4540776;hpb=19bbc80d7f0f26dfe749850b7f5acf31b98bd840;p=jalview.git diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index e9d736f..0b3696c 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -458,117 +458,61 @@ public class StructureSelectionManager { continue; } - final StringBuilder mappingDetails = new StringBuilder(128); - mappingDetails.append(NEWLINE).append("PDB Sequence is :") - .append(NEWLINE).append("Sequence = ") - .append(maxChain.sequence.getSequenceAsString()); - mappingDetails.append(NEWLINE).append("No of residues = ") - .append(maxChain.residues.size()).append(NEWLINE) - .append(NEWLINE); - PrintStream ps = new PrintStream(System.out) - { - @Override - public void print(String x) - { - mappingDetails.append(x); - } - - @Override - public void println() - { - mappingDetails.append(NEWLINE); - } - }; - - // mapWithNWAlignment(); - // mapWithSIFTS(); - maxAlignseq.printAlignment(ps); - - mappingDetails.append(NEWLINE).append("PDB start/end "); - mappingDetails.append(String.valueOf(maxAlignseq.seq2start)).append( - " "); - mappingDetails.append(String.valueOf(maxAlignseq.seq2end)); - mappingDetails.append(NEWLINE).append("SEQ start/end "); - // TODO JAL-1887 should be fixed from here - mappingDetails.append( - String.valueOf(maxAlignseq.seq1start + seq.getStart() - 1)) - .append(" "); - mappingDetails.append(String.valueOf(maxAlignseq.seq1end - + seq.getEnd() - 1)); - - maxChain.makeExactMapping(maxAlignseq, seq); - jalview.datamodel.Mapping sqmpping = maxAlignseq - .getMappingFromS1(false); - jalview.datamodel.Mapping omap = new jalview.datamodel.Mapping( - sqmpping.getMap().getInverse()); - maxChain.transferRESNUMFeatures(seq, null); - - // allocate enough slots to store the mapping from positions in - // sequence[s] to the associated chain - int[][] mapping = new int[seq.findPosition(seq.getLength()) + 2][2]; - int resNum = -10000; - int index = 0; - - do - { - Atom tmp = maxChain.atoms.elementAt(index); - if (resNum != tmp.resNumber && tmp.alignmentMapping != -1) - { - resNum = tmp.resNumber; - if (tmp.alignmentMapping >= -1) - { - // TODO (JAL-1836) address root cause: negative residue no in PDB - // file - mapping[tmp.alignmentMapping + 1][0] = tmp.resNumber; - mapping[tmp.alignmentMapping + 1][1] = tmp.atomIndex; - } - } - - index++; - } while (index < maxChain.atoms.size()); if (protocol.equals(jalview.io.AppletFormatAdapter.PASTE)) { pdbFile = "INLINE" + pdb.id; } - // StructureMapping newMapping = new StructureMapping(seq, pdbFile, - // pdb.id, maxChainId, mapping, mappingDetails.toString()); - StructureMapping newMapping = new SiftsClient(pdb.id) - .getSiftsMappingsFor(seq, pdbFile, maxChainId); + + StructureMapping seqToStrucMapping = null; + boolean isMapViaSIFTs = Boolean.valueOf(jalview.bin.Cache.getDefault( + "MAP_WITH_SIFTS", "false")); + if (isMapViaSIFTs) + { + SiftsClient siftsClient = new SiftsClient(pdb.id); + seqToStrucMapping = siftsClient.getSiftsStructureMapping(seq, + pdbFile, maxChainId); + // TODO if SIFTs mapping fails.. then fallback to NW alignment + } + else + { + seqToStrucMapping = getNWMappings(seq, pdbFile, + maxChainId, maxChain, pdb, + maxAlignseq); + } + if (forStructureView) { - mappings.add(newMapping); + mappings.add(seqToStrucMapping); } - maxChain.transferResidueAnnotation(newMapping, sqmpping); } - // /////// - return pdb; } - private StructureMapping mapWithNWAlignment(StringBuilder mappingDetails, - PDBChain maxChain, AlignSeq maxAlignseq, SequenceI seq, - PrintStream ps) + private StructureMapping getNWMappings(SequenceI seq, String pdbFile, + String maxChainId, PDBChain maxChain, PDBfile pdb, + AlignSeq maxAlignseq) { - maxAlignseq.printAlignment(ps); + final StringBuilder mappingDetails = new StringBuilder(128); + PrintStream ps = new PrintStream(System.out) + { + @Override + public void print(String x) + { + mappingDetails.append(x); + } - mappingDetails.append(NEWLINE).append("PDB start/end "); - mappingDetails.append(String.valueOf(maxAlignseq.seq2start)) - .append(" "); - mappingDetails.append(String.valueOf(maxAlignseq.seq2end)); - mappingDetails.append(NEWLINE).append("SEQ start/end "); - // TODO JAL-1887 should be fixed from here - mappingDetails.append( - String.valueOf(maxAlignseq.seq1start + seq.getStart() - 1)) - .append(" "); - mappingDetails.append(String.valueOf(maxAlignseq.seq1end + seq.getEnd() - - 1)); + @Override + public void println() + { + mappingDetails.append(NEWLINE); + } + }; + maxAlignseq.printAlignment(ps); maxChain.makeExactMapping(maxAlignseq, seq); jalview.datamodel.Mapping sqmpping = maxAlignseq .getMappingFromS1(false); - jalview.datamodel.Mapping omap = new jalview.datamodel.Mapping(sqmpping - .getMap().getInverse()); maxChain.transferRESNUMFeatures(seq, null); // allocate enough slots to store the mapping from positions in @@ -595,7 +539,10 @@ public class StructureSelectionManager index++; } while (index < maxChain.atoms.size()); - return null; + StructureMapping nwMapping = new StructureMapping(seq, pdbFile, + pdb.id, maxChainId, mapping, mappingDetails.toString()); + maxChain.transferResidueAnnotation(nwMapping, sqmpping); + return nwMapping; } public void removeStructureViewerListener(Object svl, String[] pdbfiles)