X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FConservation.java;h=eb68cc450c671686f2c578021c94bbb2ff8d30da;hb=4e1cb9b8b058d9b633af223b1cdb7b220d5d2ccd;hp=1f7913bf8c497095ea48dfccb27ba5990f5495da;hpb=2de8acfae59aced665e4c37ad0f7dcc2ed68818e;p=jalview.git 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))); + } + } + } }