/*\r
* Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
*\r
* This program is free software; you can redistribute it and/or\r
* modify it under the terms of the GNU General Public License\r
\r
public class AnnotationColourGradient extends ResidueColourScheme\r
{\r
+ public static int NO_THRESHOLD = -1;\r
+ public static int BELOW_THRESHOLD = 0;\r
+ public static int ABOVE_THRESHOLD = 1;\r
+\r
AlignmentAnnotation annotation;\r
- boolean aboveAnnotationThreshold = false;\r
+ int aboveAnnotationThreshold = -1;\r
+\r
+ GraphLine annotationThreshold;\r
\r
float r1, g1, b1, rr, gg, bb, dr, dg, db;\r
- float range;\r
+ float range = 0;\r
+\r
+ ColourSchemeI colourScheme;\r
+\r
+ /**\r
+ * Creates a new AnnotationColourGradient object.\r
+ */\r
+ public AnnotationColourGradient(AlignmentAnnotation annotation,\r
+ ColourSchemeI originalColour,\r
+ int aboveThreshold)\r
+ {\r
+ if(originalColour instanceof AnnotationColourGradient)\r
+ {\r
+ colourScheme = ((AnnotationColourGradient)originalColour).colourScheme;\r
+ }\r
+ else\r
+ colourScheme = originalColour;\r
+\r
+ this.annotation = annotation;\r
+\r
+ aboveAnnotationThreshold = aboveThreshold;\r
+\r
+ if(aboveThreshold!=NO_THRESHOLD && annotation.threshold!=null)\r
+ annotationThreshold = annotation.threshold;\r
+ }\r
\r
/**\r
* Creates a new AnnotationColourGradient object.\r
*/\r
public AnnotationColourGradient(AlignmentAnnotation annotation,\r
- Color minColour, Color maxColour, boolean aboveThreshold)\r
+ Color minColour, Color maxColour, int aboveThreshold)\r
{\r
this.annotation = annotation;\r
\r
aboveAnnotationThreshold = aboveThreshold;\r
\r
+ if(aboveThreshold!=NO_THRESHOLD && annotation.threshold!=null)\r
+ annotationThreshold = annotation.threshold;\r
+\r
r1 = minColour.getRed();\r
g1 = minColour.getGreen();\r
b1 = minColour.getBlue();\r
\r
}\r
\r
+\r
+ public String getAnnotation()\r
+ {\r
+ return annotation.label;\r
+ }\r
+\r
+ public int getAboveThreshold()\r
+ {\r
+ return aboveAnnotationThreshold;\r
+ }\r
+\r
+ public float getAnnotationThreshold()\r
+ {\r
+ if(annotationThreshold==null)\r
+ return 0;\r
+ else\r
+ return annotationThreshold.value;\r
+ }\r
+\r
+ public ColourSchemeI getBaseColour()\r
+ {\r
+ return colourScheme;\r
+ }\r
+\r
public Color getMinColour()\r
{\r
return new Color( (int) r1, (int) g1, (int) b1);\r
*\r
* @return DOCUMENT ME!\r
*/\r
- public Color findColour(String n)\r
+ public Color findColour(char c)\r
{\r
- System.out.println("AnnotationColourGradient findColour(string)");\r
return Color.red;\r
}\r
\r
*\r
* @return DOCUMENT ME!\r
*/\r
- public Color findColour(String n, int j)\r
+ public Color findColour(char c, int j)\r
{\r
- if ((threshold == 0) || aboveThreshold(n, j))\r
+ Color currentColour = Color.white;\r
+\r
+ if ((threshold == 0) || aboveThreshold(c, j))\r
{\r
- if( j+1>annotation.annotations.length || annotation.annotations[j]==null)\r
- currentColour = Color.white;\r
- else\r
+ if( j<annotation.annotations.length\r
+ && annotation.annotations[j]!=null\r
+ && !jalview.util.Comparison.isGap(c))\r
{\r
- if(!aboveAnnotationThreshold || (annotation.graphLines!=null\r
- && annotation.annotations[j].value>=annotation.getGraphLine(0).value))\r
+ if( aboveAnnotationThreshold==NO_THRESHOLD\r
+ || (annotationThreshold!=null && aboveAnnotationThreshold==ABOVE_THRESHOLD && annotation.annotations[j].value>=annotationThreshold.value)\r
+ || (annotationThreshold!=null && aboveAnnotationThreshold==BELOW_THRESHOLD && annotation.annotations[j].value<=annotationThreshold.value))\r
{\r
+ if(colourScheme!=null)\r
+ {\r
+ currentColour = colourScheme.findColour(c, j);\r
+ }\r
+ else if(range!=0)\r
+ {\r
dr = rr *\r
- ((annotation.annotations[j].value-annotation.graphMin) / range )\r
- +r1;\r
+ ( (annotation.annotations[j].value - annotation.graphMin) /\r
+ range)\r
+ + r1;\r
dg = gg *\r
- ((annotation.annotations[j].value-annotation.graphMin) / range )\r
- +g1;\r
+ ( (annotation.annotations[j].value - annotation.graphMin) /\r
+ range)\r
+ + g1;\r
db = bb *\r
- ((annotation.annotations[j].value-annotation.graphMin) / range )\r
- +b1;\r
+ ( (annotation.annotations[j].value - annotation.graphMin) /\r
+ range)\r
+ + b1;\r
\r
- currentColour = new Color( (int) dr, (int) dg, (int) db);\r
+ currentColour = new Color( (int) dr, (int) dg, (int) db);\r
+ }\r
}\r
- else\r
- currentColour = Color.white;\r
}\r
}\r
- else\r
- {\r
- return Color.white;\r
- }\r
\r
if(conservationColouring)\r
- applyConservation(j);\r
+ currentColour = applyConservation(currentColour, j);\r
\r
return currentColour;\r
}\r