import jalview.datamodel.PDBEntry;
import jalview.datamodel.SearchResults;
import jalview.datamodel.SequenceI;
+import jalview.gui.IProgressIndicator;
import jalview.io.AppletFormatAdapter;
import jalview.util.MappingUtils;
import jalview.util.MessageManager;
import jalview.ws.sifts.SiftsClient;
import jalview.ws.sifts.SiftsException;
+import jalview.ws.sifts.SiftsSettings;
import java.io.PrintStream;
import java.util.ArrayList;
private boolean addTempFacAnnot = false;
+ private IProgressIndicator progressIndicator;
+
+ private SiftsClient siftsClient = null;
+
+ private long progressSessionId;
+
/*
* Set of any registered mappings between (dataset) sequences.
*/
}
}
PDBfile pdb = null;
- boolean isMapUsingSIFTs = Boolean.valueOf(jalview.bin.Cache.getDefault(
- "MAP_WITH_SIFTS", "false"));
- SiftsClient siftsClient = null;
+ boolean isMapUsingSIFTs = SiftsSettings.isMapWithSifts();
try
{
pdb = new PDBfile(addTempFacAnnot, parseSecStr, secStructServices,
pdbFile, protocol);
- if (pdb.id != null && pdb.id.trim().length() > 0
+ if (pdb.getId() != null && pdb.getId().trim().length() > 0
&& AppletFormatAdapter.FILE.equals(protocol))
{
- registerPDBFile(pdb.id.trim(), pdbFile);
+ registerPDBFile(pdb.getId().trim(), pdbFile);
}
} catch (Exception ex)
{
String maxChainId = " ";
PDBChain maxChain = null;
boolean first = true;
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
if (targetChainId.length() > 0 && !targetChainId.equals(chain.id)
&& !infChain)
if (protocol.equals(jalview.io.AppletFormatAdapter.PASTE))
{
- pdbFile = "INLINE" + pdb.id;
+ pdbFile = "INLINE" + pdb.getId();
}
- ArrayList<StructureMapping> seqToStrucMapping = null;
+ ArrayList<StructureMapping> seqToStrucMapping = new ArrayList<StructureMapping>();
if (isMapUsingSIFTs)
{
- try
+ setProgressBar(null);
+ setProgressBar("Obtaining mapping with SIFTS");
+ jalview.datamodel.Mapping sqmpping = maxAlignseq
+ .getMappingFromS1(false);
+ if (targetChainId != null && !targetChainId.trim().isEmpty())
+ {
+ StructureMapping mapping = getStructureMapping(seq, pdbFile,
+ targetChainId, pdb, maxChain, sqmpping, maxAlignseq);
+ seqToStrucMapping.add(mapping);
+ }
+ else
{
- jalview.datamodel.Mapping sqmpping = maxAlignseq
- .getMappingFromS1(false);
- seqToStrucMapping = new ArrayList<StructureMapping>();
- if (targetChainId != null && !targetChainId.trim().isEmpty())
+ for (PDBChain chain : pdb.getChains())
{
- StructureMapping curChainMapping = siftsClient
- .getSiftsStructureMapping(seq, pdbFile, targetChainId);
- seqToStrucMapping.add(curChainMapping);
- maxChainId = targetChainId;
- PDBChain chain = pdb.findChain(targetChainId);
- if (chain != null)
- {
- chain.transferResidueAnnotation(curChainMapping, sqmpping);
- }
+ StructureMapping mapping = getStructureMapping(seq, pdbFile,
+ chain.id, pdb, chain, sqmpping, maxAlignseq);
+ seqToStrucMapping.add(mapping);
}
- else
- {
- for (PDBChain chain : pdb.chains)
- {
- StructureMapping curChainMapping = siftsClient
- .getSiftsStructureMapping(seq, pdbFile, chain.id);
- seqToStrucMapping.add(curChainMapping);
- maxChainId = chain.id;
- chain.transferResidueAnnotation(curChainMapping, sqmpping);
- }
- }
- } catch (SiftsException e)
- {
- e.printStackTrace();
- System.err
- .println(">>>>>>> SIFTs mapping could not be obtained... Now mapping with NW alignment");
- seqToStrucMapping = getNWMappings(seq, pdbFile, maxChainId,
- maxChain, pdb, maxAlignseq);
}
}
else
{
- seqToStrucMapping = getNWMappings(seq, pdbFile,
- maxChainId, maxChain, pdb,
- maxAlignseq);
+ setProgressBar(null);
+ setProgressBar("Obtaining mapping with NW alignment");
+ seqToStrucMapping.add(getNWMappings(seq, pdbFile, maxChainId,
+ maxChain, pdb, maxAlignseq));
}
if (forStructureView)
{
- // mappings.add(seqToStrucMapping);
mappings.addAll(seqToStrucMapping);
}
}
return pdb;
}
- private ArrayList<StructureMapping> getNWMappings(SequenceI seq,
+ private StructureMapping getStructureMapping(SequenceI seq,
+ String pdbFile, String targetChainId, PDBfile pdb,
+ PDBChain maxChain, jalview.datamodel.Mapping sqmpping,
+ AlignSeq maxAlignseq)
+ {
+ String maxChainId = targetChainId;
+ try
+ {
+ StructureMapping curChainMapping = siftsClient
+ .getSiftsStructureMapping(seq, pdbFile, targetChainId);
+ try
+ {
+ PDBChain chain = pdb.findChain(targetChainId);
+ if (chain != null)
+ {
+ chain.transferResidueAnnotation(curChainMapping, sqmpping);
+ }
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return curChainMapping;
+ } catch (SiftsException e)
+ {
+ System.err.println(e.getMessage());
+ System.err.println(">>> Now switching mapping with NW alignment...");
+ setProgressBar(null);
+ setProgressBar(">>> Now switching mapping with NW alignment...");
+ return getNWMappings(seq, pdbFile, maxChainId, maxChain, pdb,
+ maxAlignseq);
+ }
+ }
+
+ private StructureMapping getNWMappings(SequenceI seq,
String pdbFile,
String maxChainId, PDBChain maxChain, PDBfile pdb,
AlignSeq maxAlignseq)
HashMap<Integer, int[]> mapping = new HashMap<Integer, int[]>();
int resNum = -10000;
int index = 0;
+ char insCode = ' ';
do
{
Atom tmp = maxChain.atoms.elementAt(index);
- if (resNum != tmp.resNumber && tmp.alignmentMapping != -1)
+ if ((resNum != tmp.resNumber || insCode != tmp.insCode)
+ && tmp.alignmentMapping != -1)
{
resNum = tmp.resNumber;
+ insCode = tmp.insCode;
if (tmp.alignmentMapping >= -1)
{
- // TODO (JAL-1836) address root cause: negative residue no in PDB
- // file
mapping.put(tmp.alignmentMapping + 1, new int[] { tmp.resNumber,
tmp.atomIndex });
}
} while (index < maxChain.atoms.size());
StructureMapping nwMapping = new StructureMapping(seq, pdbFile,
- pdb.id, maxChainId, mapping, mappingDetails.toString());
+ pdb.getId(), maxChainId, mapping, mappingDetails.toString());
maxChain.transferResidueAnnotation(nwMapping, sqmpping);
- ArrayList<StructureMapping> mappings = new ArrayList<StructureMapping>();
- mappings.add(nwMapping);
- return mappings;
+ return nwMapping;
}
public void removeStructureViewerListener(Object svl, String[] pdbfiles)
}
return null;
}
+
+ public IProgressIndicator getProgressIndicator()
+ {
+ return progressIndicator;
+ }
+
+ public void setProgressIndicator(IProgressIndicator progressIndicator)
+ {
+ this.progressIndicator = progressIndicator;
+ }
+
+ public long getProgressSessionId()
+ {
+ return progressSessionId;
+ }
+
+ public void setProgressSessionId(long progressSessionId)
+ {
+ this.progressSessionId = progressSessionId;
+ }
+
+ public void setProgressBar(String message)
+ {
+ progressIndicator.setProgressBar(message, progressSessionId);
+ }
+
}