2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
3 * Copyright (C) 2014 The Jalview Authors
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/>.
17 * The Jalview Authors are detailed in the 'AUTHORS' file.
19 package jalview.schemes;
21 import jalview.datamodel.AnnotatedCollectionI;
23 import java.awt.Color;
26 * ColourSchemeProperty binds names to hardwired colourschemes and tries to deal
27 * intelligently with mapping unknown names to user defined colourschemes (that
28 * exist or can be created from the string representation of the colourscheme
29 * name - either a hex RGB triplet or a named colour under java.awt.color ). The
30 * values of the colourscheme constants is important for callers of
31 * getColourName(int i), since it can be used to enumerate the set of built in
32 * colours. The FIRST_COLOUR and LAST_COLOUR symbols are provided for this.
37 public class ColourSchemeProperty
39 /** Undefined Colourscheme Index */
40 public static final int UNDEFINED = -1;
42 /** for schemes defined on the fly */
43 public static final int USER_DEFINED = 0;
45 /** No Colourscheme Index */
46 public static final int NONE = 1;
49 public static final int CLUSTAL = 2;
52 public static final int BLOSUM = 3;
55 public static final int PID = 4;
58 public static final int ZAPPO = 5;
61 public static final int TAYLOR = 6;
64 public static final int HYDROPHOBIC = 7;
67 public static final int HELIX = 8;
70 public static final int STRAND = 9;
73 public static final int TURN = 10;
76 public static final int BURIED = 11;
79 public static final int NUCLEOTIDE = 12;
84 public static final int PURINEPYRIMIDINE = 13;
86 public static final int COVARIATION = 14;
88 public static final int TCOFFEE = 15;
91 * index of first colourscheme (includes 'None')
93 public static final int FIRST_COLOUR = NONE;
95 public static final int LAST_COLOUR = NUCLEOTIDE;
103 * @return DOCUMENT ME!
105 public static int getColourIndexFromName(String name)
109 if (name.equalsIgnoreCase("Clustal"))
113 else if (name.equalsIgnoreCase("Blosum62"))
117 else if (name.equalsIgnoreCase("% Identity"))
121 else if (name.equalsIgnoreCase("Zappo"))
125 else if (name.equalsIgnoreCase("Taylor"))
129 else if (name.equalsIgnoreCase("Hydrophobic"))
133 else if (name.equalsIgnoreCase("Helix Propensity"))
137 else if (name.equalsIgnoreCase("Strand Propensity"))
141 else if (name.equalsIgnoreCase("Turn Propensity"))
145 else if (name.equalsIgnoreCase("Buried Index"))
149 else if (name.equalsIgnoreCase("Nucleotide"))
153 else if (name.equalsIgnoreCase("T-Coffee Scores"))
158 else if (name.equalsIgnoreCase("User Defined"))
162 else if (name.equalsIgnoreCase("None"))
166 else if (name.equalsIgnoreCase("Purine/Pyrimidine"))
168 ret = PURINEPYRIMIDINE;
170 // else if (name.equalsIgnoreCase("Covariation"))
172 // ret = COVARIATION;
184 * @return DOCUMENT ME!
186 public static String getColourName(ColourSchemeI cs)
191 if (cs instanceof ClustalxColourScheme)
195 else if (cs instanceof Blosum62ColourScheme)
199 else if (cs instanceof PIDColourScheme)
203 else if (cs instanceof ZappoColourScheme)
207 else if (cs instanceof TaylorColourScheme)
211 else if (cs instanceof HydrophobicColourScheme)
215 else if (cs instanceof HelixColourScheme)
219 else if (cs instanceof StrandColourScheme)
223 else if (cs instanceof TurnColourScheme)
227 else if (cs instanceof BuriedColourScheme)
231 else if (cs instanceof NucleotideColourScheme)
235 else if (cs instanceof PurinePyrimidineColourScheme)
237 index = PURINEPYRIMIDINE;
239 else if (cs instanceof TCoffeeColourScheme)
244 * else if (cs instanceof CovariationColourScheme) { index = COVARIATION; }
246 else if (cs instanceof UserColourScheme)
248 if ((((UserColourScheme) cs).getName() != null)
249 && (((UserColourScheme) cs).getName().length() > 0))
251 return ((UserColourScheme) cs).getName();
253 // get default colourscheme name
254 index = USER_DEFINED;
257 return getColourName(index);
266 * @return DOCUMENT ME!
268 public static String getColourName(int index)
304 ret = "Helix Propensity";
309 ret = "Strand Propensity";
314 ret = "Turn Propensity";
319 ret = "Buried Index";
328 case PURINEPYRIMIDINE:
329 ret = "Purine/Pyrimidine";
334 ret = "T-Coffee Scores";
338 * case COVARIATION: ret = "Covariation";
343 ret = "User Defined";
357 * retrieve or create colourscheme associated with name
360 * sequences to colour
362 * range of sequences to colour
364 * colourscheme name, applet colour parameter specification, or
365 * string to parse as colour for new coloursheme
366 * @return Valid Colourscheme
368 public static ColourSchemeI getColour(AnnotatedCollectionI alignment,
371 int colindex = getColourIndexFromName(name);
372 if (colindex == UNDEFINED)
374 if (name.indexOf('=') == -1)
376 // try to build a colour from the string directly
379 return new UserColourScheme(name);
380 } catch (Exception e)
382 // System.err.println("Ignoring unknown colourscheme name");
387 // try to parse the string as a residue colourscheme
390 // fix the launchApp user defined coloursheme transfer bug
391 jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(
393 ucs.parseAppletParameter(name);
395 } catch (Exception e)
397 // System.err.println("Ignoring exception when parsing colourscheme as applet-parameter");
401 return getColour(alignment, getColourIndexFromName(name));
405 * Construct an instance of ColourSchemeI corresponding to the given
409 * sequences to be coloured by colourscheme
411 * geometry of alignment
413 * colourscheme number
415 * @return null or an instance of the colourscheme configured to colour given
418 public static ColourSchemeI getColour(
419 jalview.datamodel.AnnotatedCollectionI coll, int index)
421 // TODO 3.0 2.8 refactor signature to take an alignmentI like container so
422 // colourschemes based on annotation can be initialised
423 ColourSchemeI cs = null;
428 cs = new ClustalxColourScheme(coll, null);
433 cs = new Blosum62ColourScheme();
438 cs = new PIDColourScheme();
443 cs = new ZappoColourScheme();
448 cs = new TaylorColourScheme();
452 cs = new HydrophobicColourScheme();
457 cs = new HelixColourScheme();
462 cs = new StrandColourScheme();
467 cs = new TurnColourScheme();
472 cs = new BuriedColourScheme();
477 cs = new NucleotideColourScheme();
481 case PURINEPYRIMIDINE:
482 cs = new PurinePyrimidineColourScheme();
487 cs = new TCoffeeColourScheme(coll);
489 // cs = new CovariationColourScheme(annotation);
494 Color[] col = new Color[24];
495 for (int i = 0; i < 24; i++)
497 col[i] = Color.white;
499 cs = new UserColourScheme(col);
509 public static Color getAWTColorFromName(String name)
512 name = name.toLowerCase();
513 if (name.equals("black"))
517 else if (name.equals("blue"))
521 else if (name.equals("cyan"))
525 else if (name.equals("darkGray"))
527 col = Color.darkGray;
529 else if (name.equals("gray"))
533 else if (name.equals("green"))
537 else if (name.equals("lightGray"))
539 col = Color.lightGray;
541 else if (name.equals("magenta"))
545 else if (name.equals("orange"))
549 else if (name.equals("pink"))
553 else if (name.equals("red"))
557 else if (name.equals("white"))
561 else if (name.equals("yellow"))