Gap characters are now properly detected in the conservation and PID
authorjprocter <Jim Procter>
Wed, 13 Apr 2005 16:42:21 +0000 (16:42 +0000)
committerjprocter <Jim Procter>
Wed, 13 Apr 2005 16:42:21 +0000 (16:42 +0000)
calculation. They are always counted in the '-' element of the residue count hash.

src/jalview/analysis/AAFrequency.java

index c61e7ef..edcc50f 100755 (executable)
@@ -20,6 +20,7 @@ public class AAFrequency {
     // This class is used extensively in calculating alignment colourschemes\r
     // that depend on the amount of conservation in each alignment column.\r
 \r
+\r
     public static Vector calculate(Vector sequences,int start,int end) {\r
 \r
     Vector result = new Vector();\r
@@ -45,6 +46,8 @@ public class AAFrequency {
 \r
             if (!jalview.util.Comparison.isGap(res.charAt(0)))\r
               nongap++;\r
+            else\r
+              res = "-"; // we always use this for gaps in the property vectors\r
 \r
             if (residueHash.containsKey(res))\r
             {\r
@@ -133,26 +136,28 @@ public class AAFrequency {
 \r
            for (int k = winstart; k <= winend; k++) {\r
                String refchar = refseq.getSequence().substring(k,k+1);\r
+                if (jalview.util.Comparison.isGap(refchar.charAt(0)))\r
+                  refchar="-";\r
+                else {\r
+                  for (int j = 0; j < sequences.size(); j++) {\r
 \r
-               for (int j = 0; j < sequences.size(); j++) {\r
+                    Sequence s = (Sequence)sequences.elementAt(j);\r
 \r
-                   if (refchar.equals("-") == false) {\r
+                    if (s.getSequence().length() > k) {\r
 \r
-                       Sequence s = (Sequence)sequences.elementAt(j);\r
+                      String res = s.getSequence().substring(k,k+1); // no gapchar test needed\r
 \r
-                       if (s.getSequence().length() > k) {\r
+                      if (res.equals(refchar)) {\r
+                        int val = ((Integer)values.elementAt(j)).intValue();\r
+                        val++;\r
+                        values.setElementAt(new Integer(val),j);\r
+                      }\r
+                    }\r
+                  }\r
+                }\r
 \r
-                           String res = s.getSequence().substring(k,k+1);\r
+              }\r
 \r
-                           if (res.equals(refchar)) {\r
-                               int val = ((Integer)values.elementAt(j)).intValue();\r
-                               val++;\r
-                               values.setElementAt(new Integer(val),j);\r
-                           }\r
-                       }\r
-                   }\r
-               }\r
-           }\r
            prev = values;\r
        } else {\r
            int winstart = i-window/2;\r
@@ -189,11 +194,13 @@ public class AAFrequency {
 \r
                // Now substract 1 if the chars at winstart-1 match\r
 \r
-               if (pre_refchar.equals("-") == false && pre_char.equals(pre_refchar)) {\r
+                if (jalview.util.Comparison.isGap(pre_refchar.charAt(0)) == false\r
+                    && pre_char.equals(pre_refchar)) {\r
                    val--;\r
                }\r
 \r
-               if (pos_refchar.equals("-") == false && pos_char.equals(pos_refchar)) {\r
+                if (jalview.util.Comparison.isGap(pos_refchar.charAt(0)) == false\r
+                    && pos_char.equals(pos_refchar)) {\r
                    val++;\r
                }\r
 \r