Merge branch 'develop' into features/JAL-4134_use_annotation_row_for_colours_and_groups
[jalview.git] / src / jalview / datamodel / ContactMatrix.java
index baf6e27..48b6e6b 100644 (file)
@@ -1,11 +1,17 @@
 package jalview.datamodel;
 
-import jalview.ws.params.InvalidArgumentException;
-
+import java.awt.Color;
+import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Spliterator;
+import java.util.StringTokenizer;
+
+import jalview.bin.Console;
 
-public class ContactMatrix implements ContactMatrixI
+public abstract class ContactMatrix implements ContactMatrixI
 {
   /**
    * are contacts reflexive ?
@@ -27,7 +33,7 @@ public class ContactMatrix implements ContactMatrixI
   {
     if (left < 0 || right < 0)
     {
-      throw new Error(new InvalidArgumentException(
+      throw new Error(new RuntimeException(
               "Cannot have negative indices for contact left=" + left
                       + " right=" + right + " strength=" + strength));
     }
@@ -73,7 +79,6 @@ public class ContactMatrix implements ContactMatrixI
     }
   }
 
-
   @Override
   public ContactListI getContactList(final int column)
   {
@@ -87,6 +92,12 @@ public class ContactMatrix implements ContactMatrixI
       int p = column;
 
       @Override
+      public int getPosition()
+      {
+        return p;
+      }
+
+      @Override
       public int getContactHeight()
       {
         return width;
@@ -126,4 +137,86 @@ public class ContactMatrix implements ContactMatrixI
     });
   }
 
+  @Override
+  public float getMin()
+  {
+    return min;
+  }
+
+  @Override
+  public float getMax()
+  {
+    return max;
+  }
+
+  @Override
+  public String getAnnotLabel()
+  {
+    return "Contact Matrix";
+  }
+
+  @Override
+  public String getAnnotDescr()
+  {
+    return "Contact Matrix";
+  }
+  GroupSet grps = new GroupSet();
+  @Override
+  public GroupSetI getGroupSet()
+  {
+    return grps;
+  }
+  @Override
+  public void setGroupSet(GroupSet makeGroups)
+  {
+    grps = makeGroups;
+  }
+  public static String contactToFloatString(ContactMatrixI cm)
+  {
+    StringBuilder sb = new StringBuilder();
+    for (int c = 0; c < cm.getWidth(); c++)
+    {
+      ContactListI cl = cm.getContactList(c);
+      if (cl != null)
+      {
+        for (int h = 0; h <= cl.getContactHeight(); h++)
+        {
+          if (sb.length() > 0)
+          {
+            sb.append('\t');
+          }
+          sb.append(cl.getContactAt(h));
+        }
+      }
+    }
+    return sb.toString();
+  }
+
+  public static float[][] fromFloatStringToContacts(String values, int cols,
+          int rows)
+  {
+    float[][] vals = new float[cols][rows];
+    StringTokenizer tabsep = new StringTokenizer(values, "" + '\t');
+    int c = 0, r = 0;
+    while (tabsep.hasMoreTokens())
+    {
+      double elem = Double.valueOf(tabsep.nextToken());
+      vals[c][r++] = (float) elem;
+      if (r >= vals[c].length)
+      {
+        r = 0;
+        c++;
+      }
+      if (c >= vals.length)
+      {
+        break;
+      }
+    }
+    if (tabsep.hasMoreElements())
+    {
+      Console.warn(
+              "Ignoring additional elements for Float string to contact matrix parsing.");
+    }
+    return vals;
+  }
 }