X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FTCoffeeColourScheme.java;h=1fb4cbb281005297cac12b9ed685a03bfa4c3c8b;hb=a8f483d04205bb8273ee311c12968b7e86d205fa;hp=47aebd1eb832a44cb1d3ffd6a4144d3656536ca7;hpb=516ce4f35f75fe4775f3299742b2f453ae7d21fe;p=jalview.git diff --git a/src/jalview/schemes/TCoffeeColourScheme.java b/src/jalview/schemes/TCoffeeColourScheme.java index 47aebd1..1fb4cbb 100644 --- a/src/jalview/schemes/TCoffeeColourScheme.java +++ b/src/jalview/schemes/TCoffeeColourScheme.java @@ -1,3 +1,21 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) + * Copyright (C) 2014 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; @@ -5,85 +23,118 @@ 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.Map; import java.util.TreeMap; /** - * 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 + }; + + 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, null); + } + + @Override + public void alignmentChanged(AnnotatedCollectionI alignment, + Map hiddenReps) + { + // TODO: if sequences have been represented and they have scores, could + // compute an average sequence score for the representative - 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 - }; + // 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; - 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= cols.length ) { - return Color.white; - } - return cols[j]; - } + if (j < 0 || j >= cols.length) + { + return Color.white; + } + return cols[j]; + } + + @Override + public ColourSchemeI applyTo(AnnotatedCollectionI sg, + Map hiddenRepSequences) + { + return new TCoffeeColourScheme(sg); + } }