X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FConservation.java;h=eb68cc450c671686f2c578021c94bbb2ff8d30da;hb=4e1cb9b8b058d9b633af223b1cdb7b220d5d2ccd;hp=31a4b6659e81b4f9a67d6dac9e6207c37fd4dd1d;hpb=506d60f0e188723ddc91c26824b41ac7034df3fe;p=jalview.git diff --git a/src/jalview/analysis/Conservation.java b/src/jalview/analysis/Conservation.java index 31a4b66..eb68cc4 100755 --- a/src/jalview/analysis/Conservation.java +++ b/src/jalview/analysis/Conservation.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) + * Copyright (C) 2009 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 @@ -18,6 +18,7 @@ */ package jalview.analysis; +import java.awt.Color; import java.util.*; import jalview.datamodel.*; @@ -591,4 +592,85 @@ public class Conservation qualityRange[0] = new Double(0); qualityRange[1] = new Double(newmax); } + + /** + * complete the given consensus and quuality annotation rows + * @param conservation conservation annotation row + * @param quality2 (optional - may be null) + * @param alWidth extent of consensus + */ + public void completeAnnotations(AlignmentAnnotation conservation, + AlignmentAnnotation quality2, int alWidth) + { + char[] sequence = getConsSequence().getSequence(); + float minR; + float minG; + float minB; + float maxR; + float maxG; + float maxB; + minR = 0.3f; + minG = 0.0f; + minB = 0f; + maxR = 1.0f - minR; + maxG = 0.9f - minG; + maxB = 0f - minB; // scalable range for colouring both Conservation and + // Quality + + float min = 0f; + float max = 11f; + float qmin = 0f; + float qmax = 0f; + + char c; + + conservation.annotations = new Annotation[alWidth]; + + if (quality2 != null) + { + quality2.graphMax = qualityRange[1].floatValue(); + quality2.annotations = new Annotation[alWidth]; + qmin = qualityRange[0].floatValue(); + qmax = qualityRange[1].floatValue(); + } + + for (int i = 0; i < alWidth; i++) + { + float value = 0; + + c = sequence[i]; + + if (Character.isDigit(c)) + { + value = (int) (c - '0'); + } + else if (c == '*') + { + value = 11; + } + else if (c == '+') + { + value = 10; + } + + float vprop = value - min; + vprop /= max; + conservation.annotations[i] = new Annotation(String.valueOf(c), + String.valueOf(value), ' ', value, new Color(minR + + (maxR * vprop), minG + (maxG * vprop), minB + + (maxB * vprop))); + + // Quality calc + if (quality2 != null) + { + value = ((Double) quality.get(i)).floatValue(); + vprop = value - qmin; + vprop /= qmax; + quality2.annotations[i] = new Annotation(" ", String + .valueOf(value), ' ', value, new Color(minR + + (maxR * vprop), minG + (maxG * vprop), minB + + (maxB * vprop))); + } + } + } }