X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FScoreColourScheme.java;h=66bb5b4ede08373b6548e196eaea6172458f4c70;hb=a689267090c39792d83ceb5d8f88c539a085fea6;hp=12f252d69106e6cc70d73092b0adc162f90f2007;hpb=588042b69abf8e60bcc950b24c283933c7dd422f;p=jalview.git diff --git a/src/jalview/schemes/ScoreColourScheme.java b/src/jalview/schemes/ScoreColourScheme.java index 12f252d..66bb5b4 100755 --- a/src/jalview/schemes/ScoreColourScheme.java +++ b/src/jalview/schemes/ScoreColourScheme.java @@ -1,68 +1,157 @@ -/* -* Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -*/ -package jalview.schemes; - -import java.awt.*; - - -public class ScoreColourScheme extends ResidueColourScheme { - public double min; - public double max; - public double[] scores; - - public ScoreColourScheme(double[] scores, double min, double max) { - super(); - - this.scores = scores; - this.min = min; - this.max = max; - } - - public Color findColour(String s, int j) { - if (threshold > 0) { - if (!aboveThreshold(s, j)) { - return Color.white; - } - } - - float red = (float) (scores[((Integer) ResidueProperties.aaHash.get(s)).intValue()] - - (float) min) / (float) (max - min); - - if (red > 1.0f) { - red = 1.0f; - } - - if (red < 0.0f) { - red = 0.0f; - } - - char c = s.charAt(0); - - if (jalview.util.Comparison.isGap((c))) { - return Color.white; - } - - // This isn';t great - pool of colours in here? - return makeColour(red); - } - - public Color makeColour(float c) { - return new Color(c, (float) 0.0, (float) 1.0 - c); - } -} +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.schemes; + +import jalview.api.AlignViewportI; +import jalview.datamodel.AnnotatedCollectionI; +import jalview.datamodel.SequenceI; +import jalview.util.Comparison; + +import java.awt.Color; + +/** + * A base class for colour schemes which define a graduated colour range based + * on + * + */ +public class ScoreColourScheme extends ResidueColourScheme +{ + String schemeName; + + double min; + + double max; + + Color minColour; + + Color maxColour; + + double[] scores; + + /** + * Constructor + * + * @param symbolIndex + * a lookup where the index is a char e.g. 'R' or 'r', and the value + * is its position in the colour table lookup + * @param scores + * per residue, with indices corresponding to those for colour lookup + */ + public ScoreColourScheme(String name, int[] symbolIndex, double[] scores, + Color minColour, Color maxColour) + { + super(symbolIndex); + this.schemeName = name; + this.minColour = minColour; + this.maxColour = maxColour; + + setMinMax(scores); + this.scores = scores; + + int iSize = scores.length; + colors = new Color[scores.length]; + for (int i = 0; i < iSize; i++) + { + colors[i] = getScoreColour(scores[i]); + } + } + + /** + * Computes a colour for a score by + * + * This method is used to make colours for residue scores, but may also be + * called to generate a colour for an intermediate score value (for example, a + * column average). + */ + public Color getScoreColour(double rawScore) + { + float score = (float) (rawScore - (float) min) / (float) (max - min); + score = Math.max(score, 0f); + score = Math.min(score, 1f); + + int r = minColour.getRed() + + Math.round((maxColour.getRed() - minColour.getRed()) * score); + int g = minColour.getGreen() + + Math.round( + (maxColour.getGreen() - minColour.getGreen()) * score); + int b = minColour.getBlue() + + Math.round( + (maxColour.getBlue() - minColour.getBlue()) * score); + + Color c = new Color(r, g, b); + return c; + } + + /** + * Inspects score values and saves the minimum and maximum + * + * @param vals + */ + void setMinMax(double[] vals) + { + double dMin = Double.MAX_VALUE; + double dMax = -Double.MAX_VALUE; + + for (int i = 0; i < vals.length - 1; i++) + { + dMin = Math.min(dMin, vals[i]); + dMax = Math.max(dMax, vals[i]); + } + + this.min = vals.length == 0 ? 0d : dMin; + this.max = vals.length == 0 ? 0d : dMax; + } + + @Override + public Color findColour(char c, int j, SequenceI seq) + { + if (Comparison.isGap(c)) + { + return Color.white; + } + return super.findColour(c); + } + + @Override + public String getSchemeName() + { + return schemeName; + } + + /** + * Returns a new instance of this colour scheme with which the given data may + * be coloured + */ + @Override + public ColourSchemeI getInstance(AlignViewportI view, + AnnotatedCollectionI coll) + { + return new ScoreColourScheme(schemeName, symbolIndex, scores, minColour, + maxColour); + } +}