X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureSelectionManager.java;h=c27289c468bdc1a396b6b78e9cd92cf410c38b3d;hb=3f12f4932226512316ec113e600695150431fd0a;hp=4dff04dff9c90000176f7ce51f7804f27e165c8e;hpb=4316d20b437d529be1d9ddafc0118fadd1b6a4ce;p=jalview.git diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 4dff04d..c27289c 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -385,7 +385,11 @@ public class StructureSelectionManager try { - if (pdbFile != null && isCIFFile(pdbFile)) + boolean isParseWithJMOL = StructureImportSettings + .getDefaultPDBFileParser().equalsIgnoreCase( + StructureImportSettings.StructureParser.JMOL_PARSER + .toString()); + if (isParseWithJMOL || (pdbFile != null && isCIFFile(pdbFile))) { pdb = new jalview.ext.jmol.JmolParser(addTempFacAnnot, parseSecStr, secStructServices, pdbFile, protocol); @@ -424,6 +428,12 @@ public class StructureSelectionManager { boolean infChain = true; final SequenceI seq = sequenceArray[s]; + SequenceI ds = seq; + while (ds.getDatasetSequence() != null) + { + ds = ds.getDatasetSequence(); + } + if (targetChainIds != null && targetChainIds[s] != null) { infChain = false; @@ -498,58 +508,89 @@ public class StructureSelectionManager } ArrayList seqToStrucMapping = new ArrayList(); - if (isMapUsingSIFTs) + if (isMapUsingSIFTs && seq.isProtein()) { setProgressBar(null); - setProgressBar("Obtaining mapping with SIFTS"); + setProgressBar(MessageManager + .getString("status.obtaining_mapping_with_sifts")); jalview.datamodel.Mapping sqmpping = maxAlignseq .getMappingFromS1(false); if (targetChainId != null && !targetChainId.trim().isEmpty()) { - StructureMapping mapping; + StructureMapping siftsMapping; try { - mapping = getStructureMapping(seq, pdbFile, targetChainId, pdb, - maxChain, sqmpping, maxAlignseq); - seqToStrucMapping.add(mapping); + siftsMapping = getStructureMapping(seq, pdbFile, targetChainId, + pdb, maxChain, sqmpping, maxAlignseq); + seqToStrucMapping.add(siftsMapping); + maxChain.makeExactMapping(maxAlignseq, seq); + maxChain.transferRESNUMFeatures(seq, null);// FIXME: is this + // "IEA:SIFTS" ? + maxChain.transferResidueAnnotation(siftsMapping, sqmpping); + ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0)); + } catch (SiftsException e) { - // e.printStackTrace(); // fall back to NW alignment System.err.println(e.getMessage()); - seqToStrucMapping.add(getNWMappings(seq, pdbFile, - targetChainId, - maxChain, pdb, maxAlignseq)); + StructureMapping nwMapping = getNWMappings(seq, pdbFile, + targetChainId, maxChain, pdb, maxAlignseq); + seqToStrucMapping.add(nwMapping); + maxChain.makeExactMapping(maxAlignseq, seq); + maxChain.transferRESNUMFeatures(seq, null); // FIXME: is this + // "IEA:Jalview" ? + maxChain.transferResidueAnnotation(nwMapping, sqmpping); + ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0)); } } else { - try + ArrayList foundSiftsMappings = new ArrayList(); + for (PDBChain chain : pdb.getChains()) { - ArrayList tempMapping = new ArrayList(); - for (PDBChain chain : pdb.getChains()) + try { - StructureMapping mapping = getStructureMapping(seq, pdbFile, + StructureMapping siftsMapping = getStructureMapping(seq, + pdbFile, chain.id, pdb, chain, sqmpping, maxAlignseq); - tempMapping.add(mapping); + foundSiftsMappings.add(siftsMapping); + } catch (SiftsException e) + { + System.err.println(e.getMessage()); } - seqToStrucMapping.addAll(tempMapping); - } catch (SiftsException e) + } + if (!foundSiftsMappings.isEmpty()) { - // e.printStackTrace(); - // fall back to NW alignment - System.err.println(e.getMessage()); - seqToStrucMapping.add(getNWMappings(seq, pdbFile, maxChainId, - maxChain, pdb, maxAlignseq)); + seqToStrucMapping.addAll(foundSiftsMappings); + maxChain.makeExactMapping(maxAlignseq, seq); + maxChain.transferRESNUMFeatures(seq, null);// FIXME: is this + // "IEA:SIFTS" ? + maxChain.transferResidueAnnotation(foundSiftsMappings.get(0), + sqmpping); + ds.addPDBId(sqmpping.getTo().getAllPDBEntries().get(0)); + } + else + { + StructureMapping nwMapping = getNWMappings(seq, pdbFile, + maxChainId, maxChain, pdb, maxAlignseq); + seqToStrucMapping.add(nwMapping); + maxChain.transferRESNUMFeatures(seq, null); // FIXME: is this + // "IEA:Jalview" ? + maxChain.transferResidueAnnotation(nwMapping, sqmpping); + ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0)); } } } else { setProgressBar(null); - setProgressBar("Obtaining mapping with NW alignment"); - seqToStrucMapping.add(getNWMappings(seq, pdbFile, maxChainId, - maxChain, pdb, maxAlignseq)); + setProgressBar(MessageManager + .getString("status.obtaining_mapping_with_nw_alignment")); + StructureMapping nwMapping = getNWMappings(seq, pdbFile, + maxChainId, maxChain, pdb, maxAlignseq); + seqToStrucMapping.add(nwMapping); + ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0)); + } if (forStructureView) @@ -567,6 +608,20 @@ public class StructureSelectionManager return "cif".equalsIgnoreCase(fileExt); } + /** + * retrieve a mapping for seq from SIFTs using associated DBRefEntry for + * uniprot or PDB + * + * @param seq + * @param pdbFile + * @param targetChainId + * @param pdb + * @param maxChain + * @param sqmpping + * @param maxAlignseq + * @return + * @throws SiftsException + */ private StructureMapping getStructureMapping(SequenceI seq, String pdbFile, String targetChainId, StructureFile pdb, PDBChain maxChain, jalview.datamodel.Mapping sqmpping,