JAL-1066 - T-Coffee color scheme + signature change on findColour method
[jalview.git] / src / jalview / schemes / TCoffeeColourScheme.java
diff --git a/src/jalview/schemes/TCoffeeColourScheme.java b/src/jalview/schemes/TCoffeeColourScheme.java
new file mode 100644 (file)
index 0000000..740c15e
--- /dev/null
@@ -0,0 +1,66 @@
+package jalview.schemes;
+
+import jalview.io.TCoffeeScoreFile;
+
+import java.awt.Color;
+
+/**
+ * Defines the color score for T-Coffee MSA 
+ * <p>
+ * See http://tcoffee.org
+ * 
+ * 
+ * @author Paolo Di Tommaso
+ *
+ */
+public class TCoffeeColourScheme extends ResidueColourScheme {
+
+       static final Color[] colors = {
+               new Color( 102, 102, 255 ),     // #6666FF
+               new Color( 0, 255, 0),          // #00FF00
+               new Color( 102, 255, 0),        // #66FF00
+               new Color( 204, 255, 0),        // #CCFF00
+               new Color( 255, 255, 0),        // #FFFF00
+               new Color( 255, 204, 0),        // #FFCC00
+               new Color( 255, 153, 0),        // #FF9900
+               new Color( 255, 102, 0),        // #FF6600
+               new Color( 255, 51, 0),         // #FF3300
+               new Color( 255, 34, 0)          // #FF2000
+       };
+
+
+       byte[][] scoreMatrix = null;
+
+       /**
+        * Initialize the color sheme based on the content of the T-Coffee score file 
+        * 
+        * @param scoreFile
+        */
+       public TCoffeeColourScheme(TCoffeeScoreFile scoreFile) {
+
+               scoreMatrix = scoreFile != null ? scoreFile.getScoresArray() : null;
+
+       }
+
+       @Override
+       public Color findColour(char c, int j, int sequenceIndex) {
+
+               if( scoreMatrix == null ) {
+                       return Color.white;
+               }
+               
+               if( sequenceIndex<0  || sequenceIndex >= scoreMatrix.length ) {
+                       System.out.printf("Sequence index out of range for the T-Coffee color scheme. Index:  %s\n", sequenceIndex);
+                       return Color.white;
+               }
+
+               byte[] seqScores = scoreMatrix[sequenceIndex]; 
+               if( j < 0 || j>= seqScores.length ) {
+                       System.out.printf("Residue index out of range for the T-Coffee color scheme. Sequence %s - residue: %s\n", sequenceIndex, j);
+                       return Color.white;
+               }
+               
+               byte val = seqScores[j];
+               return val >= 0 && val < colors.length ? colors[val] : Color.white;
+       }
+}