static final strings for consensus keys
[jalview.git] / src / jalview / analysis / AAFrequency.java
index 15618de..c1c4f71 100755 (executable)
@@ -24,10 +24,8 @@ import java.util.*;
 \r
 \r
 /**\r
- * Takes in a vector of sequences and column start and column end\r
- * and returns a vector of size (end-start+1). Each element of the\r
- * vector contains a hashtable with the keys being residues and\r
- * the values being the count of each residue in that column.\r
+ * Takes in a vector or array of sequences and column start and column end\r
+ * and returns a new Hashtable[] of size maxSeqLength, if Hashtable not supplied.\r
  * This class is used extensively in calculating alignment colourschemes\r
  * that depend on the amount of conservation in each alignment column.\r
  * @author $author$\r
@@ -35,12 +33,12 @@ import java.util.*;
  */\r
 public class AAFrequency\r
 {\r
-    /** Takes in a !!ARRAY!! of sequences and column start and column end\r
-    * and fills given Vector of size (end-start+1). Each element of the\r
-    * vector contains a hashtable with the keys being residues and\r
-    * the values being the count of each residue in that column.\r
-    * This class is used extensively in calculating alignment colourschemes\r
-    * that depend on the amount of conservation in each alignment column. */\r
+  //No need to store 1000s of strings which are not\r
+  //visible to the user.\r
+  public static final String MAXCOUNT = "C";\r
+  public static final String MAXRESIDUE="R";\r
+  public static final String PID_GAPS = "G";\r
+  public static final String PID_NOGAPS="N";\r
 \r
    public static final Hashtable [] calculate(Vector sequences, int start, int end)\r
    {\r
@@ -72,6 +70,8 @@ public static final void calculate(SequenceI[] sequences,
 \r
   int[] values = new int[132];\r
 \r
+  String seq;\r
+\r
   for (i = start; i < end; i++)\r
   {\r
     residueHash = new Hashtable();\r
@@ -82,24 +82,25 @@ public static final void calculate(SequenceI[] sequences,
 \r
     for (j = 0; j < jSize; j++)\r
     {\r
-      if (sequences[j].getLength() > i)\r
+      seq = sequences[j].getSequence();\r
+      if (seq.length() > i)\r
       {\r
-        c = sequences[j].getCharAt(i);\r
+        c = seq.charAt(i);\r
 \r
-        if ('a' <= c && c <= 'z')\r
-        {\r
-          c -= ('a' - 'A');\r
-        }\r
+        if(c == '.' || c==' ')\r
+          c = '-';\r
 \r
-        if (jalview.util.Comparison.isGap(c))\r
+        if(c=='-')\r
         {\r
-          c = '-'; // we always use this for gaps in the property vectors\r
+          values['-']++;\r
+          continue;\r
         }\r
-        else\r
+        else if ('a' <= c && c <= 'z')\r
         {\r
-          nongap++;\r
+          c -= 32 ;//('a' - 'A');\r
         }\r
 \r
+        nongap++;\r
         values[c]++;\r
 \r
       }\r
@@ -126,14 +127,14 @@ public static final void calculate(SequenceI[] sequences,
     }\r
 \r
 \r
-    residueHash.put("maxCount", new Integer(maxCount));\r
-    residueHash.put("maxResidue", maxResidue);\r
+    residueHash.put(MAXCOUNT, new Integer(maxCount));\r
+    residueHash.put(MAXRESIDUE, maxResidue);\r
 \r
     percentage = ( (float) maxCount * 100) / (float) jSize;\r
-    residueHash.put("pid_gaps", new Float(percentage));\r
+    residueHash.put(PID_GAPS, new Float(percentage));\r
 \r
     percentage = ( (float) maxCount * 100) / (float) nongap;\r
-    residueHash.put("pid_nogaps", new Float(percentage));\r
+    residueHash.put(PID_NOGAPS, new Float(percentage));\r
     result[i] = residueHash;\r
   }\r
 }\r