JAL-1159 Merging 2.8.1 patches and Anne Menards work from 2012 into development branch
[jalview.git] / src / jalview / renderer / AnnotationRenderer.java
index 6d00118..794c292 100644 (file)
@@ -174,7 +174,7 @@ public class AnnotationRenderer
   private boolean canClip=false;
 
   
-  public void drawPseudoNode(Graphics g, Color nonCanColor, Annotation[] row_annotations,
+  public void drawNotCanonicalAnnot(Graphics g, Color nonCanColor, Annotation[] row_annotations,
           int lastSSX, int x, int y, int iconOffset, int startRes,
           int column, boolean validRes, boolean validEnd)
   {
@@ -301,7 +301,7 @@ public class AnnotationRenderer
       }
       // TODO extend annotation row to enable dynamic and static profile data to
       // be stored
-      if (aa.groupRef == null && aa.sequenceRef == null && av_renderProfile)
+      if (aa.groupRef == null && aa.sequenceRef == null)
       {
         return AAFrequency.extractProfile(hconsensus[column],
                 av_ignoreGapsConsensus);
@@ -323,7 +323,7 @@ public class AnnotationRenderer
         // to
         // be stored
         if (aa.groupRef == null && aa.sequenceRef == null
-                && av_renderProfile && hStrucConsensus != null
+                && hStrucConsensus != null
                 && hStrucConsensus.length > column)
         {
           return StructureFrequency.extractProfile(hStrucConsensus[column],
@@ -380,6 +380,8 @@ public class AnnotationRenderer
     boolean centreColLabels, centreColLabelsDef = av
             .getCentreColumnLabels();
     boolean scaleColLabel = false;
+    AlignmentAnnotation consensusAnnot=av.getAlignmentConsensusAnnotation(),structConsensusAnnot=av.getAlignmentStrucConsensusAnnotation();
+    boolean renderHistogram = true, renderProfile = true, normaliseProfile = false;
 
     BitSet graphGroupDrawn = new BitSet();
     int charOffset = 0; // offset for a label
@@ -393,6 +395,26 @@ public class AnnotationRenderer
     for (int i = 0; i < aa.length; i++)
     {
       AlignmentAnnotation row = aa[i];
+      {
+        // check if this is a consensus annotation row and set the display settings appropriately
+        // TODO: generalise this to have render styles for consensus/profile
+        // data
+        if (row.groupRef != null && row == row.groupRef.getConsensus())
+        {
+          renderHistogram = row.groupRef.isShowConsensusHistogram();
+          renderProfile = row.groupRef.isShowSequenceLogo();
+          normaliseProfile = row.groupRef.isNormaliseSequenceLogo();
+        }
+        else if (row == consensusAnnot || row == structConsensusAnnot)
+        {
+          renderHistogram = av_renderHistogram;
+          renderProfile = av_renderProfile;
+          normaliseProfile = av_normaliseProfile;
+        } else {
+          renderHistogram = true;
+          // don't need to set render/normaliseProfile since they are not currently used in any other annotation track renderer
+        }
+      }
       Annotation[] row_annotations = row.annotations;
       if (!row.visible)
       {
@@ -629,31 +651,30 @@ public class AnnotationRenderer
            }
            if (ss >=65)
            {
-                 // System.out.println("ss="+ss);
              // distinguish between forward/backward base-pairing
              if (row_annotations[column].displayCharacter.indexOf(ss+32) > -1)
              {
-            
-               ss = (char) (ss+32);
               
+               ss = (char) (ss+32);
+               
                
              }
            }
-
            
+               
           if (!validRes || (ss != lastSS))
-          {
-                 
-     
+             {
+               
+               
             if (x > -1)
-            {
-        
-               
+             {
+               
+               
               int nb_annot=x-temp;
               //System.out.println("\t type :"+lastSS+"\t x :"+x+"\t nbre annot :"+nb_annot);
               switch (lastSS)
-              {
-              
+             {
+               
               case '$':
                 drawHelixAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
                         column, validRes, validEnd);
@@ -666,8 +687,6 @@ public class AnnotationRenderer
 
               case '(': // Stem case for RNA secondary structure
               case ')': // and opposite direction
-                 
-                 
                 drawStemAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
                         column, validRes, validEnd);
                 temp=x;
@@ -732,7 +751,7 @@ public class AnnotationRenderer
               case 'z':
                  
                  Color nonCanColor= getNotCanonicalColor(lastSS);
-                 drawPseudoNode(g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes,
+                 drawNotCanonicalAnnot(g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes,
                           column, validRes, validEnd);
                  temp=x;
                  break;
@@ -859,13 +878,10 @@ public class AnnotationRenderer
         case 'Z':
         case 'z':
                //System.out.println(lastSS);
-               
           Color nonCanColor = getNotCanonicalColor(lastSS);
-         drawPseudoNode(g,nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes,
+         drawNotCanonicalAnnot(g,nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes,
                     column, validRes, validEnd);
-       
          break;
-         
         default:
           drawGlyphLine(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
                   column, validRes, validEnd);
@@ -892,7 +908,6 @@ public class AnnotationRenderer
               {
                 aa[gg].visible = false;
               }
-
               if (aa[gg].graphMax > groupmax)
               {
                 groupmax = aa[gg].graphMax;
@@ -922,8 +937,8 @@ public class AnnotationRenderer
         }
         else if (row.graph == AlignmentAnnotation.BAR_GRAPH)
         {
-          drawBarGraph(g, row, row_annotations, startRes, endRes, row.graphMin,
-                  row.graphMax, y);
+          drawBarGraph(g, row, row_annotations, startRes, endRes,
+                  row.graphMin, row.graphMax, y, renderHistogram,renderProfile,normaliseProfile);
         }
       }
     } else {
@@ -1162,7 +1177,7 @@ public class AnnotationRenderer
 
   public void drawBarGraph(Graphics g, AlignmentAnnotation _aa,
           Annotation[] aa_annotations, int sRes, int eRes, float min,
-          float max, int y)
+          float max, int y, boolean renderHistogram,boolean renderProfile,boolean normaliseProfile)
   {
     if (sRes > aa_annotations.length)
     {
@@ -1186,23 +1201,6 @@ public class AnnotationRenderer
 
     int column;
     int aaMax = aa_annotations.length - 1;
-    boolean renderHistogram = true, renderProfile = true, normaliseProfile = false;
-    // if (aa.autoCalculated && aa.label.startsWith("Consensus"))
-    {
-      // TODO: generalise this to have render styles for consensus/profile data
-      if (_aa.groupRef != null)
-      {
-        renderHistogram = _aa.groupRef.isShowConsensusHistogram();
-        renderProfile = _aa.groupRef.isShowSequenceLogo();
-        normaliseProfile = _aa.groupRef.isNormaliseSequenceLogo();
-      }
-      else
-      {
-        renderHistogram = av_renderHistogram;
-        renderProfile = av_renderProfile;
-        normaliseProfile = av_normaliseProfile;
-      }
-    }
     while (x < eRes - sRes)
     {
       column = sRes + x;