X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FTCoffeeColourScheme.java;h=bc56281cd2d62604f7d5956286589a58b08331e8;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;hp=1063f8b7962655332babea3b092e0871d09f3256;hpb=ec1d08cc67adaf89176114f7011d5484cc1ff350;p=jalview.git diff --git a/src/jalview/schemes/TCoffeeColourScheme.java b/src/jalview/schemes/TCoffeeColourScheme.java index 1063f8b..bc56281 100644 --- a/src/jalview/schemes/TCoffeeColourScheme.java +++ b/src/jalview/schemes/TCoffeeColourScheme.java @@ -1,94 +1,140 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 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.analysis.SequenceIdMatcher; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.AnnotatedCollectionI; import jalview.datamodel.Annotation; +import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceI; import jalview.io.TCoffeeScoreFile; import java.awt.Color; import java.util.ArrayList; import java.util.IdentityHashMap; -import java.util.TreeMap; +import java.util.Map; /** - * Defines the color score for T-Coffee MSA + * Defines the color score for T-Coffee MSA *

* See http://tcoffee.org * * * @author Paolo Di Tommaso - * + * */ -public class TCoffeeColourScheme extends ResidueColourScheme { +public class TCoffeeColourScheme extends ResidueColourScheme +{ - static final Color[] colors = { - new Color( 102, 102, 255 ), // #6666FF - new Color( 0, 255, 0), // #00FF00 - new Color( 102, 255, 0), // #66FF00 - new Color( 204, 255, 0), // #CCFF00 - new Color( 255, 255, 0), // #FFFF00 - new Color( 255, 204, 0), // #FFCC00 - new Color( 255, 153, 0), // #FF9900 - new Color( 255, 102, 0), // #FF6600 - new Color( 255, 51, 0), // #FF3300 - new Color( 255, 34, 0) // #FF2000 - }; + static final Color[] colors = { new Color(102, 102, 255), // #6666FF + new Color(0, 255, 0), // #00FF00 + new Color(102, 255, 0), // #66FF00 + new Color(204, 255, 0), // #CCFF00 + new Color(255, 255, 0), // #FFFF00 + new Color(255, 204, 0), // #FFCC00 + new Color(255, 153, 0), // #FF9900 + new Color(255, 102, 0), // #FF6600 + new Color(255, 51, 0), // #FF3300 + new Color(255, 34, 0) // #FF2000 + }; + IdentityHashMap seqMap; - IdentityHashMap seqMap; - /** - * the color scheme needs to look at the alignment to get and cache T-COFFEE scores - * - * @param alignment - annotated sequences to be searched - */ - public TCoffeeColourScheme(AnnotatedCollectionI alignment) { - alignmentChanged(alignment); - } - @Override public void alignmentChanged(AnnotatedCollectionI alignment) - { - // assume only one set of TCOFFEE scores - but could have more than one potentially. - ArrayList annots = new ArrayList(); - // Search alignment to get all tcoffee annotation and pick one set of annotation to use to colour seqs. - seqMap = new IdentityHashMap(); - int w=0; - for (AlignmentAnnotation al:alignment.findAnnotation(TCoffeeScoreFile.TCOFFEE_SCORE)) - { - if (al.sequenceRef!=null && !al.belowAlignment) - { - annots.add(al); - if (w hiddenReps) + { + // TODO: if sequences have been represented and they have scores, could + // compute an average sequence score for the representative + + // assume only one set of TCOFFEE scores - but could have more than one + // potentially. + ArrayList annots = new ArrayList(); + // Search alignment to get all tcoffee annotation and pick one set of + // annotation to use to colour seqs. + seqMap = new IdentityHashMap(); + AnnotatedCollectionI alcontext = alignment instanceof AlignmentI ? alignment + : alignment.getContext(); + int w = 0; + for (AlignmentAnnotation al : alcontext + .findAnnotation(TCoffeeScoreFile.TCOFFEE_SCORE)) + { + if (al.sequenceRef != null && !al.belowAlignment) + { + annots.add(al); + if (w < al.annotations.length) + { + w = al.annotations.length; + } + Color[] scores = new Color[al.annotations.length]; + int i = 0; + for (Annotation an : al.annotations) + { + scores[i++] = (an != null) ? an.colour : Color.white; + } + seqMap.put(al.sequenceRef, scores); + } + } // TODO: compute average colour for each symbol type in each column - gives // a second order colourscheme for colouring a sequence logo derived from // the alignment (colour reflects quality of alignment for each residue // class) - } - @Override - public Color findColour(char c, int j, SequenceI seq) { - Color[] cols; + } + + @Override + public Color findColour(char c, int j, SequenceI seq) + { + Color[] cols; + + if (seqMap == null || (cols = seqMap.get(seq)) == null) + { + // see above TODO about computing a colour for each residue in each + // column: cc = _rcols[i][indexFor[c]]; + return Color.white; + } + + if (j < 0 || j >= cols.length) + { + return Color.white; + } + return cols[j]; + } - if( seqMap==null || (cols=seqMap.get(seq))==null) { -// see above TODO about computing a colour for each residue in each column: cc = _rcols[i][indexFor[c]]; - return Color.white; - } - - if( j < 0 || j>= cols.length ) { - return Color.white; - } - return cols[j]; - } + @Override + public ColourSchemeI applyTo(AnnotatedCollectionI sg, + Map hiddenRepSequences) + { + return new TCoffeeColourScheme(sg); + } }