X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignViewport.java;h=7fd746127eacd37f5c314def3b16c276386a7a18;hb=e7ed63f1ea56432246a6ed1553f0fe56d26f56ea;hp=36270209228a21332ad2f9e0d6c2c669fc95dda5;hpb=cd6569ba3b502e53e9aac0ce07858c36a4bf6ae3;p=jalview.git diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 3627020..7fd7461 100755 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -75,57 +75,82 @@ public class AlignViewport showSequenceFeatures = b; } + public Vector vconsensus; AlignmentAnnotation consensus; AlignmentAnnotation conservation; + AlignmentAnnotation quality; + + public int ConsPercGaps = 25; // JBPNote : This should be a scalable property! + public void updateConservation() { - Annotation [] annotations = new Annotation[alignment.getWidth()]; - Conservation cons = new jalview.analysis.Conservation("All", jalview.schemes.ResidueProperties.propHash, 3, alignment.getSequences(), 0, - alignment.getWidth()); + alignment.getWidth()-1); cons.calculate(); - cons.verdict(false, 100); + cons.verdict(false, ConsPercGaps); cons.findQuality(); + int alWidth = alignment.getWidth(); + Annotation [] annotations = new Annotation[alWidth]; + Annotation [] qannotations = new Annotation[alWidth]; String sequence = cons.getConsSequence().getSequence(); float minR,minG,minB, maxR,maxG,maxB; minR = 0.3f; - minG = 0f; + minG = 0.0f; minB = 0f; - maxR = 1.0f-minR; maxG=0.9f-minG; maxB=0f-minB; // scalable range for colouring - float min = cons.qualityRange[0].floatValue(); - float max = cons.qualityRange[1].floatValue(); + 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 = cons.qualityRange[0].floatValue(); + float qmax = cons.qualityRange[1].floatValue(); - for (int i = 0; i < alignment.getWidth(); i++) + for (int i = 0; i < alWidth; i++) { float value = 0; try - { - //value = Integer.parseInt(sequence.charAt(i) + ""); - value = ((Double) cons.quality.get(i)).floatValue(); - } + { + value = Integer.parseInt(sequence.charAt(i) + ""); + } catch (Exception ex) - { - if (sequence.charAt(i) == '*') value = 10; - } + { + if (sequence.charAt(i) == '*') value = 11; + if (sequence.charAt(i) == '+') value = 10; + } float vprop = value-min; vprop/=max; annotations[i] = new Annotation(sequence.charAt(i) + "", - "Conservation graph", ' ', value, new Color(minR+maxR*vprop, minB+maxB*vprop, minB+maxB*vprop)); + "Conservation graph", ' ', value, new Color(minR+maxR*vprop, minG+maxG*vprop, minB+maxB*vprop)); + // Quality calc + value = ((Double) cons.quality.get(i)).floatValue(); + vprop = value - qmin; + vprop/=qmax; + qannotations[i] = new Annotation(" ", + String.valueOf(value), ' ', value, new Color(minR+maxR*vprop, minG+maxG*vprop, minB+maxB*vprop)); } if(conservation==null) { - conservation = new AlignmentAnnotation("Quality", - "Quality of total alignment", + conservation = new AlignmentAnnotation("Conservation", + "Conservation of total alignment less than "+ConsPercGaps+"% gaps", annotations, - cons.qualityRange[0].floatValue(), - cons.qualityRange[1].floatValue(), 1); + 0f, // cons.qualityRange[0].floatValue(), + 11f, // cons.qualityRange[1].floatValue() + 1); alignment.addAnnotation(conservation); + quality = new AlignmentAnnotation("Quality", + "Alignment Quality based on Blosum62 scores", + qannotations, + cons.qualityRange[0].floatValue(), + cons.qualityRange[1].floatValue(), + 1); + alignment.addAnnotation(quality); } - else + else { conservation.annotations = annotations; + quality.annotations = qannotations; + } + } @@ -133,11 +158,25 @@ public class AlignViewport { Annotation [] annotations = new Annotation[alignment.getWidth()]; - Vector cons = alignment.getAAFrequency(); + // this routine prevents vconsensus becoming a new object each time + // consenus is calculated. Important for speed of Blosum62 + // and PID colouring of alignment + if(vconsensus == null) + vconsensus = alignment.getAAFrequency(); + else + { + Vector temp = alignment.getAAFrequency(); + vconsensus.clear(); + Enumeration e = temp.elements(); + while(e.hasMoreElements()) + { + vconsensus.add(e.nextElement()); + } + } Hashtable hash = null; - for (int i = 0; i < alignment.getWidth(); i++) + for (int i = 0; i alignment.getWidth()-1) { System.out.println(" Corrected res from " + res + " to maximum " + (alignment.getWidth()-1)); - res = alignment.getWidth() -1; + res = alignment.getWidth()-1; } if (res < 0) { res = 0;