import jalview.datamodel.PDBEntry;
import jalview.datamodel.SearchResults;
import jalview.datamodel.SequenceI;
+import jalview.gui.IProgressIndicator;
import jalview.io.AppletFormatAdapter;
-import jalview.io.SiftsClient;
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 long progressSessionId;
+
/*
* Set of any registered mappings between (dataset) sequences.
*/
* @param forStructureView
* when true, record the mapping for use in mouseOvers
*
- * @param sequence
+ * @param sequenceArray
* - one or more sequences to be mapped to pdbFile
- * @param targetChains
+ * @param targetChainIds
* - optional chain specification for mapping each sequence to pdb
* (may be nill, individual elements may be nill)
* @param pdbFile
* @return null or the structure data parsed as a pdb file
*/
synchronized public PDBfile setMapping(boolean forStructureView,
- SequenceI[] sequence, String[] targetChains, String pdbFile,
+ SequenceI[] sequenceArray, String[] targetChainIds,
+ String pdbFile,
String protocol)
{
/*
boolean parseSecStr = processSecondaryStructure;
if (isPDBFileRegistered(pdbFile))
{
- for (SequenceI sq : sequence)
+ for (SequenceI sq : sequenceArray)
{
SequenceI ds = sq;
while (ds.getDatasetSequence() != null)
}
}
PDBfile pdb = null;
+ boolean isMapUsingSIFTs = SiftsSettings.isMapWithSifts();
+ SiftsClient siftsClient = null;
try
{
pdb = new PDBfile(addTempFacAnnot, parseSecStr, secStructServices,
pdbFile, protocol);
+
if (pdb.id != null && pdb.id.trim().length() > 0
&& AppletFormatAdapter.FILE.equals(protocol))
{
return null;
}
- String targetChain;
- for (int s = 0; s < sequence.length; s++)
+ try
+ {
+ if (isMapUsingSIFTs)
+ {
+ siftsClient = new SiftsClient(pdb);
+ }
+ } catch (SiftsException e)
+ {
+ isMapUsingSIFTs = false;
+ e.printStackTrace();
+ }
+
+ String targetChainId;
+ for (int s = 0; s < sequenceArray.length; s++)
{
boolean infChain = true;
- final SequenceI seq = sequence[s];
- if (targetChains != null && targetChains[s] != null)
+ final SequenceI seq = sequenceArray[s];
+ if (targetChainIds != null && targetChainIds[s] != null)
{
infChain = false;
- targetChain = targetChains[s];
+ targetChainId = targetChainIds[s];
}
else if (seq.getName().indexOf("|") > -1)
{
- targetChain = seq.getName().substring(
+ targetChainId = seq.getName().substring(
seq.getName().lastIndexOf("|") + 1);
- if (targetChain.length() > 1)
+ if (targetChainId.length() > 1)
{
- if (targetChain.trim().length() == 0)
+ if (targetChainId.trim().length() == 0)
{
- targetChain = " ";
+ targetChainId = " ";
}
else
{
// not a valid chain identifier
- targetChain = "";
+ targetChainId = "";
}
}
}
else
{
- targetChain = "";
+ targetChainId = "";
}
/*
boolean first = true;
for (PDBChain chain : pdb.chains)
{
- if (targetChain.length() > 0 && !targetChain.equals(chain.id)
+ if (targetChainId.length() > 0 && !targetChainId.equals(chain.id)
&& !infChain)
{
continue; // don't try to map chains don't match.
// as.traceAlignment();
if (first || as.maxscore > max
- || (as.maxscore == max && chain.id.equals(targetChain)))
+ || (as.maxscore == max && chain.id.equals(targetChainId)))
{
first = false;
maxChain = chain;
pdbFile = "INLINE" + pdb.id;
}
- StructureMapping seqToStrucMapping = null;
- boolean isMapViaSIFTs = Boolean.valueOf(jalview.bin.Cache.getDefault(
- "MAP_WITH_SIFTS", "false"));
- if (isMapViaSIFTs)
+ ArrayList<StructureMapping> seqToStrucMapping = null;
+ if (isMapUsingSIFTs)
{
- SiftsClient siftsClient = new SiftsClient(pdb.id);
- seqToStrucMapping = siftsClient.getSiftsStructureMapping(seq,
- pdbFile, maxChainId);
- // TODO if SIFTs mapping fails.. then fallback to NW alignment
+ setProgressBar(null);
+ setProgressBar("Obtaining mapping with SIFTS");
+ try
+ {
+ jalview.datamodel.Mapping sqmpping = maxAlignseq
+ .getMappingFromS1(false);
+ seqToStrucMapping = new ArrayList<StructureMapping>();
+ if (targetChainId != null && !targetChainId.trim().isEmpty())
+ {
+ StructureMapping curChainMapping = siftsClient
+ .getSiftsStructureMapping(seq, pdbFile, targetChainId);
+ seqToStrucMapping.add(curChainMapping);
+ maxChainId = targetChainId;
+ PDBChain chain = pdb.findChain(targetChainId);
+ if (chain != null)
+ {
+ chain.transferResidueAnnotation(curChainMapping, sqmpping);
+ }
+ }
+ 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");
+ setProgressBar(null);
+ setProgressBar("SIFTs mapping could not be obtained... Now mapping with NW alignment");
+ seqToStrucMapping = getNWMappings(seq, pdbFile, maxChainId,
+ maxChain, pdb, maxAlignseq);
+ }
}
else
{
+ setProgressBar(null);
+ setProgressBar("Obtaining mapping with NW alignment");
seqToStrucMapping = getNWMappings(seq, pdbFile,
maxChainId, maxChain, pdb,
maxAlignseq);
if (forStructureView)
{
- mappings.add(seqToStrucMapping);
+ // mappings.add(seqToStrucMapping);
+ mappings.addAll(seqToStrucMapping);
}
}
return pdb;
}
- private StructureMapping getNWMappings(SequenceI seq, String pdbFile,
+ private ArrayList<StructureMapping> getNWMappings(SequenceI seq,
+ String pdbFile,
String maxChainId, PDBChain maxChain, PDBfile pdb,
AlignSeq maxAlignseq)
{
final StringBuilder mappingDetails = new StringBuilder(128);
+ mappingDetails.append(NEWLINE).append(
+ "Sequence \u27f7 Structure mapping details");
+ mappingDetails.append(NEWLINE);
+ mappingDetails
+ .append("Method: inferred with Needleman & Wunsch alignment");
+ 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
};
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 ");
+ mappingDetails.append(
+ String.valueOf(maxAlignseq.seq1start + (seq.getStart() - 1)))
+ .append(" ");
+ mappingDetails.append(String.valueOf(maxAlignseq.seq1end
+ + (seq.getStart() - 1)));
+ mappingDetails.append(NEWLINE);
maxChain.makeExactMapping(maxAlignseq, seq);
jalview.datamodel.Mapping sqmpping = maxAlignseq
.getMappingFromS1(false);
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];
+ HashMap<Integer, int[]> mapping = new HashMap<Integer, int[]>();
int resNum = -10000;
int index = 0;
{
// 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;
+ mapping.put(tmp.alignmentMapping + 1, new int[] { tmp.resNumber,
+ tmp.atomIndex });
}
}
StructureMapping nwMapping = new StructureMapping(seq, pdbFile,
pdb.id, maxChainId, mapping, mappingDetails.toString());
maxChain.transferResidueAnnotation(nwMapping, sqmpping);
- return nwMapping;
+ ArrayList<StructureMapping> mappings = new ArrayList<StructureMapping>();
+ mappings.add(nwMapping);
+ return mappings;
}
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);
+ }
+
}