JAL-1683 replace year/version strings with tokens in source
[jalview.git] / src / jalview / analysis / StructureFrequency.java
index 6409413..65dd84a 100644 (file)
@@ -1,19 +1,21 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
  *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.analysis;
@@ -59,11 +61,15 @@ public class StructureFrequency
    */
   public static int findPair(SequenceFeature[] pairs, int indice)
   {
+
     for (int i = 0; i < pairs.length; i++)
     {
       if (pairs[i].getBegin() == indice)
+
       {
+
         return pairs[i].getEnd();
+
       }
     }
     return -1;
@@ -84,16 +90,18 @@ public class StructureFrequency
           int end, Hashtable[] result, boolean profile,
           AlignmentAnnotation rnaStruc)
   {
+
     Hashtable residueHash;
     String maxResidue;
-    char[] seq, struc = rnaStruc.getRNAStruc().toCharArray();
+    char[] struc = rnaStruc.getRNAStruc().toCharArray();
+
     SequenceFeature[] rna = rnaStruc._rnasecstr;
     char c, s, cEnd;
-    int count, nonGap = 0, i, bpEnd = -1, j, jSize = sequences.length;
+    int count = 0, nonGap = 0, i, bpEnd = -1, j, jSize = sequences.length;
     int[] values;
     int[][] pairs;
     float percentage;
-
+    boolean wooble = true;
     for (i = start; i < end; i++) // foreach column
     {
       residueHash = new Hashtable();
@@ -101,9 +109,11 @@ public class StructureFrequency
       values = new int[255];
       pairs = new int[255][255];
       bpEnd = -1;
+      // System.out.println("s="+struc[i]);
       if (i < struc.length)
       {
         s = struc[i];
+
       }
       else
       {
@@ -114,7 +124,7 @@ public class StructureFrequency
         s = '-';
       }
 
-      if (s != '(')
+      if (s != '(' && s != '[')
       {
         if (s == '-')
         {
@@ -123,7 +133,9 @@ public class StructureFrequency
       }
       else
       {
+
         bpEnd = findPair(rna, i);
+
         if (bpEnd > -1)
         {
           for (j = 0; j < jSize; j++) // foreach row
@@ -135,28 +147,39 @@ public class StructureFrequency
               continue;
             }
             c = sequences[j].getCharAt(i);
+            // System.out.println("c="+c);
+
+            // standard representation for gaps in sequence and structure
+            if (c == '.' || c == ' ')
             {
+              c = '-';
+            }
 
-              // standard representation for gaps in sequence and structure
-              if (c == '.' || c == ' ')
-              {
-                c = '-';
-              }
-
-              if (c == '-')
-              {
-                values['-']++;
-                continue;
-              }
-              cEnd = sequences[j].getCharAt(bpEnd);
-              if (checkBpType(c, cEnd))
-              {
-                values['(']++; // H means it's a helix (structured)
-              }
-              pairs[c][cEnd]++;
+            if (c == '-')
+            {
+              values['-']++;
+              continue;
+            }
+            cEnd = sequences[j].getCharAt(bpEnd);
 
+            // System.out.println("pairs ="+c+","+cEnd);
+            if (checkBpType(c, cEnd) == true)
+            {
+              values['(']++; // H means it's a helix (structured)
               maxResidue = "(";
+              wooble = true;
+              // System.out.println("It's a pair wc");
+
+            }
+            if (checkBpType(c, cEnd) == false)
+            {
+              wooble = false;
+              values['[']++; // H means it's a helix (structured)
+              maxResidue = "[";
+
             }
+            pairs[c][cEnd]++;
+
           }
         }
         // nonGap++;
@@ -170,9 +193,14 @@ public class StructureFrequency
 
         residueHash.put(PAIRPROFILE, pairs);
       }
-
-      count = values['('];
-
+      if (wooble == true)
+      {
+        count = values['('];
+      }
+      if (wooble == false)
+      {
+        count = values['['];
+      }
       residueHash.put(MAXCOUNT, new Integer(count));
       residueHash.put(MAXRESIDUE, maxResidue);
 
@@ -188,11 +216,20 @@ public class StructureFrequency
       if (bpEnd > 0)
       {
         values[')'] = values['('];
+        values[']'] = values['['];
         values['('] = 0;
-
+        values['['] = 0;
         residueHash = new Hashtable();
-        maxResidue = ")";
-
+        if (wooble == true)
+        {
+          // System.out.println(maxResidue+","+wooble);
+          maxResidue = ")";
+        }
+        if (wooble == false)
+        {
+          // System.out.println(maxResidue+","+wooble);
+          maxResidue = "]";
+        }
         if (profile)
         {
           residueHash.put(PROFILE, new int[][]
@@ -209,6 +246,7 @@ public class StructureFrequency
         residueHash.put(PID_GAPS, new Float(percentage));
 
         result[bpEnd] = residueHash;
+
       }
     }
   }
@@ -309,18 +347,19 @@ public class StructureFrequency
       // initialised properly
       return;
     }
-    String fmtstr="%3.1f";
-    int precision=2;
-    while (nseq>100) {
+    String fmtstr = "%3.1f";
+    int precision = 2;
+    while (nseq > 100)
+    {
       precision++;
-      nseq/=10;
+      nseq /= 10;
     }
-    if (precision>2)
+    if (precision > 2)
     {
-      fmtstr = "%"+(2+precision)+"."+precision+"f";
+      fmtstr = "%" + (2 + precision) + "." + precision + "f";
     }
     Format fmt = new Format(fmtstr);
-    
+
     for (int i = iStart; i < width; i++)
     {
       Hashtable hci;
@@ -397,7 +436,8 @@ public class StructureFrequency
             tval = (vl[c] * 100f / profile[1][ignoreGapsInConsensusCalculation ? 1
                     : 0]);
             mouseOver += ((p == 0) ? "" : "; ") + (char) ((int[]) ca[c])[0]
-                    + (char) ((int[]) ca[c])[1] + " " + fmt.form(tval) + "%";
+                    + (char) ((int[]) ca[c])[1] + " " + fmt.form(tval)
+                    + "%";
             p++;
 
           }