2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
3 * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
5 * This file is part of Jalview.
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 of the License, or (at your option) any later version.
11 * Jalview is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
18 package jalview.schemes;
20 import jalview.datamodel.AnnotatedCollectionI;
22 import java.awt.Color;
25 * ColourSchemeProperty binds names to hardwired colourschemes and tries to deal
26 * intelligently with mapping unknown names to user defined colourschemes (that
27 * exist or can be created from the string representation of the colourscheme
28 * name - either a hex RGB triplet or a named colour under java.awt.color ). The
29 * values of the colourscheme constants is important for callers of
30 * getColourName(int i), since it can be used to enumerate the set of built in
31 * colours. The FIRST_COLOUR and LAST_COLOUR symbols are provided for this.
36 public class ColourSchemeProperty
38 /** Undefined Colourscheme Index */
39 public static final int UNDEFINED = -1;
41 /** for schemes defined on the fly */
42 public static final int USER_DEFINED = 0;
44 /** No Colourscheme Index */
45 public static final int NONE = 1;
48 public static final int CLUSTAL = 2;
51 public static final int BLOSUM = 3;
54 public static final int PID = 4;
57 public static final int ZAPPO = 5;
60 public static final int TAYLOR = 6;
63 public static final int HYDROPHOBIC = 7;
66 public static final int HELIX = 8;
69 public static final int STRAND = 9;
72 public static final int TURN = 10;
75 public static final int BURIED = 11;
78 public static final int NUCLEOTIDE = 12;
83 public static final int PURINEPYRIMIDINE = 13;
85 public static final int COVARIATION = 14;
87 public static final int TCOFFEE = 15;
90 * index of first colourscheme (includes 'None')
92 public static final int FIRST_COLOUR = NONE;
94 public static final int LAST_COLOUR = NUCLEOTIDE;
102 * @return DOCUMENT ME!
104 public static int getColourIndexFromName(String name)
108 if (name.equalsIgnoreCase("Clustal"))
112 else if (name.equalsIgnoreCase("Blosum62"))
116 else if (name.equalsIgnoreCase("% Identity"))
120 else if (name.equalsIgnoreCase("Zappo"))
124 else if (name.equalsIgnoreCase("Taylor"))
128 else if (name.equalsIgnoreCase("Hydrophobic"))
132 else if (name.equalsIgnoreCase("Helix Propensity"))
136 else if (name.equalsIgnoreCase("Strand Propensity"))
140 else if (name.equalsIgnoreCase("Turn Propensity"))
144 else if (name.equalsIgnoreCase("Buried Index"))
148 else if (name.equalsIgnoreCase("Nucleotide"))
152 else if (name.equalsIgnoreCase("T-Coffee Scores"))
157 else if (name.equalsIgnoreCase("User Defined"))
161 else if (name.equalsIgnoreCase("None"))
165 else if (name.equalsIgnoreCase("Purine/Pyrimidine"))
167 ret = PURINEPYRIMIDINE;
169 // else if (name.equalsIgnoreCase("Covariation"))
171 // ret = COVARIATION;
183 * @return DOCUMENT ME!
185 public static String getColourName(ColourSchemeI cs)
190 if (cs instanceof ClustalxColourScheme)
194 else if (cs instanceof Blosum62ColourScheme)
198 else if (cs instanceof PIDColourScheme)
202 else if (cs instanceof ZappoColourScheme)
206 else if (cs instanceof TaylorColourScheme)
210 else if (cs instanceof HydrophobicColourScheme)
214 else if (cs instanceof HelixColourScheme)
218 else if (cs instanceof StrandColourScheme)
222 else if (cs instanceof TurnColourScheme)
226 else if (cs instanceof BuriedColourScheme)
230 else if (cs instanceof NucleotideColourScheme)
234 else if (cs instanceof PurinePyrimidineColourScheme)
236 index = PURINEPYRIMIDINE;
238 else if (cs instanceof TCoffeeColourScheme)
243 * else if (cs instanceof CovariationColourScheme) { index = COVARIATION; }
245 else if (cs instanceof UserColourScheme)
247 if ((((UserColourScheme) cs).getName() != null)
248 && (((UserColourScheme) cs).getName().length() > 0))
250 return ((UserColourScheme) cs).getName();
252 // get default colourscheme name
253 index = USER_DEFINED;
256 return getColourName(index);
265 * @return DOCUMENT ME!
267 public static String getColourName(int index)
303 ret = "Helix Propensity";
308 ret = "Strand Propensity";
313 ret = "Turn Propensity";
318 ret = "Buried Index";
327 case PURINEPYRIMIDINE:
328 ret = "Purine/Pyrimidine";
333 ret = "T-Coffee Scores";
337 * case COVARIATION: ret = "Covariation";
342 ret = "User Defined";
356 * retrieve or create colourscheme associated with name
359 * sequences to colour
361 * range of sequences to colour
363 * colourscheme name, applet colour parameter specification, or
364 * string to parse as colour for new coloursheme
365 * @return Valid Colourscheme
367 public static ColourSchemeI getColour(AnnotatedCollectionI alignment,
370 int colindex = getColourIndexFromName(name);
371 if (colindex == UNDEFINED)
373 if (name.indexOf('=') == -1)
375 // try to build a colour from the string directly
378 return new UserColourScheme(name);
379 } catch (Exception e)
381 // System.err.println("Ignoring unknown colourscheme name");
386 // try to parse the string as a residue colourscheme
389 // fix the launchApp user defined coloursheme transfer bug
390 jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(
392 ucs.parseAppletParameter(name);
394 } catch (Exception e)
396 // System.err.println("Ignoring exception when parsing colourscheme as applet-parameter");
400 return getColour(alignment, getColourIndexFromName(name));
404 * Construct an instance of ColourSchemeI corresponding to the given
408 * sequences to be coloured by colourscheme
410 * geometry of alignment
412 * colourscheme number
414 * @return null or an instance of the colourscheme configured to colour given
417 public static ColourSchemeI getColour(
418 jalview.datamodel.AnnotatedCollectionI coll, int index)
420 // TODO 3.0 2.8 refactor signature to take an alignmentI like container so
421 // colourschemes based on annotation can be initialised
422 ColourSchemeI cs = null;
427 cs = new ClustalxColourScheme(coll, null);
432 cs = new Blosum62ColourScheme();
437 cs = new PIDColourScheme();
442 cs = new ZappoColourScheme();
447 cs = new TaylorColourScheme();
451 cs = new HydrophobicColourScheme();
456 cs = new HelixColourScheme();
461 cs = new StrandColourScheme();
466 cs = new TurnColourScheme();
471 cs = new BuriedColourScheme();
476 cs = new NucleotideColourScheme();
480 case PURINEPYRIMIDINE:
481 cs = new PurinePyrimidineColourScheme();
486 cs = new TCoffeeColourScheme(coll);
488 // cs = new CovariationColourScheme(annotation);
493 Color[] col = new Color[24];
494 for (int i = 0; i < 24; i++)
496 col[i] = Color.white;
498 cs = new UserColourScheme(col);
508 public static Color getAWTColorFromName(String name)
511 name = name.toLowerCase();
512 if (name.equals("black"))
516 else if (name.equals("blue"))
520 else if (name.equals("cyan"))
524 else if (name.equals("darkGray"))
526 col = Color.darkGray;
528 else if (name.equals("gray"))
532 else if (name.equals("green"))
536 else if (name.equals("lightGray"))
538 col = Color.lightGray;
540 else if (name.equals("magenta"))
544 else if (name.equals("orange"))
548 else if (name.equals("pink"))
552 else if (name.equals("red"))
556 else if (name.equals("white"))
560 else if (name.equals("yellow"))