+ /**
+ * @return The index (zero-based) on this sequence in the MSA. It returns
+ * {@code -1} if this information is not available.
+ */
+ @Override
+ public int getIndex()
+ {
+ return index;
+ }
+
+ /**
+ * Defines the position of this sequence in the MSA. Use the value {@code -1}
+ * if this information is undefined.
+ *
+ * @param The
+ * position for this sequence. This value is zero-based (zero for
+ * this first sequence)
+ */
+ @Override
+ public void setIndex(int value)
+ {
+ index = value;
+ }
+
+ @Override
+ public void setRNA(RNA r)
+ {
+ rna = r;
+ }
+
+ @Override
+ public RNA getRNA()
+ {
+ return rna;
+ }
+
+ @Override
+ public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+ String label)
+ {
+ List<AlignmentAnnotation> result = new ArrayList<>();
+ if (this.annotation != null)
+ {
+ for (AlignmentAnnotation ann : annotation)
+ {
+ if (ann.calcId != null && ann.calcId.equals(calcId)
+ && ann.label != null && ann.label.equals(label))
+ {
+ result.add(ann);
+ }
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getDisplayId(false);
+ }
+
+ @Override
+ public PDBEntry getPDBEntry(String pdbIdStr)
+ {
+ if (getDatasetSequence() != null)
+ {
+ return getDatasetSequence().getPDBEntry(pdbIdStr);
+ }
+ if (pdbIds == null)
+ {
+ return null;
+ }
+ List<PDBEntry> entries = getAllPDBEntries();
+ for (PDBEntry entry : entries)
+ {
+ if (entry.getId().equalsIgnoreCase(pdbIdStr))
+ {
+ return entry;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List<DBRefEntry> getPrimaryDBRefs()
+ {
+ if (datasetSequence != null)
+ {
+ return datasetSequence.getPrimaryDBRefs();
+ }
+ if (dbrefs == null || dbrefs.length == 0)
+ {
+ return Collections.emptyList();
+ }
+ synchronized (dbrefs)
+ {
+ List<DBRefEntry> primaries = new ArrayList<>();
+ DBRefEntry[] tmp = new DBRefEntry[1];
+ for (DBRefEntry ref : dbrefs)
+ {
+ if (!ref.isPrimaryCandidate())
+ {
+ continue;
+ }
+ if (ref.hasMap())
+ {
+ MapList mp = ref.getMap().getMap();
+ if (mp.getFromLowest() > start || mp.getFromHighest() < end)
+ {
+ // map only involves a subsequence, so cannot be primary
+ continue;
+ }
+ }
+ // whilst it looks like it is a primary ref, we also sanity check type
+ if (DBRefUtils.getCanonicalName(DBRefSource.PDB)
+ .equals(DBRefUtils.getCanonicalName(ref.getSource())))
+ {
+ // PDB dbrefs imply there should be a PDBEntry associated
+ // TODO: tighten PDB dbrefs
+ // formally imply Jalview has actually downloaded and
+ // parsed the pdb file. That means there should be a cached file
+ // handle on the PDBEntry, and a real mapping between sequence and
+ // extracted sequence from PDB file
+ PDBEntry pdbentry = getPDBEntry(ref.getAccessionId());
+ if (pdbentry != null && pdbentry.getFile() != null)
+ {
+ primaries.add(ref);
+ }
+ continue;
+ }
+ // check standard protein or dna sources
+ tmp[0] = ref;
+ DBRefEntry[] res = DBRefUtils.selectDbRefs(!isProtein(), tmp);
+ if (res != null && res[0] == tmp[0])
+ {
+ primaries.add(ref);
+ continue;
+ }
+ }
+ return primaries;
+ }
+ }
+
+ @Override
+ public HiddenMarkovModel getHMM()
+ {
+ return hmm;
+ }
+
+ @Override
+ public void setHMM(HiddenMarkovModel hmm)
+ {
+ this.hmm = hmm;
+ }
+
+ @Override
+ public void updateHMMMapping()
+ {
+ int node = 1;
+ int column = 0;
+ for (char residue : sequence)
+ {
+ if (!Comparison.isGap(residue))
+ {
+ hmm.setAlignmentColumn(node, column);
+ hmm.getNodeLookup().put(column, node);
+ node++;
+ }
+ else
+ {
+ hmm.getNodeLookup().remove(column);
+ }
+ column++;
+ }
+
+ }
+
+ @Override
+ public boolean isHMMConsensusSequence()
+ {
+ return isHMMConsensusSequence;
+ }
+
+ @Override
+ public void setIsHMMConsensusSequence(boolean isHMMConsensusSequence)
+ {
+ this.isHMMConsensusSequence = isHMMConsensusSequence;
+ }
+
+ @Override
+ public boolean hasHMMAnnotation()
+ {
+ return hasInfo;
+ /*
+ if (annotation == null)
+ {
+ return false;
+ }
+
+ for (AlignmentAnnotation annot : annotation)
+ {
+ if (annot.label.contains("_HMM"))
+ {
+ return true;
+ }
+ }
+ return false;
+ */
+ }
+
+ @Override
+ public void setHasInfo(boolean status)
+ {
+ hasInfo = true;
+ }
+
+ @Override
+ public int getPreviousPosition()
+ {
+ return previousPosition;
+ }
+
+ @Override
+ public void setPreviousPosition(int previousPosition)
+ {
+ this.previousPosition = previousPosition;
+ }
+
+}