JAL-4134 column grouping model and methods moved to their own object held by by Conta...
[jalview.git] / src / jalview / datamodel / ContactMatrix.java
index de7cba4..8f0afdf 100644 (file)
@@ -1,9 +1,17 @@
 package jalview.datamodel;
 
+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;
 
-public class ContactMatrix implements ContactMatrixI
+import jalview.bin.Console;
+
+public abstract class ContactMatrix implements ContactMatrixI
 {
   /**
    * are contacts reflexive ?
@@ -142,16 +150,74 @@ public class ContactMatrix implements ContactMatrixI
   }
 
   @Override
-  public boolean hasReferenceSeq()
+  public String getAnnotLabel()
   {
-    // TODO Auto-generated method stub
-    return false;
+    return "Contact Matrix";
   }
 
   @Override
-  public SequenceI getReferenceSeq()
+  public String getAnnotDescr()
+  {
+    return "Contact Matrix";
+  }
+  GroupSet grps = new GroupSet();
+  @Override
+  public GroupSetI getGroupSet()
+  {
+    return grps;
+  }
+  @Override
+  public void setGroupSet(GroupSet makeGroups)
   {
-    // TODO Auto-generated method stub
-    return null;
+    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;
   }
 }