From c9fc6a5f7f6fc4ffb29830500dc5a61111e6a44f Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 24 Jul 2009 14:42:26 +0000 Subject: [PATCH] complete alignment annotation row procedure --- src/jalview/analysis/AAFrequency.java | 43 +++++++++++++++++ src/jalview/analysis/Conservation.java | 82 ++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) diff --git a/src/jalview/analysis/AAFrequency.java b/src/jalview/analysis/AAFrequency.java index 922a7b5..6c21c74 100755 --- a/src/jalview/analysis/AAFrequency.java +++ b/src/jalview/analysis/AAFrequency.java @@ -156,4 +156,47 @@ public class AAFrequency result[i] = residueHash; } } + + /** + * Compute all or part of the annotation row from the given consensus hashtable + * @param consensus - pre-allocated annotation row + * @param hconsensus + * @param iStart + * @param width + * @param ignoreGapsInConsensusCalculation + */ + public static void completeConsensus(AlignmentAnnotation consensus, + Hashtable[] hconsensus, int iStart, int width, + boolean ignoreGapsInConsensusCalculation) + { + for (int i = iStart; i < width; i++) + { + float value = 0; + if (ignoreGapsInConsensusCalculation) + { + value = ((Float) hconsensus[i].get(AAFrequency.PID_NOGAPS)) + .floatValue(); + } + else + { + value = ((Float) hconsensus[i].get(AAFrequency.PID_GAPS)) + .floatValue(); + } + + String maxRes = hconsensus[i].get(AAFrequency.MAXRESIDUE) + .toString(); + String mouseOver = hconsensus[i].get(AAFrequency.MAXRESIDUE) + + " "; + + if (maxRes.length() > 1) + { + mouseOver = "[" + maxRes + "] "; + maxRes = "+"; + } + + mouseOver += ((int) value + "%"); + consensus.annotations[i] = new Annotation(maxRes, mouseOver, ' ', + value); + } + } } diff --git a/src/jalview/analysis/Conservation.java b/src/jalview/analysis/Conservation.java index 1f7913b..eb68cc4 100755 --- a/src/jalview/analysis/Conservation.java +++ b/src/jalview/analysis/Conservation.java @@ -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))); + } + } + } } -- 1.7.10.2