import jalview.datamodel.SequenceI;
import jalview.gui.IProgressIndicator;
import jalview.io.AppletFormatAdapter;
+import jalview.io.StructureFile;
import jalview.util.MappingUtils;
import jalview.util.MessageManager;
import jalview.ws.sifts.SiftsClient;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.IdentityHashMap;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.Vector;
import MCview.Atom;
/*
* Set of any registered mappings between (dataset) sequences.
*/
- public Set<AlignedCodonFrame> seqmappings = new LinkedHashSet<AlignedCodonFrame>();
+ private List<AlignedCodonFrame> seqmappings = new ArrayList<AlignedCodonFrame>();
private List<CommandListener> commandListeners = new ArrayList<CommandListener>();
* - how to resolve data from resource
* @return null or the structure data parsed as a pdb file
*/
- synchronized public PDBfile setMapping(SequenceI[] sequence,
+ synchronized public StructureFile setMapping(SequenceI[] sequence,
String[] targetChains, String pdbFile, String protocol)
{
return setMapping(true, sequence, targetChains, pdbFile, protocol);
}
+
/**
* create sequence structure mappings between each sequence and the given
* pdbFile (retrieved via the given protocol).
* - how to resolve data from resource
* @return null or the structure data parsed as a pdb file
*/
- synchronized public PDBfile setMapping(boolean forStructureView,
+ synchronized public StructureFile setMapping(boolean forStructureView,
SequenceI[] sequenceArray, String[] targetChainIds,
String pdbFile,
String protocol)
}
}
}
- PDBfile pdb = null;
+ StructureFile pdb = null;
boolean isMapUsingSIFTs = SiftsSettings.isMapWithSifts();
try
{
- pdb = new PDBfile(addTempFacAnnot, parseSecStr, secStructServices,
- pdbFile, protocol);
- if (pdb.id != null && pdb.id.trim().length() > 0
+ if (pdbFile != null && isCIFFile(pdbFile))
+ {
+ pdb = new jalview.ext.jmol.JmolParser(addTempFacAnnot, parseSecStr,
+ secStructServices, pdbFile, protocol);
+ }
+ else
+ {
+ pdb = new PDBfile(addTempFacAnnot, parseSecStr, secStructServices,
+ pdbFile, protocol);
+ }
+
+ 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 = new ArrayList<StructureMapping>();
}
else
{
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
StructureMapping mapping = getStructureMapping(seq, pdbFile,
chain.id, pdb, chain, sqmpping, maxAlignseq);
return pdb;
}
+ private boolean isCIFFile(String filename)
+ {
+ String fileExt = filename.substring(filename.lastIndexOf(".") + 1,
+ filename.length());
+ return "cif".equalsIgnoreCase(fileExt);
+ }
+
private StructureMapping getStructureMapping(SequenceI seq,
- String pdbFile, String targetChainId, PDBfile pdb,
+ String pdbFile, String targetChainId, StructureFile pdb,
PDBChain maxChain, jalview.datamodel.Mapping sqmpping,
AlignSeq maxAlignseq)
{
{
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)
{
private StructureMapping getNWMappings(SequenceI seq,
String pdbFile,
- String maxChainId, PDBChain maxChain, PDBfile pdb,
+ String maxChainId, PDBChain maxChain, StructureFile pdb,
AlignSeq maxAlignseq)
{
final StringBuilder mappingDetails = new StringBuilder(128);
} 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);
return nwMapping;
}
* the sequence that the mouse over occurred on
* @param indexpos
* the absolute position being mouseovered in seq (0 to seq.length())
- * @param index
+ * @param seqPos
* the sequence position (if -1, seq.findPosition is called to
* resolve the residue number)
*/
- public void mouseOverSequence(SequenceI seq, int indexpos, int index,
+ public void mouseOverSequence(SequenceI seq, int indexpos, int seqPos,
VamsasSource source)
{
boolean hasSequenceListeners = handlingVamsasMo
|| !seqmappings.isEmpty();
SearchResults results = null;
- if (index == -1)
+ if (seqPos == -1)
{
- index = seq.findPosition(indexpos);
+ seqPos = seq.findPosition(indexpos);
}
for (int i = 0; i < listeners.size(); i++)
{
}
if (listener instanceof StructureListener)
{
- highlightStructure((StructureListener) listener, seq, index);
+ highlightStructure((StructureListener) listener, seq, seqPos);
}
else
{
{
if (results == null)
{
- results = MappingUtils.buildSearchResults(seq, index,
+ results = MappingUtils.buildSearchResults(seq, seqPos,
seqmappings);
}
if (handlingVamsasMo)
{
- results.addResult(seq, index, index);
+ results.addResult(seq, seqPos, seqPos);
}
if (!results.isEmpty())
else if (listener instanceof SecondaryStructureListener)
{
((SecondaryStructureListener) listener).mouseOverSequence(seq,
- indexpos, index);
+ indexpos, seqPos);
}
}
}
/**
* Send suitable messages to a StructureListener to highlight atoms
- * corresponding to the given sequence position.
+ * corresponding to the given sequence position(s)
*
* @param sl
* @param seq
- * @param index
+ * @param positions
*/
- protected void highlightStructure(StructureListener sl, SequenceI seq,
- int index)
+ public void highlightStructure(StructureListener sl, SequenceI seq,
+ int... positions)
{
if (!sl.isListeningFor(seq))
{
{
if (sm.sequence == seq || sm.sequence == seq.getDatasetSequence())
{
- atomNo = sm.getAtomNum(index);
-
- if (atomNo > 0)
+ for (int index : positions)
{
- atoms.add(new AtomSpec(sm.pdbfile, sm.pdbchain, sm
- .getPDBResNum(index), atomNo));
+ atomNo = sm.getAtomNum(index);
+
+ if (atomNo > 0)
+ {
+ atoms.add(new AtomSpec(sm.pdbfile, sm.pdbchain, sm
+ .getPDBResNum(index), atomNo));
+ }
}
}
}
/**
* Add each of the given codonFrames to the stored set, if not aready present.
*
- * @param set
+ * @param mappings
*/
- public void registerMappings(Set<AlignedCodonFrame> set)
+ public void registerMappings(List<AlignedCodonFrame> mappings)
{
- if (set != null)
+ if (mappings != null)
{
- for (AlignedCodonFrame acf : set)
+ for (AlignedCodonFrame acf : mappings)
{
registerMapping(acf);
}
progressIndicator.setProgressBar(message, progressSessionId);
}
+ public List<AlignedCodonFrame> getSequenceMappings()
+ {
+ return seqmappings;
+ }
+
}