Merge branch 'develop' into spike/JAL-4047/JAL-4048_columns_in_sequenceID
[jalview.git] / src / jalview / ws / datamodel / MappableContactMatrixI.java
diff --git a/src/jalview/ws/datamodel/MappableContactMatrixI.java b/src/jalview/ws/datamodel/MappableContactMatrixI.java
new file mode 100644 (file)
index 0000000..9762428
--- /dev/null
@@ -0,0 +1,76 @@
+package jalview.ws.datamodel;
+
+import jalview.datamodel.ContactListI;
+import jalview.datamodel.ContactMatrixI;
+import jalview.datamodel.Mapping;
+import jalview.datamodel.SequenceI;
+import jalview.util.MapList;
+
+public interface MappableContactMatrixI extends ContactMatrixI
+{
+
+  boolean hasReferenceSeq();
+
+  SequenceI getReferenceSeq();
+
+  /**
+   * remaps the matrix to a new reference sequence
+   * 
+   * @param dsq
+   * @param sqmpping
+   *          - mapping from current reference to new reference - 1:1 only
+   * @return new ContactMatrixI instance with updated mapping
+   */
+  MappableContactMatrixI liftOver(SequenceI dsq, Mapping sqmpping);
+
+  /**
+   * like ContactMatrixI.getContactList(int column) but
+   * 
+   * @param localFrame
+   *          - sequence or other object that this contact matrix is associated
+   *          with
+   * @param column
+   *          - position in localFrame
+   * @return ContactListI that returns contacts w.r.t. localFrame
+   */
+
+  ContactListI getMappableContactList(SequenceI localFrame, int column);
+
+  /**
+   * 
+   * Similar to AlignedCodonFrame.getMappingBetween
+   * 
+   * @param sequenceRef
+   *          - a reference sequence mappable to this contactMatrix - may be
+   *          null
+   * @return null or the MapList mapping to the coordinates of the reference
+   *         sequence (or if hasReferenceSeq() is false, and sequenceRef is
+   *         null, any mapping present)
+   * 
+   */
+  MapList getMapFor(SequenceI sequenceRef);
+
+  /**
+   * Locate a position in the mapped sequence for a single column in the matrix. 
+   * this to resolve positions corresponding to column clusters
+   * 
+   * @param localFrame
+   *          - sequence derivced from reference sequence
+   * @param column
+   *          - matrix row/column
+   * @return sequence position(s) corresponding to column in contact matrix
+   */
+  int[] getMappedPositionsFor(SequenceI localFrame, int column);
+
+  /**
+   * Locate a position in the mapped sequence for a contiguous range of columns in the matrix 
+   * use this to resolve positions corresponding to column clusters
+   * 
+   * @param localFrame
+   *          - sequence derivced from reference sequence
+   * @param column
+   *          - matrix row/column
+   * @return sequence position(s) corresponding to column in contact matrix
+   */
+  int[] getMappedPositionsFor(SequenceI localFrame, int from, int to);
+}