4 package jalview.renderer;
6 import jalview.api.AlignViewportI;
7 import jalview.datamodel.AlignmentAnnotation;
8 import jalview.datamodel.Annotation;
9 import jalview.datamodel.ColumnSelection;
10 import jalview.datamodel.ContactListI;
11 import jalview.datamodel.ContactRange;
12 import jalview.renderer.api.AnnotationRowRendererI;
14 import java.awt.Color;
15 import java.awt.Graphics;
21 public class ContactMapRenderer implements AnnotationRowRendererI
25 public void renderRow(Graphics g, int charWidth, int charHeight,
26 boolean hasHiddenColumns, AlignViewportI viewport,
27 ColumnSelection columnSelection, AlignmentAnnotation _aa,
28 Annotation[] aa_annotations, int sRes, int eRes, float min,
31 if (sRes > aa_annotations.length)
35 eRes = Math.min(eRes, aa_annotations.length);
39 g.setColor(Color.pink);
41 g.drawLine(x, y2, (eRes - sRes) * charWidth, y2);
44 int aaMax = aa_annotations.length - 1;
45 while (x < eRes - sRes)
50 column = columnSelection.adjustForHiddenColumns(column);
58 if (aa_annotations[column] == null)
64 * {profile type, #values, total count, char1, pct1, char2, pct2...}
66 ContactListI contacts = viewport.getContactList(_aa, column);
74 // cell height to render
75 double scale = (_aa.graphHeight < contacts.getContactHeight()) ? 1
76 : (((double) _aa.graphHeight) / (double) contacts
78 int cstart, cend = -1;
79 for (int ht = y2, eht = y2 - _aa.graphHeight; ht >= eht; ht -= scale)
83 + (contacts.getContactHeight() * (ht - eht) / _aa.graphHeight);
84 // TODO show maximum colour for range - sort of done
85 // also need a 'getMaxPosForRange(start,end)'
86 g.setColor(getColorForRange(contacts, cstart, cend));
90 g.fillRect(x * charWidth, ht, charWidth, 1 + (int) scale);
94 g.drawLine(x * charWidth, ht, (x + 1) * charWidth, ht);
102 Color minColor = Color.white, maxColor = Color.magenta;
106 Color shadeFor(float value)
108 return jalview.util.ColorUtils.getGraduatedColour(value, 0, minColor,
112 public Color getColorForRange(ContactListI cl, int i, int j)
114 ContactRange cr = cl.getRangeFor(i, j);
115 // average for moment - probably more interested in maxIntProj though
116 return shadeFor((float) cr.getMean());