JAL-1741 nucleotide-aware colour schemes applied to structures
[jalview.git] / src / jalview / util / Comparison.java
index e224b71..835a1b4 100644 (file)
@@ -20,6 +20,9 @@
  */
 package jalview.util;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import jalview.datamodel.SequenceI;
 
 /**
@@ -248,7 +251,7 @@ public class Comparison
   /**
    * Answers true if more than 85% of the sequence residues (ignoring gaps) are
    * A, G, C, T or U, else false. This is just a heuristic guess and may give a
-   * wrong answer (as AGCT are also animo acid codes).
+   * wrong answer (as AGCT are also amino acid codes).
    * 
    * @param seqs
    * @return
@@ -263,6 +266,12 @@ public class Comparison
     int aaCount = 0;
     for (SequenceI seq : seqs)
     {
+      if (seq == null)
+      {
+        continue;
+      }
+      // TODO could possibly make an informed guess just from the first sequence
+      // to save a lengthy calculation
       for (char c : seq.getSequence())
       {
         if ('a' <= c && c <= 'z')
@@ -295,4 +304,27 @@ public class Comparison
     }
 
   }
+
+  /**
+   * Convenience overload of isNucleotide
+   * 
+   * @param seqs
+   * @return
+   */
+  public static boolean isNucleotide(SequenceI[][] seqs)
+  {
+    if (seqs == null)
+    {
+      return false;
+    }
+    List<SequenceI> flattened = new ArrayList<SequenceI>();
+    for (SequenceI[] ss : seqs)
+    {
+      for (SequenceI s : ss) {
+      flattened.add(s);
+      }
+    }
+    final SequenceI[] oneDArray = flattened.toArray(new SequenceI[flattened.size()]);
+    return isNucleotide(oneDArray);
+  }
 }