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;
* and remember the highest scoring chain
*/
float max = -10;
- AlignSeq maxAlignseq = null;
- String maxChainId = " ";
- PDBChain maxChain = null;
+ List<AlignSeq> maxAlignSeqs = new ArrayList<AlignSeq>();
+ List<PDBChain> maxChain = new ArrayList<PDBChain>();
boolean first = true;
for (PDBChain chain : pdb.getChains())
{
// 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)
.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
}
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<AlignSeq> 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));
+ }
}
}
}
"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<AlignSeq> 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)
{