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!
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;
{
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 && c<profl[0];)
+ {
+ dc[0] = (char) profl[c++];
+ wdth = av.charWidth;
+ wdth/=(float) fm
+ .charsWidth(dc,0,1);
+
+ if (c>2)
+ {
+ 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)
{
}
}
+ 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)