JAL-2759 Keep numColumns up to date
[jalview.git] / examples / groovy / colourUnconserved.groovy
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 import java.awt.Color
22 import jalview.schemes.ColourSchemeI
23 import jalview.schemes.ColourSchemes
24 import jalview.datamodel.AnnotatedCollectionI
25 import jalview.datamodel.SequenceI
26 import jalview.datamodel.SequenceCollectionI
27 import jalview.util.Comparison
28
29 /*
30  * Closure that defines a colour scheme where non-consensus residues are pink,
31  * other residues (and gaps) are white
32  */
33 def unconserved
34 unconserved = { ->
35   [
36     /*
37      * name shown in the colour menu
38      */
39     getSchemeName: { -> 'Unconserved' },
40     
41     /*
42      * to make a new instance for each alignment view
43      */
44     getInstance: { AnnotatedCollectionI coll, Map<SequenceI, SequenceCollectionI> map -> unconserved() },
45     
46     /*
47      * method only needed if colour scheme has to recalculate
48      * values when an alignment is modified
49      */
50     alignmentChanged: { AnnotatedCollectionI coll, Map<SequenceI, SequenceCollectionI> map -> },
51     
52     /*
53      * determine colour for a residue at an aligned position of a
54      * sequence, given consensus residue(s) for the column and the
55      * consensus percentage identity score for the column
56      */
57     findColour: { char res, int col, SequenceI seq, String consensus, float pid -> 
58         if ('a' <= res && res <= 'z')
59         {
60             res -= ('a' - 'A');
61         }
62         if (Comparison.isGap(res) || consensus.contains(String.valueOf(res)))
63         {
64             Color.white
65         } else 
66         {
67             Color.pink
68         }
69     },
70     
71     /*
72      * true means applicable to nucleotide or peptide data
73      */
74     isApplicableTo: {AnnotatedCollectionI coll -> true},
75     
76     /*
77      * simple colour schemes are those that depend on the residue
78      * only (these are also available to colour structure viewers)
79      */
80     isSimple: { false }
81  ] as ColourSchemeI
82 }
83
84 ColourSchemes.instance.registerColourScheme(unconserved())