X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Frenderer%2FContactMapRenderer.java;h=7413e65714fa9805ec52f43725e115c040c3d01b;hb=f14071cd4c32feeacdb6d4638ef4e3b52071f2f3;hp=313e3dbe07100eb921ed48a9ef30961a7f293761;hpb=6ac2062a667090f8e83082ba1ad2763b1b92c0e1;p=jalview.git diff --git a/src/jalview/renderer/ContactMapRenderer.java b/src/jalview/renderer/ContactMapRenderer.java index 313e3db..7413e65 100644 --- a/src/jalview/renderer/ContactMapRenderer.java +++ b/src/jalview/renderer/ContactMapRenderer.java @@ -8,10 +8,11 @@ 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; -import java.awt.Font; import java.awt.Graphics; /** @@ -20,20 +21,10 @@ import java.awt.Graphics; */ public class ContactMapRenderer implements AnnotationRowRendererI { - /* - * - * // TODO Auto-generated method stub - void drawProfileDensity(Graphics g, AlignmentAnnotation _aa, - Annotation[] aa_annotations, int sRes, int eRes, float min, - float max, int y) - { - * - * - */ @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) @@ -42,7 +33,6 @@ public class ContactMapRenderer implements AnnotationRowRendererI { return; } - Font ofont = g.getFont(); eRes = Math.min(eRes, aa_annotations.length); int x = 0, y2 = y; @@ -58,7 +48,7 @@ public class ContactMapRenderer implements AnnotationRowRendererI column = sRes + x; if (hasHiddenColumns) { - column = columnSelection.adjustForHiddenColumns(column); + column = hiddenColumns.visibleToAbsoluteColumn(column); } if (column > aaMax) @@ -75,32 +65,54 @@ public class ContactMapRenderer implements AnnotationRowRendererI * {profile type, #values, total count, char1, pct1, char2, pct2...} */ ContactListI contacts = viewport.getContactList(_aa, column); - if (contacts == null) { return; } - - int scale = Math - .max(1, _aa.graphHeight / contacts.getContactHeight()); - int step = _aa.graphHeight / scale; - int valuesProcessed = 0; - // profl[1] is the number of values in the profile - for (int stp = 0, ht = y2, eht = y2 + _aa.graphHeight; ht < eht; ht += scale, stp++) + // cell height to render + double scale = (_aa.graphHeight < contacts.getContactHeight()) ? 1 + : ((double) _aa.graphHeight) + / (double) contacts.getContactHeight(); + int cstart, cend = -1; + for (int ht = y2, eht = y2 - _aa.graphHeight; ht >= eht; ht -= scale) { - valuesProcessed = stp * step; - g.setColor(contacts.getColorForScore(stp * step)); + cstart = cend + 1; + 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(getColorForRange(min, max, contacts, cstart, cend)); if (scale > 1) { - g.fillRect(x * charWidth, ht, charWidth, scale); - } else { + g.fillRect(x * charWidth, ht, charWidth, 1 + (int) scale); + } + else + { g.drawLine(x * charWidth, ht, (x + 1) * charWidth, ht); } } + x++; } - x++; } + + 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()); + } + }