From: jprocter Date: Fri, 21 Aug 2009 11:18:37 +0000 (+0000) Subject: render sequence logo over consensus histogram X-Git-Tag: Release_2_5~198 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=6826478f78048828d643722f0e7bb638f1ab3f83;p=jalview.git render sequence logo over consensus histogram --- diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 743e1fa..d705367 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -20,10 +20,16 @@ package jalview.gui; import java.awt.*; import java.awt.event.*; +import java.awt.font.LineMetrics; +import java.awt.geom.AffineTransform; import java.awt.image.*; +import java.util.Hashtable; + import javax.swing.*; +import jalview.analysis.AAFrequency; import jalview.datamodel.*; +import jalview.schemes.ColourSchemeI; /** * DOCUMENT ME! @@ -1239,11 +1245,16 @@ public class AnnotationPanel extends JPanel implements MouseListener, public void drawBarGraph(Graphics g, AlignmentAnnotation aa, int sRes, int eRes, float min, float max, int y) { + ColourSchemeI profcolour = av.getGlobalColourScheme(); + if (profcolour==null) + { + profcolour = new jalview.schemes.ZappoColourScheme(); + } if (sRes > aa.annotations.length) { return; } - + Font ofont = g.getFont(); eRes = Math.min(eRes, aa.annotations.length); int x = 0, y1 = y, y2 = y; @@ -1297,9 +1308,43 @@ public class AnnotationPanel extends JPanel implements MouseListener, { g.fillRect(x * av.charWidth, y1, av.charWidth, y2 - y1); } - + // draw profile if available + if (aa.annotations[column].value!=0) + { + int profl[] = getProfileFor(aa,column); + int ht = y1,htn=y2-y1;//aa.graphHeight; + float wdth; + double ht2=0; + char[] dc = new char[1]; + LineMetrics lm; + for (int c=1;profl!=null && c2) + { + ht+=(int)ht2; + } + { + //if (aa.annotations[column].value==0) { + // g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(wdth, (ht2=(aa.graphHeight*0.1/av.charHeight))))); + // ht = y2-(int)ht2; + //} else { + g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(wdth, (ht2=(htn*((double)profl[c++])/100.0))/av.charHeight))); + lm = g.getFontMetrics().getLineMetrics(dc,0,1, g); + //htn -=ht2; + //} + g.setColor(profcolour.findColour(dc[0])); // (av.globalColourScheme!=null) ? );// try to get a colourscheme for the group(aa.groupRef.cs==null) ? av.textColour2 : cs.findColour(dc)); + g.drawChars(dc,0,1,x*av.charWidth, (int) (ht+lm.getHeight())); + // ht+=g.getFontMetrics().getAscent()-g.getFontMetrics().getDescent(); + } + } + g.setFont(ofont); + } x++; - } if (aa.threshold != null) { @@ -1315,6 +1360,19 @@ public class AnnotationPanel extends JPanel implements MouseListener, } } + private int[] getProfileFor(AlignmentAnnotation aa, int column) + { + if (aa.groupRef!=null && aa.groupRef.consensusData!=null) { + return AAFrequency.extractProfile(aa.groupRef.consensusData[column],aa.groupRef.getIgnoreGapsConsensus()); + } + // TODO extend annotation row to enable dynamic and static profile data to be stored + if (aa.autoCalculated && aa.groupRef==null && aa.sequenceRef==null && aa.label.equals("Consensus")) + { + return AAFrequency.extractProfile(av.hconsensus[column],av.getIgnoreGapsConsensus()); + } + return null; + } + // used by overview window public void drawGraph(Graphics g, AlignmentAnnotation aa, int width, int y, int sRes, int eRes)