From: Jim Procter Date: Fri, 10 May 2024 15:55:17 +0000 (+0100) Subject: JAL-4410 quick patch to explore multichain mapping X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=a113a13e2f1b3c0b5ddb96bbb8594e7f80ec6a57;p=jalview.git JAL-4410 quick patch to explore multichain mapping --- diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 9a9e2a2..a8ee9fe 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -27,6 +27,7 @@ import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.IdentityHashMap; +import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; @@ -556,9 +557,8 @@ public class StructureSelectionManager * and remember the highest scoring chain */ float max = -10; - AlignSeq maxAlignseq = null; - String maxChainId = " "; - PDBChain maxChain = null; + List maxAlignSeqs = new ArrayList(); + List maxChain = new ArrayList(); boolean first = true; for (PDBChain chain : pdb.getChains()) { @@ -577,19 +577,27 @@ public class StructureSelectionManager // as.calcScoreMatrix(); // as.traceAlignment(); - if (first || as.maxscore > max - || (as.maxscore == max && chain.id.equals(targetChainId))) + if (first || (targetChainId != null + && chain.id.equals(targetChainId))) { first = false; - maxChain = chain; + maxChain.add(chain); max = as.maxscore; - maxAlignseq = as; - maxChainId = chain.id; + maxAlignSeqs.add(as); + if (targetChainId != null && chain.id.equals(targetChainId)) + { + continue; + } + } + else + { + if (as.maxscore >= max) + { + maxChain.add(chain); + max = as.maxscore; + maxAlignSeqs.add(as); + } } - } - if (maxChain == null) - { - continue; } if (sourceType == DataSourceType.PASTE) @@ -607,36 +615,39 @@ public class StructureSelectionManager .getString("status.obtaining_mapping_with_sifts"), progressSessionId); } + AlignSeq maxAlignseq = maxAlignSeqs.get(0); + jalview.datamodel.Mapping sqmpping = maxAlignseq .getMappingFromS1(false); if (targetChainId != null && !targetChainId.trim().isEmpty()) { + PDBChain mchain = maxChain.get(0); StructureMapping siftsMapping; try { siftsMapping = getStructureMapping(seq, pdbFile, targetChainId, - pdb, maxChain, sqmpping, maxAlignseq, siftsClient); + pdb, mchain, sqmpping, maxAlignseq, siftsClient); seqToStrucMapping.add(siftsMapping); - maxChain.makeExactMapping(siftsMapping, seq); - maxChain.transferRESNUMFeatures(seq, "IEA: SIFTS", + mchain.makeExactMapping(siftsMapping, seq); + mchain.transferRESNUMFeatures(seq, "IEA: SIFTS", pdb.getId().toLowerCase(Locale.ROOT)); - maxChain.transferResidueAnnotation(siftsMapping, null); - ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0)); + mchain.transferResidueAnnotation(siftsMapping, null); + ds.addPDBId(mchain.sequence.getAllPDBEntries().get(0)); } catch (SiftsException e) { // fall back to NW alignment Console.error(e.getMessage()); StructureMapping nwMapping = getNWMappings(seq, pdbFile, - targetChainId, maxChain, pdb, maxAlignseq); + targetChainId, mchain, pdb, maxAlignseq); seqToStrucMapping.add(nwMapping); - maxChain.makeExactMapping(maxAlignseq, seq); - maxChain.transferRESNUMFeatures(seq, "IEA:Jalview", + mchain.makeExactMapping(maxAlignseq, seq); + mchain.transferRESNUMFeatures(seq, "IEA:Jalview", pdb.getId().toLowerCase(Locale.ROOT)); // FIXME: is // this // "IEA:Jalview" ? - maxChain.transferResidueAnnotation(nwMapping, sqmpping); - ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0)); + mchain.transferResidueAnnotation(nwMapping, sqmpping); + ds.addPDBId(mchain.sequence.getAllPDBEntries().get(0)); } } else @@ -672,14 +683,19 @@ public class StructureSelectionManager } else { - StructureMapping nwMapping = getNWMappings(seq, pdbFile, - maxChainId, maxChain, pdb, maxAlignseq); - seqToStrucMapping.add(nwMapping); - maxChain.transferRESNUMFeatures(seq, null, - pdb.getId().toLowerCase(Locale.ROOT)); // FIXME: is this - // "IEA:Jalview" ? - maxChain.transferResidueAnnotation(nwMapping, sqmpping); - ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0)); + Iterator as = maxAlignSeqs.iterator(); + for (PDBChain mchain : maxChain) + { + String maxChainId = mchain.id; + StructureMapping nwMapping = getNWMappings(seq, pdbFile, + maxChainId, mchain, pdb, as.next()); + seqToStrucMapping.add(nwMapping); + mchain.transferRESNUMFeatures(seq, null, + pdb.getId().toLowerCase(Locale.ROOT)); // FIXME: is this + // "IEA:Jalview" ? + mchain.transferResidueAnnotation(nwMapping, sqmpping); + ds.addPDBId(mchain.sequence.getAllPDBEntries().get(0)); + } } } } @@ -692,10 +708,15 @@ public class StructureSelectionManager "status.obtaining_mapping_with_nw_alignment"), progressSessionId); } - StructureMapping nwMapping = getNWMappings(seq, pdbFile, maxChainId, - maxChain, pdb, maxAlignseq); - seqToStrucMapping.add(nwMapping); - ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0)); + Iterator as = maxAlignSeqs.iterator(); + for (PDBChain mchain : maxChain) + { + String maxChainId = mchain.id; + StructureMapping nwMapping = getNWMappings(seq, pdbFile, + maxChainId, mchain, pdb, as.next()); + seqToStrucMapping.add(nwMapping); + ds.addPDBId(mchain.sequence.getAllPDBEntries().get(0)); + } } if (forStructureView) {