JAL-2349 interfaces and logic for adding contact matrices as an alignment’s annotatio...
authorJim Procter <jprocter@issues.jalview.org>
Sun, 4 Dec 2016 10:45:41 +0000 (10:45 +0000)
committerJim Procter <jprocter@issues.jalview.org>
Sun, 4 Dec 2016 10:46:57 +0000 (10:46 +0000)
src/jalview/api/AlignViewportI.java
src/jalview/datamodel/Alignment.java
src/jalview/datamodel/AlignmentI.java
src/jalview/datamodel/ContactListI.java [new file with mode: 0644]
src/jalview/datamodel/ContactMatrixI.java [new file with mode: 0644]
src/jalview/viewmodel/AlignmentViewport.java

index 72542b3..cb11886 100644 (file)
@@ -26,6 +26,7 @@ import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.CigarArray;
 import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.ContactListI;
 import jalview.datamodel.ProfilesI;
 import jalview.datamodel.SearchResultsI;
 import jalview.datamodel.SequenceCollectionI;
@@ -445,4 +446,6 @@ public interface AlignViewportI extends ViewStyleI
    * @return search results or null
    */
   SearchResultsI getSearchResults();
+
+  ContactListI getContactList(AlignmentAnnotation _aa, int column);
 }
index d651c1d..758e1cb 100755 (executable)
@@ -30,6 +30,7 @@ import jalview.util.MessageManager;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
@@ -1946,4 +1947,34 @@ public class Alignment implements AlignmentI
     }
     return new int[] { startPos, endPos };
   }
+
+  Map<Object, ContactMatrixI> contactmaps = new HashMap<Object, ContactMatrixI>();
+  @Override
+  public
+  ContactListI getContactListFor(AlignmentAnnotation _aa, int column)
+  {
+    ContactMatrixI cm = contactmaps.get(_aa.annotationId);
+    if (cm == null)
+    {
+      return null;
+    }
+    return cm.getContactList(column);
+  }
+
+  @Override
+  public AlignmentAnnotation addContactList(ContactMatrixI cm)
+  {
+    Annotation _aa[] = new Annotation[getWidth()];
+    Annotation dummy = new Annotation(0.0f);
+    for (int i = 0; i < _aa.length; _aa[i++] = dummy)
+    {
+      ;
+    }
+    AlignmentAnnotation aa = new AlignmentAnnotation("Contact Matrix",
+            "Contact Matrix", _aa);
+    aa.graph = AlignmentAnnotation.CUSTOMRENDERER;
+    contactmaps.put(aa.annotationId, cm);
+    addAnnotation(aa);
+    return aa;
+  }
 }
index 7274e5f..8ddba6c 100755 (executable)
@@ -556,4 +556,16 @@ public interface AlignmentI extends AnnotatedCollectionI
    * @return
    */
   public int[] getVisibleStartAndEndIndex(List<int[]> hiddenCols);
+
+  /**
+   * resolve a contact list instance (if any) associated with the annotation row
+   * and column position
+   * 
+   * @param _aa
+   * @param column
+   * @return
+   */
+  ContactListI getContactListFor(AlignmentAnnotation _aa, int column);
+
+  AlignmentAnnotation addContactList(ContactMatrixI cm);
 }
diff --git a/src/jalview/datamodel/ContactListI.java b/src/jalview/datamodel/ContactListI.java
new file mode 100644 (file)
index 0000000..c08c07b
--- /dev/null
@@ -0,0 +1,14 @@
+package jalview.datamodel;
+
+import java.awt.Color;
+
+public interface ContactListI
+{
+
+  int getColumnWidth();
+
+  int getContactHeight();
+
+  Color getColorForScore(int column);
+
+}
diff --git a/src/jalview/datamodel/ContactMatrixI.java b/src/jalview/datamodel/ContactMatrixI.java
new file mode 100644 (file)
index 0000000..9a7f138
--- /dev/null
@@ -0,0 +1,8 @@
+package jalview.datamodel;
+
+public interface ContactMatrixI
+{
+
+  ContactListI getContactList(int column);
+
+}
index fecccb0..cb9dd67 100644 (file)
@@ -35,6 +35,7 @@ import jalview.datamodel.AlignmentView;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.CigarArray;
 import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.ContactListI;
 import jalview.datamodel.HiddenSequences;
 import jalview.datamodel.ProfilesI;
 import jalview.datamodel.SearchResultsI;
@@ -2872,4 +2873,10 @@ public abstract class AlignmentViewport implements AlignViewportI,
   {
     return searchResults;
   }
+
+  @Override
+  public ContactListI getContactList(AlignmentAnnotation _aa, int column)
+  {
+    return alignment.getContactListFor(_aa, column);
+  }
 }