Merge branch 'releases/Release_2_11_3_Branch'
[jalview.git] / src / jalview / datamodel / SequenceI.java
index fb723e6..d5114e0 100755 (executable)
  */
 package jalview.datamodel;
 
-import jalview.datamodel.features.SequenceFeaturesI;
-import jalview.util.MapList;
-
 import java.util.BitSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
 
 import fr.orsay.lri.varna.models.rna.RNA;
+import jalview.datamodel.Sequence.DBModList;
+import jalview.datamodel.features.SequenceFeaturesI;
+import jalview.util.MapList;
+import jalview.ws.params.InvalidArgumentException;
 
 /**
  * Methods for manipulating a sequence, its metadata and related annotation in
@@ -36,7 +38,7 @@ import fr.orsay.lri.varna.models.rna.RNA;
  * @author $author$
  * @version $Revision$
  */
-public interface SequenceI extends ASequenceI
+public interface SequenceI extends ASequenceI, ContactMapHolderI
 {
   /**
    * Set the display name for the sequence
@@ -111,9 +113,11 @@ public interface SequenceI extends ASequenceI
    * get a range on the sequence as a string
    * 
    * @param start
-   *          position relative to start of sequence including gaps (from 0)
+   *          (inclusive) position relative to start of sequence including gaps
+   *          (from 0)
    * @param end
-   *          position relative to start of sequence including gaps (from 0)
+   *          (exclusive) position relative to start of sequence including gaps
+   *          (from 0)
    * 
    * @return String containing all gap and symbols in specified range
    */
@@ -205,14 +209,17 @@ public interface SequenceI extends ASequenceI
   public int findPosition(int i);
 
   /**
-   * Returns the from-to sequence positions (start..) for the given column
-   * positions (1..), or null if no residues are included in the range
+   * Returns the sequence positions for first and last residues lying within the
+   * given column positions [fromColum,toColumn] (where columns are numbered
+   * from 1), or null if no residues are included in the range
    * 
    * @param fromColum
+   *          - first column base 1
    * @param toColumn
+   *          - last column, base 1
    * @return
    */
-  public Range findPositions(int fromColum, int toColumn);
+  public ContiguousI findPositions(int fromColum, int toColumn);
 
   /**
    * Returns an int array where indices correspond to each residue in the
@@ -224,6 +231,13 @@ public interface SequenceI extends ASequenceI
   public int[] gapMap();
 
   /**
+   * Build a bitset corresponding to sequence gaps
+   * 
+   * @return a BitSet where set values correspond to gaps in the sequence
+   */
+  public BitSet gapBitset();
+
+  /**
    * Returns an int array where indices correspond to each position in sequence
    * char array and the element value gives the result of findPosition for that
    * index in the sequence.
@@ -342,14 +356,18 @@ public interface SequenceI extends ASequenceI
   /**
    * set the array of Database references for the sequence.
    * 
+   * BH 2019.02.04 changes param to DBModlist
+   * 
    * @param dbs
    * @deprecated - use is discouraged since side-effects may occur if DBRefEntry
    *             set are not normalised.
+   * @throws InvalidArgumentException
+   *           if the is not one created by Sequence itself
    */
   @Deprecated
-  public void setDBRefs(DBRefEntry[] dbs);
+  public void setDBRefs(DBModList<DBRefEntry> dbs);
 
-  public DBRefEntry[] getDBRefs();
+  public DBModList<DBRefEntry> getDBRefs();
 
   /**
    * add the given entry to the list of DBRefs for this sequence, or replace a
@@ -397,7 +415,8 @@ public interface SequenceI extends ASequenceI
   /**
    * Derive a sequence (using this one's dataset or as the dataset)
    * 
-   * @return duplicate sequence with valid dataset sequence
+   * @return duplicate sequence and any annotation present with valid dataset
+   *         sequence
    */
   public SequenceI deriveSequence();
 
@@ -428,6 +447,18 @@ public interface SequenceI extends ASequenceI
           String label);
 
   /**
+   * Returns a (possibly empty) list of any annotations that match on given
+   * calcId (source), label (type) and description (observation instance). Null
+   * values do not match.
+   * 
+   * @param calcId
+   * @param label
+   * @param description
+   */
+  public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+          String label, String description);
+
+  /**
    * create a new dataset sequence (if necessary) for this sequence and sets
    * this sequence to refer to it. This call will move any features or
    * references on the sequence onto the dataset. It will also make a duplicate
@@ -501,7 +532,8 @@ public interface SequenceI extends ASequenceI
    *          optional feature types to restrict results to
    * @return
    */
-  List<SequenceFeature> findFeatures(int fromCol, int toCol, String... types);
+  List<SequenceFeature> findFeatures(int fromCol, int toCol,
+          String... types);
 
   /**
    * Method to call to indicate that the sequence (characters or alignment/gaps)
@@ -509,7 +541,7 @@ public interface SequenceI extends ASequenceI
    * positions to be invalidated.
    */
   void sequenceChanged();
-  
+
   /**
    * 
    * @return BitSet corresponding to index [0,length) where Comparison.isGap()
@@ -541,6 +573,31 @@ public interface SequenceI extends ASequenceI
    * @param chromosomeId
    * @param map
    */
-  void setGeneLoci(String speciesId, String assemblyId,
-          String chromosomeId, MapList map);
+  void setGeneLoci(String speciesId, String assemblyId, String chromosomeId,
+          MapList map);
+
+  /**
+   * Returns the sequence string constructed from the substrings of a sequence
+   * defined by the int[] ranges provided by an iterator. E.g. the iterator
+   * could iterate over all visible regions of the alignment
+   * 
+   * @param it
+   *          the iterator to use
+   * @return a String corresponding to the sequence
+   */
+  public String getSequenceStringFromIterator(Iterator<int[]> it);
+
+  /**
+   * Locate the first position in this sequence which is not contained in an
+   * iterator region. If no such position exists, return 0
+   * 
+   * @param it
+   *          iterator over regions
+   * @return first residue not contained in regions
+   */
+  public int firstResidueOutsideIterator(Iterator<int[]> it);
+
+  public void addContactListFor(AlignmentAnnotation annotation,
+          ContactMatrixI cm);
+
 }