JAL-2371 remove ColourSchemeI.findColour(c), pure interface groovy
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 9 Jan 2017 11:54:27 +0000 (11:54 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 9 Jan 2017 11:54:27 +0000 (11:54 +0000)
script

examples/groovy/colourSchemes.groovy
src/MCview/PDBChain.java
src/jalview/appletgui/UserDefinedColours.java
src/jalview/ext/jmol/JalviewJmolBinding.java
src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java
src/jalview/gui/UserDefinedColours.java
src/jalview/schemes/ColourSchemeI.java
src/jalview/schemes/ResidueColourScheme.java
test/jalview/schemes/ColourSchemePropertyTest.java

index 27e179b..a5b60c8 100644 (file)
@@ -1,54 +1,92 @@
 import java.awt.Color;
-import jalview.schemes.ResidueColourScheme;
+import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemes;
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.SequenceI;
+import jalview.datamodel.SequenceCollectionI;
 
 /*
  * Example script that registers two new alignment colour schemes
  */
 
 /*
- * Class that defines a colour scheme where odd columns are red,
- * even numbered columns are blue, and gaps are yellow  
+ * Closure that defines a colour scheme where consensus residues are pink,
+ * other residues are red in odd columns and blue in even columns, and
+ * gaps are yellow  
  */
-class Stripy extends ResidueColourScheme {
-    Stripy() { }
-    String getSchemeName() { "stripy" }
-    Stripy getInstance(AnnotatedCollectionI coll, Map map) { new Stripy() }
-    Color findColour(char res, int col, SequenceI seq) 
-    {
+def candy
+candy = { ->
+  [
+    /*
+     * name shown in the colour menu
+     */
+    getSchemeName: { -> 'candy' },
+    
+    /*
+     * to make a new instance for each alignment view
+     */
+    getInstance: { AnnotatedCollectionI coll, Map<SequenceI, SequenceCollectionI> map -> candy() },
+    
+    /*
+     * method only needed if colour scheme has to recalculate
+     * values when an alignment is modified
+     */
+    alignmentChanged: { AnnotatedCollectionI coll, Map<SequenceI, SequenceCollectionI> map -> },
+    
+    /*
+     * determine colour for a residue at an aligned position of a
+     * sequence, given consensus residue(s) for the column and the
+     * consensus percentage identity score for the column
+     */
+    findColour: { char res, int col, SequenceI seq, String consensus, float pid -> 
         if (res == ' ' || res == '-' || res == '.') 
         {
             Color.yellow
-         } else if (col % 2 == 0) 
-         {
+        } else if (consensus.contains(String.valueOf(res)))
+        {
+            Color.pink
+        } else if (col % 2 == 0) 
+        {
             Color.blue
-         } else 
-         {
+        } else 
+        {
             Color.red
-         }
-    }
+        }
+    },
+    
+    /*
+     * true means applicable to nucleotide or peptide data
+     */
+    isApplicableTo: {AnnotatedCollectionI coll -> true},
+    
+    /*
+     * simple colour schemes are those that depend on the residue
+     * only (these are also available to colour structure viewers)
+     */
+    isSimple: { false }
+ ] as ColourSchemeI
 }
 
 /*
- * Class that defines a colour scheme graduated 
- * (approximately) by amino acid weight  
+ * A closure that defines a colour scheme graduated 
+ * (approximately) by amino acid weight
+ * here from lightest (G) Blue, to heaviest (W) Red
  */
-class ByWeight extends ResidueColourScheme {
-    int min = 75
-    int max = 204
-    ByWeight() { }
-    boolean isPeptideSpecific() {true}
-    String getSchemeName() { "By Weight" }
-    ByWeight getInstance(AnnotatedCollectionI coll, Map map) { new ByWeight() }
-    Color makeColour(int weight) 
-    {
-      int i = 255 * (weight - min) / (max - min);
-      new Color(i, 0, i);
-    }
-    Color findColour(char res, int col, SequenceI seq) 
-    {
+def makeColour = { weight -> 
+    minWeight = 75 // Glycine
+    maxWeight = 204 // Tryptophan
+    int i = 255 * (weight - minWeight) / (maxWeight - minWeight);
+    new Color(i, 0, 255-i);
+}
+def byWeight
+byWeight = { ->
+  [
+    getSchemeName: { 'By Weight' },
+    isApplicableTo: { coll -> true },
+    alignmentChanged: { coll, map -> },
+    getInstance: { coll, map -> byWeight() },
+    isSimple: { true },
+    findColour: {res, col, seq, consensus, pid -> 
         switch (res) {
           case ' ':
           case '-':
@@ -109,7 +147,8 @@ class ByWeight extends ResidueColourScheme {
             makeColour(150)
         }
       }
+  ] as ColourSchemeI
 }
 
-ColourSchemes.instance.registerColourScheme(new Stripy())
-ColourSchemes.instance.registerColourScheme(new ByWeight())
+ColourSchemes.instance.registerColourScheme(candy())
+ColourSchemes.instance.registerColourScheme(byWeight())
index 783a4e2..c40cdda 100755 (executable)
@@ -516,10 +516,12 @@ public class PDBChain
       try
       {
         index = ResidueProperties.aa3Hash.get(b.at1.resName).intValue();
-        b.startCol = cs.findColour(ResidueProperties.aa[index].charAt(0));
+        b.startCol = cs.findColour(ResidueProperties.aa[index].charAt(0),
+                0, null, null, 0f);
 
         index = ResidueProperties.aa3Hash.get(b.at2.resName).intValue();
-        b.endCol = cs.findColour(ResidueProperties.aa[index].charAt(0));
+        b.endCol = cs.findColour(ResidueProperties.aa[index].charAt(0), 0,
+                null, null, 0f);
 
       } catch (Exception e)
       {
index c912dc3..aecc0c9 100644 (file)
@@ -410,7 +410,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
     Color col = Color.white;
     if (oldColourScheme != null && oldColourScheme.isSimple())
     {
-      col = oldColourScheme.findColour(aa.charAt(0));
+      col = oldColourScheme.findColour(aa.charAt(0), 0, null, null, 0f);
     }
     button.setBackground(col);
     oldColours.addElement(col);
index b4586ca..bf80831 100644 (file)
@@ -168,6 +168,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     releaseUIResources();
   }
 
+  @Override
   public void colourByChain()
   {
     colourBySequence = false;
@@ -177,6 +178,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     evalStateCommand("select *;color chain");
   }
 
+  @Override
   public void colourByCharge()
   {
     colourBySequence = false;
@@ -1264,7 +1266,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     {
       char res = resName.length() == 3 ? ResidueProperties
               .getSingleCharacterCode(resName) : resName.charAt(0);
-      Color col = cs.findColour(res);
+      Color col = cs.findColour(res, 0, null, null, 0f);
       command.append("select " + resName + ";color[" + col.getRed() + ","
               + col.getGreen() + "," + col.getBlue() + "];");
     }
index 2171815..b05c168 100644 (file)
@@ -929,7 +929,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
     {
       char res = resName.length() == 3 ? ResidueProperties
               .getSingleCharacterCode(resName) : resName.charAt(0);
-      Color col = cs.findColour(res);
+      Color col = cs.findColour(res, 0, null, null, 0f);
       command.append("color " + col.getRed() / normalise + ","
               + col.getGreen() / normalise + "," + col.getBlue()
               / normalise + " ::" + resName + ";");
index 8af0af0..a368e74 100755 (executable)
@@ -435,7 +435,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
       col = Color.white;
       if (oldColourScheme != null && oldColourScheme.isSimple())
       {
-        col = oldColourScheme.findColour(residue.charAt(0));
+        col = oldColourScheme.findColour(residue.charAt(0), 0, null, null,
+                0f);
       }
     }
 
index fccc31b..f16ca21 100755 (executable)
@@ -30,15 +30,6 @@ import java.util.Map;
 public interface ColourSchemeI
 {
   /**
-   * Returns the colour for the given character. For use when the colour depends
-   * only on the symbol.
-   * 
-   * @param c
-   * @return
-   */
-  Color findColour(char c);
-
-  /**
    * Returns the possibly context dependent colour for the given symbol at the
    * aligned position in the given sequence. For example, the colour may depend
    * on the symbol's relationship to the consensus residue for the column.
index 892c3e8..358417b 100755 (executable)
@@ -87,7 +87,6 @@ public abstract class ResidueColourScheme implements ColourSchemeI
   /**
    * Find a colour without an index in a sequence
    */
-  @Override
   public Color findColour(char c)
   {
     Color colour = Color.white;
index 2854784..c1c6846 100644 (file)
@@ -105,7 +105,8 @@ public class ColourSchemePropertyTest
     /*
      * explicit aa colours
      */
-    ColourSchemeI cs = ColourSchemeProperty.getColourScheme(al,
+    UserColourScheme cs = (UserColourScheme) ColourSchemeProperty
+            .getColourScheme(al,
             "R,G=red;C=blue;c=green;Q=10,20,30;S,T=11ffdd");
     assertEquals(cs.findColour('H'), Color.white);
     assertEquals(cs.findColour('R'), Color.red);