JAL-891; sequence logos are available on structure conservation row
[jalview.git] / src / jalview / analysis / StructureFrequency.java
index a5dd030..8338c9d 100644 (file)
@@ -202,7 +202,7 @@ public class StructureFrequency
    */
   public static final void calculate(SequenceI[] sequences, int start,
                  int end, Hashtable[] result, boolean profile, AlignmentAnnotation rnaStruc){
-         System.out.println("StructureFrequency.calculate");
+         //System.out.println("StructureFrequency.calculateNEW4");
          Hashtable residueHash;
          String maxResidue;
          char[] seq, struc=rnaStruc.getRNAStruc().toCharArray();
@@ -211,12 +211,7 @@ public class StructureFrequency
          int count,nonGap=0,i,bpEnd=-1,j,jSize = sequences.length;
          int[] values = new int[255];
          float percentage;
-         
-         /*for(int x=(rna.length-1); x>=0; x--){
-                 System.out.println("BP-"+((rna.length-1)-x)+" "+rna[x].getBegin()+","+rna[x].getEnd()+" "+rna[x].getFeatureGroup());
-         }*/
-         
-         
+                 
          for (i = start; i < end; i++) //foreach column
          {
                  residueHash = new Hashtable();
@@ -231,7 +226,9 @@ public class StructureFrequency
                  }
 
                  if(s != '('){
-                         values['-']++;
+                         if(s == '-'){
+                                 values['-']++;
+                         }
                  }
                  else
                  {
@@ -259,27 +256,24 @@ public class StructureFrequency
                                                  values['-']++;
                                                  continue;
                                          }
-                                         //if(s == '('){
-                                                 //bpEnd=rna[(rna.length-1-nonGap)].getEnd();
-                                                 bpEnd=findPair(rna,i);
-                                                 cEnd=seq[bpEnd];
-                                                 //System.out.println(i+","+bpEnd);
-                                                 if(checkBpType(c,cEnd)){
-                                                         values['H']++; //H means it's a helix (structured)
-                                                 }
-                                                 maxResidue="H";
-                                 //}
+                                         bpEnd=findPair(rna,i);
+                                         cEnd=seq[bpEnd];
+                                         if(checkBpType(c,cEnd)){
+                                                 values['H']++; //H means it's a helix (structured)
+                                         }
+                                         maxResidue="H";
                                  }
                          }
-                         nonGap++;
+//                       nonGap++;
                  }
                  //UPDATE this for new values
-             //if (profile)
-             //{
-            //   residueHash.put(PROFILE, new int[][]
-             //  { values, new int[]
-            //   { jSize, nongap } });
-            // }
+             if (profile)
+             {
+                 //System.out.println("profile");
+               residueHash.put(PROFILE, new int[][]
+               { values, new int[]
+               { jSize, values['H'] } });
+             }
                   
 
                  count=values['H'];
@@ -375,6 +369,7 @@ public class StructureFrequency
           boolean ignoreGapsInConsensusCalculation,
           boolean includeAllConsSymbols, char[] alphabet)
   {
+       System.out.println("StructureFrequency.completeConsensus "+includeAllConsSymbols);
     float tval, value;
     if (consensus == null || consensus.annotations == null
             || consensus.annotations.length < width)
@@ -412,8 +407,9 @@ public class StructureFrequency
         maxRes = "+";
       }
       int[][] profile = (int[][]) hconsensus[i].get(StructureFrequency.PROFILE);
-      if (profile != null && includeAllConsSymbols)
+      if (profile != null && includeAllConsSymbols) //Just responsible for the tooltip
       {
+       //System.out.println("StructureFrequency.includeAllConsSymbols");
         mouseOver = "";
         if (alphabet != null)
         {
@@ -429,6 +425,7 @@ public class StructureFrequency
         }
         else
         {
+          //System.out.println("StructureFrequency.NOTincludeAllConsSymbols");
           Object[] ca = new Object[profile[0].length];
           float[] vl = new float[profile[0].length];
           for (int c = 0; c < ca.length; c++)
@@ -472,38 +469,37 @@ public class StructureFrequency
    * @return
    */
   public static int[] extractProfile(Hashtable hconsensus,
-          boolean ignoreGapsInConsensusCalculation)
+                 boolean ignoreGapsInConsensusCalculation)
   {
-    int[] rtnval = new int[64];
-    int[][] profile = (int[][]) hconsensus.get(StructureFrequency.PROFILE);
-    if (profile == null)
-      return null;
-    Object[] ca = new Object[profile[0].length];
-    float[] vl = new float[profile[0].length];
-    for (int c = 0; c < ca.length; c++)
-    {
-      ca[c] = new char[]
-      { (char) c };
-      vl[c] = (float) profile[0][c];
-    }
-    ;
-    jalview.util.QuickSort.sort(vl, ca);
-    rtnval[0] = 1;
-    for (int c = ca.length - 1; profile[0][((char[]) ca[c])[0]] > 0; c--)
-    {
-      if (((char[]) ca[c])[0] != '-')
-      {
-        rtnval[rtnval[0]++] = ((char[]) ca[c])[0];
-        rtnval[rtnval[0]++] = (int) (((float) profile[0][((char[]) ca[c])[0]]) * 100f / (float) profile[1][ignoreGapsInConsensusCalculation ? 1
-                : 0]);
-      }
-    }
-    return rtnval;
+         //System.out.println("StructureFrequency.extractProfile");
+         int[] rtnval = new int[11];
+         int[][] profile = (int[][]) hconsensus.get(StructureFrequency.PROFILE);
+         if (profile == null)
+                 return null;
+         
+         Object[] ca = new Object[profile[0].length];
+         float[] vl = new float[profile[0].length];
+         for (int c = 0; c < ca.length; c++)
+         {
+                 ca[c] = new char[]
+                                  { (char) c };
+                 vl[c] = (float) profile[0][c];
+         }
+         ;
+         jalview.util.QuickSort.sort(vl, ca);
+         rtnval[0] = 1;
+         for (int c = ca.length - 1; profile[0][((char[]) ca[c])[0]] > 0; c--)
+         {
+                 if (((char[]) ca[c])[0] != '-')
+                 {
+                         rtnval[rtnval[0]++] = ((char[]) ca[c])[0];
+                         rtnval[rtnval[0]++] = (int) (((float) profile[0][((char[]) ca[c])[0]]) * 100f / (float) profile[1][ignoreGapsInConsensusCalculation ? 1
+                                         : 0]);
+                 }
+         }
+         return rtnval;
   }
 
-  enum base {A,T,g,C};
-  
   public static void main(String args[]){
          //Short test to see if checkBpType works
          ArrayList<String> test = new ArrayList<String>();