Merge branch 'develop' into menard
[jalview.git] / src / jalview / analysis / StructureFrequency.java
index 5095ce1..d57e1c5 100644 (file)
@@ -1,21 +1,22 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
+ * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * 
  * 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
+ * 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.
- *
- * 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
+ *  
+ * 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/>.
  */
 
+
 package jalview.analysis;
 
 import java.util.*;
@@ -27,7 +28,7 @@ import jalview.datamodel.*;
  * returns a new Hashtable[] of size maxSeqLength, if Hashtable not supplied.
  * This class is used extensively in calculating alignment colourschemes that
  * depend on the amount of conservation in each alignment column.
- *
+ * 
  * @author $author$
  * @version $Revision$
  */
@@ -49,7 +50,7 @@ public class StructureFrequency
 
   /**
    * Returns the 3' position of a base pair
-   *
+   * 
    * @param pairs
    *          Secondary structure annotation
    * @param indice
@@ -75,7 +76,7 @@ public class StructureFrequency
   /**
    * Method to calculate a 'base pair consensus row', very similar to nucleotide
    * consensus but takes into account a given structure
-   *
+   * 
    * @param sequences
    * @param start
    * @param end
@@ -160,12 +161,8 @@ public class StructureFrequency
             // standard representation for gaps in sequence and structure
             if (c == '.' || c == ' ')
             {
-              c = '-';
-            }
-
-            if (c == '-')
-            {
-              values['-']++;
+              System.err
+                      .println("WARNING: Consensus skipping null sequence - possible race condition.");
               continue;
             }
             cEnd = sequences[j].getCharAt(bpEnd);
@@ -193,6 +190,7 @@ public class StructureFrequency
            
           
                }
+
         }
         // nonGap++;
       }
@@ -263,7 +261,7 @@ public class StructureFrequency
 
   /**
    * Method to check if a base-pair is a canonical or a wobble bp
-   *
+   * 
    * @param up
    *          5' base
    * @param down
@@ -335,7 +333,7 @@ public class StructureFrequency
   /**
    * Compute all or part of the annotation row from the given consensus
    * hashtable
-   *
+   * 
    * @param consensus
    *          - pre-allocated annotation row
    * @param hconsensus
@@ -360,7 +358,7 @@ public class StructureFrequency
     for (int i = iStart; i < width; i++)
     {
       Hashtable hci;
-      if (i >= hconsensus.length || ((hci=hconsensus[i])==null))
+      if (i >= hconsensus.length || ((hci = hconsensus[i]) == null))
       {
         // happens if sequences calculated over were shorter than alignment
         // width
@@ -371,32 +369,28 @@ public class StructureFrequency
       Float fv;
       if (ignoreGapsInConsensusCalculation)
       {
-        fv =(Float) hci.get(StructureFrequency.PID_NOGAPS);
+        fv = (Float) hci.get(StructureFrequency.PID_NOGAPS);
       }
       else
       {
         fv = (Float) hci.get(StructureFrequency.PID_GAPS);
       }
-      if (fv==null)
+      if (fv == null)
       {
         consensus.annotations[i] = null;
         // data has changed below us .. give up and
         continue;
       }
       value = fv.floatValue();
-      String maxRes = hci.get(StructureFrequency.MAXRESIDUE)
-              .toString();
-      String mouseOver = hci.get(StructureFrequency.MAXRESIDUE)
-              + " ";
+      String maxRes = hci.get(StructureFrequency.MAXRESIDUE).toString();
+      String mouseOver = hci.get(StructureFrequency.MAXRESIDUE) + " ";
       if (maxRes.length() > 1)
       {
         mouseOver = "[" + maxRes + "] ";
         maxRes = "+";
       }
-      int[][] profile = (int[][]) hci
-              .get(StructureFrequency.PROFILE);
-      int[][] pairs = (int[][]) hci
-              .get(StructureFrequency.PAIRPROFILE);
+      int[][] profile = (int[][]) hci.get(StructureFrequency.PROFILE);
+      int[][] pairs = (int[][]) hci.get(StructureFrequency.PAIRPROFILE);
 
       if (pairs != null && includeAllConsSymbols) // Just responsible for the
       // tooltip
@@ -404,8 +398,10 @@ public class StructureFrequency
       {
         mouseOver = "";
 
-        /* TODO It's not sure what is the purpose of the alphabet and wheter it is useful for structure?
-         *
+        /*
+         * TODO It's not sure what is the purpose of the alphabet and wheter it
+         * is useful for structure?
+         * 
          * if (alphabet != null) { for (int c = 0; c < alphabet.length; c++) {
          * tval = ((float) profile[0][alphabet[c]]) 100f / (float)
          * profile[1][ignoreGapsInConsensusCalculation ? 1 : 0]; mouseOver +=
@@ -454,7 +450,7 @@ public class StructureFrequency
 
   /**
    * get the sorted base-pair profile for the given position of the consensus
-   *
+   * 
    * @param hconsensus
    * @return profile of the given column
    */
@@ -495,7 +491,7 @@ public class StructureFrequency
         rtnval[rtnval[0]++] = ((int[]) ca[c])[1];
         rtnval[rtnval[0]] = (int) (vl[c] * 100f / profile[1][ignoreGapsInConsensusCalculation ? 1
                 : 0]);
-        rtnval[1]+=rtnval[rtnval[0]++];
+        rtnval[1] += rtnval[rtnval[0]++];
       }
     }