X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FTCoffeeColourScheme.java;h=13d1d55951c9218d2328a8954bd9a430572035e1;hb=97f870ff4890ebfadcbb73e6793c83f856948658;hp=47aebd1eb832a44cb1d3ffd6a4144d3656536ca7;hpb=516ce4f35f75fe4775f3299742b2f453ae7d21fe;p=jalview.git diff --git a/src/jalview/schemes/TCoffeeColourScheme.java b/src/jalview/schemes/TCoffeeColourScheme.java index 47aebd1..13d1d55 100644 --- a/src/jalview/schemes/TCoffeeColourScheme.java +++ b/src/jalview/schemes/TCoffeeColourScheme.java @@ -1,89 +1,179 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ 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.List; +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 +{ + IdentityHashMap seqMap; + + /** + * Default constructor (required for Class.newInstance()) + */ + public TCoffeeColourScheme() + { + + } + + /** + * 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); + } + + /** + * Finds the TCoffeeScore annotation (if any) for each sequence and notes the + * annotation colour for each column position. The colours are fixed for + * scores 0-9 and are set when annotation is parsed. + * + * @see TCoffeeScoreFile#annotateAlignment(AlignmentI, boolean) + */ + @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 + + // assume only one set of TCOFFEE scores - but could have more than one + // potentially. + List 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(); + if (alcontext == null) + { + return; + } + 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) + { + if (seqMap == null) + { + return Color.WHITE; + } + Color[] cols = seqMap.get(seq); + if (cols == 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]; + } - 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 - }; + @Override + public ColourSchemeI getInstance(AnnotatedCollectionI sg, + Map hiddenRepSequences) + { + return new TCoffeeColourScheme(sg); + } + /** + * Answers true if the data has TCoffee score annotation + */ + @Override + public boolean isApplicableTo(AnnotatedCollectionI ac) + { + AnnotatedCollectionI alcontext = ac instanceof AlignmentI ? ac : ac + .getContext(); + if (alcontext == null) + { + return false; + } + Iterable anns = alcontext + .findAnnotation(TCoffeeScoreFile.TCOFFEE_SCORE); + return anns.iterator().hasNext(); + } - 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]; - } + @Override + public boolean isSimple() + { + return false; + } }