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.SequenceI; import jalview.io.TCoffeeScoreFile; import java.awt.Color; import java.util.ArrayList; import java.util.IdentityHashMap; import java.util.TreeMap; /** * Defines the color score for T-Coffee MSA *

* See http://tcoffee.org * * * @author Paolo Di Tommaso * */ 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); } @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(); for (AlignmentAnnotation al:alignment.getAlignmentAnnotation()) { if (al.sequenceRef!=null && !al.belowAlignment && al.label!=null && (al.label==TCoffeeScoreFile.TCOFFEE_SCORE || al.label.equals(TCoffeeScoreFile.TCOFFEE_SCORE))) { annots.add(al); 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); } } } @Override public Color findColour(char c, int j, SequenceI seq) { Color[] cols; if( seqMap==null || (cols=seqMap.get(seq))==null) { return Color.white; } if( j < 0 || j>= cols.length ) { return Color.white; } return cols[j]; } }