Merge branch 'features/JAL-2349_matrixvis' into merge/develop_JAL-2340_matrixvis
[jalview.git] / src / jalview / renderer / ContactMapRenderer.java
index 809ced0..7413e65 100644 (file)
@@ -8,6 +8,8 @@ import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.ContactListI;
+import jalview.datamodel.ContactRange;
+import jalview.datamodel.HiddenColumns;
 import jalview.renderer.api.AnnotationRowRendererI;
 
 import java.awt.Color;
@@ -22,7 +24,7 @@ public class ContactMapRenderer implements AnnotationRowRendererI
 
   @Override
   public void renderRow(Graphics g, int charWidth, int charHeight,
-          boolean hasHiddenColumns, AlignViewportI viewport,
+          boolean hasHiddenColumns, AlignViewportI viewport, HiddenColumns hiddenColumns,
           ColumnSelection columnSelection, AlignmentAnnotation _aa,
           Annotation[] aa_annotations, int sRes, int eRes, float min,
           float max, int y)
@@ -46,7 +48,7 @@ public class ContactMapRenderer implements AnnotationRowRendererI
       column = sRes + x;
       if (hasHiddenColumns)
       {
-        column = columnSelection.adjustForHiddenColumns(column);
+        column = hiddenColumns.visibleToAbsoluteColumn(column);
       }
 
       if (column > aaMax)
@@ -63,7 +65,6 @@ public class ContactMapRenderer implements AnnotationRowRendererI
        * {profile type, #values, total count, char1, pct1, char2, pct2...}
        */
       ContactListI contacts = viewport.getContactList(_aa, column);
-
       if (contacts == null)
       {
         return;
@@ -71,17 +72,17 @@ public class ContactMapRenderer implements AnnotationRowRendererI
 
       // cell height to render
       double scale = (_aa.graphHeight < contacts.getContactHeight()) ? 1
-              : (((double) _aa.graphHeight) / (double) contacts
-                      .getContactHeight());
+              : ((double) _aa.graphHeight)
+                      / (double) contacts.getContactHeight();
       int cstart, cend = -1;
       for (int ht = y2, eht = y2 - _aa.graphHeight; ht >= eht; ht -= scale)
       {
         cstart = cend + 1;
-        cend = -1
-                + (contacts.getContactHeight() * (ht - eht) / _aa.graphHeight);
+        cend = Math.max(cstart + 1, contacts.getContactHeight()
+                * ((ht - y2) / _aa.graphHeight));
         // TODO show maximum colour for range - sort of done
         // also need a 'getMaxPosForRange(start,end)'
-        g.setColor(contacts.getColorForRange(cstart, cend));
+        g.setColor(getColorForRange(min, max, contacts, cstart, cend));
 
         if (scale > 1)
         {
@@ -96,4 +97,22 @@ public class ContactMapRenderer implements AnnotationRowRendererI
     }
 
   }
+
+  Color minColor = Color.white, maxColor = Color.magenta;
+
+
+  Color shadeFor(float min, float max, float value)
+  {
+    return jalview.util.ColorUtils.getGraduatedColour(value, 0, minColor,
+            max, maxColor);
+  }
+
+  public Color getColorForRange(float min, float max, ContactListI cl,
+          int i, int j)
+  {
+    ContactRange cr = cl.getRangeFor(i, j);
+    // average for moment - probably more interested in maxIntProj though
+    return shadeFor(min, max, (float) cr.getMean());
+  }
+
 }