X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FTCoffeeColourScheme.java;h=db85cc842445951459e9a5166ec5e63a6f6694f1;hb=89350c76ad3884aa1394952979998ea58902063c;hp=5a49640dd38beb0ac0fd82b6f162ade76e404d96;hpb=b81d4d7d46ea8b1c89df086fb847baab6b69d427;p=jalview.git diff --git a/src/jalview/schemes/TCoffeeColourScheme.java b/src/jalview/schemes/TCoffeeColourScheme.java index 5a49640..db85cc8 100644 --- a/src/jalview/schemes/TCoffeeColourScheme.java +++ b/src/jalview/schemes/TCoffeeColourScheme.java @@ -1,6 +1,26 @@ +/* + * 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.api.AlignViewportI; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.AnnotatedCollectionI; @@ -12,88 +32,150 @@ import jalview.io.TCoffeeScoreFile; import java.awt.Color; import java.util.ArrayList; import java.util.IdentityHashMap; +import java.util.List; 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 +{ + IdentityHashMap seqMap; + + /** + * Default constructor (required for Class.newInstance()) + */ + public TCoffeeColourScheme() + { - 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 - }; + } + /** + * 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); + } - 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 - - // 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. + 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) { - Color[] cols; + } + + @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]; + } + + @Override + public ColourSchemeI getInstance(AlignViewportI view, + AnnotatedCollectionI sg) + { + 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(); + } + + @Override + public String getSchemeName() + { + return JalviewColourScheme.TCoffee.toString(); + } - 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 boolean isSimple() + { + return false; + } }